Skip to content

Performance · Make every Agent call measurable

Agent call latency breakdown, incremental vs full recomputation cost, auto bottleneck detection, fine-grained resource billing—full performance trace from Agent proposal to silicon.

OBSERVABILITY P0 C++/Python
Performance Trace
# Every agent call, measured end-to-end
agent.call("iPL.place")  → 234ms total
  ├ schema_validation:   2ms
  ├ sandbox_setup:       5ms
  ├ tool_execution:    210ms  ← bottleneck
  └ result_serialize:   17ms
iMapsynthesisiFPfloorplaniPDNpoweriPLplacementiCTSclockiTOoptimizationiRTroutingiSTAtimingAiEDAdesign dataiPCLlayout modeliMapsynthesisiFPfloorplaniPDNpoweriPLplacementiCTSclockiTOoptimizationiRTroutingiSTAtimingAiEDAdesign dataiPCLlayout model

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")

Platform overview

See how the five unified-base modules work together.

Platform →

Agent Runtime

How Agents run the full explore-evaluate-commit loop on the platform.

More →

Evaluation

Compute cost tracking for every quality gate.

Evaluation →