Բենչմարկինգը և արտադրողականության համեմատությունը
Live ռեզյումե
Բենչմարկինգը փորձառություն է, ոչ թե «հինգ րոպե սկսել»։ Հիմնական սկզբունքները
1. Ձևավորեք հիպոթեզներ և չափումներ։
2. Վերահսկեք ապրանքները (երկաթ, միջուկ, սնունդ, ֆոնի աղմուկ)։
3. Հավաքեք բավարար տվյալներ (կրկնօրինակներ, վստահելի ընդմիջումներ)։
4. Կիրառեք ավելցուկը 'առանց դրա չհասկանալու «ինչու»։
5. Արեք repro 'ջութակներ, տարբերակների և արտեֆակտների ամրագրում։
Բենչմարկի և բիզնեսի մետրիկայի նպատակները
Թողունակություն (throughput): RPS/QPS/CPS, ձայնագրություններ/վայրկյան։
Ուշացում (latency) ՝ r50/r95/r99/պոչերի խտությունը։
Արդյունավետությունը 'Cost-per-1k RPS, գործարքի վատը, $/միլիմետր բարելավման։
Ստանդարտ 'ջիտթեր, փոփոխականություն ցիկլերի/նոդների միջև։
Առաձգականություն. Ինչպե՞ ս են ավելանում N ռուսական ռեսուրսի ցուցանիշները (Amdahl/Gustafson կենտրոններ)։
Մեթոդաբանություն 'փորձի դիզայն
Հիպոթեզը ՝ «Envoy HTTP/3 հետ կնվազեցնի p95 TTFB-ը 10-15 տոկոսով նույն RPS-ում»։
Համեմատության միավորը 'տոմսերի/ww.g/instans երկաթի տարբերակը։
A/B-սխեմա 'զուգահեռ պրոգոն նույն միջավայրում։ ԿԱՄ ABAB/Latin Square-ը, որպեսզի նվազեցնի դրեյֆի ազդեցությունը։
Կրկնությունների քանակը ՝ 10 կարճ + 3 երկար շեղումներ կայուն գնահատականների համար։
Վիճակագրությունը 'մեդիա, MAD, վստահելի ընդմիջումներ բուտստրապով։ ոչ գծագրական թեստեր (Mann-Whitney) «պոչի» բաշխման համար։
DoE (նվազագույն) 'փոխեք մեկ փոփոխությունը մեկ անգամ (OVAT) կամ միգրացիոն ֆակտորային պլանը 2-3 գործոնների համար (օրինակ, TRC-պրոֆիլը wwww.HTP տարբերակն է)։
Փոփոխականների և աղմուկների վերահսկումը
CPU governor: `performance`; անջատել «www.save»։
Turbo/Throttling: Հաճախականության, ջերմաստիճանի և trottling (հակառակ դեպքում տաքացնում է կեղծ շահումները)։
NUMA/Hyper-Threading: Համախմբեք IRQ-ը և գործընթացները («taskset/numactl»), չափեք հիշողության տարածքը։
C-states/IRQ bal.ru: Գրանցեք հասցեները։ ցանցային թեստերի համար 'pin IRQ հատուկ միջուկների վրա։
Ֆոնային գործընթացները 'մաքուր նոդա, անջատել com/backup/antivirus/wwww.atedb։
Ցանցը 'կայուն ճանապարհներ, որոնք ամրագրված են MTU/ECN/AQM-ի, ալիքի ֆլատերի բացակայությունը։
Տվյալները 'նույն հավաքածուները, կարդինալիզմը և բաշխումը։
Քաշ 'բաժանեք «սառը» (առաջին ստանդարտ) և «տաք» (կրկնվող) ռեժիմները, ակնհայտորեն փչացրեք։
Բենչմարկների դասարաններ
1) Micro-bencharks (ֆունկցիա/ալգորիթմ)
Նպատակը 'չափել կոնկրետ կոդը/ալգորիթմը։
Գործիքներ 'ներկառուցված բենչ-շրջանակներ (Go' testing. B`, JMH, pytest-benchmark).
Կանոնները 'տաքացնելով JIT-ը, միլիոնավոր նանեկունդներ, մեկուսացում GC; ֆիքսված seed.
2) Meso-bencharki (բաղադրիչ/ծառայություն)
HTTP սերվերը, քեշը, բրոքերը, BD-ը մեկ նոդում։
Գործիքներ ՝ wrk/wrk2, k6 (բաց model), vegeta, ghz (gRPC), fio, sbench, iperf3։
Կանոնները ՝ limitts/ֆայլեր, փամփուշտներ։ CPU/IRQ/GC զեկույցը։
3) Makro-bencharki (e2e/հարցման ուղի)
Ամբողջ ճանապարհը ՝ CDN/edge proxy www.BD/kash ծառայությունն է։
Գործիքներ ՝ k6/Mastust/Gatling + RUM/OTel tracing; երթուղիների իրատեսական խառնուրդ։
Կանոնները ՝ ավելի մոտ իրականությանը («կեղտոտ» տվյալներ, արտաքին համակարգերի ճամբարներ), մանրակրկիտ գետերի հետ։
Շերտերի վրա նետաձիգների մի շարք
Թեստերի և թիմի ձևանմուշները
Ցանցը (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
Բաց մոդել (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 randensread)
bash fio --name=randread --rw=randread --bs=4k --iodepth=64 --numjobs=4 \
--size=4G --runtime=120 --group_reporting --filename=/data/testfile
BD (wwww.sbench + 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 եղջյուր, բացառել www.iers (ռոբաստոն ՝ միջին/MAD)։
Վստահելի ընդմիջումները '95% CI p95/p99 և միջին համար։
Էֆեկտը 'հարաբերական փոփոխությունը և դրա CI (օրինակ ՝ 3,12 տոկոսը [369 տոկոսը; 3615%)։
Գործնական կարևորություն 'p95-10 տոկոսով նվազեցնել + 30% CPU գնով, արժե՞։
Գծապատկերներ ՝ violin/ECDF բաշխման համար, «ծուռ հագեցվածություն» (RPS entlatency)։
Ավելացումը և տեղանքի տեղայնացումը
CPU: `perf`, `async-profiler`, eBPF/pyroscope; flamegraph մինչև և հետո։
Alloc/GC: runtime (Go delrof/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 տոմս, կազմման/օպտիմիզացման դրոշներ։
Միջուկի/ցանցի (wwww.sctl), վարորդների/NIC/firm.ru տարբերակները։
Տեղաբանությունը (vCPU/NUMA/HT), governor, ջերմաստիճանը/հաճախականությունը։
Տվյալները ՝ չափսը, կարդինալիզմը, բաշխումը։
Ինչ հրապարակել 'p50/p95/p99, սխալ/վայրկյան, throughput, ռեսուրսներ (CPU/RAM/IO), CI։
Արտեֆակտներ ՝ պրոգոնի, գրաֆիկայի, flamegraph, JSON/CSV արդյունք, շրջապատման արձանագրություն։
Ազնիվ համեմատություններ (fox benchmarking)
Նույնական սահմանափակիչներ (conn pool, keepalive, TSA շղթաներ, OCMS stapling)։
Timauts/retrai և HTP տարբերակը (h2/h3)։
Ջերմաստիճանի հավասարակշռությունը 'տաքացնելով հավասարակշռության (առանց ազդեցության turbo-bust)։
Արդար քեշներ 'կամ երկուսն էլ սառը են, կամ երկուսն էլ «տաք»։
Ցանցային սիմետրիա 'նույն երթուղիները/MTU/ECN/AQM։
Ժամանակի բյուջեն ՝ CSA/TSA/connational, հստակ կամ բացառել նույն։
Anti-patternes
Մեկ գդոն բացատրում է «եզրակացությունը»։
Ռեժիմների խառնուրդը (որոշ սառը, որոշ տաք) մեկ շարքում։
Փակված մոդելը համացանցային բեռի փոխարեն տեղադրվում է կեղծ «կայունություն»։
"RPS" տերմինալի անգրագետ ակնարկները աճում են "դուբլի և կասկադային 5xx-ի գնով։
Համեմատություն տարբեր երկաթերի/միջուկների/էներգախնայողության հեմերի վրա։
Ավելացման բացակայությունը բացատրում է «արցունքաբեր» օպտիմիզացումը։
Խաղը GC/heap-ի հետ առանց պոչերի ռեգրեսիայի վերլուծության։
Գործնական բաղադրատոմսեր
Քայլերը երկարացնում են բենչ-փետուրային։
1. Ամրագրել շրջապատը (ջութակը 'env _ capture։ sh`).
2. Տաքացնել (5-10 րոպե), շտկել հաճախականությունները/ջերմաստիճանը։
3. Անցկացնել N-ը կարճ + 1 երկար պրոգոն։
4. Հեռացնել պրոֆիլները (CPU/alloc/IO) գագաթին։
5. Հաշվել CI/գրաֆիկա, հավաքել արտեֆակտներ։
6. Որոշումը 'ընդունել/մերժել հիպոթեզը, ձևավորել next steps։
Տարաների կորը (capacity curve)
RPS-ի աստիճանները (10 տոկոսը) նկարագրում ենք r95/սխալները։
Մենք կառուցում ենք RPS www.latency և RPS www.CPU գրաֆիկը, տեսնում ենք սահմանը և արժեքը 105%։
Հատուկ iGaming/fintech համար
Միլիսեքսունդների արժեքը 'դասակարգել բարելավումները դոլար-էֆեկտով (փոխադարձություն/հոսանք/PBS)։
Պիկի (խաղեր/մրցույթներ): բենչեր spike + plateau հետ TFC/CDN/kash։
Վճարումները/PSA: Չափեք end-to-end-ը sandbox-limits, idempotenty և արձագանքները քայքայման վրա։ արձանագրել Time-to-Wallet-metric-ը։
Անտիֆրոդ/բոտ ֆիլտրեր 'միացրեք մակրո-բենչը կանոնների պրոֆիլին (false-positive-rate, latency ավելցուկ)։
Առաջնորդներ/ջեքպոտներ ՝ տաք բանալիներ/ռենջացիա, արգելափակում, ատոմականություն։
Չեկ-թուղթ բենչմարկինգի
- Վարկածներ/չափումներ/հաջողության չափանիշներ։
- Փոփոխականների վերահսկումը (սնունդ/NUMA/IRQ/ցանց/քեշ)։
- Պրոգոնների պլանը (կրկնօրինակներ, տևողություն, տաքացում)։
- «Սառը/տաք» ռեժիմների բաժանումը։
- Ավելացումը ներառված է (CPU/alloc/IO/BD)։
- Վիճակագրությունը ՝ CI, կարևորության թեստեր, գրաֆիկա։
- Arthefakts և repro-ջութակները պահեստում (IaC պատի համար)։
- Զեկույցը «բարելավման արժեքի» և ինտեգրման հետ։
- Ռետեստը օպտիմիզացումից հետո (regression perf)։
Մինի զեկույցը (ձևանմուշ)
Նպատակը 'նվազեցնել p95 API-ը 15 տոկոսով առանց CPU> 10 տոկոսի աճի։
Մեթոդը ՝ A/B, k6 բաց-model 1k rps, 10-3 պրոգոն, warm cache։
Ընդհանուր ՝ p95-12 տոկոսը [249 տոկոսը, 2415 տոկոսը), CPU + 6 տոկոսը, 5xx-ը անփոփոխ։
Flamegraph: wwww.JSON սերիզացիան (www.30% CPU), նեղ տեղը տեղադրվեց BD-ում։
Որոշումը 'կայացնել օպտիմիզացիա; հաջորդ քայլը BD հարցումների մարտկոցն է։
Արտեֆակտներ 'գրաֆիկներ, պրոֆիլներ, դելիգներ, JSON պանիր։
Արդյունքը
Լավ բենչմարկինգը խիստ մեթոդաբանություն է + ազնիվ համեմատություններ + վիճակագրական վալիդենտություն + ավելացում + վերարտադրողականություն։ Վարկածներ դրեք, վերահսկեք շրջապատը, համարեք վստահելի ընդմիջումներ, հրապարակեք արտեֆակտներ և որոշումներ կայացրեք բարելավման արժեքի վերաբերյալ։ Այսպիսով, դուք կստանաք ոչ թե գեղեցիկ թվեր ներկայացման մեջ, այլ պլատֆորմի արագության և կանխատեսելիության իրական աճ։