All Projects → kinvolk → Service Mesh Benchmark

kinvolk / Service Mesh Benchmark

Licence: apache-2.0

Programming Languages

shell
77523 projects

Projects that are alternatives of or similar to Service Mesh Benchmark

Istio Bench
A benchmark tool for Istio. It measures CPU, Memory, Network usage of istio per number of services
Stars: ✭ 20 (-72.22%)
Mutual labels:  benchmark, service-mesh
Ncnn Benchmark
The benchmark of ncnn that is a high-performance neural network inference framework optimized for the mobile platform
Stars: ✭ 70 (-2.78%)
Mutual labels:  benchmark
Benchmark Websocket
Websocket Client and Server for benchmarks with Millions of concurrent connections.
Stars: ✭ 62 (-13.89%)
Mutual labels:  benchmark
Evalne
Source code for EvalNE, a Python library for evaluating Network Embedding methods.
Stars: ✭ 67 (-6.94%)
Mutual labels:  benchmark
Freqbench
Comprehensive CPU frequency performance/power benchmark
Stars: ✭ 65 (-9.72%)
Mutual labels:  benchmark
Http Benchmark Tornado
基于Python Tornado的高性能http性能测试工具。Java Netty版: https://github.com/junneyang/http-benchmark-netty 。
Stars: ✭ 67 (-6.94%)
Mutual labels:  benchmark
Functional Components Benchmark
Directly calling functional components instead of mounting them is faster.
Stars: ✭ 59 (-18.06%)
Mutual labels:  benchmark
Ossf Cve Benchmark
The OpenSSF CVE Benchmark consists of code and metadata for over 200 real life CVEs, as well as tooling to analyze the vulnerable codebases using a variety of static analysis security testing (SAST) tools and generate reports to evaluate those tools.
Stars: ✭ 71 (-1.39%)
Mutual labels:  benchmark
Quantum Benchmarks
benchmarking quantum circuit emulators for your daily research usage
Stars: ✭ 70 (-2.78%)
Mutual labels:  benchmark
Kubernetes Handbook
Kubernetes中文指南/云原生应用架构实践手册 - https://jimmysong.io/kubernetes-handbook
Stars: ✭ 9,420 (+12983.33%)
Mutual labels:  service-mesh
Umesimd
UME::SIMD A library for explicit simd vectorization.
Stars: ✭ 66 (-8.33%)
Mutual labels:  benchmark
Gl vs vk
Comparison of OpenGL and Vulkan API in terms of performance.
Stars: ✭ 65 (-9.72%)
Mutual labels:  benchmark
Web Components Benchmark
Web Components benchmark for a various Web Components technologies
Stars: ✭ 69 (-4.17%)
Mutual labels:  benchmark
Scalajs Benchmark
Benchmarks: write in Scala or JS, run in your browser. Live demo:
Stars: ✭ 63 (-12.5%)
Mutual labels:  benchmark
Attabench
Microbenchmarking app for Swift with nice log-log plots
Stars: ✭ 1,167 (+1520.83%)
Mutual labels:  benchmark
Rb
A thread-safe fixed-size circular buffer written in safe Rust.
Stars: ✭ 59 (-18.06%)
Mutual labels:  benchmark
Envoy Control
Envoy Control is a platform-agnostic, production-ready Control Plane for Service Mesh based on Envoy Proxy.
Stars: ✭ 66 (-8.33%)
Mutual labels:  service-mesh
Crypto Bench
Benchmarks for crypto libraries (in Rust, or with Rust bindings)
Stars: ✭ 67 (-6.94%)
Mutual labels:  benchmark
Asr benchmark
Program to benchmark various speech recognition APIs
Stars: ✭ 71 (-1.39%)
Mutual labels:  benchmark
Appdocs
Application Performance Optimization Summary
Stars: ✭ 1,169 (+1523.61%)
Mutual labels:  benchmark

Kinvolk service mesh benchmark suite

This is v2.0 release of our benchmark automation suite.

Please refer to the 1.0 release for automation discussed in our 2019 blog post.

Content

The suite includes:

Run a benchmark

