Бенчмаркинг және өнімділікті салыстыру
Қысқаша түйіндеме
Бенчмаркинг - эксперимент, «5 минутқа wrk іске қосу» емес. Басты қағидаттар:1. Гипотеза мен метриканы тұжырымдаңыз.
2. Айнымалыларды (темір, ядро, қорек, фон шуын) бақылаңыз.
3. Жеткілікті деректер (репликалар, сенімді аралықтар) жинаңыз.
4. Профильді жүргізіңіз - онсыз «неге» түсінуге болмайды.
5. repro жасаңыз: скрипттер, нұсқалар мен артефактілерді бекіту.
Бенчмарк және бизнес-метриканың мақсаттары
Өткізу қабілеті (throughput): RPS/QPS/CPS, жазбалар/сек.
Кідіріс (latency): р50/р95/р99/қалдықтардың тығыздығы.
Тиімділігі: Cost-per-1k RPS, транзакцияға ватт, $/миллисекунд жақсарту.
Тұрақтылық: джиттер, циклдар/нодтар арасындағы вариативтілік.
Икемділік: ресурстың N × кезіндегі көрсеткіштер қалай масштабталады (Amdahl/Gustafson бағдарлары).
Әдіснама: эксперимент дизайны
Гипотеза: «Envoy HTTP/3 p95 TTFB-ны сол RPS-мен 10-15% -ға азайтады».
Салыстыру бірлігі: темір билдінің/ /инстансының нұсқасы.
A/B-схемасы: бірдей ортада параллель жүру; немесе дрейфтің әсерін төмендету үшін ABAB/Latin Square.
Қайталау саны: тұрақты бағалау үшін конфигурацияға 10 қысқа + 3 ұзын ≥.
Статистика: медиана, MAD, бутстрэппен сенімді интервалдар; «құйрықты» бөлуге арналған параметрлік емес тесттер (Mann-Whitney).
DoE (ең аз): бір уақытта бір айнымалыны (OVAT) немесе 2-3 факторлар үшін фракциялық факторлық жоспарды өзгертіңіз (мысалы, TLS профилі × HTTP нұсқасы × ядро).
Ауыспалы және шуылды бақылау
CPU governor: `performance`; «power save» дегенді өшіру.
Turbo/Throttling: жиіліктер, температуралар және троттлинг мониторингі (әйтпесе жылыту жалған ұтыстар береді).
NUMA/Hyper-Threading: IRQ және процестерді бекітіңіз ('taskset/numactl'), жад орнын өлшеңіз.
C-states/IRQ balance: параметрлерді белгілеңіз; желілік тесттер үшін - нақты ядроларға pin IRQ.
Өңдік процестер: таза тұнба, cron/backup/antivirus/updatedb өшіру.
Желі: тұрақты жолдар, тіркелген MTU/ECN/AQM, канал флаттерінің болмауы.
Деректер: бірдей жиынтықтар, кардиналитет және бөлу.
Кэш: «суық» (бірінші өту) және «жылы» (қайталау) режимдерін бөліңіз, анық белгілеңіз.
Бенчмаркалар сыныптары
1) Микро-бенчмаркалар (функция/алгоритм)
Мақсаты: нақты кодты/алгоритмді өлшеу.
Құралдар: орнатылған бенч-фреймворк (Go 'testing. B`, JMH, pytest-benchmark).
Ережелер: JIT жылыту, миллисекундтар → наносекундтар; GC оқшаулау; тіркелген seed.
2) Мезо-бенчмаркалар (компонент/сервис)
HTTP-сервер, кэш, брокер, бір нодтағы ДҚ.
Құралдар: wrk/wrk2, k6 (open model), vegeta, ghz (gRPC), fio, sysbench, iperf3.
Қағидалар: қосылыстардың/файлдардың, пулдардың лимиттері; CPU/IRQ/GC туралы есеп.
3) Макро-бенчмаркалар (е2е/сұрау жолы)
Толық жол: CDN/edge → proxy → сервис → ДБ/кэш → жауап.
Құралдар: k6/Locust/Gatling + RUM/OTel трейсинг; бағыттардың шынайы қоспасы.
Ережелер: шындыққа жақынырақ («лас» деректер, сыртқы жүйелердің лагтары), ретралармен ұқыпты.
Қабаттар бойынша метриктер жиынтығы
Тест үлгілері мен пәрмендері
Желі (TCP/UDP):bash iperf3 -s # server iperf3 -c <host> -P 8 -t 60 # parallel, stable bandwidth
HTTP-сервер (тұрақты жүктеме, wrk2):
bash wrk2 -t8 -c512 -d5m -R 20000 https://api. example. com/endpoint \
--latency --timeout 2s
Open-моделі (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'] }
};
Диск (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
БД (sysbench + PostgreSQL болжамды идея):
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
Жады/CPU (Linux perf + stress-ng):
bash perf stat -e cycles,instructions,cache-misses,L1-dcache-load-misses \
-- <your_binary> --bench
Статистика және валидация
Қайталаулар: кем дегенде 10 прогон, outliers алынып тасталсын (робастно: медиана/MAD).
Сенімді аралық: p95/p99 және орташа үшін 95% CI бутстрэп.
Әсері-өлшемі: салыстырмалы өзгерісі және оның CI (мысалы, − 12% [− 9%; − 15%]).
Практикалық маңыздылығы: p95 + 30% CPU бағасы кезінде 10% -ға төмендеуі - тұра ма?
Графиктер: violin/ECDF тарату үшін, «қанығу қисықтары» (RPS → latency).
Тар жерді бейіндеу және оқшаулау
CPU: `perf`, `async-profiler`, eBPF/pyroscope; flamegraph дейін және кейін.
Alloc/GC: runtime профильдері (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.
Кэш: топ-кілттер, TTL, eviction себебі.
Есептілік және артефактілер
Не жазу керек:- git SHA билда, құрастыру/оңтайландыру жалаушалары.
- Негізгі/желі (sysctl), драйверлер нұсқалары/NIC/firmware.
- Топология (vCPU/NUMA/HT), governor, температура/жиілік.
- Деректер: өлшем, кардиналитет, бөлу.
- Не жариялау керек: p50/p95/p99 кестелері, қате/сек, throughput, ресурстар (CPU/RAM/IO), CI.
- Артефакттар: жүгіру скрипттері, графиктер, flamegraph, шикі JSON/CSV нәтижелері, қоршау хаттамасы.
Адал салыстырулар (fair benchmarking)
Бірдей шектегіштер (conn pool, keepalive, TLS тізбектері, OCSP stapling).
Келісілген таймауттар/ретрайлер және HTTP нұсқасы (h2/h3).
Температуралық теңгерім: тепе-теңдікке дейін жылыту (турбо-қарқынды әсерсіз).
Әділ кэштер: екеуі де «салқын» немесе екеуі де «жылы».
Желілік симметрия: бірдей бағыттар/MTU/ECN/AQM.
Уақыт бюджеті: DNS/TLS/connect - анық санау немесе бірдей алып тастау.
Қарсы үлгілер
Бір рет өту → «шығару».
Режимдерді (суық бөлігін, жылы бөлігін) бір серияда араластыру.
Ашық интернет жүктеменің орнына жабық модель → жалған «орнықтылық».
Ескерілмеген ретраялар → «RPS өседі» дубль және каскад бағасы 5xx.
Әртүрлі темірлермен/ядролармен/энергия схемаларымен салыстыру.
Профильдеудің жоқтығы → «соқыр» оңтайландыру.
Профиль анализі жоқ GC/heap ойын → артқы регрессия.
Практикалық рецептілер
Ең аз бенч-пайплайн қадамдары:1. Қоршауды бекіту (скрипт 'env _ capture. sh`).
2. Жылыту (5-10 мин), жиілікті/температураны белгілеу.
3. Қысқа + 1 ұзақ рет қайталау N жүргізу.
4. Пик кезінде профильдерді (CPU/alloc/IO) алып тастау.
5. CI/графиктерді санау, артефактілерді жинау.
6. Шешім: гипотезаны қабылдау/қабылдамау, next steps қалыптастыру.
Сыйымдылық қисығы (capacity curve):- RPS сатылары (10% қадам) → р95/қателерді бекітеміз → «тізе» табамыз.
- RPS → latency және RPS → CPU кестесін жасаймыз: шекараны және одан арғы% құнын көреміз.
iGaming/финтех ерекшелігі
Миллисекунд құны: $ -эффект бойынша жақсартуларды саралаңыз (конверсия/кету/PSP лимиттері).
Шыңдар (матчтар/турнирлер): TLS/CDN/кэшпен жылытылатын spike + plateau бенчмаркалары.
Төлемдер/PSP: sandbox-лимиттермен end-to-end, теңсіздік және тозу реакцияларын өлшеңіз; Time-to-Wallet прокси-метриктерін белгілеңіз.
Антифрод/бот сүзгілері: ережелер профилін макро-бенчке қосыңыз (false-positive-rate, latency қоспасы).
Көшбасшылар/джекпоттар: ыстық кілттерді/ранжирлеуді, блоктауды, атомдылықты тестілеңіз.
Бенчмаркинг чек-парағы
- Жетістіктің гипотезасы/метрикасы/критерийі.
- Айнымалыларды бақылау (қуат/NUMA/IRQ/желі/кэш).
- Жүріп өту жоспары (реплика, ұзақтығы, жылынуы).
- Режимдерді «суық/жылы» бөлу.
- Профильдеу қосылған (CPU/alloc/IO/ДБ).
- Статистика: CI, маңыздылық тестілері, графиктер.
- Репозиторийдегі артефактілер мен repro-скрипттер (стенд үшін IaC).
- «Жақсарту құны» мен ұсынымдары бар есеп.
- Оңтайландырудан кейінгі ретест (regression perf).
Шағын есеп (үлгі)
Мақсаты: CPU өсімінсіз p95 API-ны 15% -ға азайту> 10%.
Әдісі: A/B, k6 open-model 1k rps, 10 × 3 прогоны, warm cache.
Барлығы: p95 − 12% [− 9%; − 15%], CPU + 6%, 5xx өзгеріссіз.
Flamegraph: ↓ JSON сериалдандыру (− 30% CPU), тар орын ДБ-ға ауысты.
Шешім: оңтайландыруды қабылдау; келесі қадам - ДБ сұрауларын батч.
Артефакттар: графиктер, профильдер, конфигалар, шикі JSON.
Жиынтығы
Жақсы бенчмаркинг - бұл қатаң әдіснама + адал салыстыру + статистикалық валидация + профильдеу + жаңғыртылу. Гипотезаларды қойыңыз, қоршаған ортаны бақылаңыз, сенімді аралықтарды есептеңіз, артефакттарды жариялаңыз және жақсарту құны бойынша шешім қабылдаңыз. Осылайша, сіз презентацияда әдемі санды емес, платформаның жылдамдығы мен болжамдылығының нақты өсімін аласыз.