Core capabilities
Latency Tracking
End-to-end latency breakdown per Agent tool call—schema validation, sandbox setup, tool execution, result serialization. Millisecond precision helps platform teams find hotspots.
Incremental Cost
Incremental vs full recomputation cost. DirtySet claims to recompute only changed regions—Performance quantifies actual savings for Agent developers.
Bottleneck Detection
Auto-identify performance bottlenecks. Track mean latency and variance per tool in the Agent call chain; alert when latency exceeds baseline—optimization priorities become clear.
Resource Accounting
Fine-grained CPU/memory/I/O billing. Every Agent session's resource use is recorded—for cost optimization and fair scheduling among Agents.
Closed-loop Trace
Full performance chain from Agent proposal to silicon. Trace proposal, evaluation, commit, and silicon verification—complete closed-loop profile.
Performance tracing example
from ieda import AgentClient from ieda.performance import Trace, LatencyBreakdown client = AgentClient(tracing=True) # Run a full agent session with tracing with Trace.session("timing_opt_v1") as trace: snap = client.call("iDB.snapshot", design=design) result = client.call("iSTA.analyze", snap=snap.id) proposal = client.call("iPL.optimize", timing=result) # Get latency breakdown breakdown = trace.breakdown() for name, lat in breakdown.items(): print(f"{name}: {lat.latency_ms}ms (cpu={lat.cpu_ms}ms, mem={lat.mem_mb}MB)") # Detect bottlenecks bottlenecks = trace.bottlenecks(threshold_pct=20) for b in bottlenecks: print(f"Bottleneck: {b.tool} at {b.pct:.1f}% of session time") # Incremental vs full cost comparison cost = trace.compare(FullRecompute=snap.id) print(f"Incremental: {cost.incremental_ms}ms vs Full: {cost.full_ms}ms") print(f"Speedup: {cost.speedup:.1f}x")
{
"tool": "perf.trace_session",
"arguments": {
"session_id": "timing_opt_v1",
"enabled": true
}
}
{
"tool": "perf.breakdown",
"arguments": {
"session_id": "timing_opt_v1"
}
}
// Response
{
"tools": [
{"name": "iDB.snapshot", "latency_ms": 12, "cpu_ms": 8, "mem_mb": 4},
{"name": "iSTA.analyze", "latency_ms": 234, "cpu_ms": 220, "mem_mb": 120},
{"name": "iPL.optimize", "latency_ms": 890, "cpu_ms": 870, "mem_mb": 340}
],
"bottlenecks": [{"tool": "iPL.optimize", "pct": 78.3}]
}
# Enable performance tracing perf::trace_session timing_opt_v1 -enable true # Run tools normally — traces automatically collected iDB::snapshot -label "before opt" iSTA::analyze -snap snap_7f3a iPL::optimize -timing [iSTA::result] # Get breakdown perf::breakdown timing_opt_v1 # Output: latency and resource breakdown per tool # Compare incremental vs full perf::compare -incremental snap_dirty -full snap_7f3a # Output: speedup ratio and cost breakdown