Skip to main content

· 4 min read
Michael Karg

High level summary

  • Benchmarking: Plutus memory budget scaling benchmarks; UTxO-HD benchmarks, leading to a fixed regression; Genesis benchmarks.
  • Development: Ouroboros Genesis and UTxO-HD adjustments in workbench; Maintenance tasks.
  • Infrastructure: Removing outdated deployments; Haskell profile definition merged; workbench simplification ongoing.
  • Tracing: C library development ongoing; Feature implementation according to community feedback; test removeal of old system.

Low level overview

Benchmarking

We've run and analyzed scaling benchmarks of Plutus execution budgets. In this series of benchmarks, we measured the performance impact of changes to the memory budgets (both transaction and block). We observed an expected, and reasonable, increase in certain metrics only. Furthermore, we've shown this increase to be linearly correlated to the budget raise. This means that when exploring the headroom of those budgets, the performance cost for the network is alawys predictable. The benchmarks serve as a base for discussing potential changes to those budgets in Mainnet protocol parameters.

When building a performance baseline for UTxO-HD, we were able to locate a regression in its new in-memory backing store, LedgerDB V2. We created a local reproduction of that for the Consensus team, who was able to successfully adress the regression. A corresponding benchmarking report will be published on Cardano Updates.

Furthermore, we've performed benchmarks with the Ouroboros Genesis feature enabled and compared them to the release benchmark baseline. We could not detect any performance risk to the network during "normal operations", i.e. when all nodes are caught up with the chain tip.

Development

During the course of building performance baselines for Ouroboros Genesis and UTxO-HD, we've developed various updates to the performance workbench to correctly handle the new Genesis consensus mode, as well as adjustments to the latest changes in the UTxO-HD node.

