#profiler #tracing #benchmark #revm #rpc-server #string #altius

bin+lib altius-benchtools

A high-performance profiler for tracing RPC server execution

1 unstable release

new 0.1.0 Feb 12, 2025

#88 in Profiling

Download history 132/week @ 2025-02-11

132 downloads per month

MIT/Apache

68KB
930 lines

Altius Benchtools

This is a collection of tools for Altius benchmarking, featuring a profiler for RPC server execution tracing and a transaction_generator for Ethereum test cases.


1. Profiler

A tool for tracing and profiling RPC server execution with detailed timing and event tracking capabilities.

Features

  • Task timing with start/end markers
  • Multi-threaded profiling support
  • Event annotation with notes and descriptions
  • JSON and ZIP output formats
  • Special handling for transaction and commit events

Usage

// Start timing a task
profiler::start("task_name");

// ... your code here ...

// Add notes to the current task
profiler::note_str("task_name", "key", "value");

// ... your code here ...

// End timing a task
profiler::end("task_name");

// Export results
profiler::dump_json("output.json");
// or
profiler::dump_zip("output");

Multi-threaded Usage

The profiler supports concurrent operations across multiple threads:

// In any thread
profiler::start_multi("thread_task");

// ... your code here ...

// In any thread
profiler::note_str_multi("thread_task", "thread_info", "worker_1");

// ... your code here ...

// In any thread
profiler::end_multi("thread_task");

// ... your code here ...

// Export results
profiler::dump_json("output.json");
// or
profiler::dump_zip("output");

Output Format

The profiler generates a JSON structure containing:

  • Timing information for each task
  • Thread identification
  • Custom annotations and notes
  • Transaction and commit event details

An example of the output JSON is as follows:

{
  "details": [
    {
      "detail": {
        "hash": "0x26b7c694ff75f0b4ee85b5ca2e3cc1c332b41a64982c2b454e0493497b8e76b9",
        "type": "transaction"
      },
      "end": 212387237,
      "runtime": 31286,
      "start": 212355951,
      "status": "success",
      "tx": "125",
      "type": "transaction"
    },
    {
      "detail": {
        "hash": "0xbc3d47d6c7df3430c8c88e0e6b28204185d3a7aab0fb7f8464e2b28b0d79d1bd",
        "type": "transaction"
      },
      "end": 232170705,
      "runtime": 163541,
      "start": 232007164,
      "status": "success",
      "tx": "125",
      "type": "transaction"
    },
    {
      "detail": {
        "hash": "0x255cd19c2bad53734fc8c6df7e5b6f74a85733183b9cb9bcbf1e16de9404d87d",
        "type": "transaction"
      },
      "end": 255598060,
      "runtime": 28209,
      "start": 255569851,
      "status": "revert",
      "tx": "125",
      "type": "transaction"
    },
    { "...": "..." }
  ],
  [ "..." ]
}

2. Transaction Generator

This tool generates a JSON file containing a list of transactions and a pre-state of the blockchain.

Usage

  1. Run cargo build --release to build the project.
  2. Run ./target/release/generate --help to see the available options.

ETH-transfer Usage

After building the project, you can use the following commands to generate test cases.

  • Generate a JSON file with 100 ETH-transfer transactions in 10 groups, using the one-to-many pattern, and save it to ./test-case.json.

    ./target/release/generate pattern -y o2m -t 100 -g 10 -o ./test-case.json
    # or
    ./target/release/generate pattern -y one-to-many -t 100 -g 10 -o ./test-case.json
    
  • Generate a JSON file with 200 ETH-transfer transactions in 5 groups, using the chained pattern, and save it to ./test-case.json.

    ./target/release/generate pattern -y chained -t 200 -g 5 -o ./test-case.json
    # or
    ./target/release/generate pattern -y ring -t 200 -g 5 -o ./test-case.json
    # or
    ./target/release/generate pattern -y chain -t 200 -g 5 -o ./test-case.json
    
  • Generate a JSON file with 100 ETH-transfer transactions with 60% conflict rate, and save it to ./test-case.json.

    ./target/release/generate pattern -y m2m -t 100 -c 0.6 -o ./test-case.json
    # or
    ./target/release/generate pattern -y many-to-many -t 100 -c 0.6 -o ./test-case.json
    

ERC20-transfer Usage

Directly use the erc20 flag to generate ERC20-transfer transactions. Other options are the same as ETH-transfer.

  • Generate a JSON file with 100 ERC20-transfer transactions in 10 groups, using the one-to-many pattern, and save it to ./test-case.json.

    ./target/release/generate pattern -y o2m -t 100 -g 10 -o ./test-case.json --erc20
    # or
    ./target/release/generate pattern -y one-to-many -t 100 -g 10 -o ./test-case.json --erc20
    
  • Other options are the same as ETH-transfer.

Output Format

The output JSON file is a list of transactions and a pre-state of the blockchain.

An example of the output JSON is as follows:

{
  "just-test": {
    "_info": { "...": "..." },
    "env": { "...": "..." },
    "post": {
      "Cancun": { "...": "..." }
    },
    "pre": {
      "0xcc2564c36a3440e7d6dd4c67b50f885edbfa5141": {
        "balance": "0x056bc75e2d63100000",
        "code": "0x",
        "nonce": "0x00",
        "storage": {}
      }
    },
    "transaction": [
      {
        "data": "0x",
        "gasLimit": "0x0f4240",
        "gasPrice": "0x0a",
        "nonce": "0x00",
        "secretKey": "0xa119adadef6246ab1780711938aa3b73f86ca408fc2fbbb2fa69135e3ae65c72",
        "sender": "0xcc2564c36a3440e7d6dd4c67b50f885edbfa5141",
        "to": "0xfa3d1fa8d995c05e9fbea98b0f2242391c738625",
        "value": "0x02b5e3af16b1880000"
      },
      {
        "data": "0x",
        "gasLimit": "0x0f4240",
        "gasPrice": "0x0a",
        "nonce": "0x00",
        "secretKey": "0x5d5baf05f2df8d5974daae1ff6848fceff6f4b0b781df360b8a0d6f9b68f96c6",
        "sender": "0xfa3d1fa8d995c05e9fbea98b0f2242391c738625",
        "to": "0x3d8b1f10cda76db2f9f5132b8250786bd4fd1f7a",
        "value": "0x02b5e3a5fe63156000"
      },
      {
        "data": "0x",
        "gasLimit": "0x0f4240",
        "gasPrice": "0x0a",
        "nonce": "0x00",
        "secretKey": "0x0d87dd2aba604787e47bd5ae0233c16db952478fa08eb77d373b1fc807c0ee11",
        "sender": "0x3d8b1f10cda76db2f9f5132b8250786bd4fd1f7a",
        "to": "0xa6a410156ec7b055ac4b5f89a812944bf47ad6de",
        "value": "0x02b5e39ce614a2c000"
      }
    ]
  }
}

Dependencies

~2–19MB
~297K SLoC

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy