trinodb / benchto

Framework for running macro benchmarks in a clustered environment
Apache License 2.0
28 stars 29 forks source link

Benchto

The purpose of Benchto project is to provide easy and manageable way to define, run and analyze macro benchmarks in clustered environment. Understanding behaviour of distributed systems is hard and requires good visibility into state of the cluster and internals of tested system. This project was developed for repeatable benchmarking of Hadoop SQL engines, most importantly Trino.

Benchto consists of two main components: benchto-service and benchto-driver. To utilize all features of Benchto, it is also recommended to configure Graphite and Grafana. Image below depicts high level architecture:

Benchto high level architecture

Query profiler

It is possible to profile every query execution with:

Java Flight Recorder

To use Java Flight Recorder one should add following configuration:

benchmark:
    feature:
        profiler:
          profiled-coordinator: # pod name of coordinator
          enabled: true
          jfr:
            enabled: true
            output-path: /tmp     # path where jfr recording files will be saved
            jmx.port: ${jmx.port} # JMX port of profiled JVM

async profiler

To use async profiler one should add following configuration:

benchmark:
    feature:
        profiler:
          profiled-coordinator: # pod name of coordinator
          enabled: true
          async:
            enabled: true
            output-path: /tmp     # path where jfr recording files will be saved
            jmx.port: ${jmx.port} # JMX port of profiled JVM
            async-library-path:   # path to libasyncProfiler shared library
          events:                 # list of async events like wall, cpu, lock, alloc and so on
          - cpu

perf profiler

To use async profiler one should add following configuration:

benchmark:
    feature:
        profiler:
          profiled-coordinator: # pod name of coordinator
          enabled: true
          async:
            enabled: true
            output-path: /tmp     # path where jfr recording files will be saved
            jmx.port: ${jmx.port} # JMX port of profiled JVM
            async-library-path:   # path to libasyncProfiler shared library
          events:
          - cpu