Prerequisites:

  • cluster is set up
  • push gateway is installed
  • grafana dashboards are uploaded to Grafana
  • applications are installed
  1. Start the benchmark:
    $ helm install --create-namespace benchmark --namespace benchmark configs/benchmark
    
    This will start a 120s, 3000RPS benchmark against 10 emojivoto app instances, with 96 threads / simultaneous connections. See the helm chart values for all parameters, and use helm command line parameters for different values (eg. --set wrk2.RPS="500" to change target RPS).
  2. Refer to the "wrk2 cockpit" grafana dashboard for live metrics
  3. After the run concluded, run the "metrics-merger" job to update summary metrics:
    $ helm install --create-namespace --namespace metrics-merger \
                                    metrics-merger configs/metrics-merger/
    
    This will update the "wrk2 summary" dashboard.

Run a benchmark suite

The benchmark suite script will install applications and service meshes, and run several benchmarks in a loop.

Use the supplied scripts/run_benchmarks.sh to run a full benchmark suite: 5 runs of 10 minutes each for 500-5000 RPS, in 500 RPS increases, with 128 threads, for "bare metal", linkerd, and istio service meshes, against 60 emojivoto instances.

Creating prerequisites

Set up a cluster

We use Equinix Metal infrastructure to run the benchmark on, AWS S3 for sharing cluster state, and AWS Route53 for the clusters' public DNS entries. You'll need a Equinix Metal account and respective API token as well as an AWS account and accompanying secret key before you can provision a cluster.

You'll also need a recent version of Lokomotive.

  1. Make the authentication tokens available to the lokoctl command. You can do this in a couple of ways. For example, exporting your authentication tokens:

    export PACKET_AUTH_TOKEN="Your Equinix Metal Auth Token"
    export AWS_ACCESS_KEY_ID="your access key for AWS"
    export AWS_SECRET_ACCESS_KEY="your secret for the above access key"
    
  2. Create the Route53 hosted zone that will be used by the cluster. And an S3 bucket and Dynamo tables for storing Lokomotive's state. Check out Lokomotive's documentation for Using S3 as backend for how to do this.

  3. Create configs/lokocfg.vars by copying the example file configs/lokocfg.vars.example, and editing its contents.

    metal_project_id = "[ID of the equinix metal project to deploy to]"
    route53_zone = "[cluster's route53 zone]"
    state_s3_bucket = "[PRIVATE AWS S3 bucket to share cluster state in]"
    state_s3_key = "[key in S3 bucket, e.g. cluster name]"
    state_s3_region = "[AWS S3 region to use]"
    lock_dynamodb_table = "[DynamoDB table name to use as state lock, e.g. cluster name]"
    region_private_cidr =  "[Your Equinix Metal region's private CIDR]"
    ssh_pub_keys = [ "[Your SSH pub keys]" ]
    
  4. Review the benchmark cluster config in configs/equinix-metal-cluster.lokocfg

  5. Provision the cluster by running

    $ cd configs
    configs $ lokoctl cluster apply
    

After provisioning concluded, make sure to run

$ export KUBECONFIG=assets/cluster-assets/auth/kubeconfig

to get kubectl access to the cluster.

Deploy prometheus push gateway

The benchmark load generator will push intermediate run-time metrics as well as final latency metrics to a prometheus push gateway. A push gateway is currently not bundled with Lokomotive's prometheus component. Deploy by issuing

$ helm install pushgateway --namespace monitoring configs/pushgateway

Deploy demo apps

Demo apps will be used to run the benchmarks against. We'll use Linkerd's emojivoto.

We will deploy multiple instances of each app to emulate many applications in a cluster. For the default set-up, which includes 4 application nodes, we recommend deploying 30 "bookinfo" instances, and 40 "emojivoto" instances:

$ cd configs
$ for i in $(seq 10) ; do \
      helm install --create-namespace emojivoto-$i \ --namespace emojivoto-$i \
                configs/emojivoto \
  done

Upload Grafana dashboard

  1. Get the Grafana Admin password from the cluster
    $ kubectl -n monitoring get secret prometheus-operator-grafana -o jsonpath='{.data.admin-password}' | base64 -d && echo
    
  2. Forward the Grafana service port from the cluster
    $ kubectl -n monitoring port-forward svc/prometheus-operator-grafana 3000:80 &
    
  3. Log in to Grafana and create an API key we'll use to upload the dashboard
  4. Upload the dashboard:
    $ cd dashboard
    dashboard $ ./upload_dashboard.sh "[API KEY]" grafana-wrk2-cockpit.json localhost:3000
    
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].