معیار و مقایسه عملکرد
خلاصه ای کوتاه
Benchmarking یک آزمایش است، نه یک «اجرا برای 5 دقیقه». "اصول اصلی:1. فرضیه و معیارها را تدوین کنید.
2. متغیرهای کنترل (سخت افزار، هسته، قدرت، سر و صدای پس زمینه).
3. جمع آوری داده ها به اندازه کافی (کپی، فواصل اطمینان).
4. آیا پروفایل - بدون آن شما نمی توانید درک «چرا».
5. دوباره انجام دهید: اسکریپت ها، رفع نسخه ها و مصنوعات.
اهداف معیار و معیارهای کسب و کار
توان عملیاتی: RPS/QPS/CPS، می نویسد/ثانیه
تاخیر: p50/p95/p99/تراکم دم.
کارایی: Cost-per-1k RPS، وات در هر معامله، بهبود $/میلی ثانیه.
ثبات: لرزش، بین چرخه/تنوع گره.
کشش: چگونه شاخص ها در منبع N × مقیاس می شوند (معیارهای Amdahl/Gustafson).
روش: طراحی تجربی
فرضیه: «نماینده با HTTP/3 P95 TTFB را با همان RPS 10-15٪ کاهش می دهد».
واحد مقایسه: نسخه build/config/instance از آهن.
نمودار A/B: اجرای موازی در محیط یکسان ؛ یا ABAB/میدان لاتین برای کاهش تاثیر رانش.
تعداد تکرارها: ≥ 10 کوتاه + 3 طولانی اجرا می شود در هر پیکربندی برای رتبه بندی پایدار است.
آمار: میانه، MAD، فواصل اطمینان بوت استرپ ؛ آزمون های ناپارامتری (Mann-Whitney) برای توزیع های «دنباله دار»
DoE (حداقل): تغییر یک متغیر در یک زمان (OVAT) یا فاکتور فاکتور برای 2-3 عامل (به عنوان مثال، مشخصات TLS × نسخه HTTP × هسته).
کنترل متغیر و سر و صدا
فرماندار CPU: «عملکرد» ؛ «صرفه جویی در انرژی» را غیرفعال کنید.
توربو/Throttling: نظارت بر فرکانس، درجه حرارت و throttling (در غیر این صورت گرم کردن خواهد برد کاذب را).
NUMA/Hyper-Threading: IRQ ها و فرآیندهای پین («taskset/numactl»)، محل حافظه را اندازه گیری کنید.
تعادل C-state/IRQ: تنظیمات را اصلاح کنید برای تست های شبکه - پین IRQ برای هسته های خاص.
فرآیندهای پس زمینه: گره تمیز، cron/backup/antivirus/updatedb را خاموش کنید.
شبکه: مسیرهای پایدار، MTU/ECN/AQM ثابت، بدون کانال flutter.
داده ها: مجموعه های مشابه، کاردینالیتی و توزیع.
کش: جداگانه «سرد» (پاس اول) و «گرم» (تکرار) حالت، به صراحت علامت.
کلاس های معیار
1) معیارهای میکرو (تابع/الگوریتم)
هدف: اندازه گیری یک کد/الگوریتم خاص.
ابزار: چارچوب نیمکت داخلی (Go 'testing. B '، JMH، pytest-benchmark).
قوانین: JIT گرم کردن، میلی ثانیه → نانو ثانیه ؛ جداسازی GC ؛ بذر ثابت
2) معیارهای Meso (جزء/سرویس)
سرور HTTP، حافظه پنهان، کارگزار، پایگاه داده در یک گره.
ابزار: wrk/wrk2، k6 (مدل باز)، vegeta، ghz (gRPC)، fio، sysbench، iperf3.
قوانین: محدودیت اتصال/فایل، استخر ؛ گزارش CPU/IRQ/GC
3) معیارهای ماکرو (مسیر e2e/درخواست)
راه کامل: CDN/edge → پروکسی → سرویس → DB/cache → پاسخ.
ابزار: ردیابی k6/Locust/Gatling + RUM/OTel ؛ ترکیبی واقعی از مسیرها.
قوانین: نزدیک به واقعیت (داده های «کثیف»، عقب ماندگی سیستم های خارجی)، منظم با retras.
معیارهای لایه
تست قالب ها و دستورات
شبکه (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، خواندن تصادفی ۴k (:
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 (لینوکس perf + استرس-ng):
bash perf stat -e cycles,instructions,cache-misses,L1-dcache-load-misses \
-- <your_binary> --bench
آمار و اعتبار
تکرار: حداقل 10 اجرا می شود، حذف outliers (قوی: میانه/MAD).
فواصل اطمینان: بوت استرپ 95٪ CI برای p95/p99 و به معنی.
اندازه اثر: تغییر نسبی و CI آن (به عنوان مثال − 12٪ [− 9٪ ؛ − 15٪]).
اهمیت عملی: کاهش 10٪ در p95 با قیمت + 30٪ CPU - آیا ارزش آن را دارد ؟
نمودار: ویولن/ECDF برای توزیع، «منحنی اشباع» (RPS → تاخیر).
پروفایل تنگنا و محلی سازی
پردازنده: 'perf'، 'async-profiler'، eBPF/پیروسکوپ ؛ فلامگراف قبل و بعد.
C/GC: پروفایل های زمان اجرا (Go pprof/Java JFR).
I/O: iostat، blktrace، fio --lat_percentiles=1'.
Сеть: 'ss -s'، 'ethtool -S'، 'dropwatch'، 'tc -s qdisc'.
БД: «توضیح (تجزیه و تحلیل، بافر)»، pg_stat_statements، slowlog.
پول نقد: کلیدهای بالا، TTL، علت اخراج.
گزارش و مصنوعات
چه چیزی را اصلاح کنیم:- git SHA ساخت، پرچم های تلفیقی/بهینه سازی.
- هسته/پیکربندی شبکه (sysctl)، نسخه راننده/NIC/سیستم عامل.
- توپولوژی (vCPU/NUMA/HT)، فرماندار، درجه حرارت/فرکانس.
- داده ها: اندازه، کاردینالیتی، توزیع.
- چه چیزی باید منتشر شود: جداول p50/p95/p99، خطا/ثانیه، توان عملیاتی، منابع (CPU/RAM/IO)، CI.
- مصنوعات: اجرای اسکریپت ها، نمودار ها، فلامگراف، نتایج خام JSON/CSV، پروتکل محیط زیست.
معیار منصفانه
محدود کننده های یکسان (استخر conn، keepalive، TLS زنجیره ای، مهر و موم OCSP).
مدت زمان مذاکره/retrays و نسخه HTTP (h2/h3).
تعادل دما: گرم شدن تا تعادل (بدون اثر توربو تقویت).
انبارهای منصفانه: هر دو «سرد» یا هر دو «گرم».
تقارن شبکه: مسیرهای مشابه/MTU/ECN/AQM.
بودجه زمانی: DNS/TLS/connect - به صراحت شمارش کنید یا به همان اندازه حذف کنید.
ضد الگوهای
یک اجرا → «خروجی».
مخلوط کردن حالت (بخشی سرد، بخشی گرم) در یک سری.
یک مدل بسته به جای یک باز برای بار اینترنت → «ثبات» کاذب.
Retrays حساب نشده → «RPS رشد می کند» در هزینه طول می کشد و آبشار 5xx.
مقایسه در غدد مختلف/هسته/مدارهای قدرت.
بدون پروفایل → بهینه سازی کور.
بازی با GC/هیپ بدون تجزیه و تحلیل مشخصات → رگرسیون دم.
دستور العمل های عملی
حداقل مراحل خط لوله پایه:1. محیط را درست کنید (script 'env _ capture. ).
2. گرم کردن (5-10 دقیقه)، ضبط فرکانس/درجه حرارت.
3. انجام N تکرار کوتاه + 1 بلند مدت.
4. حذف پروفایل (CPU/-/IO) در اوج.
5. محاسبه CI/نمودار، جمع آوری مصنوعات.
6. راه حل: فرضیه را قبول/رد کنید، مراحل بعدی را تشکیل دهید.
منحنی ظرفیت:- مراحل RPS (10٪ از مرحله) → رفع P95/خطاها → پیدا کردن «زانو».
- ما یک برنامه زمانبندی از RPS → latency و RPS → CPU ساختیم: مرز و هزینه بیشتر٪ را می بینیم.
iGaming/fintech خاص
هزینه در هر میلی ثانیه: بهبود رتبه توسط اثر $ (محدودیت تبدیل/ریزش/PSP).
قله (مسابقات/مسابقات): سنبله + معیار فلات با TLS/CDN/کش گرم کردن.
پرداخت/PSP: اندازه گیری پایان به پایان با محدودیت sandbox، idempotency و واکنش به تخریب ؛ رفع زمان به کیف پول با معیارهای پروکسی.
فیلترهای ضد تقلب/ربات: شامل یک پروفایل قانون در نیمکت ماکرو (نرخ مثبت کاذب، افزودنی تاخیر).
رهبران/jackpots: تست کلید های داغ/رتبه بندی، قفل، اتمی.
چک لیست معیار
- فرضیه/معیارها/معیار موفقیت.
- نظارت بر متغیر (قدرت/NUMA/IRQ/شبکه/کش).
- برنامه اجرا (کپی، مدت زمان، گرم کردن)
- جداسازی سرد/گرم.
- پروفایل فعال (CPU/-/IO/DB).
- آمار: CI، آزمون اهمیت، نمودار.
- مصنوعات و اسکریپت های مجدد در مخزن (IaC برای نیمکت).
- گزارش با «هزینه بهبود» و توصیه.
- بازگشت به عقب.
مینی گزارش (قالب)
هدف این است که API p95 را 15٪ بدون رشد CPU> 10٪ کاهش دهد.
روش: A/B، K6 مدل باز 1K RPS، 10 × 3 اجرا می شود، کش گرم.
مجموع: p95 − 12٪ [− 9٪ ؛ − 15٪]، CPU + 6٪، 5xx بدون تغییر.
Flamegraph: ↓ سریال سازی JSON (− 30٪ CPU)، تنگنا به پایگاه داده منتقل شده است.
تصمیم گیری: قبول بهینه سازی ؛ مرحله بعدی دسته بندی درخواست های پایگاه داده است.
مصنوعات: گرافیک، پروفایل، پیکربندی، JSON خام.
مجموع
معیار خوب روش دقیق + مقایسه عادلانه + اعتبار آماری + پروفایل + تکرارپذیری است. فرضیه سازی کنید، محیط را کنترل کنید، فواصل اطمینان را بخوانید، مصنوعات را منتشر کنید و در مورد هزینه بهبود تصمیم گیری کنید. بنابراین شما یک چهره زیبا در ارائه دریافت کنید، اما افزایش واقعی در سرعت و پیش بینی از پلت فرم.