Kerangka kerja sederhana untuk menguji server HTTP, terinspirasi oleh Tolok Ukur Web Sederhana ( Ada grafik untuk banyak bahasa lain ), tetapi berfokus pada kerangka dan pustaka dlang .
Ini mengukur RPS yang dapat dicapai (permintaan per detik) dalam skrip teks biasa.
Pengujian dikumpulkan atau dimodifikasi dari berbagai tempat (termasuk TechEmpower ).
Ini menggunakan kontainer buruh pelabuhan untuk membangun dan menghosting layanan dan dapat berjalan secara lokal atau menggunakan penguji beban dari host jarak jauh.
Generator beban default adalah wrk dan meminta statistik dari kolektor, tetapi hei juga didukung (cukup gunakan sakelar --tool).
Pengujian dapat dijalankan tanpa buruh pelabuhan, Anda hanya perlu menginstal kompiler untuk bahasa yang diuji dan generator boot wrk / hey (tetapi hanya diuji di linux).
Catatan untuk tes io_uring:
- Tes membutuhkan setidaknya kernel Linux 5.7.
- Mungkin juga ada masalah dengan batas memori terkunci yang ditentukan pengguna (ulimit -l) saat dijalankan dengan pengguna biasa.
- , Kernel 5.7.16. . : #189, #8.
:
- singleCore โ / ( ).
- multiCore โ
- make build โ
- make shell โ
: .
, ( ):
make all # runs all tests
make single # runs tests limited to single CPU core usage
make multi # runs tests limited to multiple CPU cores usage
_suite/runner.d CLI-.
- _suite/runner.d list โ -
- _suite/runner.d bench โ
- _suite/runner.d responses โ
- _suite/runner.d versions โ Markdown
_suite/runner.d -h CLI .
:
_suite/runner.d bench --type singleCore dlang rust # dlang rust
:
- , , .
- - _suite/runner.d bench --type singleCore -r foo@192.168.0.3 --host 192.168.0.2 dlang
-r --remote , ssh. --host , CLI IP , , .
ssh , ssh ( ).
(hey) .
, , .
/
, .
- (.. ..)
- HTTP-
, , , , , .
C
. HTTP-, eventloop .
epoll io_uring. raw.
dlang
. http :
- process โ , .
- threads โ threadpool
- hybrid โ Linux , .
singeCore, ( ) eventloop, (.. CGI) .
- raw โ , , ( , ,โฆ โ )
TBD โ / io_uring, epoll Linux-.
, , . , โ , during/raw
, vibe-d. epoll linux (iocp kqueue windows MacOS).
, http , , .
- callbacks โ .
- fibers โ
- hunt-http โ (HTTP-, )
- hunt-pico โ , picohttpparser ( , , ...) โ , Techempower
, .
Weka.
.
: druntime, . . , .
code.dlang.org, , syscalls glibc epoll eventloop , .
nodejs http-parser ( , pico) .
, eventcore .
- , TCPConnection , .
, http .
- dlang, .
dotnet
, ( , , ...). .. , .
golang
fasthttp .
HTTP , .
rust
Actix :
- actix-web โ
- actix-raw โ
Single core results ()
: AMD Ryzen 7 3700X 8-Core, kernel 5.8.10
: Intelยฎ Core(TM) i5-5300U CPU @ 2.30GHz, kernel 5.8.9
: 1Gbps through cheap gigabit switch
: for i in 8 64 128 256; do _suite/runner.d bench --type singleCore --tool wrk -b 2 -d 120 -c $i -r tomas@10.0.0.2; done
| go | go1.15.1 |
| ldc2 | 1.23.0 |
| rust | 1.48.0-nightly |
| dotnet | 5.0.100-rc.1.20452.10 |
Dari penerjemah . Versi lengkap tabel dengan hasil dapat dilihat dalam aslinya . Tetapi semuanya tidak jelas tercampur di sana, jadi saya membuat lebih banyak grafik visual tentang jumlah permintaan yang diproses dalam 2 menit (req, rps secara proporsional) untuk dua kategori - kerangka kerja lengkap tanpa tweak dan yang lainnya, termasuk pustaka dasar. Dan dua hasil - untuk 8 pekerja dan 256 untuk menunjukkan skalabilitas.

Dan ya, pengujian TechEmpower, mencampurkan versi tweak dengan yang biasa, cukup memukau di beberapa tempat.