Benchmarking və performans müqayisə
Qısa xülasə
Benchmarking bir təcrübədir, «5 dəqiqə wrk başlamaq» deyil. Əsas prinsipləri:1. Fərziyyə və metrika formalaşdırın.
2. Dəyişənləri (dəmir, nüvə, güc, fon səs-küyü) idarə edin.
3. Kifayət qədər məlumat toplayın (replikalar, etibarlı intervallar).
4. Profilləşdirin - onsuz «niyə» başa düşmək olmaz.
5. Repro edin: skriptlər, versiyaların və artefaktların fiksasiyası.
Bençmark və biznes metrikasının məqsədləri
Bant genişliyi (throughput): RPS/QPS/CPS, qeydlər/san.
Gecikmə (latency): p50/p95/p99/quyruq sıxlığı.
Effektivlik: Cost-per-1k RPS, əməliyyat başına watt, $/millisaniyə təkmilləşdirmə.
Sabitlik: jitter, dövrlər/nodlar arasında dəyişkənlik.
Elastiklik: N × resurs (Amdahl/Gustafson göstərici) ilə göstəricilər necə ölçülür.
Metodologiya: eksperiment dizaynı
Hipotez: «HTTP/3 ilə Envoy p95 TTFB eyni RPS ilə 10-15% azaldır».
Müqayisə vahidi: dəmir bild/ /instans versiyası.
A/B sxemi: eyni mühitdə paralel qaçış; və ya ABAB/Latin Meydanı sürüklənmə təsirini azaltmaq üçün.
Təkrarların sayı: sabit qiymətləndirmələr üçün konfiqurasiya üçün 10 qısa + 3 uzun ≥.
Statistika: media, MAD, butstrep etibarlı intervallar; «quyruq» paylanması üçün qeyri-parametrik testlər (Mann-Whitney).
DoE (minimum): Bir anda bir dəyişəni (OVAT) və ya 2-3 amil üçün fraksiya faktor planını dəyişdirin (məsələn, TLS profili × HTTP versiyası × nüvə).
Dəyişən və səs-küy nəzarəti
CPU governor: `performance`; «power save» söndürmək.
Turbo/Throttling: tezlik, temperatur və trottling monitorinqi (əks halda istilik yanlış qazanc verəcəkdir).
NUMA/Hyper-Threading: IRQ və prosesləri təyin edin ('taskset/numactl'), yaddaş yerlərini ölçün.
C-states/IRQ balance: parametrləri qeyd edin; şəbəkə testləri üçün - xüsusi nüvələr üçün pin IRQ.
Fon prosesləri: təmiz nod, cron/backup/antivirus/updatedb.
Şəbəkə: sabit yollar, sabit MTU/ECN/AQM, kanal flatter yoxdur.
Məlumatlar: eyni dəstlər, kardinallıq və paylamalar.
Cash: «Soyuq» (birinci keçid) və «isti» (təkrar) rejimləri ayırın, açıq şəkildə qeyd edin.
Bençmark sinifləri
1) Mikro-bençmarklar (funksiya/alqoritm)
Məqsəd: xüsusi kod/alqoritmi ölçmək.
Alətlər: daxili bench frameworks (Go 'testing. B`, JMH, pytest-benchmark).
Qaydalar: JIT qızdırılması, milisaniyələr → nanosaniyələr; GC izolyasiya; sabit seed.
2) Mezo-bençmarklar (komponent/xidmət)
HTTP server, cache, broker, bir node DB.
Alətlər: wrk/wrk2, k6 (open model), vegeta, ghz (gRPC), fio, sysbench, iperf3.
Qaydalar: qoşulma/fayl, hovuz limitləri; CPU/IRQ/GC hesabatı.
3) Makro-bençmarklar (e2e/sorğu yolu)
Tam yol: CDN/edge → proxy → xidmət → DB/cache → cavab.
Alətlər: k6/Locust/Gatling + RUM/OTel Trace; real marşrutlar qarışığı.
Qaydalar: reallığa daha yaxın («çirkli» məlumatlar, xarici sistemlərin laqaları), retralar ilə diqqətlə.
Qatlara görə metrik dəsti
Test şablonları və komandaları
Şəbəkə (TCP/UDP):bash iperf3 -s # server iperf3 -c <host> -P 8 -t 60 # parallel, stable bandwidth
HTTP server (sabit yük, wrk2):
bash wrk2 -t8 -c512 -d5m -R 20000 https://api. example. com/endpoint \
--latency --timeout 2s
Open-model (k6, arrival-rate):
javascript export const options = {
scenarios: { open: { executor: 'constant-arrival-rate', rate: 1000, timeUnit: '1s',
duration: '10m', preAllocatedVUs: 2000 } },
thresholds: { http_req_failed: ['rate<0. 3%'], http_req_duration: ['p(95)<250'] }
};
Disk (fio, 4k random read):
bash fio --name=randread --rw=randread --bs=4k --iodepth=64 --numjobs=4 \
--size=4G --runtime=120 --group_reporting --filename=/data/testfile
BD (sysbench + PostgreSQL nümunəvi fikir):
bash sysbench oltp_read_write --table-size=1000000 --threads=64 \
--pgsql-host=... --pgsql-user=... --pgsql-password=... prepare sysbench oltp_read_write --time=600 --threads=64 run
Yaddaş/CPU (Linux perf + stress-ng):
bash perf stat -e cycles,instructions,cache-misses,L1-dcache-load-misses \
-- <your_binary> --bench
Statistika və etibarlılıq
Təkrar: minimum 10 qaçış, istisna outliers (robastno: mediana/MAD).
Etibarlı intervallar: p95/p99 və orta üçün 95% CI butstrap.
Effekt ölçüsü: nisbi dəyişiklik və onun CI (məsələn, − 12% [− 9%; − 15%]).
Praktik əhəmiyyət: qiymət + 30% CPU ilə p95 10% azaldılması - dəyər?
Qrafiklər: paylama üçün violin/ECDF, «doygunluq əyriləri» (RPS → latency).
Dar yerin profilləşdirilməsi və lokallaşdırılması
CPU: `perf`, `async-profiler`, eBPF/pyroscope; flamegraph əvvəl və sonra.
Alloc/GC: runtime profilləri (Go pprof/Java JFR).
I/O: `iostat`, `blktrace`, `fio --lat_percentiles=1`.
Сеть: `ss -s`, `ethtool -S`, `dropwatch`, `tc -s qdisc`.
БД: `EXPLAIN (ANALYZE, BUFFERS)`, pg_stat_statements, slowlog.
Cash: Top açarları, TTL, eviction səbəb.
Hesabat və artefaktlar
Nə qeyd etmək lazımdır:- git SHA bilda, yığma/optimizasiya bayraqları.
- NIC/firmware (sysctl), sürücü versiyaları.
- Topologiya (vCPU/NUMA/HT), governor, temperatur/tezlik.
- Data: ölçüsü, kardinallığı, paylanması.
- Nə dərc etmək lazımdır: p50/p95/p99 cədvəllər, səhv/san, throughput, resurslar (CPU/RAM/IO), CI.
- Artefaktlar: qaçış skriptləri, qrafiklər, flamegraph, xam JSON/CSV nəticələri, mühit protokolu.
Ədalətli müqayisə (fair benchmarking)
Eyni məhdudlaşdırıcılar (conn pool, keepalive, TLS zəncirləri, OCSP stapling).
Razılaşdırılmış vaxt/retrailer və HTTP versiyası (h2/h3).
Temperatur balansı: tarazlığa qədər istiləşmə (turbo-boost effekti olmadan).
Ədalətli keşlər: hər ikisi «soyuq» və ya hər ikisi «isti».
Şəbəkə simmetriyası: eyni marşrutlar/MTU/ECN/AQM.
Vaxt büdcəsi: DNS/TLS/connect - açıq-aşkar saymaq və ya eyni şəkildə istisna etmək.
Anti-nümunələr
Bir keçid → «çıxış».
Bir sıra rejimləri (soyuq hissəsi, isti hissəsi) qarışdırın.
İnternet yükü əvəzinə qapalı model → saxta «sabitlik».
Nəzərə alınmayan retrajlar → «RPS böyüyür» ikiqat və kaskad 5xx qiyməti ilə.
Müxtəlif dəmir parçaları/nüvələr/enerji sxemlərində müqayisə.
Profil olmaması → «kor-koranə» optimallaşdırma.
profil təhlili olmadan GC/heap ilə oyun → quyruq reqressiya.
Praktik reseptlər
Minimum bench payplayn addımları:1. Mühiti düzəlt (skript 'env _ capture. sh`).
2. Qızdırmaq (5-10 dəq), tezlik/temperatur qeyd.
3. Qısa + 1 uzun qaçış N təkrar edin.
4. Profilləri (CPU/alloc/IO) zirvədə götürün.
5. CI/qrafikləri hesablayın, artefaktları toplayın.
6. Qərar: fərziyyəni qəbul etmək/rədd etmək, növbəti addımları formalaşdırmaq.
Tutum əyrisi (capacity curve):- RPS addımları (10% addım) → p95/səhvləri düzəldir → «diz» tapın.
- RPS → latency və RPS → CPU qrafiki qururuq: sərhədləri və sonrakı% dəyərini görürük.
iGaming/Fintech üçün xüsusiyyətlər
Millisaniyə dəyəri: $ -effekt (dönüşüm/çıxış/PSP limitləri) üzrə təkmilləşdirmələri sıralayın.
Zirvələr (matçlar/turnirlər): spike + plateau bençmarkları TLS/CDN/cache ilə qızdırılır.
Ödənişlər/PSP: sandbox limitləri, idempotentlik və deqradasiya reaksiyaları ilə end-to-end ölçün; Time-to-Wallet proxy metrləri ilə qeyd edin.
Antifrod/bot filtrləri: makro-bench qaydaları profilinə daxil edin (false-positive-rate, latency əlavəsi).
Liderlər/cekpotlar: qaynar açarları/sıralamaları, kilidləri, atomları test edin.
Benchmarking çek siyahısı
- Fərziyyə/metrika/uğur meyarı.
- Dəyişənlərə nəzarət (güc/NUMA/IRQ/şəbəkə/cache).
- Qaçış planı (replikalar, müddət, istiləşmə).
- «Soyuq/isti» rejimlərin ayrılması.
- Profil daxil (CPU/alloc/IO/BD).
- Statistika: CI, əhəmiyyət testləri, qrafiklər.
- Anbarda artefaktlar və repro skriptləri (stend üçün IaC).
- «Təkmilləşdirmə dəyəri» və tövsiyələr ilə hesabat.
- Optimallaşdırmadan sonra retest (regression perf).
Mini hesabat (şablon)
Məqsəd: CPU artımı olmadan p95 API-ni 15% azaltmaq> 10%.
Metod: A/B, k6 open-model 1k rps, 10 × 3 run, warm cache.
Cəmi: p95 − 12% [− 9%; − 15%], CPU + 6%, 5xx dəyişməz.
Flamegraph: ↓ JSON serializasiya (− 30% CPU), dar yer DB keçdi.
Qərar: optimallaşdırma; növbəti addım - DB sorğularının batching.
Artefaktlar: qrafiklər, profillər, konfiqlər, xam JSON.
Yekun
Yaxşı benchmarking - ciddi metodologiya + dürüst müqayisə + statistik etibarlılıq + profil + təkrarlanabilirlik. Fərziyyələr qoyun, ətraf mühitə nəzarət edin, etibarlı intervalları sayın, artefaktları dərc edin və təkmilləşdirmə xərcləri ilə bağlı qərarlar qəbul edin. Beləliklə, təqdimatda gözəl bir rəqəm deyil, platformanın sürətində və proqnozlaşdırılmasında real artım əldə edəcəksiniz.