Skip to main content
Glama
walac

perf-mcp

by walac

perf-mcp

MCP server for Linux perf. Gives LLMs structured access to perf report, perf script, perf annotate, and 23 other perf analysis commands through typed tool parameters.

Operates on existing perf.data files only -- no recording, no system modification.

Requirements

  • Linux with perf installed (perf --version)

  • Python 3.12+

  • uv

Related MCP server: MCP Filesystem Server

Quick Start

git clone <repo-url> ~/work/perf-mcp
cd ~/work/perf-mcp
uv sync

Claude Code

Add to .mcp.json (project or global):

{
  "mcpServers": {
    "perf-mcp": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/walac/perf-mcp", "perf-mcp"],
      "type": "stdio"
    }
  }
}

Other MCP Clients

Run as a stdio MCP server:

cd ~/work/perf-mcp
uv run perf-mcp

Configuration

Environment Variable

Default

Description

PERF_BINARY

perf

Path to the perf binary

PERF_TIMEOUT

60

Command timeout in seconds (max 300)

PERF_MAX_OUTPUT_BYTES

2000000

Output truncation limit (bytes)

Set via the env key in .mcp.json:

{
  "mcpServers": {
    "perf-mcp": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/walac/perf-mcp", "perf-mcp"],
      "type": "stdio",
      "env": {
        "PERF_TIMEOUT": "120"
      }
    }
  }
}

Tools

26 tools across 7 categories. Each wraps a perf subcommand with every CLI option exposed as a typed parameter.

Core Analysis

Tool

Command

What it does

perf_evlist

perf evlist

List recorded events (start here)

perf_report

perf report

Overhead histogram by symbol/DSO/thread

perf_script

perf script

Raw per-sample event dump

perf_annotate

perf annotate

Source/assembly with per-line hit counts

perf_diff

perf diff

Compare two profiles side-by-side

perf_c2c_report

perf c2c report

False sharing / cache contention

perf_inject

perf inject

Decode Intel PT, inject build IDs

Scheduler

Tool

Command

perf_sched_latency

Per-task scheduling latency stats

perf_sched_timehist

Timestamped context switch timeline

perf_sched_map

ASCII CPU activity map

perf_sched_script

Raw scheduler event dump

perf_sched_replay

Replay scheduling for simulation

Locks

Tool

Command

perf_lock_report

Lock acquire/contention statistics

perf_lock_contention

Contention analysis with BPF support

perf_lock_info

Lock type information

Kernel Work Items

Tool

Command

perf_kwork_report

IRQ/softirq/workqueue statistics

perf_kwork_latency

Work item latency breakdown

perf_kwork_timehist

Timestamped work item events

perf_kwork_top

Top work items by runtime

Memory, KVM, Utilities

Tool

Command

perf_kmem_stat

Kernel memory allocation stats

perf_mem_report

Memory access data source analysis

perf_kvm_stat_report

KVM VM exit statistics

perf_timechart

Generate scheduling timechart SVG

perf_buildid_list

List binary build IDs

perf_data_convert

Convert perf.data to JSON/CTF

perf_kallsyms

Kernel symbol lookup

Typical Workflow

  1. Record a profile (outside this tool): perf record -g -a -- sleep 10

  2. Ask the LLM to analyze it:

    • "What events are in ./perf.data?" -- calls perf_evlist

    • "Show the top CPU consumers" -- calls perf_report

    • "Annotate the hottest function" -- calls perf_annotate

    • "Show the raw samples for malloc" -- calls perf_script with symbols='malloc'

    • "Compare before and after" -- calls perf_diff

Safety

  • Read-only -- no recording or data modification commands

  • Path validation -- input/output paths validated, /proc /sys /dev /etc blocked

  • No code execution -- --script, --dlfilter, --objdump, --addr2line options excluded

  • Timeout enforcement -- processes killed after the configured limit

  • Output truncation -- large outputs capped with a clear marker

  • No shell -- all commands use subprocess.exec (no shell injection)

Available Tools

26 tools
perf_annotateA

Source/assembly annotation: shows per-line or per-instruction sample percentages inside a specific function.

Use this after perf_report to drill into a hot function and see exactly which lines or instructions are consuming time.

Key parameters:

  • symbol: function name to annotate (default: hottest symbol).

  • dsos: restrict to a specific binary/library.

  • source: true (default) to interleave source code with assembly.

  • disassembler_style: 'intel' for Intel syntax (default: AT&T).

  • percent_type: 'local-period' (default), 'global-period', 'local-hits', 'global-hits'.

  • data_type: annotate a specific data type (DWARF data-type profiling).

  • code_with_type: show data type annotations on code.

Output: source/assembly listing with % annotations per line. Requires: debuginfo packages for source interleaving. Works on any perf.data from perf record.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoList of CPUs to filter
dsosNoOnly consider these DSOs
forceNoDon't complain, do it
groupNoShow event group information
inputYesPath to perf.data file
quietNoDo not show any warnings or messages
symfsNoSymbol filesystem root
itraceNoInstruction Tracing options
prefixNoAdd prefix to source file paths
sourceNoInterleave source code with assembly (default on)
symbolNoSymbol name to annotate
asm_rawNoDisplay raw encoding of assembly
modulesNoLoad module symbols
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
demangleNoSymbol demangling (default on)
data_typeNoName of data type to annotate
insn_statNoShow instruction statistics
type_statNoShow type annotation statistics
full_pathsNoDisplay full source file paths
print_lineNoPrint source line number
skip_emptyNoDo not display empty events
percent_typeNoPercent type
prefix_stripNoStrip first N entries of source file path
skip_missingNoSkip symbols that cannot be annotated
percent_limitNoDon't show entries under this percent
code_with_typeNoShow data type annotation for code
dump_raw_traceNoDump raw trace in ASCII
ignore_vmlinuxNoDon't load vmlinux even if found
demangle_kernelNoEnable kernel symbol demangling
show_nr_samplesNoShow column with sample count
show_total_periodNoShow column with sum of periods
disassembler_styleNoDisassembler style (e.g. 'intel')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the output format (source/assembly listing with % annotations), the key requirement (debuginfo for source interleaving), and compatibility (works on any perf.data). It doesn't explicitly state it's read-only, but the verbs 'shows' and 'annotation' strongly imply a non-mutating analytical operation. The provided behavioral details (output, requirements) go beyond the bare minimum.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the purpose, then provides usage context, key parameters, output, and requirements. It is organized with a 'Key parameters:' section and uses concise bullet-like formatting. While it lists seven parameters, each earns its place by clarifying important defaults or options. It remains reasonably compact for a tool with 33 parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (33 params), the description covers the essential workflow, key parameters, output, and dependency (debuginfo). The output schema exists, so return values are already specified. The only minor gaps are not discussing every parameter or potential limitations (e.g., permission requirements), but the schema covers parameter details. Overall it provides enough context for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantic context for several key parameters: symbol (default: hottest), dsos (restrict to binary/library), source (interleave source), disassembler_style (Intel vs AT&T), percent_type (enumerating options), data_type, and code_with_type. These enrich the terse schema descriptions, especially for percent_type where the schema only says 'Percent type.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Source/assembly annotation: shows per-line or per-instruction sample percentages inside a specific function.' This clearly states the verb (shows), the resource (source/assembly annotation with percentages), and the specific scope (inside a specific function). It also differentiates from siblings by positioning it as a follow-up to perf_report for drilling into hot functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this after perf_report to drill into a hot function,' giving clear workflow context. It doesn't explicitly list alternatives or exclusion cases, but the 'after perf_report' instruction implies its role relative to sibling tools. The description also notes requirements (debuginfo packages) which further guides when to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_buildid_listA

List the ELF build-id hashes for binaries referenced in perf.data.

Use this to verify symbol resolution will work: compare build IDs against installed debuginfo packages.

Key parameters:

  • with_hits: only show DSOs that have actual samples.

  • kernel: show the running kernel's build ID.

  • kernel_maps: show kernel build ID with address map.

Output: ' ' per line. Works on any perf.data.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoDon't complain, do it
inputYesPath to perf.data file
kernelNoShow running kernel build id
verboseNoVerbosity level (0-2)
with_hitsNoShow only DSOs with hits
kernel_mapsNoShow running kernel build-id and map

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description takes on the burden of disclosing behavior. It explains the output format, notes that it 'Works on any perf.data,' and clarifies the effects of the kernel and kernel_maps flags. It does not, however, describe error behavior or permissions needed, but for a read-only listing tool this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the main purpose, and uses a clear structure: purpose, use case, key parameters, and output format. Every sentence contributes meaningful information without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists and the input schema covers all parameters, the description adds necessary extra context about the tool's purpose and usage scenario. It also covers the output format and typical use case, making it complete for a straightforward listing tool. It omits only minor details like interaction with force/verbose, which are already in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage of parameter descriptions. The description's parameter notes restate or slightly reword the schema (e.g., with_hits 'only show DSOs that have actual samples' vs schema 'Show only DSOs with hits'), adding little new information. It does not explain 'force' or 'verbose' beyond their schema descriptions, so the value added is marginal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource: 'List the ELF build-id hashes for binaries referenced in perf.data.' This clearly distinguishes the tool from sibling perf tools, which are about reports, timecharts, or sched operations, and not about build-id verification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states a use case: 'Use this to verify symbol resolution will work: compare build IDs against installed debuginfo packages.' This gives a clear context and intent. While it doesn't explicitly mention when not to use it, the guidance is strong enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_c2c_reportA

