GH GambleHub

Analiza porównawcza i porównanie wyników

Krótkie podsumowanie

Benchmarking to eksperyment, a nie "run wrk przez 5 minut. "Główne zasady:

1. Sformułować hipotezę i metryki.

2. Zmienne sterujące (sprzęt, rdzeń, moc, szum tła).

3. Zbierz wystarczającą ilość danych (repliki, przedziały ufności).

4. Zrób profilowanie - bez niego nie możesz zrozumieć „dlaczego”.

5. Do repro: skrypty, naprawianie wersji i artefaktów.

Cele odniesienia i wskaźniki biznesowe

Przepustowość: RPS/QPS/CPS, pisze/sec

Opóźnienie: p50/p95/p99/gęstość ogona.
Wydajność: Cost-per-1k RPS, wata na transakcję, poprawa $/milisekund.
Stabilność: jitter, zmienność między cyklami/węzłami.
Elastyczność: w jaki sposób wskaźniki są skalowane przy N × zasobów (wartości odniesienia Amdahla/Gustafsona).

Metodologia: projekt eksperymentalny

Hipoteza: „Wysłannik z HTTP/3 zmniejszy p95 TTFB o 10-15% przy tym samym RPS”.
Jednostka porównawcza: build/config/instance wersja żelaza.
Schemat A/B: równoległy przebieg w identycznym środowisku; lub ABAB/Latin Square w celu zmniejszenia wpływu dryfu.
Liczba powtórzeń: ≥ 10 krótkich + 3 długich biegów na konfigurację dla stabilnych ocen.
Statystyki: mediana, MAD, bootstrap przedziały ufności; badania parametryczne (Mann-Whitney) dla rozkładu „ogonowego”.
DoE (minimum): Zmień jedną zmienną na raz (OVAT) lub silnikową dla 2-3 czynników (na przykład profil TLS × wersja HTTP × jądro).

Regulacja zmiennych i hałasu

Gubernator procesora: „wydajność”; wyłączyć „oszczędzanie mocy”.
Turbo/Throttling: monitorowanie częstotliwości, temperatur i rozgrzewania (w przeciwnym razie ocieplenie da fałszywe wygrane).
NUMA/Hyper-Threading: pin IRQ i procesy ("taskset/numactl'), pomiar lokalizacji pamięci.
Saldo C-states/IRQ: naprawić ustawienia; dla testów sieciowych - pin IRQ dla określonych rdzeni.
Procesy tła: czysty węzeł, wyłączyć cron/backup/antivirus/updatedb.
Sieć: stabilne ścieżki, stałe MTU/ECN/AQM, brak trzepotania kanału.
Dane: te same zestawy, kardynalność i dystrybucje.
Pamięć podręczna: oddzielne tryby „zimne” (pierwsze przejście) i „ciepłe” (powtarzające się), wyraźnie oznaczone.

Klasy wzorcowe

1) Mikro wartości odniesienia (funkcja/algorytm)

Cel: Zmierzyć określony kod/algorytm.
Narzędzia: wbudowane ramy ławki (Go 'testing. B ', JMH, punkt odniesienia).
Zasady: JIT rozgrzewka, milisekund → nanosekund; izolacja GC; stałe nasiona.

2) Wskaźniki Meso (komponent/usługa)

Serwer HTTP, pamięć podręczna, broker, baza danych na jednym węźle.
Narzędzia: wrk/wrk2, k6 (model otwarty), vegeta, ghz (gRPC), fio, sysbench, iperf3.
Zasady: limity połączeń/plików, puli; Sprawozdanie CPU/IRQ/GC.

3) Makro wartości odniesienia (e2e/ścieżka żądania)

Pełny sposób: CDN/edge → proxy → service → DB/cache → odpowiedź.
Narzędzia: k6/Locust/Gatling + RUM/OTel odwzorowanie; realistyczna mieszanka tras.
Zasady: bliżej rzeczywistości („brudne” dane, opóźnienia systemów zewnętrznych), starannie z retras.

Metryka według warstwy

WarstwaMierniki
Klient/krawędźDNS p95, TLS handshake p95, TTFB, HTTP/2/3 дола
SiećRTT/loss/jitter, ECN CE, Goodput, PPS/CPS
TLS/Proxyuściski dłoni, szybkość wznowienia, mieszanka szyfrów
Dodatekp50/95/99, 5xx/429, pauzy GC, nici, kolejki
Pamięć podręcznawspółczynnik trafienia przez warstwę, eksmisję, gorące klawisze
DBQPS, zapytania p95, zamki, hit bufora/pamięci podręcznej, WAL/fsync
DyskIOPS, opóźnienie, 4k/64k, mix odczytu/zapisu, koszt fsync
GPU/MLprzepustowość (próbki/próbki), opóźnienie, mem BW, CUDA/ROCm util

Szablony testów i polecenia

Sieć (TCP/UDP):
bash iperf3 -s # server iperf3 -c <host> -P 8 -t 60 # parallel, stable bandwidth
Serwer HTTP (stabilne obciążenie, wrk2):
bash wrk2 -t8 -c512 -d5m -R 20000 https://api. example. com/endpoint \
--latency --timeout 2s
Model otwarty (k6, przylot):
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'] }
};
Dysk (fio, 4k odczyt losowy):
bash fio --name=randread --rw=randread --bs=4k --iodepth=64 --numjobs=4 \
--size=4G --runtime=120 --group_reporting --filename=/data/testfile
Baza danych (sysbench + PostgreSQL sample idea):
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
Pamięć/procesor (Linux perf + stress-ng):
bash perf stat -e cycles,instructions,cache-misses,L1-dcache-load-misses \
-- <your_binary> --bench

Statystyka i ważność

Replikaty: minimum 10 ciągów, z wyłączeniem odstających (wytrzymałych: mediana/MAD).
Przedziały ufności: bootstrap 95% CI dla p95/p99 i środków.
Wielkość efektu: zmiana względna i wartość CI (np. − 12% [− 9%; − 15%]).
Praktyczne znaczenie: 10% spadek p95 w cenie + 30% CPU - czy warto?
Wykresy: skrzypce/ECDF dla dystrybucji, „krzywe nasycenia” (RPS → latency).

Profilowanie i lokalizacja wąskich gardeł

Procesor: „perf”, „async-profiler”, eBPF/piroskop; flamegraf przed i po.
Alloc/GC: profile runtime (Go pprof/Java JFR).
I/O: 'jostat', 'blktrace', 'fio --lat_percentiles=1'.
Сета: 'ss -s',' ethtool -S', 'dropwatch', 'tc -s qdisc'.
СИ: 'EXPLAIN (ANALYZE, BUFFERS)', pg_stat_statements, slowlog.
Gotówka: górne klucze, TTL, przyczyna eksmisji.

Sprawozdawczość i artefakty

Co naprawić:
  • git SHA budować, kompilacja/optymalizacja flagi.
  • Konfiguracje jądra/sieci (sysctl), wersje sterowników/NIC/firmware.
  • Topologia (vCPU/NUMA/HT), gubernator, temperatura/częstotliwości.
  • Dane: rozmiar, kardynalność, dystrybucje.
  • Co opublikować: tabele p50/p95/p99, błąd/sec, przepustowość, zasoby (CPU/RAM/IO), CI.
  • Artefakty: uruchom skrypty, wykresy, flamegraf, surowe wyniki JSON/CSV, protokół środowiskowy.

Fair benchmarking

Identyczne ograniczenia (basen conn, utrzymywany, łańcuch TLS, zszywanie OCSP).
Negocjowane timeouts/retrays i wersja HTTP (h2/h3).
Równowaga temperatury: ocieplenie do równowagi (bez efektu turbo-boost).
Fair caches: Zarówno „zimne”, jak i „ciepłe”.
Symetria sieci: te same trasy/MTU/ECN/AQM.
Budżet czasu: DNS/TLS/connect - policzyć lub wykluczyć w równym stopniu.

