Skip to content

TimeTo10X/waRPC-Benchmarks

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 

Repository files navigation

WAnime RPC Benchmarks

Benchmarks for WAnime RPC framework, against other RPC implementations


Table of Contents

  1. Intro
  2. Prerequisites
  3. WAnime RPC
  4. Google RPC
  5. Ice RPC
  6. Benchmarks
  7. Docs
  8. License

Intro

These benchmarks cover three workloads:

  • nop
  • add
  • hex

Each framework uses its own serialization layer:

Framework Serialization
waRPC Polyglot
gRPC Protobuf
iceRPC Slice

Prerequisites

Tip

If u want to avoid manual installation, just use j setup ^^
(Works only on MacOS and Arch)

gRPC & IceRPC

  • gRPC
  • Protobuf
  • dotnet
  • cmake
  • ninja
  • llvm
  • openssl

MacOS:

brew install grpc protobuf cmake ninja llvm openssl && brew install --cask dotnet-sdk

Arch btw:

sudo pacman -Syu --needed grpc protobuf dotnet-sdk cmake ninja llvm clang openssl

waRPC

  • wapm
  • wrsc
  • wapm:warpc
  • wapm:polyglot

Install wapm && wrsc

curl -fsSL https://wapm.wanime.io/install.sh | sh
curl -fsSL https://wrsc.wanime.io/install.sh | sh

Installing warpc && polyglot

wapm y warpc polyglot --version 0.1.0

WAnime RPC

WAnime RPC (waRPC) is a modern RPC framework built on top of QUIC and written in modern c++ ^_^, by WAnime.

Running waRPC benchamrks:

# Start waRPC server
j warpc_serve
# Run bench
j warpc_bench

Google RPC

gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authentication. It is also applicable in last mile of distributed computing to connect devices, mobile applications and browsers to backend services.

Running gRPC benchamrks:

# Start gRPC server
j grpc_serve
# Run bench
j grpc_bench

Ice RPC

A C# RPC framework built for QUIC, with bidirectional streaming, first-class async/await, and Protobuf support.

Running IceRPC benchamrks:

# Start IceRPC server
j ice_serve
# Run bench
j ice_bench

Benchmarks

The "trust me bro" bench by WAnime ^^

MacOS (No kernel bypass)

Important

In this configuration waRPC server && client, both are not using io_uring kernel bypass.

Sync API

1 Client @100,000 calls

Latency per call

Nop

~ min avg p50 p90 p99 p99.9 max
waRPC 0us 0us 0us 0us 0us 0us 0us
gRPC 0us 0us 0us 0us 0us 0us 0us
iceRPC 0us 0us 0us 0us 0us 0us 0us

Add

~ min avg p50 p90 p99 p99.9 max
waRPC 0us 0us 0us 0us 0us 0us 0us
gRPC 0us 0us 0us 0us 0us 0us 0us
iceRPC 0us 0us 0us 0us 0us 0us 0us

Hex

~ min avg p50 p90 p99 p99.9 max
waRPC 0us 0us 0us 0us 0us 0us 0us
gRPC 0us 0us 0us 0us 0us 0us 0us
iceRPC 0us 0us 0us 0us 0us 0us 0us

Throughput

~ Nop Add Hex
waRPC 0qps 0qps 0qps
gRPC 0qps 0qps 0qps
iceRPC 0qps 0qps 0qps

Memory usage Client

~ Nop Add Hex
waRPC 0mb 0mb 0mb
gRPC 0mb 0mb 0mb
iceRPC 0mb 0mb 0mb

CPU usage Client

~ Nop Add Hex
waRPC 0% 0% 0%
gRPC 0% 0% 0%
iceRPC 0% 0% 0%

Memory usage Server

~ Nop Add Hex
waRPC 0mb 0mb 0mb
gRPC 0mb 0mb 0mb
iceRPC 0mb 0mb 0mb

CPU usage Server

~ Nop Add Hex
waRPC 0% 0% 0%
gRPC 0% 0% 0%
iceRPC 0% 0% 0%

Async API

Note

waRPC -> async API && Atomic Execution API
gRPC -> callback API with CQ
iceRPC -> todo

1 Client @100,000 calls

Latency per call

Nop

~ min avg p50 p90 p99 p99.9 max
waRPC 0us 0us 0us 0us 0us 0us 0us
gRPC 0us 0us 0us 0us 0us 0us 0us
iceRPC 0us 0us 0us 0us 0us 0us 0us

Add

~ min avg p50 p90 p99 p99.9 max
waRPC 0us 0us 0us 0us 0us 0us 0us
gRPC 0us 0us 0us 0us 0us 0us 0us
iceRPC 0us 0us 0us 0us 0us 0us 0us

Hex

