Benchmarking жана аткаруу салыштыруу
Кыскача резюме
Бенчмаркинг - бул эксперимент эмес, "5 мүнөт бою wrk баштоо". Негизги принциптери:1. Гипотезаны жана метриканы формулировкалаңыз.
2. Өзгөрмөлөрдү (темир, ядро, электр энергиясы, фондун ызы-чуусу) көзөмөлдөө.
3. Жетиштүү маалыматтарды чогултуу (репликалар, ишенимдүү интервалдар).
4. Профилди жүргүзүү - ансыз "эмне үчүн" түшүнүү мүмкүн эмес.
5. repro жасаңыз: скрипттер, версияларды жана экспонаттарды бекитүү.
Этаптык жана бизнес-метрика максаттары
кубаттуулугу (throughput): RPS/QPS/CPS, жазуу/сек.
кечигүү (latency): p50/p95/p99/куйруктарынын тыгыздыгы.
Натыйжалуулугу: Cost-per-1k RPS, транзакция үчүн ватт, $/миллисекунд жакшыртуу.
Туруктуулук: Життер, циклдер/ноддор ортосундагы өзгөрмөлүүлүк.
Ийкемдүүлүк: N × ресурсунда көрсөткүчтөр кандай масштабда (Amdahl/Gustafson көрсөтмөлөр).
Методология: эксперимент дизайн
гипотеза: "HTTP/3 менен Envoy p95 TTFB ошол эле RPS менен 10-15% га азайтат".
Салыштыруу бирдиги: Темир тилкесинин/ /инстанциясынын версиясы.
A/B схемасы: бирдей чөйрөдө параллелдүү өтүү; же ABAB/Latin Square drift таасирин азайтуу үчүн.
кайталоо саны: ≥ 10 кыска + туруктуу баа берүү үчүн конфигурация боюнча 3 узун прогон.
Статистика: медиа, MAD, butstrapom ишеним интервалдары; "куйруктуу" бөлүштүрүү үчүн параметр тесттер (Mann-Whitney).
DoE (минималдуу): Бир убакта бир өзгөрмөлүү (OVAT) же 2-3 факторлор үчүн фракциялык фактордук планды өзгөртүү (мисалы, TLS профили × HTTP версиясы × ядро).
Өзгөрмөлүү жана ызы-чуу башкаруу
CPU governor: `performance`; "Power Save" өчүрүү.
Turbo/Throttling: жыштык, температура жана Trottling мониторинг (болбосо жылытуу жалган утуштарды берет).
NUMA/Hyper-Threading: IRQ жана процесстерди бекитүү ('taskset/numactl'), эстутумдун жайгашкан жерин өлчөө.
C-states/IRQ балансы: орнотуу; тармак тесттер үчүн - конкреттүү ядро үчүн IRQ pin.
Фон процесстери: таза нода, cron/backup/antivirus/updatedb өчүрүү.
Network: туруктуу жолдор, белгиленген MTU/ECN/AQM, канал Flatter жоктугу.
Маалыматтар: бирдей топтомдор, кардиналдуулук жана бөлүштүрүү.
Кэш: "муздак" (биринчи өткөөл) жана "жылуу" (кайра) режимдерин бөлүп, так белгилөө.
Эталон класстары
1) микро-эталон (функция/алгоритм)
Максаты: конкреттүү кодду/алгоритмди өлчөө.
Куралдар: камтылган bench-frameworks (Go 'testing. B`, JMH, pytest-benchmark).
Эрежелер: JIT жылытуу, миллисекунддар → наносекунддар; GC изоляциясы; белгиленген seed.
2) Мезо-бенчмарктар (компонент/кызмат)
HTTP-Server, кэш, брокер, бир нод боюнча DD.
Куралдар: wrk/wrk2, k6 (open model), vegeta, ghz (gRPC), fio, sysbench, iperf3.
Эрежелер: кошулмалардын/файлдардын, пулдардын лимиттери; CPU/IRQ/GC жөнүндө отчет.
3) Макро-этаптары (e2e/сурам жолу)
Толук жол: CDN/edge → proxy → кызматы → DB/кэш → жооп.
Инструменттер: k6/Locust/Gatling + RUM/OTel Trace; жолдордун реалдуу аралашмасы.
Эрежелер: чындыкка жакыныраак ("кир" маалыматтар, тышкы системалардын лагдары), ретра менен кылдаттык менен.
Катмарлар боюнча метриктердин жыйындысы
Тест үлгүлөрү жана буйруктары
Тармак (TCP/UDP):bash iperf3 -s # server iperf3 -c <host> -P 8 -t 60 # parallel, stable bandwidth
HTTP Server (туруктуу жүк, 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
BD (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 + стресс-ng):
bash perf stat -e cycles,instructions,cache-misses,L1-dcache-load-misses \
-- <your_binary> --bench
Статистика жана ырааттуулук
кайталоо: жок дегенде 10 прогондор, outliers алынып салынат (robastno: mediana/MAD).
Ишеним аралыктары: 95% p95/p99 жана орто үчүн CI бутстреп.
Эффект-өлчөмү: салыштырмалуу өзгөрүү жана анын CI (мисалы, − 12% [− 9%; − 15%]).
Практикалык мааниси: p95 + 30% CPU баасы менен 10% га төмөндөшү - татыктуу?
Graphics: бөлүштүрүү үчүн 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 Билда, чогултуу/оптималдаштыруу желектери.
- Config ядро/тармак (sysctl), диск версиялары/NIC/firmware.
- Топология (vCPU/NUMA/HT), governor, температура/жыштык.
- Маалыматтар: өлчөмү, кардиналдуулук, бөлүштүрүү.
- Эмне жарыялоо керек: таблицалар p50/p95/p99, ката/сек, throughput, ресурстар (CPU/RAM/IO), CI.
- Артефакттар: прогон скрипттери, графиктер, жалтылдатуу, чийки JSON/CSV натыйжалары, айлана-чөйрө протоколу.
Чынчыл салыштыруу (fair benchmarking)
Бирдей чектөө (conn pool, keepalive, TLS чынжыр, OCSP stapling).
Макулдашылган таймауттар/ретрайлер жана HTTP версиясы (h2/h3).
Температура балансы: салмактуулукка чейин жылытуу (турбо-күчтүү таасири жок).
Адилет кэш: экөө тең "суук", же экөө тең "жылуу".
Тармак симметриясы: бирдей жолдор/MTU/ECN/AQM.
Убакыт бюджети: DNS/TLS/connect - так эсептөө же бирдей жокко чыгаруу.
Анти-үлгүлөрү
Бир прогон → "чыгаруу".
бир катар режимдерин аралаштыруу (муздак бөлүгү, жылуу бөлүгү).
Жабык модель ордуна ачык интернет жүктөө → жалган "туруктуулук".
Эске алынбаган Retrains → "RPS өсүүдө" баасы дубль жана каскад 5xx.
Салыштыруу ар кандай темир/ядро/энергетикалык схемалар боюнча.
Профилдин жоктугу → "сокур" оптималдаштыруу.
профилдерин талдоо жок GC/heap менен оюн → куйруктарын регрессия.
Практикалык Recipes
Минималдуу bench-payplayn кадамдары:1. курчап (скрипт 'env _ capture. sh`).
2. жылытуу (5-10 мин), жыштык/температураны бекитүү.
3. Кыска + 1 узак прогон кайталоо N өткөрүү.
4. Профилдерди (CPU/alloc/IO) туу чокусунда алып салуу.
5. CI/графика санап, экспонаттарды чогултуу.
6. Чечим: гипотезаны кабыл алуу/четке кагуу, кийинки кадамдарды түзүү.
Сыйымдуулуктун ийри сызыгы (capacity curve):- Этап RPS (10% кадам) → p95/каталарды чечүү → "тизе" табуу.
- Биз RPS → latency жана RPS → CPU графигин куруп жатабыз: чек араны жана андан аркы% наркын көрүп жатабыз.
iGaming/Fintech үчүн өзгөчөлүктөрү
Миллисекунддук наркы: $ -эффект боюнча жакшыртууларды ранжирлөө (конверсия/агып кетүү/PSP лимиттери).
чокулары (дан/турнир): TLS/CDN/кэш жылытуу менен spike + plateau бенчмарктар.
Төлөмдөр/PSP: Сандбокс лимиттери менен end-to-end, демпотенттик жана деградацияга реакцияларды өлчөө; Time-to-Wallet proxy метриктер менен бекитүү.
Антифрод/бот фильтрлери: макро-бенч эрежелеринин профилине киргизиңиз (false-positive-rate, latency кошумчасы).
Лидерлер/джекпот: ысык ачкычтарды/рейтингин, кулпу, атомдук тестирлөө.
Чек тизмеси
- Гипотеза/метрика/ийгиликтин критерийи.
- Өзгөрмөлүү башкаруу (Power/NUMA/IRQ/Network/кэш).
- Прогондор планы (репликалар, узактыгы, жылытуу).
- бөлүү "суук/жылуу" режимдери.
- Profile камтылган (CPU/alloc/IO/BD).
- Статистика: CI, маанилүүлүк тесттер, графиктер.
- Репозиторийдеги экспонаттар жана repro скрипттер (стенд үчүн IaC).
- "жакшыртуу наркы" жана сунуштар менен отчет.
- оптималдаштыруу кийин Retest (regression perf).
Mini отчет (шаблон)
Максаты: 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), тар DD көчүп.
Чечим: оптималдаштыруу кабыл алуу; кийинки кадам - DD суроо-талаптарды батч.
Артефакттар: графика, профили, конфиги, чийки JSON.
Жыйынтык
Жакшы benchmarking - бул катуу методология + чынчыл салыштыруу + статистикалык ырааттуулук + профилирование + кайталануучулук. Гипотезаларды коюңуз, айлана-чөйрөнү көзөмөлдөп, ишенимдүү интервалдарды эсептеп, экспонаттарды жарыялаңыз жана жакшыртуунун наркын чечиңиз. Ошентип, сиз презентацияда сулуу санды эмес, платформанын ылдамдыгынын жана алдын ала билүүнүн реалдуу өсүшүн аласыз.