Dolos

Dolos is a new type of Cardano node, fine-tuned to solve a very narrow scope: keeping an updated copy of the ledger and replying to queries from trusted clients, while requiring a small fraction of the resources

Motivation

Cardano nodes can assume one of two roles:

  • block producer: in charge of minting blocks
  • relay node: in charge relaying blocks from / to peers.

Each of these roles has concrete responsibilities and runtime requirements. Criteria such as network topology, resource allocation, backup procedures, etc vary by role.

We argue that there’s a 3rd role that should be treated independently with the goal of optimizing its workload: nodes that are used with the sole purpose of resolving local state queries or serving as data source for downstream tools that require ledger data.

There are many potential optimizations for nodes performing this type of workload that are not currently possible with the Cardano node:

  • drastically limiting the amount of memory required to execute the node
  • switching to storage solutions with different trade-offs (eg: S3, NFS, etc)
  • providing alternative wire protocols more friendly for data queries (eg: REST, gRPC)
  • providing an auth layer in front of the API endpoints

The goal of this project is to provide a very limited and focused version of the Cardano node that can be used by DevOps as a cost-effective, performant option to deploy data nodes side-by-side with the producer / relay nodes.

This new role would be useful in the following scenarios:

  • As data source for well-known tools such as DB-sync, Ogmios, CARP, Oura, etc.
  • As a fast, low resource node for syncing other producer / relay nodes.
  • As a ledger data source that scales dynamically according to query load.
  • As a node that leverages network / cloud storage technology instead of mounted drives.
  • As a node that scales horizontally, allowing high-availability topologies.
  • As a low resource local node for resolving local state queries.

Detailed design

Data nodes will share some of the features with the mainstream Cardano node:

  • Node-to-Node and Node-to-Client Chain-Sync mini-protocol
  • Node-to-Node Block-Fetch mini-protocol
  • Node-to-Client Local-State-Query mini-protocol

This new type of node will also provide features not currently available in the mainstream Cardano node:

  • HTTP/JSON endpoint for common local state queries
  • gRPC endpoint for local state queries and chain-sync procedure
  • Different storage options including NFS, S3 & GCP Buckets
  • Low memory consumption (allowed by the trade-offs in scope)

Drawbacks

  • Although the scope is very narrow compared to a real, full-blown node, this tool has a large LoE.
  • There's overlap with some TxPipe tools such as Oura and Scrolls. The mitigation plan is to hoist individual components into Pallas to achieve DRY.
  • Some components, such as the gRPC interface, might be useful even in environment running the full-blown Cardano node. To mitigate this we will architect the system in such a way that different entry-points (aka: binaries) can perform different roles. The gRPC bridge would be one of this.

Alternatives

  • Use the full-blown Cardano node even for the scenarios described in this RFC.
  • Split the project into sub-components that can be orchestrated to achieve the same result.

Unresolved questions

  • Performance gains and resource allocation optimizations are theoretical, these were extrapolated from our experience implementing Cardano data processing pipelines using components written in Rust. We won’t have a strict, quantifiable measurement until we develop a PoC of this project. To mitigate this issue, our development process will include performance benchmarks execution at each development milestone. Reports will be included as part of each release.
  • There’s some documentation lacking regarding local state queries wire-format which will need some reverse engineering from the mainstream Cardano node. We have experience with this approach but the level-of-effort associated with the task is hard to anticipate. To try mitigate this issue, we'll reach out to IOG for advise and documentation in case it's available.

Installation

Depending on your needs, Dolos provides different installation options:

  • Binary Release: to use one of our pre-compiled binary releases for the supported platforms.
  • From Source: to compile a binary from source code using Rust's toolchain
  • Docker: to run the tool from a pre-built docker image
  • Kubernetes: to deploy Dolos as a resource within a Kubernetes cluster

Binary Releases

Dolos can be run as a standalone executable. The Github release page includes the binaries for different OS and architectures. It's a self-contained, single-file binary that can be downloaded directly.

For simplicity, we also provide an install script that can be executed from your terminal to automate the installation process. This install script will only work for MacOS and Linux for either x86_64 and arm64 architecture. You can execute the install by running the following command from your terminal. You'll need curl and sudo access.

curl -fsSL https://github.com/txpipe/dolos/raw/main/.github/public/install.sh -o get-dolos.sh
sudo sh ./get-dolos.sh

From Source

The following instructions show how to build and install Dolos from source code.

Pre-requisites

  • Rust toolchain

Procedure

git clone git@github.com:txpipe/dolos.git
cd dolos
cargo install --all-features --path .

Docker

Dolos provides already built public Docker images through Github Packages. To execute Dolos via Docker, use the following command:

docker run ghcr.io/txpipe/dolos:latest

The result of the above command should show Dolos' command-line help message.

Entry Point

The entry-point of the image points to Dolos executable. You can pass the same command-line arguments that you would pass to the binary release running bare-metal. For example:

docker run -it ghcr.io/txpipe/dolos:latest \
    --config my-custom-config.toml

For more information on available command-line arguments, check the usage section.

Using a Configuration File

The default daemon configuration file for Dolos is located in /etc/dolos/daemon.toml. To run Dolos in daemon mode with a custom configuration file, you need to mount it in the correct location. The following example runs a docker container in background using a configuration file named daemon.toml located in the current folder:

docker run -d -v $(pwd)/daemon.toml:/etc/dolos/daemon.toml \
    ghcr.io/txpipe/dolos:latest daemon

Versioned Images

Images are also tagged with the corresponding version number. It is highly recommended to use a fixed image version in production environments to avoid the effects of new features being included in each release (please remember dolos hasn't reached v1 stability guarantees).

To use a versioned image, replace the latest tag by the desired version with the v prefix. For example, to use version 0.6.0, use the following image:

ghcr.io/txpipe/dolos:v0.6.0

Multiple Architectures

Dolos docker image is multi-arch, meaning that it can be used from different CPU architectures. We currently support amd64 (aka x86_64) and arm64.

The Docker daemon will detect your architecture and use the correct manifest to run the image. The usage procedures are the same regardless of the architecture.

Kubernetes

Dolos can be implemented as a standalone Kubernetes StatefulSet resource.

Please note that the amount of replicas is set to 1. Dolos doesn't have any kind of "coordination" between instances. Adding more than one replica will just create extra pipelines duplicating the same work.

apiVersion: v1
kind: ConfigMap
metadata:
  name: dolos
data:
  daemon.toml: |-
    [upstream]
    # REDACTED: here goes your `upstream` configuration options

    [rolldb]
    # REDACTED: here goes your `rolldb` configuration options
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: dolos
spec:
  template:
    spec:
      containers:
        - name: main
          image: ghcr.io/txpipe/dolos:latest

          # we mount the same volume that the main container uses as the source
          # for the Cardano node unix socket.
          volumeMounts:
            - mountPath: /var/dolos/db
              name: db
            - mountPath: /etc/dolos
              name: config
          resources:
            requests:
              memory: 1Gi
              cpu: 1
            limits:
              memory: 1Gi
      volumes:
        # an empty-dir to store your data. In a real scenario, this should be a PVC
        - name: db
          emptyDir: {}

        # a config map resource with Dolos' config, particular for your requirements
        - name: config
          configMap:
            name: config

Usage

This section provides information on how to configure Dolos.

Upstream

[upstream]
peer_address = "preview-node.world.dev.cardano.org:30002"
network_magic = 2

RollDB

[rolldb]
path = "./data"
k_param = 1000

Serve

[serve.grpc]
listen_address = "[::]:50051"

Byron

[byron]
path = "./byron.json"

Logging

[logging]
max_level = "debug"

Example Configuration

Preview Network

[upstream]
peer_address = "preview-node.world.dev.cardano.org:30002"
network_magic = 2

[rolldb]
path = "./data"
k_param = 1000

[serve.grpc]
listen_address = "[::]:50051"

[byron]
path = "./byron.json"

[logging]
max_level = "debug"

Usage

This section provides information on how to use Dolos.

  • There are 2 ways to start the server that provides access to the endpoints: the serve command and the daemon command

Sync

serve mode

The serve command starts Dolos just with the purpose of exposing the client endpoint, no other functions are executed

To start Dolos in serve mode run the following command from the terminal:

dolos serve

daemon mode

The daemon command starts Dolos with all of its main functions enabled (syncing from upstream, updating the ledger, etc) which includes the client endpoint server

To start Dolos in daemon mode run the following command from the terminal:

dolos daemon

eval command

The eval is an utility for evaluating transactions. It takes tx data from an external source and uses the current ledger state to evaluate phase-1 validation rules.

Usage

To execute the evaluation, run the following command from your terminal:

dolos eval --file <FILE> --era <ERA> --magic <MAGIC> --slot <SLOT>

The args should be interpreted as:

  • --file <FILE>: the path to the file containing the tx data as hex-encoded cbor.
  • --era <ERA>: the id of the era that should be used to interpret the transaction data.
  • --magic <MAGIC>: the protocol magic of the network.
  • --slot <SLOT>: the slot that should be used for retrieving protocol parameters.

API

gRPC

Introduction

  • Dolos exposes a gRPC endpoint allowing clients to query data
  • The endpoint adheres to the UTxO RPC interface definition found in https://utxorpc.org
  • The current implemented module is the Sync module that allows clients to sync with the state of the chain stored by Dolos
  • Dolos endpoint also supports gRPC-web, a variant of gRPC that can be used directly from browsers

Connecting to the server

  • Once started, the server exposes TCP port
  • The default port number is 50051, but can be changed via configuration
  • This port accepts http/2 connections following the standard gRPC mechanism
  • The port also accepts http/1.1 connections following the gRPC-web protocol
  • Developers can make use of UTxO-RPC SDK libraries to interact with the endpoint programmatically

Authentication Mechanism

  • Dolos has a built-in mechanism for authenticating clients using TLS
  • By specifying a specific CA authority, Dolos can allows clients that provide a matching certificate
  • The CA authority is specified by pointing to the corresponding .pem file through configuration

Ouroboros

Benchmarks

Long-running operation - June test

A "long-running" test refers to a type of test that is designed to evaluate the system's behavior under sustained use over a long period of time. These tests can be used to identify problems that might not be apparent in short-term testing scenarios.

Among other things, long-running tests are often used to identify memory leaks, resource leaks, or degradation in system performance over time. If a system runs perfectly for an hour but starts having issues after several hours or days, a long-running test would help identify such problems.

In particular, we want to measure CPU and memory usages of Dolos compared to the Haskell node. The main goal of Dolos is to provide a lightweight alternative (with substantially reduced features) for data access use-cases. To perform the comparison, both implementations were hosted under the equivalent conditions:

  • same hardware
  • both fully-synced to the Preview network
  • similar client request profile (1 chain-sync consumer)

CPU Usage

In this analysis we compare CPU usage. It is expressed as shares of a vCPU (~core). 1 share represents 1/1000 of a vCPU. Each bucket represent the average of shares utilized by each process in a 30-minute period. The information was gathered after continuous operations throughout a 2-day period.

TimeDolosHaskell
2023-06-19 08:30:002.11222
2023-06-19 09:00:001.87222
2023-06-19 09:30:002.00231
2023-06-19 10:00:002.01243
2023-06-19 10:30:001.98240
2023-06-19 11:00:002.48241
2023-06-19 11:30:002.16226
2023-06-19 12:00:002.23240
2023-06-19 12:30:002.12241
2023-06-19 13:00:002.42236
2023-06-19 13:30:002.11232
2023-06-19 14:00:002.00231
2023-06-19 14:30:002.06278
2023-06-19 15:00:002.38248
2023-06-19 15:30:001.97224
2023-06-19 16:00:002.00161
2023-06-19 16:30:002.25236
2023-06-19 17:00:001.90234
2023-06-19 17:30:001.98236
2023-06-19 18:00:001.92227
2023-06-19 18:30:002.18232
2023-06-19 19:00:002.06231
2023-06-19 19:30:002.25242
2023-06-19 20:00:002.09239
2023-06-19 20:30:002.25250
2023-06-19 21:00:002.05230
2023-06-19 21:30:001.96229
2023-06-19 22:00:002.06226
2023-06-19 22:30:002.22237
2023-06-19 23:00:002.34234
2023-06-19 23:30:002.36238
2023-06-20 00:00:002.16238
2023-06-20 00:30:002.46236
2023-06-20 01:00:002.26241
2023-06-20 01:30:002.21242
2023-06-20 02:00:001.89226
2023-06-20 02:30:002.53252
2023-06-20 03:00:001.93226
2023-06-20 03:30:002.06232
2023-06-20 04:00:002.37240
2023-06-20 04:30:002.65250
2023-06-20 05:00:002.12233
2023-06-20 05:30:002.41329
2023-06-20 06:00:002.36231
2023-06-20 06:30:002.80273
2023-06-20 07:00:002.22226
2023-06-20 07:30:002.04217
2023-06-20 08:00:002.50238
2023-06-20 08:30:002.24228
2023-06-20 09:00:002.51230
2023-06-20 09:30:002.31235
2023-06-20 10:00:002.15225
2023-06-20 10:30:002.36231
2023-06-20 11:00:002.91232
2023-06-20 11:30:002.83239
2023-06-20 12:00:002.64238
2023-06-20 12:30:002.76231
2023-06-20 13:00:002.88256
2023-06-20 13:30:002.79233
2023-06-20 14:00:002.35222
2023-06-20 14:30:002.12223
2023-06-20 15:00:002.69230
2023-06-20 15:30:002.30228
2023-06-20 16:00:002.37232
2023-06-20 16:30:002.45241
2023-06-20 17:00:002.63230
2023-06-20 17:30:003.08239
2023-06-20 18:00:002.72225
2023-06-20 18:30:002.40222
2023-06-20 19:00:002.61229
2023-06-20 19:30:002.60231
2023-06-20 20:00:002.43235
2023-06-20 20:30:002.62229
2023-06-20 21:00:002.19220
2023-06-20 21:30:002.62232
2023-06-20 22:00:002.76232
2023-06-20 22:30:002.01244
2023-06-20 23:00:002.30231
2023-06-20 23:30:002.22252
2023-06-21 00:00:002.79234
2023-06-21 00:30:002.33233
2023-06-21 01:00:002.31229
2023-06-21 01:30:002.56222
2023-06-21 02:00:002.71237
2023-06-21 02:30:002.51248
2023-06-21 03:00:002.54236
2023-06-21 03:30:002.25233
2023-06-21 04:00:002.89242
2023-06-21 04:30:002.35229
2023-06-21 05:00:002.65236
2023-06-21 05:30:002.18222
2023-06-21 06:00:002.64227
2023-06-21 06:30:003.03239
2023-06-21 07:00:002.26229
2023-06-21 07:30:003.81268
2023-06-21 08:00:002.90262
2023-06-21 08:30:002.85247

Memory Usage

In this analysis we compare memory usage. It is expressed as total amount of data (KB, MB, GB). Each bucket represent the average of memory utilized by each process in a 30-minute period. The information was gathered after continuous operations throughout a 2-day period.

TimeDolosHaskell
2023-06-19 08:30:0020.3 MB2.18 GB
2023-06-19 09:00:0020.4 MB2.18 GB
2023-06-19 09:30:0020.7 MB2.18 GB
2023-06-19 10:00:0020.9 MB2.18 GB
2023-06-19 10:30:0021.1 MB2.18 GB
2023-06-19 11:00:0021.1 MB2.18 GB
2023-06-19 11:30:0021.2 MB2.18 GB
2023-06-19 12:00:0021.4 MB2.18 GB
2023-06-19 12:30:0021.7 MB2.18 GB
2023-06-19 13:00:0021.9 MB2.18 GB
2023-06-19 13:30:0021.9 MB2.18 GB
2023-06-19 14:00:0022.2 MB2.18 GB
2023-06-19 14:30:0022.3 MB2.18 GB
2023-06-19 15:00:0022.5 MB2.18 GB
2023-06-19 15:30:0022.8 MB2.18 GB
2023-06-19 16:00:0023.0 MB2.18 GB
2023-06-19 16:30:0023.5 MB2.18 GB
2023-06-19 17:00:0024.1 MB2.18 GB
2023-06-19 17:30:0024.7 MB2.18 GB
2023-06-19 18:00:0025.3 MB2.18 GB
2023-06-19 18:30:0026.0 MB2.18 GB
2023-06-19 19:00:0026.6 MB2.18 GB
2023-06-19 19:30:0027.3 MB2.18 GB
2023-06-19 20:00:0027.8 MB2.18 GB
2023-06-19 20:30:0028.5 MB2.18 GB
2023-06-19 21:00:0028.9 MB2.18 GB
2023-06-19 21:30:0029.5 MB2.18 GB
2023-06-19 22:00:0030.1 MB2.18 GB
2023-06-19 22:30:0030.6 MB2.18 GB
2023-06-19 23:00:0031.2 MB2.18 GB
2023-06-19 23:30:0032.0 MB2.18 GB
2023-06-20 00:00:0032.5 MB2.18 GB
2023-06-20 00:30:0033.2 MB2.18 GB
2023-06-20 01:00:0033.8 MB2.18 GB
2023-06-20 01:30:0034.5 MB2.18 GB
2023-06-20 02:00:0034.7 MB2.18 GB
2023-06-20 02:30:0034.8 MB2.18 GB
2023-06-20 03:00:0035.1 MB2.18 GB
2023-06-20 03:30:0035.1 MB2.18 GB
2023-06-20 04:00:0035.3 MB2.18 GB
2023-06-20 04:30:0035.1 MB2.18 GB
2023-06-20 05:00:0035.5 MB2.18 GB
2023-06-20 05:30:0035.8 MB2.18 GB
2023-06-20 06:00:0036.0 MB2.18 GB
2023-06-20 06:30:0036.1 MB2.18 GB
2023-06-20 07:00:0036.5 MB2.18 GB
2023-06-20 07:30:0036.6 MB2.18 GB
2023-06-20 08:00:0036.9 MB2.18 GB
2023-06-20 08:30:0037.1 MB2.18 GB
2023-06-20 09:00:0037.0 MB2.18 GB
2023-06-20 09:30:0037.2 MB2.18 GB
2023-06-20 10:00:0037.5 MB2.18 GB
2023-06-20 10:30:0037.5 MB2.18 GB
2023-06-20 11:00:0037.6 MB2.18 GB
2023-06-20 11:30:0038.1 MB2.18 GB
2023-06-20 12:00:0038.1 MB2.18 GB
2023-06-20 12:30:0038.2 MB2.18 GB
2023-06-20 13:00:0038.5 MB2.18 GB
2023-06-20 13:30:0038.5 MB2.18 GB
2023-06-20 14:00:0038.8 MB2.18 GB
2023-06-20 14:30:0039.0 MB2.18 GB
2023-06-20 15:00:0039.2 MB2.18 GB
2023-06-20 15:30:0039.2 MB2.18 GB
2023-06-20 16:00:0039.3 MB2.18 GB
2023-06-20 16:30:0039.6 MB2.18 GB
2023-06-20 17:00:0039.7 MB2.18 GB
2023-06-20 17:30:0039.7 MB2.18 GB
2023-06-20 18:00:0039.9 MB2.18 GB
2023-06-20 18:30:0040.2 MB2.18 GB
2023-06-20 19:00:0040.1 MB2.18 GB
2023-06-20 19:30:0040.3 MB2.18 GB
2023-06-20 20:00:0040.5 MB2.18 GB
2023-06-20 20:30:0040.7 MB2.18 GB
2023-06-20 21:00:0040.7 MB2.18 GB
2023-06-20 21:30:0040.8 MB2.18 GB
2023-06-20 22:00:0040.9 MB2.18 GB
2023-06-20 22:30:0041.1 MB2.18 GB
2023-06-20 23:00:0041.1 MB2.18 GB
2023-06-20 23:30:0041.2 MB2.18 GB
2023-06-21 00:00:0041.4 MB2.18 GB
2023-06-21 00:30:0041.5 MB2.18 GB
2023-06-21 01:00:0041.8 MB2.18 GB
2023-06-21 01:30:0041.8 MB2.18 GB
2023-06-21 02:00:0041.9 MB2.18 GB
2023-06-21 02:30:0042.3 MB2.18 GB
2023-06-21 03:00:0042.2 MB2.18 GB
2023-06-21 03:30:0042.5 MB2.18 GB
2023-06-21 04:00:0042.7 MB2.18 GB
2023-06-21 04:30:0042.2 MB2.18 GB
2023-06-21 05:00:0042.7 MB2.18 GB
2023-06-21 05:30:0043.1 MB2.18 GB
2023-06-21 06:00:0043.4 MB2.18 GB
2023-06-21 06:30:0043.5 MB2.18 GB
2023-06-21 07:00:0043.7 MB2.18 GB
2023-06-21 07:30:0016.3 MB2.18 GB
2023-06-21 08:00:0016.7 MB2.18 GB
2023-06-21 08:30:0017.1 MB2.18 GB

Long-running operation - October test

A "long-running" test refers to a type of test that is designed to evaluate the system's behavior under sustained use over a long period of time. These tests can be used to identify problems that might not be apparent in short-term testing scenarios.

Among other things, long-running tests are often used to identify memory leaks, resource leaks, or degradation in system performance over time. If a system runs perfectly for an hour but starts having issues after several hours or days, a long-running test would help identify such problems.

In particular, we want to measure CPU and memory usages of Dolos compared to the Haskell node. The main goal of Dolos is to provide a lightweight alternative (with substantially reduced features) for data access use-cases. To perform the comparison, both implementations were hosted under the equivalent conditions:

  • same hardware
  • both fully-synced to the Preview network
  • similar client request profile (1 chain-sync consumer)

CPU Usage

In this analysis we compare CPU usage. It is expressed as shares of a vCPU (~core). 1 share represents 1/1000 of a vCPU. Each bucket represent the average of shares utilized by each process in a 15-minute period. The information was gathered after continuous operations throughout a 24 hr period.

TimeDolosHaskell
2023-10-19 14:45:0026.9302
2023-10-19 15:00:0021.8287
2023-10-19 15:15:0027.8309
2023-10-19 15:30:0028.2303
2023-10-19 15:45:0029.0301
2023-10-19 16:00:0029.3221
2023-10-19 16:15:0030.5327
2023-10-19 16:30:0026.5302
2023-10-19 16:45:0026.9300
2023-10-19 17:00:0028.5307
2023-10-19 17:15:0026.1300
2023-10-19 17:30:0030.8311
2023-10-19 17:45:0022.9285
2023-10-19 18:00:0024.0290
2023-10-19 18:15:0026.5303
2023-10-19 18:30:0022.7287
2023-10-19 18:45:0022.7293
2023-10-19 19:00:0025.7297
2023-10-19 19:15:0021.0291
2023-10-19 19:30:0023.0301
2023-10-19 19:45:0022.5297
2023-10-19 20:00:0023.4307
2023-10-19 20:15:0025.7302
2023-10-19 20:30:0025.0306
2023-10-19 20:45:0025.6302
2023-10-19 21:00:0025.4297
2023-10-19 21:15:0023.5300
2023-10-19 21:30:0025.4301
2023-10-19 21:45:0022.2303
2023-10-19 22:00:0023.9298
2023-10-19 22:15:0026.7296
2023-10-19 22:30:0022.7290
2023-10-19 22:45:0025.5300
2023-10-19 23:00:0022.6300
2023-10-19 23:15:0022.8290
2023-10-19 23:30:0025.4294
2023-10-19 23:45:0023.6301
2023-10-20 00:00:0024.0295
2023-10-20 00:15:0021.9301
2023-10-20 00:30:0022.7290
2023-10-20 00:45:0023.9302
2023-10-20 01:00:0023.7303
2023-10-20 01:15:0023.4288
2023-10-20 01:30:0023.7297
2023-10-20 01:45:0023.5296
2023-10-20 02:00:0027.2303
2023-10-20 02:15:0022.2290
2023-10-20 02:30:0023.9291
2023-10-20 02:45:0023.2289
2023-10-20 03:00:0025.8307
2023-10-20 03:15:0026.3290
2023-10-20 03:30:0025.3300
2023-10-20 03:45:0022.0290
2023-10-20 04:00:0026.6299
2023-10-20 04:15:0026.4301
2023-10-20 04:30:0027.0293
2023-10-20 04:45:0026.8302
2023-10-20 05:00:0031.1309
2023-10-20 05:15:0024.7290
2023-10-20 05:30:0028.1304
2023-10-20 05:45:0024.1282
2023-10-20 06:00:0029.3308
2023-10-20 06:15:0025.3298
2023-10-20 06:30:0024.3287
2023-10-20 06:45:0032.2317
2023-10-20 07:00:0026.8288
2023-10-20 07:15:0027.0295
2023-10-20 07:30:0030.3306
2023-10-20 07:45:0028.6300
2023-10-20 08:00:0032.2316
2023-10-20 08:15:0032.4301
2023-10-20 08:30:0031.0302
2023-10-20 08:45:0041.5310
2023-10-20 09:00:0022.9285
2023-10-20 09:15:0031.8302
2023-10-20 09:30:0028.5285
2023-10-20 09:45:0031.0299
2023-10-20 10:00:0026.1285
2023-10-20 10:15:0032.2309
2023-10-20 10:30:0026.8296
2023-10-20 10:45:0025.3285
2023-10-20 11:00:0033.7306
2023-10-20 11:15:0031.0303
2023-10-20 11:30:0030.9293
2023-10-20 11:45:0030.1308
2023-10-20 12:00:0032.8299
2023-10-20 12:15:0023.9293
2023-10-20 12:30:0029.3302
2023-10-20 12:45:0032.7299
2023-10-20 13:00:0028.7304
2023-10-20 13:15:0032.9307
2023-10-20 13:30:0037.5310
2023-10-20 13:45:0032.0309
2023-10-20 14:00:0032.2298
2023-10-20 14:15:0033.1309
2023-10-20 14:30:0034.2313
2023-10-20 14:45:0035.7308

Memory Usage

In this analysis we compare memory usage. It is expressed as total amount of data (KB, MB, GB). Each bucket represent the average of memory utilized by each process in a 15-minute period. The information was gathered after continuous operations throughout a 24 hr period.

TimeDolosHaskell
2023-10-19 14:45:0062.3 MB2.44 GB
2023-10-19 15:00:0063.2 MB2.44 GB
2023-10-19 15:15:0061.6 MB2.44 GB
2023-10-19 15:30:0062.5 MB2.44 GB
2023-10-19 15:45:0063.3 MB2.44 GB
2023-10-19 16:00:0063.0 MB2.44 GB
2023-10-19 16:15:0063.9 MB2.44 GB
2023-10-19 16:30:0064.4 MB2.44 GB
2023-10-19 16:45:0064.8 MB2.44 GB
2023-10-19 17:00:0064.9 MB2.44 GB
2023-10-19 17:15:0065.2 MB2.44 GB
2023-10-19 17:30:0065.8 MB2.44 GB
2023-10-19 17:45:0066.0 MB2.44 GB
2023-10-19 18:00:0066.1 MB2.44 GB
2023-10-19 18:15:0054.7 MB2.44 GB
2023-10-19 18:30:0055.4 MB2.44 GB
2023-10-19 18:45:0055.9 MB2.44 GB
2023-10-19 19:00:0057.0 MB2.44 GB
2023-10-19 19:15:0057.3 MB2.44 GB
2023-10-19 19:30:0057.6 MB2.44 GB
2023-10-19 19:45:0057.9 MB2.44 GB
2023-10-19 20:00:0058.4 MB2.44 GB
2023-10-19 20:15:0058.8 MB2.44 GB
2023-10-19 20:30:0059.0 MB2.44 GB
2023-10-19 20:45:0059.4 MB2.44 GB
2023-10-19 21:00:0059.6 MB2.44 GB
2023-10-19 21:15:0060.0 MB2.44 GB
2023-10-19 21:30:0060.2 MB2.44 GB
2023-10-19 21:45:0060.5 MB2.44 GB
2023-10-19 22:00:0061.0 MB2.44 GB
2023-10-19 22:15:0061.1 MB2.44 GB
2023-10-19 22:30:0061.5 MB2.44 GB
2023-10-19 22:45:0062.0 MB2.44 GB
2023-10-19 23:00:0062.3 MB2.44 GB
2023-10-19 23:15:0062.6 MB2.44 GB
2023-10-19 23:30:0062.8 MB2.44 GB
2023-10-19 23:45:0063.2 MB2.44 GB
2023-10-20 00:00:0063.4 MB2.44 GB
2023-10-20 00:15:0063.8 MB2.44 GB
2023-10-20 00:30:0064.3 MB2.44 GB
2023-10-20 00:45:0064.6 MB2.44 GB
2023-10-20 01:00:0064.9 MB2.44 GB
2023-10-20 01:15:0065.2 MB2.44 GB
2023-10-20 01:30:0065.4 MB2.44 GB
2023-10-20 01:45:0066.0 MB2.44 GB
2023-10-20 02:00:0066.4 MB2.44 GB
2023-10-20 02:15:0066.7 MB2.44 GB
2023-10-20 02:30:0066.9 MB2.44 GB
2023-10-20 02:45:0067.3 MB2.44 GB
2023-10-20 03:00:0068.0 MB2.44 GB
2023-10-20 03:15:0068.5 MB2.44 GB
2023-10-20 03:30:0069.0 MB2.44 GB
2023-10-20 03:45:0069.2 MB2.44 GB
2023-10-20 04:00:0069.4 MB2.44 GB
2023-10-20 04:15:0069.6 MB2.44 GB
2023-10-20 04:30:0070.1 MB2.44 GB
2023-10-20 04:45:0070.5 MB2.44 GB
2023-10-20 05:00:0070.8 MB2.44 GB
2023-10-20 05:15:0071.2 MB2.44 GB
2023-10-20 05:30:0071.5 MB2.44 GB
2023-10-20 05:45:0071.9 MB2.44 GB
2023-10-20 06:00:0072.2 MB2.44 GB
2023-10-20 06:15:0072.6 MB2.44 GB
2023-10-20 06:30:0072.7 MB2.44 GB
2023-10-20 06:45:0073.0 MB2.44 GB
2023-10-20 07:00:0073.3 MB2.44 GB
2023-10-20 07:15:0073.6 MB2.44 GB
2023-10-20 07:30:0074.0 MB2.44 GB
2023-10-20 07:45:0074.4 MB2.44 GB
2023-10-20 08:00:0074.9 MB2.44 GB
2023-10-20 08:15:0075.4 MB2.44 GB
2023-10-20 08:30:0075.9 MB2.44 GB
2023-10-20 08:45:0079.5 MB2.44 GB
2023-10-20 09:00:0079.6 MB2.44 GB
2023-10-20 09:15:0079.9 MB2.44 GB
2023-10-20 09:30:0080.3 MB2.44 GB
2023-10-20 09:45:0080.9 MB2.44 GB
2023-10-20 10:00:0081.3 MB2.44 GB
2023-10-20 10:15:0082.0 MB2.44 GB
2023-10-20 10:30:0082.4 MB2.44 GB
2023-10-20 10:45:0082.8 MB2.44 GB
2023-10-20 11:00:0083.3 MB2.44 GB
2023-10-20 11:15:0083.4 MB2.44 GB
2023-10-20 11:30:0083.9 MB2.44 GB
2023-10-20 11:45:0084.2 MB2.44 GB
2023-10-20 12:00:0084.7 MB2.44 GB
2023-10-20 12:15:0084.8 MB2.44 GB
2023-10-20 12:30:0085.5 MB2.44 GB
2023-10-20 12:45:0085.8 MB2.44 GB
2023-10-20 13:00:0086.1 MB2.44 GB
2023-10-20 13:15:0086.9 MB2.44 GB
2023-10-20 13:30:0088.1 MB2.44 GB
2023-10-20 13:45:0088.4 MB2.44 GB
2023-10-20 14:00:0088.6 MB2.44 GB
2023-10-20 14:15:0089.0 MB2.44 GB
2023-10-20 14:30:0089.2 MB2.44 GB
2023-10-20 14:45:0089.4 MB2.44 GB

Byron Phase-1 Sync - Resource Footprint Test

A "resource footprint" test refers to a type of test designed to evaluate the amount of resources, usually memory and CPU, that a software component requires to perform a particular action.

Among other things, these tests are often used to ensure that theoretical estimations of resource consumption match reality. These test are also useful as reference profiles that allow system operators to anticipate resource requirements.

The goal of this particular test instance is to understand the impact of Byron Phase-1 validations on Dolos resource footprint.

The data presented was gathered during a chain sync process against a single upstream Haskell node while executing Byron Phase-1 validations. The Dolos version used for this test matches the code in branch feat/byron-phase-1-validations

CPU Usage

In this analysis we track CPU usage. It is expressed as shares of a vCPU (~core). 1 share represents 1/1000 of a vCPU. Each bucket represent the average of shares utilized by each process in a 15-minute period. The information was gathered after continuous operations throughout a 1-day period.

TimeCPU
2023-11-11 12:00:0028501
2023-11-11 12:15:0020686
2023-11-11 12:30:0026710
2023-11-11 12:45:0031660
2023-11-11 13:00:0036823
2023-11-11 13:15:0039627
2023-11-11 13:30:0047347
2023-11-11 13:45:0045836
2023-11-11 14:00:0033164
2023-11-11 14:15:0038352
2023-11-11 14:30:0041195
2023-11-11 14:45:0048371
2023-11-11 15:00:0049461
2023-11-11 15:15:0049989
2023-11-11 15:30:0038401
2023-11-11 15:45:008230
2023-11-11 16:00:0013949
2023-11-11 16:15:0019537
2023-11-11 16:30:0024954
2023-11-11 16:45:0028684
2023-11-11 17:00:0035054
2023-11-11 17:15:0024448
2023-11-11 17:30:0023852
2023-11-11 17:45:0029125
2023-11-11 18:00:0032382
2023-11-11 18:15:0039469
2023-11-11 18:30:0044484
2023-11-11 18:45:0048805
2023-11-11 19:00:0040635
2023-11-11 19:15:0033528
2023-11-11 19:30:0040810
2023-11-11 19:45:0046095
2023-11-11 20:00:0049791
2023-11-11 20:15:0049991
2023-11-11 20:30:0048287
2023-11-11 20:45:0049300
2023-11-11 21:00:0015964
2023-11-11 21:15:0010406
2023-11-11 21:30:0015918
2023-11-11 21:45:0019983
2023-11-11 22:00:0026377
2023-11-11 22:15:0031566
2023-11-11 22:30:0037046
2023-11-11 22:45:0029951
2023-11-11 23:00:0022406
2023-11-11 23:15:0027450
2023-11-11 23:30:0033162
2023-11-11 23:45:0038081
2023-11-12 00:00:0040905
2023-11-12 00:15:0048397
2023-11-12 00:30:0049994
2023-11-12 00:45:0037848
2023-11-12 01:00:0038645
2023-11-12 01:15:0040736
2023-11-12 01:30:0048010
2023-11-12 01:45:0049992
2023-11-12 02:00:0049993
2023-11-12 02:15:0049997
2023-11-12 02:30:0048944
2023-11-12 02:45:0043698
2023-11-12 03:00:006808
2023-11-12 03:15:0012400
2023-11-12 03:30:0018093
2023-11-12 03:45:0021877
2023-11-12 04:00:0028027
2023-11-12 04:15:0033505
2023-11-12 04:30:0038642
2023-11-12 04:45:0026414
2023-11-12 05:00:0023685
2023-11-12 05:15:0028791
2023-11-12 05:30:0034754
2023-11-12 05:45:0040414
2023-11-12 06:00:0041367
2023-11-12 06:15:0048390
2023-11-12 06:30:0049436
2023-11-12 06:45:0038004
2023-11-12 07:00:0038935
2023-11-12 07:15:0041382
2023-11-12 07:30:0048339
2023-11-12 07:45:0049987
2023-11-12 08:00:0048812
2023-11-12 08:15:0049991
2023-11-12 08:30:0046078
2023-11-12 08:45:006153
2023-11-12 09:00:0011884
2023-11-12 09:15:0016960
2023-11-12 09:30:0022209
2023-11-12 09:45:0025535
2023-11-12 10:00:0032311
2023-11-12 10:15:0037827
2023-11-12 10:30:0026411
2023-11-12 10:45:0023260
2023-11-12 11:00:0026849
2023-11-12 11:15:0033426
2023-11-12 11:30:0038271
2023-11-12 11:45:0043852
2023-11-12 12:00:0047924

Memory Usage

In this analysis we track memory usage. It is expressed as total amount of data (KB, MB, GB). Each bucket represent the average of memory utilized by each process in a 15-minute period. The information was gathered after continuous operations throughout a 1-day period.

TimeMemory
2023-11-11 12:00:00446 MB
2023-11-11 12:15:00448 MB
2023-11-11 12:30:00452 MB
2023-11-11 12:45:00453 MB
2023-11-11 13:00:00453 MB
2023-11-11 13:15:00454 MB
2023-11-11 13:30:00433 MB
2023-11-11 13:45:00428 MB
2023-11-11 14:00:00431 MB
2023-11-11 14:15:00436 MB
2023-11-11 14:30:00442 MB
2023-11-11 14:45:00444 MB
2023-11-11 15:00:00446 MB
2023-11-11 15:15:00454 MB
2023-11-11 15:30:00460 MB
2023-11-11 15:45:00462 MB
2023-11-11 16:00:00464 MB
2023-11-11 16:15:00447 MB
2023-11-11 16:30:00452 MB
2023-11-11 16:45:00455 MB
2023-11-11 17:00:00457 MB
2023-11-11 17:15:00446 MB
2023-11-11 17:30:00447 MB
2023-11-11 17:45:00449 MB
2023-11-11 18:00:00449 MB
2023-11-11 18:15:00434 MB
2023-11-11 18:30:00434 MB
2023-11-11 18:45:00443 MB
2023-11-11 19:00:00442 MB
2023-11-11 19:15:00447 MB
2023-11-11 19:30:00453 MB
2023-11-11 19:45:00456 MB
2023-11-11 20:00:00457 MB
2023-11-11 20:15:00459 MB
2023-11-11 20:30:00460 MB
2023-11-11 20:45:00460 MB
2023-11-11 21:00:00458 MB
2023-11-11 21:15:00458 MB
2023-11-11 21:30:00460 MB
2023-11-11 21:45:00461 MB
2023-11-11 22:00:00461 MB
2023-11-11 22:15:00462 MB
2023-11-11 22:30:00431 MB
2023-11-11 22:45:00421 MB
2023-11-11 23:00:00422 MB
2023-11-11 23:15:00422 MB
2023-11-11 23:30:00423 MB
2023-11-11 23:45:00427 MB
2023-11-12 00:00:00430 MB
2023-11-12 00:15:00433 MB
2023-11-12 00:30:00442 MB
2023-11-12 00:45:00445 MB
2023-11-12 01:00:00446 MB
2023-11-12 01:15:00446 MB
2023-11-12 01:30:00448 MB
2023-11-12 01:45:00449 MB
2023-11-12 02:00:00449 MB
2023-11-12 02:15:00450 MB
2023-11-12 02:30:00450 MB
2023-11-12 02:45:00433 MB
2023-11-12 03:00:00435 MB
2023-11-12 03:15:00436 MB
2023-11-12 03:30:00436 MB
2023-11-12 03:45:00437 MB
2023-11-12 04:00:00439 MB
2023-11-12 04:15:00443 MB
2023-11-12 04:30:00454 MB
2023-11-12 04:45:00449 MB
2023-11-12 05:00:00451 MB
2023-11-12 05:15:00452 MB
2023-11-12 05:30:00453 MB
2023-11-12 05:45:00455 MB
2023-11-12 06:00:00456 MB
2023-11-12 06:15:00429 MB
2023-11-12 06:30:00437 MB
2023-11-12 06:45:00441 MB
2023-11-12 07:00:00442 MB
2023-11-12 07:15:00443 MB
2023-11-12 07:30:00444 MB
2023-11-12 07:45:00444 MB
2023-11-12 08:00:00444 MB
2023-11-12 08:15:00461 MB
2023-11-12 08:30:00458 MB
2023-11-12 08:45:00460 MB
2023-11-12 09:00:00461 MB
2023-11-12 09:15:00460 MB
2023-11-12 09:30:00461 MB
2023-11-12 09:45:00461 MB
2023-11-12 10:00:00462 MB
2023-11-12 10:15:00462 MB
2023-11-12 10:30:00448 MB
2023-11-12 10:45:00450 MB
2023-11-12 11:00:00450 MB
2023-11-12 11:15:00450 MB
2023-11-12 11:30:00450 MB
2023-11-12 11:45:00450 MB
2023-11-12 12:00:00457 MB