Cache-to-cache false sharing analysis. Identifies cache lines with the most HITM (Hit Modified) events — the primary indicator of cross-core cache contention.

Use this to diagnose multi-threaded performance issues caused by different threads accessing the same cache line.

Key parameters:

  • display: 'tot' (total HITMs, default), 'lcl' (local/same-socket), 'rmt' (remote/cross-socket).

  • coalesce: group results by 'tid,pid,iaddr,dso' to see per-thread or per-address breakdown.

  • stats: true to show only summary statistics.

  • call_graph: enable callchain display.

Output: multi-section report — shared data cache line table, per-cacheline detail with offsets and symbols. Requires: perf record -d -a (with memory data recording).

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
sortNoSort by key(s)
eventNoEvent selector
forceNoDon't complain, do it
inputYesPath to perf.data file
ldlatNoLoad latency threshold in cycles
statsNoDisplay only statistics (no reports)
displayNoDisplay type
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
all_userNoOnly show user space entries
coalesceNoCoalesce fields (e.g. 'tid,pid,iaddr,dso')
show_allNoShow all captured HITM lines
double_clNoDouble the cache line size
no_sourceNoDo not display source line column
node_infoNoShow extra node info
all_kernelNoOnly show kernel space entries
call_graphNoCall graph options
stitch_lbrNoEnable LBR callgraph stitching
full_symbolsNoDisplay full length of symbols
disassembler_styleNoDisassembler style (e.g. intel)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It discloses what the tool does (HITM analysis), key parameter behaviors, output structure, and a prerequisite ('perf record -d -a'). It does not describe error handling or exit codes, but for a read-only analysis tool, this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and concise, starting with a clear definition, then usage guidance, key parameters in a bulleted list, output summary, and a prerequisite. Every sentence contributes information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (21 parameters, output schema), the description provides essential context: purpose, usage scenario, key parameters, output format, and prerequisite. It does not explain every parameter, but the schema already covers those. The description adds context that is not available elsewhere, making it complete enough for an AI agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes all 21 parameters, achieving 100% coverage. The description adds extra meaning for key parameters like display (explaining 'tot', 'lcl', 'rmt' values), coalesce (example grouping), stats, and call_graph, going beyond the schema's minimal descriptions. This added value justifies a score above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a cache-to-cache false sharing analysis, specifically detecting cache lines with the most HITM events. This distinguishes it from sibling perf tools like perf_mem_report or perf_report, which focus on different aspects of memory and performance analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool: to diagnose multi-threaded performance issues from false sharing. However, it does not mention when NOT to use it or point to alternatives. This is clear usage context but lacks explicit exclusions or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_data_convertA

Convert perf.data to JSON or CTF (Common Trace Format).

Use this to export data for processing in external tools.

Key parameters:

  • to_json: output JSON file path (e.g. '/tmp/perf.json').

  • to_ctf: output CTF directory path.

  • all: include all events, not just samples.

  • tod: convert timestamps to wall-clock time.

Exactly one of to_json or to_ctf must be specified. Output: returns the output file/directory path.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoConvert all events
todNoConvert timestamps to wall clock time
timeNoTime span to convert
forceNoDon't complain, do it
inputYesPath to perf.data file
to_ctfNoConvert to CTF format, specify output directory
to_jsonNoConvert to JSON format, specify output file path
verboseNoVerbosity level (0-2)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It explains the mutual exclusivity of output formats and the output path return. However, it doesn't mention that the tool writes output files, whether it overwrites existing files, or any side effects, which are relevant for a conversion tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a clear opening sentence, a use-case line, and bullet points for key parameters. Every sentence adds value, and the output line is informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 params) and presence of an output schema, the description covers the essential context: its purpose, the key parameters, the constraint, and the return value. It is complete for an AI agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaning by highlighting key parameters (to_json, to_ctf, all, tod) and providing an example path. It also introduces the exactly-one rule, which is not encoded in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool converts perf.data to JSON or CTF, with a specific verb and target formats. This distinguishes it from sibling tools like perf_report or perf_annotate, which analyze rather than export data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the use case: 'Use this to export data for processing in external tools.' It also provides a constraint (exactly one of to_json or to_ctf). It doesn't mention when-not-to-use or alternative tools, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_diffA

Compare two perf.data profiles side by side. Shows per-symbol overhead changes between a baseline and a new measurement.

Use this for before/after comparisons — optimization validation, regression detection, or A/B testing.

Key parameters:

  • old_input: path to baseline perf.data (required).

  • new_input: path to comparison perf.data (required).

  • compute: comparison method — 'delta' (default, percentage-point difference), 'delta-abs' (absolute), 'ratio' (new/old), 'wdiff' (weighted), 'cycles' (cycle-level).

  • formula: true to show the computation formula.

  • symbols/dsos/comms: filter scope.

  • baseline_only: show only symbols present in baseline.

Output: differential table with baseline%, new%, and delta columns. Both files must be from perf record with compatible events.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
pidNoOnly consider these PIDs
tidNoOnly consider these TIDs
dsosNoOnly consider these DSOs
sortNoSort by key(s)
timeNoTime span of interest
commsNoOnly consider these comms
forceNoDon't complain, do it
orderNoSpecify compute sorting column (0-based index)
quietNoDo not show any warnings or messages
symfsNoSymbol filesystem root
periodNoShow period values instead of percent
streamNoEnable hot stream comparison
computeNoComparison method
formulaNoShow formula for computed values
modulesNoLoad module symbols
symbolsNoOnly consider these symbols
verboseNoVerbosity level
vmlinuxNovmlinux pathname
kallsymsNokallsyms pathname
new_inputYesPath to the comparison perf.data file
old_inputYesPath to the baseline perf.data file
percentageNoHow to display percentage
cycles_histNoDisplay cycle histogram
baseline_onlyNoShow only items with match in baseline
dump_raw_traceNoDump raw trace in ASCII
field_separatorNoSeparator for columns

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must handle behavioral transparency. It does disclose that both files must be from perf record with compatible events and describes the output format. However, it does not explicitly state whether the operation is read-only or has any side effects, which is a gap without annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-organized: it starts with the core purpose, follows with a usage sentence, a recognizable list of key parameters, the output format, and then a constraint. Every sentence adds information and there is no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential output (differential table with columns) and the prerequisite (compatible events), which is important given the large schema and no provided output schema. It doesn't explain every parameter, but it highlights the key ones and gives enough context to successfully invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage, giving a baseline of 3. The description adds value by clearly identifying old_input as baseline and new_input as comparison, and by expanding the compute parameter with valid methods ('delta', 'delta-abs', 'ratio', 'wdiff', 'cycles'), which goes beyond the schema's generic 'Comparison method' label.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool compares two perf.data profiles side by side and shows per-symbol overhead changes between baseline and new measurement. It also mentions concrete use cases (optimization validation, regression detection, A/B testing), which distinctly positions it against siblings like perf_report or perf_annotate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs when to use the tool: 'Use this for before/after comparisons — optimization validation, regression detection, or A/B testing.' This gives clear context, though it does not explicitly mention when not to use it or name alternative tools, so a score of 4 is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_evlistA

List events in a perf.data file. Always call this first to understand what was recorded before using other tools.

Shows each event's name (e.g. 'cpu/cycles/'), type, config, and sampling settings. Use freq=true to see sample frequencies, group=true to see event grouping, verbose=1 for full perf_event_attr details.

Output: one event per line (e.g. 'cpu/cycles/Pu'). No prerequisites — works on any perf.data.

ParametersJSON Schema
NameRequiredDescriptionDefault
freqNoShow the sample frequency used for each event
forceNoDon't complain, do it
groupNoShow event groups
inputYesPath to perf.data file
verboseNoVerbosity level (0-2)
trace_fieldsNoShow tracepoint fields

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses the output format ('one event per line'), the data shown (name, type, config, sampling settings), and states there are no prerequisites. While it doesn't explicitly say 'read-only,' the verb 'List' and absence of mutation language make the behavior clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: purpose, usage, parameter notes, output format, and prerequisites are covered in a short, front-loaded structure with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with six parameters, an output schema, and no annotations, the description covers purpose, usage, key parameters, output, and prerequisites. It is complete enough for an agent to invoke correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All six parameters have schema descriptions (100% coverage), and the description adds extra guidance for freq, group, and verbose by explaining what each flag enables (e.g., 'verbose=1 for full perf_event_attr details'). This exceeds the baseline for a fully-schema-covered tool, though force and trace_fields aren't mentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with a specific verb-resource pair: 'List events in a perf.data file.' It also differentiates itself from sibling perf tools by stating 'Always call this first to understand what was recorded before using other tools,' making its role in the workflow explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: 'Always call this first' and 'No prerequisites — works on any perf.data.' It does not name an alternative tool for specific scenarios, but the 'first before other tools' instruction gives unambiguous usage timing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_injectA

