Skip to main content

Performance & Tracing Update

· 4 min read
Michael Karg
Performance and Tracing Team Lead

High level summary

  • Benchmarking: Node 11.1.0 release benchmarks.
  • Development: beacon benchmark: new metric capturing disk access time for UTxO lookup; replaced Cairo rendering with gnuplot to reduce bloat and increase portability.
  • Tracing: Alert manager feature for cardano-tracer now in implementation phase.
  • Leios: On-disk LedgerDB tx validation times benchmark delivered; distributable, self-contained benchmark package in the works.
  • Organizational: Decentralization of delivery: The entire Performance & Tracing team successfully moved from IOG to ICAN Group.

Low level overview

Benchmarking

The P&T team has performed and analyzed benchmarks, as well as pre-release bencharks, for the Node 11.1.0 release. While we did measure an increased resident set size, we also saw a clear reduction in process CPU usage. The memory increase has already prompted an investigation and changes, which will make their way into a 11.1.1 patch release.

Development

beacon's comparison and variance reports now break totalTime outliers down into ledger-tick and table-read cost, and commit to a single totalTime metric instead of quietly double-counting table-read time into it — table-read time being what actually captures UTxO lookup cost against the on-disk backing store (beacon PR#16, second of three parts split off from #13, still under review).

We've also dropped beacon's Cairo-based plotting backend entirely in favour of a small gnuplot wrapper (beacon PR#21). The old Chart/Chart-cairo dependency pulled in a full X11 client stack for a tool that only ever renders to PNG files; the switch shrinks the binary's shared-library footprint from 25 down to 5, and let us finally add macOS to CI.

Tracing

Following on from the alarm-system design work reported last time, we've moved into implementation (cardano-node PR#6664). The dispatch payload sent to alarm consumers now carries the source, rule ID, severity and a summary, instead of just the name of the consumer being notified; on the timeseries side, alarm rules are now backed by a small, pure, edge-triggered state machine — cycling through Inactive/Pending/Active states with configurable for/repeatEvery timing and a deterministic series key — while the evaluator thread and value decoder driving it are left for a follow-up PR.

Native support for nested spans in Hermod remains ongoing work, with no PR created yet.

Leios

The on-disk LedgerDB tx validation benchmark work mentioned in our last two posts has been delivered: beacon run can now force the LSM backend to genuinely exercise disk I/O via a new --lsm-no-cache flag, bypassing the OS page cache through O_DIRECT, with --mem-limit/--heap-limit cgroup caps as a fallback for older db-analyser builds; every run also now reports peak RSS, block I/O counts, and a true wall-clock totalTime alongside the previous mutator-only timing (beacon PR#12). Concrete measurements from this on-disk backend are being published under Leios issue#553, the original ask behind this benchmarking effort.

In parallel, we're packaging this benchmark into a self-contained, distributable executable that SPOs can run on their own hardware without nix or network access (beacon PR#22, based on #16). glue bundles glibc and its own curl/unzip, patches its own ELF interpreter at extraction time, and drives measurement, hardware profiling and report assembly through auditable shell scripts rather than Haskell. It's currently under review.

Organizational

As of this month, the entire Performance & Tracing team has moved from IOG to ICAN Group. The team has been warmly welcomed, and the move comes with a genuine sense of a fresh start — new structure, same people, same focus. Delivery on the Cardano Maintenance & Support proposal has continued without disruption throughout the transition; everything reported above was produced across the move.

Mithril Team Update

· 3 min read
Jean-Philippe Raynaud
Mithril Tech Lead

High level overview

This week, the Mithril team completed the optimization of the SNARK test suite by extending the on-disk test cache to the recursive circuit test fixtures, consolidating the halo2_snark slow proof tests around shared and golden proofs, and consolidating the recursive circuit MockProver tests. They continued adding the missing IVC off-circuit checks and started recovering the ignored IVC prover input preparation tests, and started documenting the recursive and non-recursive SNARK aggregation as well as the concatenation aggregation on the documentation website.

The team also completed the adaptation of the end-to-end test for the on-chain configuration parameters and the runbook documenting them, and continued implementing the new chain adapter that reads these parameters and adapting the infrastructure. They continued working on the deterministic immutable compressed archives and on the IPFS file uploader of the aggregator.

Finally, the team continued upgrading to Cardano node v.11.1 and updating the ed25519-dalek dependency.

Low level overview

Features

  • Completed the issue Extend the on-disk test cache to the recursive circuit test fixtures #3462
  • Completed the issue Consolidate the halo2_snark slow proof tests around shared and golden proofs #3463
  • Completed the issue Consolidate the recursive circuit MockProver tests #3464
  • Completed the issue Adapt end-to-end test for on-chain configuration parameters #3396
  • Worked on the issue Add missing IVC off-circuit checks #3381
  • Worked on the issue Recover the ignored IVC prover input preparation tests #3466
  • Worked on the issue Create new chain adapter to read on-chain configuration parameters #3393
  • Worked on the issue Create deterministic immutable compressed archives #3435
  • Worked on the issue Implement an IpfsFileUploader in the aggregator #3457
  • Worked on the issue Add documentation for recursive SNARK #3144
  • Worked on the issue Add documentation for non recursive SNARK #3155
  • Worked on the issue Add documentation for concatenation aggregation #3487

Protocol maintenance

  • Completed the issue Create runbook for on-chain configuration parameters #3399
  • Completed the issue Fix admonitions in website and update Footer Discord info #3491
  • Worked on the issue Upgrade to Cardano 11.1 #3346
  • Worked on the issue Adapt infrastructure for on-chain configuration parameters #3397
  • Worked on the issue Update ed25519-dalek dependency #3471

Plutus Core Team Update

· 2 min read
Ziyang Liu
Software Engineering Lead

High level summary

The Plutus team has published release 1.68.0.0, which includes the Plutus V4 ledger API types. Note that Plutus V4 remains under development, and these types may still change before Dijkstra.

Getting started with Plinth is now much easier: the new install script in plinth-template sets up a Plinth project with a single command, taking care of installing the required tooling. See the updated documentation for details.

Work on Plutus V4 language features continues. Casing on Data has been implemented: case on a Data.Constr value can now dispatch directly on the constructor tag, which, combined with the recently added dropList, yields a decent performance boost. We've also added the assetCount builtin (CIP-0168) along with its cost model, merged the cost model for multiIndexArray (CIP-0156), and continued formalizing builtins in the Agda metatheory.

We also continue to welcome feedback on CPS-0034 - Extending Plutus Core conformance testing.

Key Pull Requests Merged

Pull Requests In Progress

Consensus Team Update

· One min read
Damian Nadales
Consensus Team Lead

High level summary

  • Leios prototype development (Treasury Funding Initiative 4: Ouroboros Leios Implementation):
    • Closed an attack on the way nodes announce Endorser Blocks. The attack made honest nodes disconnect from each other (#2179, for ouroboros-leios#1029).
    • db-analyser now reads Leios chains. The tool replays a chain and reports the cost to apply each block. The reports now cover the transactions of each certified Endorser Block, their total size, and the time to read them (#2181, for ouroboros-leios#1023).
  • Maintenance and support (Treasury Funding Initiative 17: Maintenance and Support):
    • Forward-ported the new snapshot interval and the mempool allocation fix from the 4.x release line to the main development branch. The 2026-08-11 update describes both changes (#2209, #2215).

ledger

· 3 min read

title: Ledger Team Update slug: 2026-08-19-ledger authors: lehins tags: [ledger] hide_table_of_contents: false

High level summary

Leios support continued: following the addition of a real BlsKey in the pool parameters, the pool distribution now carries the corresponding LeiosKey and a per-pool BLS-attributed stake, so that BLS-related pool information is available wherever the rest of the pool distribution is consumed.

Groundwork was laid for a broader refactor of predicate failures toward standalone, reusable units that can be shared across rules and eras. The first such predicate failure landed as a template for the transition, with sub-transactions in Dijkstra as the initial target. Ord instances were also added uniformly across the predicate-failure hierarchy so that failures can be collected into sets, which fits the same push toward standalone, composable predicate failures.

A number of CBOR decoders in the ledger were relaxed to accept indefinite-length encodings in addition to the definite-length ones they previously required. This makes the decoders tolerant of structurally equivalent CBOR variants.

Test infrastructure received substantial attention. On the Imp side, sub-transaction fixup was implemented (Plutus scripts aside), directly addressing the sub-transaction testing gap flagged last cycle. On the conformance side, several test suites were re-enabled after fixes to the underlying constrained generators. Twiddling tests were also enabled in Dijkstra, providing more robust serialization tests.

Low level summary

Features

  • PR-5988 - Leios: add LeiosKey to PoolDistr
  • PR-5992 - Add individualPoolStakeBls to PoolDistr
  • PR-5850 - Add Ord instances for predicate failures
  • PR-5979 - Make GenerateCBOR exit with nonzero when generation fails, retry failed attempts
  • PR-5772 - Adding first standalone AccountAlreadyRegistered predicate failure
  • PR-5862 - Enable Dijkstra Twiddling tests, relax some decoders in PV12

Testing

  • PR-5964 - Enable UTXOW/UTXO/UTXOS tests from all eras in conformance
  • PR-5990 - Fix infinite loop in initialLedgerState test generator, re-enable UTXO/UTXOW/LEDGER/LEDGERS conformance tests
  • PR-5980 - Implement subtransaction-fixup in Imp framework (except Plutus scripts)
  • PR-6008 - Enact state constrained generator fix

Infrastructure and releasing

  • PR-6000 - Bump HLS to 2.14.0.0
  • PR-5838 - Post test failures summary to a PR comment as well as to CI
  • PR-5998 - CHaP flake optimization
  • PR-6005 - Bump actions/checkout from 6 to 7 in the actions group