Anty-wzory

Jeden uruchom → „wyjście”.
Mieszanie trybów (część zimna, część ciepła) w jednej serii.
Zamknięty model zamiast otwartego dla ładunku internetowego → fałszywe „stabilność”.
Niezapisane retrasy → „RPS rośnie” kosztem zabrania i kaskadowania 5xx.
Porównanie różnych gruczołów/rdzeni/obwodów mocy.
Brak profilowania → optymalizacja ślepej.
Gra z GC/hałda bez analizy profilu → regresja ogona.

Przepisy praktyczne

Minimalne etapy rurociągu ławki:

1. Naprawić środowisko (skrypt '_ capture. sh ").

2. Ogrzewanie (5-10 min), rekordowe częstotliwości/temperatury.

3. Prowadzenie N powtórzeń krótkiej + 1 długiej perspektywie.

4. Usuń profile (CPU/alloc/IO) na szczycie.

5. Obliczanie CI/wykresów, zbieranie artefaktów.

6. Rozwiązanie: zaakceptować/odrzucić hipotezę, utworzyć kolejne kroki.

Krzywa pojemności:
  • Kroki RPS (10% kroku) → naprawić p95/błędy → znajdź „kolano”.
  • Budujemy harmonogram RPS → latency i RPS → CPU: widzimy granicę i koszt dalszych%.

iGaming/specyficzne dla fintechu

Koszt na milisekundę: Poprawa rankingu przez $ efekt (konwersja/churn/PSP limity).
Szczyty (mecze/turnieje): spike + plateau benchmarks z TLS/CDN/cache ocieplenie.
Płatności/PSP: pomiar końcowy z limitami piaskownicy, idempotencja i reakcje na degradację; naprawić czas do portfela za pomocą mierników proxy.
Filtry przeciw oszustwom/bot: zawierają profil reguły w makro ławce (fałszywie dodatni wskaźnik, dodatek opóźnienia).
Liderzy/jackpoty: Testuj gorące klucze/ranking, zamki, atomowość.

Lista kontrolna benchmarkingu

  • Hipoteza/metryka/kryterium sukcesu.
  • Monitorowanie zmiennych (power/NUMA/IRQ/network/cache).
  • Plan operacyjny (repliki, czas trwania, rozgrzewka)
  • Separacja na zimno/ciepło.
  • Włączone profilowanie (CPU/alloc/IO/DB).
  • Statystyki: CI, testy znaczenia, wykresy.
  • Artefakty i skrypty repro w repozytorium (IaC dla ławki).
  • Sprawozdanie zawierające „koszty poprawy” i zalecenia.
  • regresja perf.

Mini-report (szablon)

Celem jest zmniejszenie API p95 o 15% bez wzrostu procesora> 10%.
Metoda: A/B, k6 otwarty model 1k rps, 10 × 3 działa, ciepły pamięć podręczna.
Ogółem: p95-12% [− 9%; − 15%], procesor + 6%, 5xx bez zmian.
Flamegraph: α serializacja JSON (− 30% procesor), wąskie gardło przeniosło się do bazy danych.
Decyzja: zaakceptować optymalizację; następnym krokiem jest załadowanie żądań bazy danych.
Artefakty: grafika, profile, konfiguracje, surowy JSON.

Razem

Dobre porównanie to rygorystyczna metodologia + rzetelne porównania + ważność statystyczna + profilowanie + odtwarzalność. Hipotezować, kontrolować środowisko, czytać przedziały ufności, publikować artefakty i podejmować decyzje dotyczące kosztów poprawy. Więc nie dostaniesz piękną postać w prezentacji, ale prawdziwy wzrost prędkości i przewidywalności platformy.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.