Transform a perf.data file: inject build IDs, decode hardware traces, merge scheduler events, or process JIT data. Writes a new perf.data.

Use this as a preprocessing step before perf_report or perf_script.

Key parameters:

  • input: source perf.data path (required).

  • output: destination perf.data path (required).

  • build_ids: inject build-id headers for symbol resolution.

  • itrace: decode hardware traces. Values: 'i0ns' = synthesize instructions, 'b' = synthesize branches, 'c' = synthesize calls, 'e' = synthesize errors.

  • jit: process JIT-compiled code mappings.

  • sched_stat: merge sched_stat and sched_switch events.

Output: writes a new perf.data file, returns path and size.

ParametersJSON Schema
NameRequiredDescriptionDefault
jitNoProcess JIT data and inject JIT code
forceNoDon't complain, do it
inputYesPath to input perf.data file
stripNoUse with --itrace to strip non-synthesized events
itraceNoDecode Instruction Tracing data and inject synthetic events
outputYesPath to output perf.data file
verboseNoVerbosity level
vmlinuxNovmlinux pathname
kallsymsNokallsyms pathname
build_idsNoInject build IDs into the output file
guest_dataNoInject guest data (path to guest perf.data)
guestmountNoGuest OS root file system mount point
sched_statNoMerge sched_stat and sched_switch events
buildid_allNoInject build IDs for all DSOs
ignore_vmlinuxNoDon't load vmlinux even if found
mmap2_buildidsNoInject build IDs in mmap2 events
known_build_idsNoKnown build IDs
convert_callchainNoConvert callchain to dwarf-based
mmap2_buildid_allNoInject build IDs for all mmap2 events
vm_time_correlationNoCorrelate time between host and guest

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that the tool writes a new perf.data file and returns path and size, and it explains the semantics of the itrace values. However, it does not mention side effects like overwriting existing output or the meaning of the force flag, though these are present in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient and well-structured: it leads with the core purpose, then a usage note, then a key-parameter list, and finally the output. Each sentence contributes, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (20 params) and the presence of a full output schema, the description covers the essential context: what it does, when to use it, and what it returns. It does not enumerate every parameter, but the schema fills that gap, and the description provides enough for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds significant value by detailing itrace option values ('i0ns', 'b', 'c', 'e') with their meanings, and by summarizing the roles of build_ids, jit, and sched_stat parameters more succinctly than the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a transformer of perf.data files with a specific verb ('Transform') and resource ('perf.data file'), listing concrete operations like injecting build IDs and decoding hardware traces. It also distinguishes itself from sibling tools by positioning it as a preprocessing step before perf_report or perf_script.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool: 'Use this as a preprocessing step before perf_report or perf_script.' This provides clear context and implies that other perf tools are for downstream analysis, not for this injection/transformation step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_kallsymsA

Look up a kernel symbol by name. Returns address, type, and module.

Does NOT require a perf.data file — reads the running kernel's symbol table directly.

Parameters:

  • symbol: kernel function/variable name to look up (required).

  • verbose: increase detail level (0-2).

Output: ' [module]'.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesKernel symbol name or address to look up
verboseNoVerbosity level (0-2)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It clearly states the tool reads the running kernel's symbol table, requires no perf.data, and returns a specific output format. This is sufficient for a read-only lookup, though it doesn't mention permissions or edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient: one sentence for purpose, one for the perf.data caveat, then a compact parameter list and output format. Every sentence adds value with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple 2-parameter tool, the description fully covers what the tool does, its prerequisites, and its return format. The schema covers parameters, and the description provides an output format example, making it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for both parameters (100% coverage). The description repeats this information and adds the output format, but does not need to compensate for missing schema details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Look up a kernel symbol by name' and lists the return fields (address, type, module). This clearly distinguishes it from sibling perf tools, none of which perform symbol lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states that it does not require a perf.data file and reads the running kernel's symbol table directly, giving clear context for when to use it. However, it does not explicitly name alternatives or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_kmem_statA

Kernel memory allocation statistics: slab and page allocator activity with per-callsite breakdown.

Use this to find excessive allocators, fragmentation, or leaks.

Key parameters:

  • slab: analyze slab allocator (kmalloc/kmem_cache).

  • page: analyze page allocator.

  • caller: show per-callsite statistics.

  • live: show only allocations not yet freed (leak detection).

  • sort: 'ptr', 'callsite', 'bytes_req', 'bytes_alloc', 'hit', 'pingpong', 'frag'.

Output: allocation statistics table. Requires: perf kmem record.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineNoPrint N lines only
liveNoShow only live (not-yet-freed) allocations
pageNoAnalyze page allocator events
slabNoAnalyze slab allocator events
sortNoSort by key(s): ptr,callsite,bytes_req,bytes_alloc,hit,pingpong,frag
timeNoTime span to analyze
allocNoShow allocation statistics
forceNoDon't complain, do it
inputYesPath to perf.data file
callerNoShow per-callsite statistics
raw_ipNoPrint raw IP instead of symbol
verboseNoVerbosity level (0-2)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of disclosure. It adds valuable context: the requirement of a prior 'perf kmem record', the output format (allocation statistics table), and the meaning of key parameters like 'live' for leak detection. It implies a read-only analysis, which is consistent with the tool's nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly structured: purpose statement, use case, key parameters, output, and prerequisite. Every sentence adds value, and it is succinct enough to parse quickly without missing important details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a stats tool with an output schema and 12 parameters, the description covers the main behaviors, parameter semantics, output format, and a prerequisite. It is sufficiently complete for an agent to decide when to use it and how to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description enriches key parameters: it explains slab as kmalloc/kmem_cache, page as page allocator, caller as per-callsite, live as not-yet-freed allocations, and lists sort keys. This goes beyond the raw schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides kernel memory allocation statistics with slab and page allocator activity and per-callsite breakdown. This is a specific verb+resource that distinguishes it from sibling perf commands.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells when to use the tool: 'Use this to find excessive allocators, fragmentation, or leaks.' It also notes a prerequisite ('Requires: perf kmem record'), giving context for invocation, though it does not explicitly name alternative tools or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_kvm_stat_reportA

KVM virtual machine exit analysis: shows VM exit reasons, counts, and time per exit type.

Use this to diagnose virtualization overhead — excessive HLT exits indicate idle guests, I/O exits indicate slow device emulation, EPT violations indicate memory mapping churn.

Key parameters:

  • key: sort by 'sample' (count), 'time', 'max', 'min'.

  • event: filter to specific exit type (e.g. 'HLT').

  • vcpu: filter to specific vCPU.

  • guest/host: filter to guest or host events.

Output: exit reason table with count, time, and percentage. Requires: perf kvm stat record.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
keyNoSort key
pidNoFilter by PID
hostNoTrace host events
sortNoSort by key(s)
vcpuNoFilter by vCPU
eventNoFilter by KVM exit event type
forceNoDon't complain, do it
guestNoTrace guest events
inputYesPath to perf.data.guest file
outputNoOutput file name
displayNoEvents to display
verboseNoVerbosity level
all_cpusNoSystem-wide collection from all CPUs
guest_codeNoDisplay guest code
guestmountNoGuest OS root file system mount point
mmap_pagesNoNumber of mmap pages
guestmodulesNoGuest modules file
guestvmlinuxNoGuest vmlinux pathname
guestkallsymsNoGuest kallsyms file
proc_map_timeoutNoPer-thread proc mmap processing timeout in ms

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does provide useful behavioral context: it states the required prerequisite ('Requires: perf kvm stat record'), the output shape (exit reason table with count, time, percentage), and interpretive behaviors. It does not explicitly mention permissions or side effects, but as a read-only analysis tool this is a reasonable disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: it leads with purpose, then use case, then key parameters, then output and requirements. Every sentence contributes value; there is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (21 parameters) and the presence of a complete input schema and output schema, the description adequately covers the core purpose, diagnostic use cases, key parameter meanings, output, and prerequisite. It could be slightly more complete by mentioning side-effect/permission details, but overall it provides enough context for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by detailing sort key values ('sample', 'time', 'max', 'min'), giving an example exit type ('HLT'), and explaining the guest/host filter semantics. Not all 21 params are covered, but the most decision-relevant ones are enriched.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource pairing: 'KVM virtual machine exit analysis: shows VM exit reasons, counts, and time per exit type.' This clearly distinguishes the tool from the many perf sibling tools by stating exactly what it analyzes and what it reports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit use guidance: 'Use this to diagnose virtualization overhead' and provides concrete diagnostic examples (HLT exits, I/O exits, EPT violations). It does not name alternative tools or state when not to use it, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_kwork_latencyA