~ min avg p50 p90 p99 p99.9 max
waRPC 0us 0us 0us 0us 0us 0us 0us
gRPC 0us 0us 0us 0us 0us 0us 0us
iceRPC 0us 0us 0us 0us 0us 0us 0us

Throughput

~ Nop Add Hex
waRPC 0qps 0qps 0qps
gRPC 0qps 0qps 0qps
iceRPC 0qps 0qps 0qps

Memory usage Client

~ Nop Add Hex
waRPC 0mb 0mb 0mb
gRPC 0mb 0mb 0mb
iceRPC 0mb 0mb 0mb

CPU usage Client

~ Nop Add Hex
waRPC 0% 0% 0%
gRPC 0% 0% 0%
iceRPC 0% 0% 0%

Memory usage Server

~ Nop Add Hex
waRPC 0mb 0mb 0mb
gRPC 0mb 0mb 0mb
iceRPC 0mb 0mb 0mb

CPU usage Server

~ Nop Add Hex
waRPC 0% 0% 0%
gRPC 0% 0% 0%
iceRPC 0% 0% 0%

Linux (With kernel bypass)

Important

In this configuration waRPC server && client, both are using io_uring kernel bypass.

Sync API

1 Client @100,000 calls

Latency per call

Nop

~ min avg p50 p90 p99 p99.9 max
waRPC 0us 0us 0us 0us 0us 0us 0us
gRPC 0us 0us 0us 0us 0us 0us 0us
iceRPC 0us 0us 0us 0us 0us 0us 0us

Add

~ min avg p50 p90 p99 p99.9 max
waRPC 0us 0us 0us 0us 0us 0us 0us
gRPC 0us 0us 0us 0us 0us 0us 0us
iceRPC 0us 0us 0us 0us 0us 0us 0us

Hex

~ min avg p50 p90 p99 p99.9 max
waRPC 0us 0us 0us 0us 0us 0us 0us
gRPC 0us 0us 0us 0us 0us 0us 0us
iceRPC 0us 0us 0us 0us 0us 0us 0us

Throughput

~ Nop Add Hex
waRPC 0qps 0qps 0qps
gRPC 0qps 0qps 0qps
iceRPC 0qps 0qps 0qps

Memory usage Client

~ Nop Add Hex
waRPC 0mb 0mb 0mb
gRPC 0mb 0mb 0mb
iceRPC 0mb 0mb 0mb

CPU usage Client

~ Nop Add Hex
waRPC 0% 0% 0%
gRPC 0% 0% 0%
iceRPC 0% 0% 0%

Memory usage Server

~ Nop Add Hex
waRPC 0mb 0mb 0mb
gRPC 0mb 0mb 0mb
iceRPC 0mb 0mb 0mb

CPU usage Server

~ Nop Add Hex
waRPC 0% 0% 0%
gRPC 0% 0% 0%
iceRPC 0% 0% 0%

Async API

Note

waRPC -> async API && Atomic Execution API
gRPC -> callback API with CQ
iceRPC -> todo

1 Client @100,000 calls

Latency per call

Nop

~ min avg p50 p90 p99 p99.9 max
waRPC 0us 0us 0us 0us 0us 0us 0us
gRPC 0us 0us 0us 0us 0us 0us 0us
iceRPC 0us 0us 0us 0us 0us 0us 0us

Add

~ min avg p50 p90 p99 p99.9 max
waRPC 0us 0us 0us 0us 0us 0us 0us
gRPC 0us 0us 0us 0us 0us 0us 0us
iceRPC 0us 0us 0us 0us 0us 0us 0us

Hex

~ min avg p50 p90 p99 p99.9 max
waRPC 0us 0us 0us 0us 0us 0us 0us
gRPC 0us 0us 0us 0us 0us 0us 0us
iceRPC 0us 0us 0us 0us 0us 0us 0us

Throughput

~ Nop Add Hex
waRPC 0qps 0qps 0qps
gRPC 0qps 0qps 0qps
iceRPC 0qps 0qps 0qps

Memory usage Client

~ Nop Add Hex
waRPC 0mb 0mb 0mb
gRPC 0mb 0mb 0mb
iceRPC 0mb 0mb 0mb

CPU usage Client

~ Nop Add Hex
waRPC 0% 0% 0%
gRPC 0% 0% 0%
iceRPC 0% 0% 0%

Memory usage Server

~ Nop Add Hex
waRPC 0mb 0mb 0mb
gRPC 0mb 0mb 0mb
iceRPC 0mb 0mb 0mb

CPU usage Server

~ Nop Add Hex
waRPC 0% 0% 0%
gRPC 0% 0% 0%
iceRPC 0% 0% 0%

Docs

License

This project is licensed under MIT license

About

Public Benchmarks for waRPC against other RPC frameworks

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors