Benchmark tool for comparing with other runtimes.

Overview

Monoio Benchmark

TCP ping-pong(not echo) is a common benchmark for network applications.

We will use 1K ping-pong to test performance of different runtimes. Server will receive 1K data(and parse it in real applications) and reply 1K data.

Max throughput

With given connections(enough for fully utilize CPU cores which latency is not important), we can measure the maximum throughput.

Fixed QPS

We can measure the latency and CPU utilization of different runtimes.

How to run

Run diffrent servers:

./target/release/monoio-server --cores 1
./target/release/glommio-server --cores 1
taskset -c 1 ./target/release/tokio-server --cores 1

./target/release/monoio-server --cores 1 2 3 4
./target/release/glommio-server --cores 1 2 3 4
taskset -c 1-4 ./target/release/tokio-server --cores 1 2 3 4

Run client:

./target/release/client --target 10.0.0.0:40000 --cores 1 2 3 4 --conns-per-core 150

Benchmark result

Full result is available in 中文版本 / English version.

You might also like...
Write UTXO-based Susbtrate Runtimes

Tuxedo Write UTXO-based Substrate Runtimes Table of Contents Architecture Repository Contents Tuxedo Core Template Runtime Template Node Wallet Fundin

Wrapper over MMTk to simplify integration with runtimes: thread management system, object header, root scanning

vmkit A library which provides bunch of building blocks to make a VM in Rust. Feautures MMTK integration out of the box Thread management provided by

Web-based tool that allows browsing and comparing symbol and type information of Microsoft Windows binaries across different versions of the OS.
Web-based tool that allows browsing and comparing symbol and type information of Microsoft Windows binaries across different versions of the OS.

WinDiff About WinDiff is an open-source web-based tool that allows browsing and comparing symbol and type information of Microsoft Windows binaries ac

An inquiry into nondogmatic software development. An experiment showing double performance of the code running on JVM comparing to equivalent native C code.
An inquiry into nondogmatic software development. An experiment showing double performance of the code running on JVM comparing to equivalent native C code.

java-2-times-faster-than-c An experiment showing double performance of the code running on JVM comparing to equivalent native C code ⚠️ The title of t

A library for comparing data structures in Rust, oriented toward testing

Delta: Structural differencing in Rust The delta crate defines the trait Delta, along with a derive macro for auto-generating instances of this trait

A library for comparing data structures in Rust, oriented toward testing

The comparable crate defines the trait [Comparable], along with a derive macro for auto-generating instances of this trait for most data types. Primar

Code for comparing CDN speeds!

How to run speed test. the image to use The image you should probably use is: cf_219kb.png cf_219kb.png is an image that won't be compressed by Jetpac

Comparing performance of Rust math libraries for common 3D game and graphics tasks

mathbench mathbench is a suite of unit tests and benchmarks comparing the output and performance of a number of different Rust linear algebra librarie

Trait that allows comparing a value to a range of values.

range_cmp Docs This Rust crate provides the RangeComparable trait on all types that implement Ord. This traits exposes a rcmp associated method that a

It is not about Keanu Reeves but a benchmark tool.
It is not about Keanu Reeves but a benchmark tool.

benchman Features Focus on one-shot benchmark RAII-style Statistics (Average, Median, 95% and 99% percentile) Colored output Tagging Nesting Motivatio

Verdun is a HTTP stress-test/benchmark tool written in Rust.
Verdun is a HTTP stress-test/benchmark tool written in Rust.

Verdun is a HTTP stress-test/benchmark tool written in Rust. 🦀 It supports testing a single URL, loading multiples URLs from a file or automatically navigating a website (auto discovery)

hb is an endpoint focused HTTP load testing / benchmark tool.

hb hb is an endpoint focused HTTP load testing / benchmark tool. Description The goal of hb is to provide a simple, robust tool to apply load against

rusty-riscy is a performance testing and system resource monitoring tool written in Rust to benchmark RISC-V processors.

rusty-riscy rusty-riscy is a performance testing and system resource monitoring tool written in Rust to benchmark RISC-V processors. Objectives To cre

A http server benchmark tool written in rust 🦀
A http server benchmark tool written in rust 🦀

rsb - rust benchmark rsb is a http server benchmark tool written in rust. The development of this tool is mainly inspired by the bombardier project, a

Blazing fast tool to benchmark Starknet sequencers 🦀

Gomu Gomu no Gatling Blazing fast tool to benchmark Starknet sequencers 🦀 . Installation From source git clone https://github.com/keep-starknet-stran

A simple disk benchmark tool.
A simple disk benchmark tool.

simple-disk-benchmark A simple disk benchmark tool. Operating Systems Currently, macOS and Linux are tested. Windows may work but is not tested. Devel

A micro-benchmark framework to use with cargo bench
A micro-benchmark framework to use with cargo bench

Glassbench is a micro-benchmark library with memory, to use with cargo bench. Why Run benchmarks and get a comparison with the previous execution carg

Benchmark over Node.js binding frameworks in Rust

Benchmark over Node.js binding frameworks in Rust

Benchmark for Rust and humans
Benchmark for Rust and humans

bma-benchmark Benchmark for Rust and humans What is this for I like testing different libraries, crates and algorithms. I do benchmarks on prototypes