Kernel work item latency breakdown showing scheduling delay for each handler.

Key parameters:

  • sort: 'count', 'max', 'avg'.

  • name: filter to specific handler.

  • kwork: filter by type.

Output: per-handler latency table. Requires: perf kwork record.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
nameNoFilter by work name
sortNoSort by key(s): count,runtime,max,avg
timeNoTime span to analyze
forceNoDon't complain, do it
inputYesPath to perf.data file
kworkNoWork type to trace (irq, softirq, workqueue)
symfsNoSymbol filesystem root
use_bpfNoUse BPF for tracing
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
kallsymsNokallsyms pathname
with_summaryNoShow summary along with detailed output
dump_raw_traceNoDump raw trace in ASCII

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the output ('per-handler latency table') and the prerequisite, but does not mention whether the tool modifies anything, what input files it reads, or other potential side effects. This is moderate transparency; the core behavior is clear enough but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise and front-loaded: the first sentence states the core purpose, followed by a short list of key parameters, output, and requirement. Every sentence earns its place with no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description does not need to explain return values. It covers the essential context: what the tool does, key parameters, output format, and a prerequisite. It is adequate for an AI agent to understand when to invoke it, though it could optionally mention that the 'input' parameter is a perf.data file.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for all 14 parameters, so the baseline is 3. The description restates a few parameters (sort, name, kwork) with slightly different wording but does not add significant new meaning beyond the schema. No additional semantics are provided for the remaining parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a 'Kernel work item latency breakdown showing scheduling delay for each handler,' which distinguishes it from sibling tools like perf_kwork_top or perf_kwork_report by focusing specifically on latency and scheduling delay. The purpose is immediately understandable and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for use—latency breakdown of kernel work items—and explicitly mentions a prerequisite ('Requires: perf kwork record'). However, it does not explicitly compare against alternatives or state when not to use this tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_kwork_reportA

Kernel work item statistics: IRQ, softIRQ, and workqueue handlers with count, total runtime, and max latency.

Use this to find the most expensive interrupt handlers or work items.

Key parameters:

  • sort: 'count', 'runtime', 'max', 'avg'.

  • name: filter to a specific handler name.

  • kwork: filter by type -- 'irq', 'softirq', 'workqueue'.

Output: per-handler statistics table. Requires: perf kwork record.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
nameNoFilter by work name
sortNoSort by key(s): count,runtime,max,avg
timeNoTime span to analyze
forceNoDon't complain, do it
inputYesPath to perf.data file
kworkNoWork type to trace (irq, softirq, workqueue)
symfsNoSymbol filesystem root
use_bpfNoUse BPF for tracing
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
kallsymsNokallsyms pathname
with_summaryNoShow summary along with detailed output
dump_raw_traceNoDump raw trace in ASCII

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses the output (per-handler statistics table) and the prerequisite (perf kwork record), but does not discuss read-only nature, error behavior, or any edge cases. It is not misleading, but not rich either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a bold summary, a use-case line, key parameters in bullet-like lines, output line, and requirement line. Every sentence adds value, and there is no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (14 params, output schema), the description provides a concise overview covering purpose, typical use, key filters, output, and prerequisite. It leaves parameter details to the schema, which is acceptable. It could include an example invocation, but the summary is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with adequate descriptions for all 14 parameters. The description highlights three key parameters (sort, name, kwork) and repeats their allowed values, but adds no new information beyond what the schema already provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides kernel work item statistics (IRQ, softIRQ, workqueue) with count, total runtime, and max latency. It further clarifies the use case: 'Use this to find the most expensive interrupt handlers or work items.' The sibling differentiation is implicit by focusing on report-style post-processing (Requires: perf kwork record) versus live tools like perf_kwork_top.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it ('Use this to find the most expensive interrupt handlers or work items') and notes the prerequisite 'Requires: perf kwork record.' It does not explicitly name alternatives or state when not to use, but the context is clear enough for an agent to choose between report and other kwork tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_kwork_timehistA

Timestamped kernel work item events showing when each handler ran and for how long.

Key parameters:

  • call_graph: 'fp' or 'dwarf' for callchain.

  • name: filter to specific handler.

Output: per-event timeline. Requires: perf kwork record.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
nameNoFilter by work name
sortNoSort by key(s): count,runtime,max,avg
timeNoTime span to analyze
forceNoDon't complain, do it
inputYesPath to perf.data file
kworkNoWork type to trace (irq, softirq, workqueue)
symfsNoSymbol filesystem root
use_bpfNoUse BPF for tracing
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
kallsymsNokallsyms pathname
max_stackNoMaximum stack depth
call_graphNoCall graph options
with_summaryNoShow summary along with detailed output
dump_raw_traceNoDump raw trace in ASCII

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool consumes a perf kwork record (rather than doing recording itself) and that it outputs a per-event timeline. However, it does not reveal whether the operation is read-only, whether it writes files, requires special privileges, or how the BPF option behaves. This is moderate transparency—better than nothing but incomplete for a tool with 16 parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise: a one-sentence purpose, a two-bullet key-parameter list, and one-line output and requirement. Every sentence contributes unique information. It is front-loaded with the core purpose and structured with clear labels, making it easy to scan. No wasted words or repetition of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (16 params), no annotations, and an output schema (which the description partially covers with 'per-event timeline'), the description gives the essential context: what it does, its input prerequisite, and its output. However, it lacks differentiation from sibling commands (e.g., kwork_latency, kwork_report) and does not explain the overall perf kwork workflow. It is adequate but leaves the agent to infer the tool's position relative to others.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful detail for two parameters: call_graph ('fp' or 'dwarf' for callchain) and name (filter to handler). These go slightly beyond the schema descriptions, but the many other parameters (sort, time, force, etc.) receive no extra explanation. The addition is marginal, keeping the score at baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the tool's purpose: 'Timestamped kernel work item events showing when each handler ran and for how long.' This is a specific verb-resource pair (showing events) and is distinct from the 'top', 'latency', and 'report' sibling tools by focusing on per-event timelines. It stops short of a 5 because it doesn't explicitly differentiate from siblings, but the 'per-event timeline' wording strongly implies the unique angle.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a key prerequisite ('Requires: perf kwork record') and lists two key parameters, but does not offer explicit guidance on when to prefer this tool over alternatives. The intended use case (analyzing timing of handlers) is implied but not stated directly, and no alternatives are mentioned. This is sufficient context to guess usage, but not clear, exclusionary guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_kwork_topA

Top kernel work items ranked by total runtime.

Quick view of the busiest interrupt/softirq/workqueue handlers.

Key parameters:

  • sort: ranking metric -- 'runtime' (default), 'count', 'max'.

Output: ranked handler list. Requires: perf kwork record.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
nameNoFilter by work name
sortNoSort by key(s): count,runtime,max,avg
timeNoTime span to analyze
forceNoDon't complain, do it
inputYesPath to perf.data file
kworkNoWork type to trace (irq, softirq, workqueue)
symfsNoSymbol filesystem root
use_bpfNoUse BPF for tracing
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
kallsymsNokallsyms pathname
with_summaryNoShow summary along with detailed output
dump_raw_traceNoDump raw trace in ASCII

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the input requirement (perf kwork record), the ranking metric, and that the output is a ranked list. It does not describe any side effects, permission needs, or nuances like how BPF mode affects behavior, but for a read-only reporting tool this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise and well-structured: a clear first sentence, a brief purpose statement, a bullet for key parameters, then output and requirements. Every sentence earns its place and the content is immediately scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 14-parameter schema is fully covered and an output schema exists, the description need not explain return values in depth. It supplies the essential prerequisite, the core metric, and the intended use case. It could have added a note on how this relates to sibling kwork tools, but the overall context is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since the input schema's description coverage is 100%, the description doesn't need to restate all parameters. It adds value by highlighting the 'sort' parameter and clarifying its default ('runtime'), which is not in the schema. Minor discrepancy: it omits 'avg' which the schema lists as a sort key, but the description says 'key parameters' and not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states this tool ranks kernel work items by total runtime and identifies them as interrupt/softirq/workqueue handlers. It uses a specific verb ('Top...ranked by total runtime') and describes the resource, though it doesn't explicitly differentiate itself from sibling kwork tools like perf_kwork_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage as a 'quick view' of busiest handlers and states the prerequisite 'Requires: perf kwork record.' However, it does not explicitly state when to use this tool over alternatives like perf_kwork_report or perf_kwork_latency, nor does it mention any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_lock_contentionA

Detailed lock contention analysis showing where threads wait for locks, with optional BPF-based tracking.

Key parameters:

  • lock_addr: show lock addresses.

  • lock_owner: show which task holds the lock.

  • callstack_filter: filter by callstack pattern.

  • use_bpf: use BPF for live contention tracing.

  • type_filter: filter by lock type.

  • stack_skip: skip N stack frames.

Output: contention table with wait times and optional stacks. Requires: perf lock record or lock tracepoints.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
keyNoSort key
mapNoShow lock map
pidNoFilter by PID
tidNoFilter by TID
sortNoSort by key(s): contended,wait_total,wait_max,wait_min,avg_wait
forceNoDon't complain, do it
inputYesPath to perf.data file
quietNoDo not show any warnings
outputNoOutput file path
threadsNoShow per-thread stats
use_bpfNoUse BPF for contention tracing
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
all_cpusNoSystem-wide collection
kallsymsNokallsyms pathname
lock_addrNoShow lock addresses
max_stackNoMaximum stack depth
lock_ownerNoShow lock owners
stack_skipNoNumber of stack frames to skip
lock_cgroupNoShow lock contention per cgroup
lock_filterNoFilter by specific lock addr/name
type_filterNoFilter by lock type
inject_delayNoInject delay in microseconds
cgroup_filterNoFilter by cgroup
combine_locksNoCombine locks by caller
dump_raw_traceNoDump raw trace in ASCII
map_nr_entriesNoMax entries for BPF maps
callstack_filterNoFilter by callstack pattern

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the output ('contention table with wait times and optional stacks') and the prerequisites, and notes that BPF-based tracking is optional. This is useful context beyond the schema, though it does not cover potential failure modes or privilege requirements for BPF, so it is not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise and front-loaded with the main purpose. The key parameters list is somewhat redundant given the schema, but it helps prioritize important options for a 29-parameter tool. The structure is clear and readable, earning a 4 rather than a 5 due to the redundant parameter list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (29 parameters, output schema present, no annotations), the description provides a solid overview: purpose, output format, prerequisites, and optional modes. It does not explain every parameter (the schema handles that) and lacks sibling differentiation, but it is sufficiently complete for an agent to understand what the tool does and when it can be invoked.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description lists key parameters with explanations that largely mirror the schema descriptions (e.g., 'lock_addr: show lock addresses' vs. schema 'Show lock addresses'). There is minimal added semantic value, though minor nuances like 'live' in 'use_bpf: use BPF for live contention tracing' provide a slight enhancement. Overall, the description does not meaningfully add beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Detailed lock contention analysis showing where threads wait for locks' with a specific verb and resource. It distinguishes itself as a detailed analysis tool, but does not explicitly differentiate from sibling tools like perf_lock_report or perf_lock_info, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a prerequisite ('Requires: perf lock record or lock tracepoints') which gives some context on when the tool can be used. However, it does not explicitly state when to use this tool versus alternatives, or provide when-not-to-use guidance. The 'detailed' emphasis implies usage for deeper analysis, but it is not explicit, so the guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_lock_infoA

Display general information about locks in perf.data.

Shows lock types and configurations found in the recording.

Output: lock type and configuration summary. Requires: perf lock record.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
pidNoFilter by PID
tidNoFilter by TID
forceNoDon't complain, do it
inputYesPath to perf.data file
quietNoDo not show any warnings
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
kallsymsNokallsyms pathname
dump_raw_traceNoDump raw trace in ASCII

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full transparency burden. It does disclose a behavioral requirement ('Requires: perf lock record') and the output format, which adds context beyond the schema. However, it does not state safety characteristics (e.g., read-only nature) or potential side effects, though the verb 'Display' implicitly suggests a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (four short sentences) and front-loaded with the primary purpose. The 'Output:' and 'Requires:' sections are clearly structured. However, the first two sentences ('Display general information...' and 'Shows lock types...') are somewhat redundant, which prevents a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 10 parameters, no annotations, and an output schema, the description provides essential context: the prerequisite file and the output type. The schema covers parameter details, and the output schema covers return values. However, it lacks explicit differentiation from sibling lock tools, which would make it more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 10 parameters have schema descriptions (100% coverage), so the baseline is 3. The tool description adds no parameter-specific meaning beyond what the schema already provides, but it doesn't need to since the schema is comprehensive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool displays general information about locks in perf.data, specifically lock types and configurations. This distinguishes it from sibling tools like perf_lock_contention and perf_lock_report, which focus on contention and detailed reports respectively.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear prerequisite (requires perf lock record) that establishes when the tool is usable. However, it does not explicitly mention alternatives or when not to use this tool versus other lock-related tools, so it misses the 'when-not/alternatives' aspect for a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_lock_reportA

Lock statistics: acquired count, contended count, and wait times per lock.

Use this to find the most contended locks in the system.

Key parameters:

  • sort: sort by 'acquired', 'contended', 'avg_wait', 'wait_total', 'wait_max', 'wait_min'.

  • type_filter: filter by lock type -- 'spinlock', 'mutex', 'rwsem:R', 'rwsem:W'.

  • threads: show per-thread breakdown.

  • combine_locks: group locks by caller.

Output: per-lock statistics table. Requires: perf lock record or lock tracepoints.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
keyNoSort key for contended locks
pidNoFilter by PID
tidNoFilter by TID
sortNoSort by key(s): acquired,contended,avg_wait,wait_total,wait_max,wait_min
fieldNoOutput field(s)
forceNoDon't complain, do it
inputYesPath to perf.data file
quietNoDo not show any warnings
entriesNoMaximum entries to display
threadsNoShow per-thread stats
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
kallsymsNokallsyms pathname
lock_filterNoFilter by specific lock addr/name
type_filterNoFilter by lock type
combine_locksNoCombine locks by caller
dump_raw_traceNoDump raw trace in ASCII
field_separatorNoField separator for output

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It does mention the output ('per-lock statistics table') and a prerequisite (needs prior lock recording), but it does not explicitly state that the operation is read-only, what happens on missing input, or whether any files are written. This is adequate but leaves some ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: it front-loads the primary function, then gives the use case, a few key parameters in bullet-like format, the output shape, and the prerequisite. Each line adds necessary information without unnecessary prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (19 parameters, output schema present), the description covers the essential context: what the tool reports, typical use, key parameter options, output format, and required preparatory steps. With an output schema already available, the description need not explain return values, and it provides enough for an agent to select and invoke the tool appropriately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all 19 parameters (100% coverage), so the baseline is 3. The description adds value by highlighting key parameters and giving concrete allowed values for 'sort' (e.g., 'acquired', 'contended', 'avg_wait') and 'type_filter' (e.g., 'spinlock', 'mutex'), plus defining the behavior of 'threads' and 'combine_locks' in plain terms. This goes beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Lock statistics: acquired count, contended count, and wait times per lock,' which clearly names the resource and the metrics reported. The added context 'Use this to find the most contended locks in the system' gives a specific use case that distinguishes it from sibling tools like perf_lock_info or perf_lock_contention.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool ('Use this to find the most contended locks in the system') and provides a prerequisite ('Requires: perf lock record or lock tracepoints'). However, it does not explicitly discuss when not to use it or mention alternative tools, so it gets a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_mem_reportA

Memory access profiling: data source (L1/L2/L3/DRAM), latency, and load/store breakdown.

Use this to find cache-miss-heavy code or NUMA-unfriendly access patterns.

Key parameters:

  • sort: sort key for the histogram.

  • type: 'load' or 'store' to filter access type.

  • ldlat: load latency threshold in CPU cycles.

  • type_profile: show data type profile (DWARF-based).

  • phys_data: show physical memory addresses.

Output: memory access histogram with data source breakdown. Requires: perf mem record (or perf record -d).

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
sortNoSort by key(s)
typeNoMemory operation type
eventNoEvent selector
forceNoDon't complain, do it
inputYesPath to perf.data file
ldlatNoLoad latency threshold in cycles
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
all_userNoOnly show user space entries
phys_dataNoShow physical address data
all_kernelNoOnly show kernel space entries
type_profileNoShow data type profile
data_page_sizeNoShow data page size
field_separatorNoField separator
hide_unresolvedNoOnly display entries resolved to a symbol
dump_raw_samplesNoDump raw samples in ASCII

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry behavioral context. It discloses the output ('memory access histogram'), the prerequisite ('perf mem record or perf record -d'), and clarifies key behaviors like DWARF-based type profiling. It does not explicitly state read-only or side-effect-free behavior, but the 'report' framing implies non-mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tight and well-structured: intro sentence, use-case sentence, key parameters, output, and requirement. Every sentence contributes value and nothing is extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter tool with output schema and no annotations, the description covers the essential context: purpose, key parameters, output shape, and recording prerequisite. It doesn't explain all parameters, but the schema and output schema fill those gaps. Slight lack of interpretive guidance on reading the histogram.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 17 parameters have schema descriptions (100% coverage), so baseline is 3. The description adds extra meaning by explaining 'type' values ('load'/'store'), 'ldlat' threshold units, 'type_profile' is DWARF-based, and 'phys_data' refers to physical memory addresses, going beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool performs memory access profiling with data source (L1/L2/L3/DRAM), latency, and load/store breakdown. It positions it for cache-miss and NUMA analysis, which distinguishes it from sibling perf tools like perf_c2c_report or perf_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this to find cache-miss-heavy code or NUMA-unfriendly access patterns,' giving clear when-to-use guidance. However, it does not mention when not to use it or name specific alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_reportA

