All Projects → smallnest → 1m Go Tcp Server

smallnest / 1m Go Tcp Server

benchmarks for implementation of servers which support 1 million connections

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to 1m Go Tcp Server

Http Benchmarks
Benchmarks for common embedded Java and Kotlin web frameworks
Stars: ✭ 65 (-94.55%)
Mutual labels:  benchmark
Ncnn Benchmark
The benchmark of ncnn that is a high-performance neural network inference framework optimized for the mobile platform
Stars: ✭ 70 (-94.13%)
Mutual labels:  benchmark
Ben
Your benchmark assistant, written in Go.
Stars: ✭ 72 (-93.96%)
Mutual labels:  benchmark
Evalne
Source code for EvalNE, a Python library for evaluating Network Embedding methods.
Stars: ✭ 67 (-94.38%)
Mutual labels:  benchmark
The Cpp Abstraction Penalty
Modern C++ benchmarking
Stars: ✭ 69 (-94.22%)
Mutual labels:  benchmark
Appdocs
Application Performance Optimization Summary
Stars: ✭ 1,169 (-2.01%)
Mutual labels:  benchmark
Freqbench
Comprehensive CPU frequency performance/power benchmark
Stars: ✭ 65 (-94.55%)
Mutual labels:  benchmark
Memento
Fairly basic redis-like hashmap implementation on top of a epoll TCP server.
Stars: ✭ 74 (-93.8%)
Mutual labels:  epoll
Quantum Benchmarks
benchmarking quantum circuit emulators for your daily research usage
Stars: ✭ 70 (-94.13%)
Mutual labels:  benchmark
Service Mesh Benchmark
Stars: ✭ 72 (-93.96%)
Mutual labels:  benchmark
Crypto Bench
Benchmarks for crypto libraries (in Rust, or with Rust bindings)
Stars: ✭ 67 (-94.38%)
Mutual labels:  benchmark
Web Components Benchmark
Web Components benchmark for a various Web Components technologies
Stars: ✭ 69 (-94.22%)
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 (-94.05%)
Mutual labels:  benchmark
Umesimd
UME::SIMD A library for explicit simd vectorization.
Stars: ✭ 66 (-94.47%)
Mutual labels:  benchmark
Jsperf.com
jsperf.com v2. https://github.com/h5bp/lazyweb-requests/issues/174
Stars: ✭ 1,178 (-1.26%)
Mutual labels:  benchmark
Gl vs vk
Comparison of OpenGL and Vulkan API in terms of performance.
Stars: ✭ 65 (-94.55%)
Mutual labels:  benchmark
Attabench
Microbenchmarking app for Swift with nice log-log plots
Stars: ✭ 1,167 (-2.18%)
Mutual labels:  benchmark
Unsafe
Assorted java classes that make use of sun.misc.Unsafe
Stars: ✭ 74 (-93.8%)
Mutual labels:  benchmark
Appnet
A Network Server Extension For PHP
Stars: ✭ 72 (-93.96%)
Mutual labels:  epoll
Asr benchmark
Program to benchmark various speech recognition APIs
Stars: ✭ 71 (-94.05%)
Mutual labels:  benchmark

Benchmark for implementation of servers that support 1m connections

inspired by handling 1M websockets connections in Go

Servers

  1. 1_simple_tcp_server: a 1m-connections server implemented based on goroutines per connection
  2. 2_epoll_server: a 1m-connections server implemented based on epoll
  3. 3_epoll_server_throughputs: add throughputs and latency test for 2_epoll_server
  4. 4_epoll_client: implement the client based on epoll
  5. 5_multiple_client: use multiple epoll to manage connections in client
  6. 6_multiple_server: use multiple epoll to manage connections in server
  7. 7_server_prefork: use prefork style of apache to implement server
  8. 8_server_workerpool: use Reactor pattern to implement multiple event loops
  9. 9_few_clients_high_throughputs: a simple goroutines per connection server for test throughtputs and latency
  10. 10_io_intensive_epoll_server: an io-bound multiple epoll server
  11. 11_io_intensive_goroutine: an io-bound goroutines per connection server
  12. 12_cpu_intensive_epoll_server: a cpu-bound multiple epoll server
  13. 13_cpu_intensive_goroutine: an cpu-bound goroutines per connection server

Test Environment

  • two E5-2630 V4 cpus, total 20 cores, 40 logicial cores.
  • 32G memory

tune the linux:

sysctl -w fs.file-max=2000500
sysctl -w fs.nr_open=2000500
sysctl -w net.nf_conntrack_max=2000500
ulimit -n 2000500

sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.tcp_tw_reuse=1

client sends the next request only when it has received the response. it has not used the pipeline style to test.

Benchmarks

1m connections

throughputs (tps) latency
goroutine-per-conn 202830 4.9s
single epoll(both server and client) 42495 23s
single epoll server 42402 0.8s
multiple epoll server 197814 0.9s
prefork 444415 1.5s
workerpool 190022 0.3s

中文介绍:

  1. 百万 Go TCP 连接的思考: epoll方式减少资源占用
  2. 百万 Go TCP 连接的思考2: 百万连接的服务器的性能
  3. 百万 Go TCP 连接的思考3: 低连接场景下的服务器的吞吐和延迟
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].