Additionally, we built several small quality-of-life improvements for the workbench, as well as investigated and fixed an inconsistent metric (Node Issue #6113).

Infrastructure

The recent maintenance work also extended to the infrastructure: We've removed the dependency on deprecated environment definitions in iohk-nix by porting the relevant configurations over to the workbench. This facilitates a thorough cleanup of iohk-nix by the SRE team.

As the Haskell package defining benchmarking profiles has been merged, and all code replaced by it successfully removed, we're now working very hard on simplifying the interaction between the workbench and nix. This mostly covers removing redundancies that have lost their motivation, applying to both how workbench calls itself recursively multiple times, as well as how (and how many) corresponding nix store paths are created when evaluating derivations. This will both enhance maintainability, and result in much lighter workbench builds locally - but especially on CI runners.

Tracing

Work on the self-contained C library implementing trace forwarding is ongoing. As forwarding is defined in terms of an OuroborosApplication, it's non-trivial to re-implement the feautures of the latter in C as well - such as handshake, version negotiation, and multiplexing. However, for the intended purpose of said library, it is unavoidable.

We've also started working on a new release of cardano-tracer, the trace / metrics consuming service in the new tracing system. This release is geared towards feature or change requests we've received from the community and found very valuable feedback. Having a seperate service to process all trace output enables us to react much quicker to this feedback, and decouple delivery from the Node's release cycle.

Last not least, we're doing an experimental run on creating a build of Node with the legacy tracing system removed. As the system is deeply woven into the code base, and some of the new system's components keep compatibility with the old one, untangling and removing these dependencies is a large endeavour. This build serves as a prototype to identify potential blockers, or decisions to be made, and eventually as a blueprint for removing the legacy system in some future Node release.

· One min read
Damian Nadales

High level summary

  • Added a document that discuses ticking and how its used within the Consensus layer (#1385). The rendered version of this document can be accessed in our documentation page.
  • The benchmarks for the UTXO-HD version of Node with the in-memory backend confirmed that its resource usage is on par-with the baseline version of the Node. There is a slight decrease in CPU usage (-9%), and a slight increase in memory consumption (+3%).
  • Fixed the mempool snapshotting regression in the UTXO-HD branch (from +185% to -21%) (#1382).
  • Added a Consensus section to the Cardano Blueprints (#7).
  • Held the technical-working group meeting. The recording can be accessed using this link. In particular, the importance of the KES agent and its roadmap were discussed during this meeting.

· One min read
Noon van der Silk

High-level summary

The team is very excited to have the Hydra explorer up-and-running again and now observing over 1,000 heads across all networks and versions! Memory improvements and network resiliance continues to be our focus.

What did the team achieve?

  • Fixed the hydra-explorer to track multiple vesions of Hydra #1282
  • Made progress on the etcd-based network stack #1720
  • Fixed bug around malformed party information crashing a Head #1856
  • Progress on reduced memory footprint for running a Hydra Node #1618

What's next?

  • Continue to work on memory usage enhancements #1618
  • Continue working on new networking stack #1720
  • Start work on new approach to "Getting suck" problems; resetting to a previous snapshot #1858

· 2 min read
Jean-Philippe Raynaud

High level overview

This week, the Mithril team released the new distribution 2506.0, which fixes a certificate chain security issue discussed in this developer blog post

The team continued implementing incremental certification of the Cardano database, completed the client library, client CLI, and monitoring, fixed bugs, and worked on unstable features. Additionally, they worked on decommissioning the testing-sanchonet Mithril network and ending support for macOS x64 pre-built binaries in the CI.

Finally, the team fixed all remaining flakiness in end-to-end tests in the CI and worked on cleaning up legacy code from the 'Thales' era.

Low level overview

  • Released the new distribution 2506.0
  • Published the security advisory Mithril certificate chain could be manipulated by an adversarial signer #GHSA-724h-fpm5-4qvr
  • Published a dev blog post about the Mithril certificate chain security advisory
  • Published a dev blog post about the Distribution 2506 availability
  • Published a dev blog post about the Decommission of the testing‑sanchonet network
  • Published a dev blog post about the End of support for macOS x64 pre-built binaries
  • Completed the issue Release 2506 distribution #2207
  • Completed the issue Implement Incremental Cardano DB in client library #2214
  • Completed the issue Implement Incremental Cardano DB in client CLI #2246
  • Completed the issue Implement monitoring for Incremental Cardano DB #2249
  • Completed the issue Flakiness in e2e tests in CI #2222
  • Completed the issue testing-sanchonet network decommission #2296
  • Completed the issue Upgrade the deprecated ubuntu-20 builders in CI #2216
  • Completed the issue End of support for MacOS x64 builds in the CI #2250
  • Completed the issue Digests file for Incremental Cardano DB is not updated on the cloud location #2306
  • Completed the issue Split mithril-common crate - Phase 1 #2294
  • Worked on the issue Hydra CI fails with OpenSSL error on Linux x86_64 runners #2295
  • Worked on the issue Enhance artifact structure for Incremental Cardano DB #2291
  • Worked on the issue Support evolving cloud artifact locations type to avoid client breaking change #2293
  • Worked on the issue Cleanup legacy code following Pythagoras era activation #2316

· 2 min read
Marcin Szamotulski

Overview of sprint 80 & sprint 81

Current workstream

We decided to hold some PRs in favour of some others to simplify the merging process. Here's a dependency graph for PRs on which we're working on. The Extensible Ouroboros Network Diffusion Stack PR was the largest in our queue.

Fixes which made into the on-going cardano-node-10.2.1

Previously, we introduced a new IOError handling policy due to a discussion with an SPO to make some scenarios easier to debug. After testing it (the changes never made it into a release), it turned out this could lead to attacks on the system. Thus, we advocate for better monitoring of nodes (e.g. if resources like file descriptors memory are available, the node is making progress) rather than rely on cardano-node to be up and running.

New mux strategy for starting mini-protocols

Karl Knutsson (CF) implemented a new strategy for starting mini-protocols, StartOnDemandAny. A mini-protocol which is using this strategy will be started as soon as any StartOnDemand (or StartOnDemandAny) mini-protocol receives input from the network. We will use this starting strategy for the keep-alive mini-protocol.

Local-TX-Monitor protocol changes

A new query was added, which allows the retrieval of all measures/dimensions of the mempool capacity, e.g. byte-size capacity, ledger's execution units for both memory and execution steps, and reference scripts size. See ouroboros-network#4918.

Network Specification Updates

We made language improvements in the network specification, see ouroboros-network#5044; and some smaller changes/fixes ouroboros-network#5053.

Other minor changes