Histogram profiling: shows which functions consumed the most CPU time (or other events) as a ranked overhead table.

This is the primary analysis tool. Use it to answer 'where is time spent?'

Key parameters:

  • sort: columns to group by. Default 'comm,dso,symbol'. Use 'srcline' for source lines, 'pid,tid' for threads, 'dso' for libraries.

  • call_graph: enable callchain. Use 'graph,0.5,caller,function,percent' for a standard caller-based call graph with 0.5% threshold.

  • percent_limit: hide entries below N% (e.g. 1.0 to show only >1%).

  • symbols: filter to specific function(s).

  • dsos: filter to specific DSO(s).

  • time: restrict to time range 'start,stop' in seconds.

  • header_only: show file metadata without the histogram.

  • mem_mode: switch to memory access profiling (needs perf record -d).

  • branch_stack: switch to branch profiling (needs perf record -b).

  • latency: show latency-centric view (needs perf record --latency).

  • children: set to false (--no-children) to show self overhead only.

Output: table with columns like '% overhead | command | DSO | symbol'. Works on any perf.data from perf record.

ParametersJSON Schema
NameRequiredDescriptionDefault
nsNoShow times in nanoseconds
cpuNoList of CPUs to filter
pidNoOnly consider symbols in these PIDs
tidNoOnly consider symbols in these TIDs
dsosNoOnly consider symbols in these DSOs (comma-separated)
sortNoSort by key(s): comm,dso,symbol,parent,cpu,socket,srcline,weight,local_weight,addr,data_src,mem,snoop,tlb,locked,blocked,local_ins_lat,global_ins_lat,local_p_stage_cyc,global_p_stage_cyc,cgroup_id,type,typeoff,symoff,pid,tid,latency,parallelism
timeNoTime span of interest (start,stop) in seconds
commsNoOnly consider symbols in these comms (comma-separated)
forceNoDon't complain, do it
groupNoShow event group information together
inputYesPath to perf.data file
mmapsNoDisplay recorded tasks memory maps
quietNoDo not show any warnings or messages
statsNoDisplay event stats
symfsNoSymbol filesystem root for offline analysis
tasksNoDisplay recorded tasks
fieldsNoOutput field(s): overhead,overhead_sys,overhead_us,overhead_children,overhead_guest,sample,period
headerNoShow data header
inlineNoShow inline function
itraceNoInstruction Tracing options
parentNoRegex filter to identify parent
prefixNoAdd prefix to source file path names
prettyNoPretty printing style key: normal raw
sourceNoInterleave source code with assembly (default on)
asm_rawNoDisplay raw encoding of assembly
latencyNoShow latency-centric profile (requires perf record --latency)
modulesNoLoad module symbols
samplesNoNumber of samples to save per histogram entry
symbolsNoOnly consider these symbols
threadsNoShow per-thread event counters
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
childrenNoAccumulate callchains of children (default on)
demangleNoSymbol demangling (default on)
invertedNoInverted call graph
kallsymsNokallsyms pathname
mem_modeNoMemory access profile
hierarchyNoShow entries in a hierarchy
max_stackNoMaximum stack depth for callchain parsing
raw_traceNoShow raw trace event output
show_infoNoDisplay extended information about perf.data
call_graphNoCall graph: print_type,threshold[,print_limit],order,sort_key[,branch],value (e.g. 'graph,0.5,caller,function,percent')
percentageNoHow to display percentage
skip_emptyNoDo not display empty events
stitch_lbrNoEnable LBR callgraph stitching
header_onlyNoShow only data header
parallelismNoOnly consider these parallelism levels
branch_stackNoUse branch records for per-branch histogram
percent_typeNoPercent type
prefix_stripNoStrip first N entries of source file path
time_quantumNoTime quantum for time sort key (e.g. '100ms')
total_cyclesNoSort all blocks by 'Sampled Cycles%'
column_widthsNoFixed column widths
disable_orderNoDisable raw trace ordering
exclude_otherNoOnly display entries with parent-match
percent_limitNoDon't show entries under this percent
socket_filterNoOnly show processor socket matching filter
symbol_filterNoOnly show symbols matching filter
branch_historyNoAdd last branch records to call history
dump_raw_traceNoDump raw trace in ASCII
group_sort_idxNoSort output by Nth event in group
ignore_calleesNoRegex of callees to ignore in call graphs
ignore_vmlinuxNoDon't load vmlinux even if found
demangle_kernelNoEnable kernel symbol demangling
field_separatorNoSeparator for columns
hide_unresolvedNoOnly display entries resolved to a symbol
show_nr_samplesNoShow column with sample count
full_source_pathNoShow full source file name path for source lines
show_total_periodNoShow column with sum of periods
disassembler_styleNoDisassembler style (e.g. 'intel')
show_ref_call_graphNoShow callgraph from reference event
show_cpu_utilizationNoShow sample % for different CPU modes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses output format ('table with columns like % overhead | command | DSO | symbol'), prerequisites for special modes ('needs perf record -d', '-b', '--latency'), and important caveats like 'Works on any perf.data.' It does not explicitly address whether the command modifies state, but as an analysis/report tool this is not a major gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but it is front-loaded with the core purpose and organized into a 'Key parameters' list. Every line conveys useful information for a complex tool with 72 parameters. It is not as tight as a two-sentence description, but it earns its length by preventing common misuse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's high complexity (72 parameters) and no annotations, the description provides a solid orientation: it explains what the tool does, what output to expect, which parameters matter most, and what data prerequisites exist for special modes. It could be more complete by naming sibling alternatives for non-CPU analyses, but it is more than sufficient for common use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema already covers 100% of parameters, the description adds substantial value by explaining key parameters with practical examples: sort default and useful alternatives, call_graph syntax ('graph,0.5,caller,function,percent'), percent_limit semantics, and mode switches (mem_mode, branch_stack, latency). This goes well beyond the schema's one-line definitions and makes the tool significantly more usable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Histogram profiling: shows which functions consumed the most CPU time... as a ranked overhead table.' It explicitly positions itself as 'the primary analysis tool' for answering 'where is time spent?', which distinguishes it from sibling perf tools like perf_annotate or perf_mem_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly identifies the primary use case: answering 'where is time spent?' and states it works on any perf.data from perf record. It does not explicitly name alternatives or exclusion criteria, but the 'primary analysis tool' framing gives clear context compared to sibling tools. Lacks explicit 'use X instead when' guidance, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_sched_latencyA

Per-task scheduling latency statistics. Shows max, average, and total scheduling delay per task.

Use this to identify tasks that are being starved or experiencing long scheduling delays.

Key parameters:

  • sort: sort key -- 'max' (default), 'switch', 'runtime', 'avg'.

  • pid: filter to specific PIDs.

Output: table with task name, max latency, avg latency, switch count. Requires: perf sched record.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
pidNoAnalyze only these PIDs
tidNoOnly these TIDs
prioNoFilter by task priority
sortNoSort by key(s): max,switch,runtime,avg
forceNoDon't complain, do it
inputYesPath to perf.data file
symfsNoSymbol filesystem root
outputNoOutput file path
repeatNoNumber of times to repeat
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
kallsymsNokallsyms pathname
dump_raw_traceNoDump raw trace in ASCII

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It discloses the output table fields, the sort default, and the prerequisite command. It implies a read-only analytical behavior, though it does not explicitly state non-mutating or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: an intro sentence, a use-case sentence, bulleted key parameters, an output line, and a prerequisite line. Every sentence adds value and is front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema and full parameter schema coverage, the description covers the essential context: what it does, when to use it, key parameters, output shape, and prerequisite. It could be more complete by distinguishing from perf_sched_timehist, but overall it is sufficient for a 14-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by specifying the default for 'sort' ('max') and highlighting 'pid' as a filter. These details go beyond the schema descriptions without repeating all parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as reporting per-task scheduling latency statistics, showing max, average, and total delay. This is a specific verb+resource, but it does not explicitly distinguish itself from the closely related sibling perf_sched_timehist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool: 'Use this to identify tasks that are being starved or experiencing long scheduling delays.' It also mentions the prerequisite 'Requires: perf sched record.' However, it does not provide exclusions or mention alternative siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_sched_mapA