Comments
  • Compile error from client

    Compile error from client

    Hi, all

    Thanks for your great project. I found there are some error message during the build. I use rustc 1.66.0-nightly (9565dfeb4 2022-10-28) and build the project with cargo +nightly build --release. Here is the log:

       Compiling client v0.1.0 (/home/eecheng/monoio-benchmark/client)
       Compiling monoio-server v0.1.0 (/home/eecheng/monoio-benchmark/monoio-server)
    error[E0596]: cannot borrow `stream` as mutable, as it is not declared as mutable
      --> monoio-server/src/main.rs:40:34
       |
    36 |     while let Ok((stream, _)) = listener.accept().await {
       |                   ------ help: consider changing this to be mutable: `mut stream`
    ...
    40 |                 let (r, buf_r) = stream.read_exact(buf).await;
       |                                  ^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
    
    error[E0596]: cannot borrow `stream` as mutable, as it is not declared as mutable
      --> monoio-server/src/main.rs:45:34
       |
    36 |     while let Ok((stream, _)) = listener.accept().await {
       |                   ------ help: consider changing this to be mutable: `mut stream`
    ...
    45 |                 let (w, buf_w) = stream.write_all(buf_r).await;
       |                                  ^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
    
    error[E0034]: multiple applicable items in scope
      --> monoio-server/src/main.rs:23:18
       |
    23 |                 .build()
       |                  ^^^^^ multiple `build` found
       |
       = note: candidate #1 is defined in an impl for the type `RuntimeBuilder<FusionDriver>`
       = note: candidate #2 is defined in an impl for the type `RuntimeBuilder<TimeDriver<FusionDriver>>`
       = note: candidate #3 is defined in an impl for the type `RuntimeBuilder<IoUringDriver>`
       = note: candidate #4 is defined in an impl for the type `RuntimeBuilder<TimeDriver<IoUringDriver>>`
       = note: and 2 others
    
    Some errors have detailed explanations: E0034, E0596.
    For more information about an error, try `rustc --explain E0034`.
    error: could not compile `monoio-server` due to 3 previous errors
    warning: build failed, waiting for other jobs to finish...
    error[E0596]: cannot borrow `stream` as mutable, as it is not declared as mutable
       --> client/src/main.rs:123:26
        |
    115 |     let stream = TcpStream::connect(target).await.unwrap();
        |         ------ help: consider changing this to be mutable: `mut stream`
    ...
    123 |         let (w, buf_w) = stream.write_all(buf).await;
        |                          ^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
    
    error[E0596]: cannot borrow `stream` as mutable, as it is not declared as mutable
       --> client/src/main.rs:129:26
        |
    115 |     let stream = TcpStream::connect(target).await.unwrap();
        |         ------ help: consider changing this to be mutable: `mut stream`
    ...
    129 |         let (r, buf_r) = stream.read_exact(buf_w).await;
        |                          ^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
    
    error[E0034]: multiple applicable items in scope
      --> client/src/main.rs:49:82
       |
    49 |             let mut rt = RuntimeBuilder::new().with_entries(2560).enable_timer().build().unwrap();
       |                                                                                  ^^^^^ multiple `build` found
       |
       = note: candidate #1 is defined in an impl for the type `RuntimeBuilder<FusionDriver>`
       = note: candidate #2 is defined in an impl for the type `RuntimeBuilder<TimeDriver<FusionDriver>>`
       = note: candidate #3 is defined in an impl for the type `RuntimeBuilder<IoUringDriver>`
       = note: candidate #4 is defined in an impl for the type `RuntimeBuilder<TimeDriver<IoUringDriver>>`
       = note: and 2 others
    
    error: could not compile `client` due to 3 previous errors
    
    opened by eecheng87 1
Owner
null
A http server benchmark tool written in rust 🦀

rsb - rust benchmark rsb is a http server benchmark tool written in rust. The development of this tool is mainly inspired by the bombardier project, a

Michael 45 Apr 10, 2023
A micro-benchmark framework to use with cargo bench

Glassbench is a micro-benchmark library with memory, to use with cargo bench. Why Run benchmarks and get a comparison with the previous execution carg

Canop 36 Dec 14, 2022
Benchmark for Rust and humans

bma-benchmark Benchmark for Rust and humans What is this for I like testing different libraries, crates and algorithms. I do benchmarks on prototypes

Altertech 11 Jan 17, 2022
Rust wrapper for COCO benchmark functions.

Coco Rust bindings for the COCO Numerical Black-Box Optimization Benchmarking Framework. See https://github.com/numbbo/coco and https://numbbo.github.

Leopold Luley 1 Nov 15, 2022
A command-line benchmarking tool

hyperfine 中文 A command-line benchmarking tool. Demo: Benchmarking fd and find: Features Statistical analysis across multiple runs. Support for arbitra

David Peter 14.1k Jan 6, 2023
An intrusive flamegraph profiling tool for rust.

FLAME A cool flamegraph library for rust Flamegraphs are a great way to view profiling information. At a glance, they give you information about how m

null 631 Jan 3, 2023
A unix "time" like benchmarking tool on steroids

benchie Usage Binary Once Rust is installed (see step 1 in "Toolchain Setup"), you can easily install the latest version of benchie with: $ cargo inst

benchie 3 May 6, 2022
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 294 Dec 23, 2022
Elton is a benchmark utility written in rust aimed to be used to benchmark HTTP calls.

Elton Elton is an HTTP Benchmark utility with options to be used within an HTTP interface. Installation Elton is currently available via Docker or by

Emil Priver 5 Sep 22, 2023
Rust telegram bot library for many runtimes

Telbot Telbot provides telegram bot types and api wrappers. Specifically, telbot now supports: telbot-types: basic telegram types / requests / respons

kiwiyou 17 Dec 3, 2022