Муқоиса ва муқоисаи иҷро
Хулосаи мухтасар
Benchmarking як озмоиш аст, на "корвони давида барои 5 дақиқа. "Принсипҳои асосӣ:1. Гипотеза ва ченакҳоро таҳия кунед.
2. Тағйирёбандаҳои назоратӣ (сахтафзор, аслӣ, қудрат, садои пасзамина).
3. Ҷамъоварии маълумоти кофӣ (нусхаҳо, фосилаҳои эътимод).
4. Профилактика кунед - бе он шумо "чаро" -ро намефаҳмед.
5. Repro: скриптҳо, ислоҳи версияҳо ва артефактҳо.
Ҳадафҳои нишондиҳанда ва нишондиҳандаҳои тиҷорат
Интиқол: RPS/QPS/CPS, менависад/sec
Таъхир: зичии p50/p95/p99/дум.
Самаранокӣ: Cost-per-1k RPS, ватт барои як транзаксия, такмили $/миллисекунд.
Устуворӣ: ҷиттер, тағйирпазирии байнишаҳрӣ/гиреҳ.
Тағйирпазирӣ: чӣ гуна нишондиҳандаҳо дар захираи N × (нишондиҳандаҳои Амдал/Густафсон).
Методология: тарҳи таҷрибавӣ
Гипотеза: "Фиристодаи бо HTTP/3 p95 TTFB-ро бо ҳамон RPS 10-15% кам мекунад".
Воҳиди муқоиса: сохтани/config/нусхаи оҳан.
Диаграммаи A/B: параллелӣ дар муҳити шабеҳ; ё ABAB/майдони лотинӣ барои коҳиш додани таъсири дрифт.
Шумораи такрори: ≥ 10 кӯтоҳ + 3 дарозии як конфигуратсия барои рейтингҳои устувор.
Омор: миёнаравӣ, MAD, фосилаҳои эътимоднокии боркунӣ; озмоишҳои ғайриметрикӣ (Манн-Уитни) барои тақсимоти "дум".
Оё (ҳадди аққал): Як тағирёбандаро дар як вақт (OVAT) ё омили омилиро барои 2-3 омил иваз кунед (масалан, профили TLS × нусхаи HTTP × ядро).
Назорати тағйирёбанда ва садо
Губернатори CPU: 'иҷро'; хомӯш кардани "захираи барқ".
Турбо/Тротлинг: басомадҳои мониторинг, ҳарорат ва дросслинг (вагарна гарм кардан бурди бардурӯғ медиҳад).
NUMA/Hyper-Threading: pin IRQ ва равандҳо ('taskset/numactl'), ҷойгиршавии хотираро чен кунед.
Тавозуни C-давлатҳо/IRQ: танзимотро ислоҳ кунед; барои санҷишҳои шабакавӣ - PIN IRQ барои ядроҳои мушаххас.
Равандҳои пасзамина: гиреҳи тоза, хомӯш кардани cron/нусхабардорӣ/антивирус/updatedb.
Шабака: роҳҳои устувор, собит MTU/ECN/AQM, парешонии канал.
Маълумот: маҷмӯаҳои якхела, кардиналӣ ва тақсимот.
Кэш: режими алоҳидаи "хунук" (гузариши аввал) ва "гарм" (такрорӣ), ба таври возеҳ ишора мекунанд.
Синфҳои нишондиҳанда
1) Нишондиҳандаҳои хурд (функсия/алгоритм)
Мақсад: Рамзи/алгоритми мушаххасро чен кунед.
Воситаҳо: чаҳорчӯбаи дарунсохт (Go 'testing). B ', JMH, pytest-нишондиҳанда).
Қоидаҳо: JIT гармкунӣ, миллисекундҳо → наносекундҳо; Ҷудокунии GC; тухми собит.
2) Нишондиҳандаҳои Meso (компонент/хидмат)
HTTP сервер, кэш, брокер, пойгоҳи додаҳо дар як гиреҳ.
Асбобҳо: wrk/wrk2, k6 (модели кушода), гиёҳҳо, ghz (GRPC), fio, sysbench, iperf3.
Қоидаҳо: маҳдудиятҳои пайвастшавӣ/файл, ҳавзҳо; Ҳисоботи CPU/IRQ/GC.
3) Нишондиҳандаҳои макро (роҳи e2e/дархост)
Роҳи пурра: CDN/edge → proxy → service → DB/кэш → ҷавоб.
Воситаҳо: пайгирии k6/Locust/Gatling + RUM/OT bel; омехтаи воқеии хатсайрҳо.
Қоидаҳо: ба воқеият наздиктар (маълумоти "ифлос", ақибмонии системаҳои беруна), ба таври дақиқ бо ретрас.
Ченакҳо аз рӯи қабат
Қолибҳо ва фармонҳои санҷишӣ
Шабака (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, сатҳи расидан):
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 хониши тасодуфӣ):
bash fio --name=randread --rw=randread --bs=4k --iodepth=64 --numjobs=4 \
--size=4G --runtime=120 --group_reporting --filename=/data/testfile
Пойгоҳи додаҳо (идеяи намунавии sysbench + PostgrE SQL):
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 медаванд, хориҷиёнро истисно кунед (мустаҳкам: median/MAD).
Фосилаҳои эътимод: пурборкунии 95% CI барои p95/p99 ва воситаҳо.
Андозаи таъсир: тағирёбии нисбӣ ва CI-и он (масалан − 12% [− 9%; − 15%]).
Аҳамияти амалӣ: 10% коҳиш дар p95 бо нархи + 30% CPU - оё ин меарзад?
Графҳо: скрипка/ECDF барои тақсимот, "хатҳои пуррагӣ" (RPS → ниҳонӣ).
Профили Bottleneck ва маҳаллисозӣ
CPU: 'perf', 'async-profiler', eBPF/пироскоп; фламеграф пеш ва баъд.
Alloc/GC: профилҳои корӣ (Go pprof/Java JFR).
I/O: 'iostat', 'blktrace', 'fio --lat_percentiles=1'.
Сеть:'s -s ',' ethtool -S ',' dropwatch ',' tc -s qdisc '.
БД: 'ФАҲМОНЕД (ANALIZE, BUFFERS)', pg_stat_statements, slowlog.
Пули нақд: калидҳои болоӣ, TTL, сабаби хориҷшавӣ.
Ҳисобот ва артефактҳо
Чиро ислоҳ кардан лозим аст:- парчамҳои сохтан, тартиб додан/оптимизатсия git SHA.
- Конфигуратсияҳои ядро/шабака (sysctl), версияҳои драйвер/NIC/firmware.
- Топология (VCPU/NUMA/HT), ҳоким, ҳарорат/басомад.
- Маълумот: андоза, кардиналӣ, тақсимот.
- Чиро бояд нашр кард: ҷадвалҳои p50/p95/p99, хатогӣ/сония, интиқол, захираҳо (CPU/RAM/IO), CI.
- Артефактҳо: скриптҳои иҷро, графикҳо, фламеграф, натиҷаҳои JSON/CSV, протоколи муҳити зист.
Нишондиҳии одилона
Маҳдудиятҳои якхела (ҳавзи конн, keepalive, занҷири TLS, stapling OCSP).
Вақти гуфтушунид/бозсозӣ ва версияи HTTP (h2/h3).
Тавозуни ҳарорат: гарм шудан то мувозинат (бе таъсири турбо-афзоиш).
Кэшҳои одилона: Ҳарду "хунук" ё ҳарду "гарм".
Симметрияи шабака: хатсайрҳои якхела/MTU/ECN/AQM.
Буҷаи вақт: DNS/TLS/connect - ба таври возеҳ ҳисоб кунед ё баробар истисно кунед.
Анти-намунаҳо
Як давидан → "натиҷа".
Омезиши режимҳо (қисми хунук, қисми гарм) дар як силсила.
Модели пӯшида ба ҷои модели кушода барои сарбории Интернет → устувории бардурӯғ.
Бозёфтҳои ҳисобнашуда → "RPS меафзояд" аз ҳисоби хароҷот ва каскад 5xx.
Муқоиса дар ғадудҳо/ядроҳо/схемаҳои барқ.
Не профил → оптимизатсияи нобино.
Бозӣ бо GC/heap бидуни таҳлили профил → регрессияи дум.
Дастурҳои амалӣ
Қадамҳои ҳадди аққали қубур:1. Муҳитро ислоҳ кунед (скрипт 'env _ capture. ш ').
2. Гарм кунед (5-10 дақиқа), басомадҳо/ҳароратҳои сабт.
3. Гузаронидани N такрори кӯтоҳ + 1 дароз.
4. Профилҳоро (CPU/alloc/IO) дар қуллаи баланд тоза кунед.
5. CI/графикҳоро ҳисоб кунед, артефактҳо ҷамъ кунед.
6. Ҳал: гипотезаро қабул/рад кунед, қадамҳои минбаъдаро ташкил диҳед.
Хати каҷ:- Қадамҳои RPS (10% қадам) → ислоҳи p95/хатогиҳо → ёфтани "зону".
- Мо ҷадвали RPS → ниҳонӣ ва RPS → CPU месозем: сарҳад ва арзиши минбаъдаи% -ро мебинем.
IGaming/fintech мушаххас
Арзиши як миллисекунд: Беҳтар кардани дараҷа бо таъсири $ (табдили/churn/маҳдудиятҳои PSP).
Қуллаҳо (гугирдҳо/мусобиқаҳо): хӯша + нишондиҳандаҳои плато бо гармкунии TLS/CDN/кэш.
Пардохтҳо/PSP: андозагирии ниҳоӣ бо маҳдудиятҳои қуттии қуттӣ, аблаҳӣ ва аксуламал ба таназзул; Вақти ҳамёнро бо ченакҳои прокси ислоҳ кунед.
Филтрҳои зидди қаллобӣ/бот: профили қоидаҳоро дар курсии макро дохил кунед (бардурӯғ-мусбат, иловаи ниҳонӣ).
Роҳбарон/jackpots: Калидҳои гарм/рейтинги санҷишӣ, қуфлҳо, атомизм.
Рӯйхати назоратӣ
- Гипотеза/ченакҳо/меъёри муваффақият.
- Мониторинги тағйирёбанда (қудрат/NUMA/IRQ/шабака/кэш).
- Нақшаи иҷро (нусхаҳо, давомнокӣ, гармшавӣ)
- Ҷудошавии хунук/гарм.
- Профил фаъол аст (CPU/alloc/IO/DB).
- Омор: CI, санҷишҳои аҳамият, графикҳо.
- Артефактҳо ва скриптҳои репро дар репозитория (Ia
- Ҳисобот бо "арзиши такмил" ва тавсияҳо.
- perf регрессия.
Ҳисоботи хурд (қолаб)
Ҳадаф коҳиш додани p95 API 15% бидуни афзоиши CPU> 10% аст.
Усул: A/B, k6 open-model 1k rps, 10 × 3 медавад, кэши гарм.
Ҷамъ: p95 − 12% [− 9%; − 15%], CPU + 6%, 5xx бетағйир.
Фламеграф: ↓ сериали JSON (− 30% CPU), мушкилӣ ба пойгоҳи додаҳо гузашт.
Қарор: оптимизатсияро қабул кунед; қадами навбатӣ гурӯҳбандии дархостҳои пойгоҳи додаҳо мебошад.
Артефактҳо: графика, профилҳо, конфигуратсияҳо, JSON хом.
Ҷамъ
Нишондиҳии хуб методологияи қатъӣ + муқоисаи одилона + эътибори оморӣ + профилизатсия + репродуктивӣ мебошад. Гипотеза, назорати муҳити зист, хондани фосилаҳои эътимод, нашр кардани артефактҳо ва қабули қарорҳо оид ба арзиши такмил. Ҳамин тавр, шумо дар муаррифӣ рақами зебо нахоҳед гирифт, балки афзоиши воқеии суръат ва пешгӯии платформа.