ASCII CPU activity map showing which task ran on which CPU at each time slice.

Use this for a visual overview of scheduling patterns, CPU affinity issues, and load imbalance.

Key parameters:

  • compact: one-character-per-task view.

  • cpus: restrict to specific CPUs.

  • pids: restrict to specific PIDs.

  • color_pids/color_cpus: highlight specific PIDs/CPUs.

Output: ASCII grid with CPUs as rows and time as columns. Requires: perf sched record.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
cpusNoCPUs to display in map
pidsNoPIDs to show in map
forceNoDon't complain, do it
inputYesPath to perf.data file
symfsNoSymbol filesystem root
compactNoShow one-letter task state
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
kallsymsNokallsyms pathname
task_nameNoMap task name(s) to their thread ids
color_cpusNoHighlight these CPUs with color
color_pidsNoHighlight these PIDs with color
fuzzy_nameNoMap fuzzy task name(s)
dump_raw_traceNoDump raw trace in ASCII

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description takes on the full burden of behavioral disclosure. It discloses the output format ('ASCII grid with CPUs as rows and time as columns'), a key prerequisite ('Requires: perf sched record'), and parameter effects (compact, cpus, pids, coloring). While it does not mention failure modes or side effects, the read-only nature is implied by the map output, making it reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by usage guidance, key parameters, output format, and prerequisite. It is slightly longer than necessary due to repeating parameter names that already exist in the schema, but each sentence serves a purpose and the structure is logical and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (15 parameters) and the presence of an output schema (so return values need not be explained), the description covers the essential aspects: purpose, usage, output, and prerequisite. It does not explain all parameters, but the schema covers those. The description is complete enough for an agent to decide whether to use it and to understand its core behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already has 100% description coverage for all 15 parameters. The description adds modest value by explaining 'compact: one-character-per-task view' and grouping related parameters (color_pids/color_cpus), but most of the parameter semantics are already present in the schema. It does not meaningfully deepen understanding of parameters like symfs, vmlinux, or verbose beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence 'ASCII CPU activity map showing which task ran on which CPU at each time slice' names the specific verb (map), resource (CPU activity), and output format, clearly distinguishing it from sibling tools like perf_sched_latency or perf_sched_timehist. It explains the visual output and use case for scheduling patterns, CPU affinity, and load imbalance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'Use this for a visual overview of scheduling patterns, CPU affinity issues, and load imbalance,' giving a clear when-to-use context. It does not explicitly mention when not to use it or name alternative tools, but the visual-overview framing strongly implies differentiation from statistical or script-based siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_sched_replayA

Replay recorded scheduler events to simulate the original scheduling.

Replays the workload's scheduling decisions and reports statistics about the simulated run.

Output: replay statistics (throughput, latency). Requires: perf sched record.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
forceNoDon't complain, do it
inputYesPath to perf.data file
symfsNoSymbol filesystem root
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
kallsymsNokallsyms pathname
dump_raw_traceNoDump raw trace in ASCII

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the transparency burden. It explicitly says the tool 'simulate[s] the original scheduling' and 'reports statistics,' making its non-destructive simulation nature clear. It also notes the required prior recording step. It could add more detail about potential side effects, but the simulation wording effectively conveys the behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short but contains redundancy: the first sentence ('Replay recorded scheduler events to simulate the original scheduling') and the second ('Replays the workload's scheduling decisions...') say essentially the same thing. The 'Output' and 'Requires' lines are useful and well-structured, but the duplicate opening could be condensed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of a full input schema and an output schema, the description provides sufficient context: it states the output (throughput, latency) and the prerequisite (perf sched record). This is adequate for a specialized replay tool, though it could optionally describe how statistics are computed or what 'simulate' means operationally.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents all 8 parameters with concise explanations. The description does not add extra meaning to the parameters (e.g., how 'cpu' filtering interacts with replay), so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('Replay recorded scheduler events') and clearly states what the tool does: simulates original scheduling and reports statistics. It distinguishes itself from sibling tools like perf_sched_map and perf_sched_latency by focusing on replay behavior and statistical output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states 'Requires: perf sched record,' giving an explicit prerequisite and implying when to use the tool (after recording events). However, it does not mention alternatives or explicitly when not to use this tool compared to other sched subcommands.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_sched_scriptA

Dump raw scheduler tracepoint events from perf.data.

Use this for custom analysis or when the structured views (latency, timehist, map) don't show what you need.

Output: raw tracepoint event lines. Requires: perf sched record.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpuNoCPUs to filter
forceNoDon't complain, do it
inputYesPath to perf.data file
symfsNoSymbol filesystem root
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
kallsymsNokallsyms pathname
dump_raw_traceNoDump raw trace in ASCII

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry transparency. It discloses the raw output format and requirement, but does not mention potential side effects, output size, or behavior nuances like whether it reads from stdin or modifies files. Basic but not fully comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core function, followed by use-case guidance and output/requirement notes. Every sentence earns its place with zero redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 8 parameters (1 required) and an output schema. The description covers purpose, usage context, output format, and prerequisite. It doesn't explain parameter details, but the schema covers that, making the overall context sufficiently complete for a dump-style tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (all 8 parameters have descriptions), so baseline is 3. The description itself does not add parameter-level detail beyond stating input path and dump purpose; it relies on the schema for parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's verb+resource ('Dump raw scheduler tracepoint events from perf.data') and explicitly differentiates it from sibling structured-view tools by naming latency, timehist, and map. This provides a specific, unambiguous purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance ('for custom analysis or when the structured views... don't show what you need'), names alternative tools, and states a prerequisite ('Requires: perf sched record'). This is strong contextual direction for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_sched_timehistA

Timestamped scheduler timeline showing every context switch with runtime and scheduling delay.

Use this for detailed scheduling analysis -- find when and why tasks were descheduled.

Key parameters:

  • summary: true to show only summary stats (no per-event detail).

  • wakeups: show wakeup events between switches.

  • migrations: show CPU migration events.

  • idle_hist: show idle-time analysis.

  • state: show task state (R/S/D/T) at each switch.

  • call_graph: 'fp' or 'dwarf' for callchain at each switch.

  • with_summary: show both detail and summary.

  • comms: filter to specific task names.

  • time: restrict to time range.

Output: per-event table with timestamp, task, runtime, wait-time, scheduling delay. Requires: perf sched record.

ParametersJSON Schema
NameRequiredDescriptionDefault
nsNoShow times in nanoseconds
cpuNoCPUs to filter
pidNoAnalyze only these PIDs
tidNoAnalyze only these TIDs
nextNoShow next task
timeNoTime span to analyze
commsNoOnly show these comms
forceNoDon't complain, do it
inputYesPath to perf.data file
stateNoShow task state at switch
symfsNoSymbol filesystem root
summaryNoShow summary statistics only
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
wakeupsNoShow wakeup events
kallsymsNokallsyms pathname
idle_histNoShow idle-related events
max_stackNoMaximum stack depth
show_prioNoShow task priority
call_graphNoCall graph options
cpu_visualNoShow CPU visualization
migrationsNoShow migration events
with_summaryNoShow summary with detailed output
dump_raw_traceNoDump raw trace in ASCII
pre_migrationsNoShow pre-migration events

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the output format ('per-event table with timestamp, task, runtime, wait-time, scheduling delay') and the prerequisite recording command. It also adds nuance to key parameters, such as 'summary: true to show only summary stats (no per-event detail)' and 'call_graph: 'fp' or 'dwarf' for callchain,' providing meaningful behavior beyond what a generic description would offer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a single-sentence definition, a usage context sentence, a focused bullet list of key parameters, and two short lines for output and requirements. It is front-loaded and avoids redundancy with the schema, making every sentence earn its place without being overly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (25 parameters) and that the schema fully covers parameter descriptions and an output schema exists, the description provides sufficient context: it identifies the tool's purpose, usage context, key behavioral parameters, output format, and the required perf sched record prerequisite. It could have mentioned direct alternatives, but the 'detailed scheduling analysis' guidance is enough for a capable agent to select this tool appropriately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. However, the description enriches several parameters: summary, wakeups, migrations, idle_hist, state, call_graph, with_summary, comms, and time are each given practical meaning (e.g., 'state: show task state (R/S/D/T) at each switch'). This adds value beyond the schema's brief field descriptions, so a 4 is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence clearly states the tool produces 'Timestamped scheduler timeline showing every context switch with runtime and scheduling delay,' specifying the resource (context switch timeline) and actions (showing). This distinguishes it from sibling tools like perf_sched_map, perf_sched_latency, and perf_sched_replay, which serve different analysis purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this for detailed scheduling analysis -- find when and why tasks were descheduled,' providing clear context for when to invoke this tool. It also notes the prerequisite 'Requires: perf sched record,' which helps the agent know the required input state, though it does not explicitly call out alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_scriptA

Dump raw per-sample events from perf.data. Each line is one sample with configurable fields.

Use this when you need the raw data rather than aggregated histograms — for flamegraph input, custom filtering, or inspecting individual events.

Key parameters:

  • fields: comma-separated output fields. Common sets: 'comm,pid,tid,time,event,ip,sym,dso' (general), 'ip,sym,dso' (flamegraph input), 'comm,tid,time,ip,sym,srcline' (source mapping). Available: comm,tid,pid,time,cpu,event,trace,ip,sym,dso,addr,symoff,srcline,period,flags,callindent,insn,brstacksym.

  • symbols/dsos/comms/pid/tid: filter to specific functions/DSOs/processes.

  • time: restrict to time range 'start,stop'.

  • max_events: limit number of events returned.

  • header_only: show file metadata only.

  • show_task_events/show_mmap_events/show_switch_events: include non-sample events.

  • call_trace/call_ret_trace/insn_trace: Intel PT trace modes.

Output: one line per sample. Format depends on fields parameter. Works on any perf.data from perf record.

ParametersJSON Schema
NameRequiredDescriptionDefault
nsNoShow times in nanoseconds
cpuNoList of CPUs to filter
pidNoOnly consider symbols in these PIDs
tidNoOnly consider symbols in these TIDs
xedNoUse Intel XED disassembler
dsosNoOnly consider these DSOs
timeNoTime span of interest (start,stop)
commsNoOnly display events for these comms
forceNoDon't complain, do it
inputYesPath to perf.data file
symfsNoSymbol filesystem root
fieldsNoComma-separated list of fields to display: comm,tid,pid,time,cpu,event,trace,ip,sym,dso,addr,symoff,srcline,period,iregs,uregs,brstack,brstacksym,flags,bpf-output,brstackinsn,brstackoff,callindent,insn,insnlen,synth,phys_addr,metric,misc,ipc,tod,data_page_size,code_page_size,ins_lat,machine_pid,vcpu,cgroup,retire_lat,brstackinsnlen,parallelism,latency
headerNoShow data header
inlineNoShow inline function
itraceNoInstruction Tracing options
LatencyNoShow latency attributes
reltimeNoShow relative time
stop_btNoStop unwinding callchain at this symbol
symbolsNoOnly consider these symbols
verboseNoVerbosity level (0-2)
vmlinuxNovmlinux pathname
all_cpusNoSystem-wide collection from all CPUs
demangleNoSymbol demangling (default on)
kallsymsNokallsyms pathname
deltatimeNoShow delta time
max_stackNoMaximum stack depth for callchains
show_infoNoDisplay extended perf.data info
addr_rangeNoFilter by address range
call_traceNoShow call trace
guest_codeNoDisplay guest code
guestmountNoGuest OS root file system mount point
insn_traceNoShow instruction trace
max_blocksNoMaximum number of code blocks to dump
max_eventsNoMaximum number of events to display
stitch_lbrNoEnable LBR callgraph stitching
header_onlyNoShow only data header
guestmodulesNoGuest modules file
guestvmlinuxNoGuest vmlinux pathname
guestkallsymsNoGuest kallsyms file
call_ret_traceNoShow call/return trace
dump_raw_traceNoDump raw trace in ASCII
graph_functionNoShow callgraph for specific function(s)
per_event_dumpNoDisplay record as parsed event
demangle_kernelNoEnable kernel symbol demangling
hide_call_graphNoDon't display the callchain
show_bpf_eventsNoDisplay BPF events
full_source_pathNoShow full source file name path
merge_callchainsNoMerge deferred callchains
show_kernel_pathNoShow kernel DSO path instead of [kernel.kallsyms]
show_lost_eventsNoDisplay lost events
show_mmap_eventsNoDisplay mmap-related events
show_task_eventsNoDisplay task-related events (fork/comm/exit)
show_round_eventsNoDisplay finished round events
show_cgroup_eventsNoDisplay cgroup events
show_switch_eventsNoDisplay context switch events
show_namespace_eventsNoDisplay namespace events
show_text_poke_eventsNoDisplay text poke events

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavior: one line per sample, configurable fields, works on any perf.data from perf record, and special trace modes. It also mentions output format and key filtering options, giving the agent a clear picture of side effects (none destructive).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with a clear opening, use-case paragraph, and key-parameter list; every sentence adds operational value. It is longer than the calibration high example but justified by the tool's complexity (57 parameters), and it remains scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 57-parameter tool, the description covers the core behavior, output format, and the most impactful parameter groups. Since an output schema exists, the description doesn't need to explain return values, and it provides enough context for correct invocation alongside the fully documented schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds substantial value by listing common field sets for 'fields' and summarizing filter parameters (symbols, dsos, comms, pid/tid, time, max_events) beyond their schema definitions. This helps the agent choose parameter values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb ('Dump raw per-sample events from perf.data') and clearly distinguishes from aggregated histogram tools like perf_report by emphasizing raw per-sample output. The use cases (flamegraph input, custom filtering, inspecting individual events) further differentiate it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use: 'when you need the raw data rather than aggregated histograms' and names concrete scenarios. It doesn't name sibling tools directly but clearly contrasts with the histogram-based alternative, which is sufficient for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

perf_timechartA

Generate a timechart SVG showing CPU activity and task scheduling over time as a visual timeline.

Key parameters:

  • output: SVG file path (default: output.svg).

  • process: filter to specific process name(s).

  • power_only: show only CPU power state changes.

  • tasks_only: show only task scheduling.

  • io_only: show only I/O activity.

  • topology: include CPU topology.

  • width: SVG width in pixels.

Output: returns the SVG file path and size. Requires: perf timechart record.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoDon't complain, do it
inputYesPath to perf.data file
symfsNoSymbol filesystem root
widthNoSVG width in pixels
outputNoOutput SVG file path (default: output.svg)
io_onlyNoShow I/O-related events only
processNoOnly show specific process(es)
verboseNoVerbosity level (0-2)
proc_numNoNumber of processes to display
topologyNoShow CPU topology
callchainNoRecord callchain
highlightNoHighlight process by name
power_onlyNoOnly show CPU power events
tasks_onlyNoOnly show task events
io_min_timeNoMinimum I/O time to display (ns)
io_merge_distNoMerge I/O events within distance (ns)
io_skip_eagainNoSkip EAGAIN I/O events

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations available, the description carries the full burden. It discloses the output ('returns the SVG file path and size') and the prerequisite ('Requires: perf timechart record'), but it does not mention limitations, error handling, or side effects beyond creating an SVG file. This partial transparency leaves gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening purpose, a 'Key parameters' summary, and separate lines for 'Output' and 'Requires.' It avoids unnecessary detail and stays within a compact size, though the parameter list is somewhat redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (17 parameters) and the existence of an output schema, the description provides adequate context about the tool's purpose and key options. However, it lacks guidance on when to use specific filters, how they interact, or typical workflows, leaving some gaps for a heavy parameterized tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description only highlights a subset of parameters in a 'Key parameters' list without adding new semantic meaning. The baseline of 3 applies because the schema already documents parameters well; the description adds marginal value by emphasizing common filters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's primary function: 'Generate a timechart SVG showing CPU activity and task scheduling over time as a visual timeline.' This specific verb-resource pairing distinguishes it from sibling tools like perf_sched_map or perf_report, which focus on other forms of analysis or output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool by explaining 'Requires: perf timechart record' and listing key filters such as process, power_only, and tasks_only. However, it does not explicitly exclude alternatives or describe trade-offs compared to other perf visualization tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.8/5.0
Disambiguation5/5

Each tool wraps a distinct perf subcommand with a unique analysis purpose, from report and annotate to sched-specific and kwork-specific views. Even similar tools like perf_sched_latency vs perf_sched_timehist are clearly differentiated by their descriptions.

Naming Consistency5/5

All tools follow the exact perf_<subcommand> pattern, with no mixing of casing or verb styles. The naming is uniform and predictable, making the toolset easy to navigate.

Tool Count2/5

At 26 tools, the server exceeds the 25-tool threshold for 'too many'. While perf is a broad domain, this many tools risks overwhelming an agent, and several are niche or could be consolidated.

Completeness2/5

The toolset is heavily analysis-focused but completely lacks capture tools like perf_record or perf_stat, making it impossible to generate the very perf.data files most tools require. This is a significant gap that forces the agent to depend on external data sources.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to perform high-performance code search and analysis across multiple languages using symbol indexing, regex text search, and structural AST pattern matching. It also provides tools for technology stack detection and dependency analysis with persistent caching for optimized performance.
    7
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides LLM-optimized tools for advanced code analysis, repository complexity evaluation, and call graph generation. It enables users to visualize directory structures, detect code patterns, and build semantic context with significant token savings.
    18
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables LLMs to safely write and run bpftrace scripts against the Linux kernel for observability, with explicit probe allowlists and execution timeout.
    1

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/walac/perf-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server