बेंचमार्किंग और प्रदर्शन तुलना
संक्षिप्त सारांश
बेंचमार्किंग एक प्रयोग है, न कि "5 मिनट के लिए रन वर्क। "मुख्य सिद्धांत:1. परिकल्पना और मैट्रिक्स तैयार करें।
2. नियंत्रण चर (हार्डवेयर, कोर, शक्ति, पृष्ठभूमि शोर)।
3. पर्याप्त डेटा एकत्र करें (प्रतिकृति, विश्वास अंतराल)।
4. प्रोफाइलिंग करें - इसके बिना आप "क्यों" को नहीं समझ सकते।
5. रेप्रो करें: स्क्रिप्ट, फिक्सिंग संस्करण और कलाकृतियां।
बेंचमार्क लक्ष्य और व्यापार मैट्रिक्स
थ्रूपुट: आरपीएस/क्यूपीएस/सीपीएस, राइट/सेकंड
लेटेंसी: p50/p95/p99/पूंछ घनत्व।
दक्षता: Cost-per-1k आरपीएस, वाट प्रति लेनदेन, $/मिलीसेकंड सुधार।
स्थिरता: जिटर, इंटर-साइकिल/नोड परिवर्तनशीलता।
लोच: N × संसाधन (Amdahl/Gustafson बेंचमार्क) पर संकेतक कैसे बढ़ाए जाते हैं।
कार्यप्रणाली: प्रायोगिक डिजाइन
परिकल्पना: "HTTP/3 के साथ दूत एक ही आरपीएस के साथ p95 TTFB को 10-15% तक कम कर देगा।"
तुलना की इकाई: लोहे का निर्माण/कॉन्फ़िग/उदाहरण संस्करण।
A/B आरेख: समान वातावरण पर समानांतर चलता है; या बहाव के प्रभाव को कम करने के लिए ABAB/लैटिन स्क्वायर।
पुनरावृत्तियों की संख्या: स्थिर रेटिंग के लिए प्रति कॉन्फ़िगरेशन ≥ 10 शॉर्ट + 3 लंबे रन।
आंकड़े: मंझला, एमएडी, बूटस्ट्रैप आत्मविश्वास अंतराल; "पूंछ" वितरण के लिए गैर-पैरामीट्रिक परीक्षण (मान-व्हिटनी)।
DoE (न्यूनतम): एक समय में एक चर (OVAT) या 2-3 कारकों के लिए तथ्यात्मक कारक बदलें (उदाहरण के लिए, TLS प्रोफाइल × HTTP संस्करण × कर्नेल)।
परिवर्तनीय और शोर नियंत्रण
सीपीयू गवर्नर: 'प्रदर्शन'; "पावर सेव" अक्षम करें।
टर्बो/थ्रॉटलिंग: आवृत्तियों, तापमान और थ्रॉटलिंग की निगरानी (अन्यथा वार्मिंग झूठी जीत देगा)।
NUMA/हाइपर थ्रेडिंग: पिन IRQs और प्रक्रियाओं ('टास्कसेट/न्यूमैक्टल'), स्मृति स्थानीयता को मापते हैं।
सी-स्टेट्स/आईआरक्यू बैलेंस: सेटिंग्स को ठीक करें; नेटवर्क परीक्षणों के लिए - विशिष्ट कोर के लिए IRQ पिन।
पृष्ठभूमि प्रक्रियाएं: स्वच्छ नोड, बंद क्रॉन/बैकअप/एंटीवायरस/अपडेटेड।
नेटवर्क: स्थिर पथ, फिक्स्ड MTU/ECN/AQM, कोई चैनल फ्लटर नहीं।
डेटा: समान सेट, कार्डिनैलिटी और वितरण।
कैश: अलग "कोल्ड" (पहला पास) और "वार्म" (दोहराएं) मोड, स्पष्ट रूप से चिह्नित करें।
बेंचमार्क कक्षाएं
1) माइक्रो बेंचमार्क (फ़ंक्शन/एल्गोरिथ्म)
उद्देश्य: एक विशिष्ट कोड/एल्गोरिथ्म मापना।
उपकरण: बिल्ट-इन बेंच फ्रेमवर्क (गो 'टेस्टिंग)। बी ', जेएमएच, पाइटेस्ट-बेंचमार्क)।
नियम: JIT वार्म-अप, मिलीसेकंड → नैनोसेकंड; जीसी अलगाव; स्थिर बीज।
2) मेसो बेंचमार्क (घटक/सेवा)
HTTP सर्वर, कैश, ब्रोकर, डेटाबेस एक नोड पर।
उपकरण: wrk/wrk2, k6 (ओपन मॉडल), वनस्पति, ghz (gRPC), fio, sysbench, iperf3।
नियम: कनेक्शन/फ़ाइल सीमा, पूल; सीपीयू/आईआरक्यू/जीसी रिपोर्ट।
3) मैक्रो बेंचमार्क (e2e/अनुरोध पथ)
पूर्ण तरीका: सीडीएन/एज → प्रॉक्सी → सेवा → डीबी/कैश → जवाब।
उपकरण: k6/Locust/Gatling + RUM/Otel ट्रेसिंग; मार्गों का यथार्थवादी मिश्रण।
नियम: वास्तविकता के करीब ("गंदा" डेटा, बाहरी प्रणालियों के पिछले), बड़े करीने से रेट्रास के साथ।
परत द्वारा मेट्रिक्स
टेम्पलेट और कमांड जाँचें
नेटवर्क (टीसीपी/यूडीपी):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 + 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
मेमोरी/सीपीयू (लिनक्स पर्फ + स्ट्रेस-एनजी):
bash perf stat -e cycles,instructions,cache-misses,L1-dcache-load-misses \
-- <your_binary> --bench
सांख्यिकी और वैधता
प्रतिकृति: न्यूनतम 10 रन, आउटलेर्स को बाहर करना (मजबूत: मंझला/एमएडी)।
आत्मविश्वास अंतराल: p95/p99 और साधनों के लिए बूटस्ट्रैप 95% सीआई।
प्रभाव-आकार: सापेक्ष परिवर्तन और इसका सीआई (जैसे − 12% [− 9%; − 15%])।
व्यावहारिक महत्व: + 30% सीपीयू की कीमत पर p95 में 10% की कमी - क्या यह इसके लायक है?
ग्राफ: वितरण के लिए वायलिन/ईसीडीएफ, "संतृप्ति घटता" (RPS→latency)।
अड़ चन रूपरेखा और स्थानीयकरण
सीपीयू: 'पर्फ', 'एसिंक-प्रोफाइलर', ईबीपीएफ/पाइरोस्कोप; फ्लैमीग्राफ से पहले और बाद में।
Alloc/GC: रनटाइम प्रोफाइल (Go pprof/Java JFR)।
I/O: 'iostat', 'blktrace', 'fio'।
Сеть: 'ss -s', 'ईथटूल -S', 'ड्रॉपवॉच', 'tc -s qdisc'।
БД: 'EXPLEVE (ANALIZE, BUFERS)', pg_stat_statements, slogog।
नकद: शीर्ष कुंजी, टीटीएल, निष्कासन कारण।
रिपोर्टिंग और कलाकृतियाँ
क्या ठीक करना है:- git SHA निर्माण, संकलन/अनुकूलन झंडे।
- कर्नेल/नेटवर्क कॉन्फ़िग (sysctl), ड्राइवर संस्करण/NIC/firmware.
- टोपोलॉजी (vCPU/NUMA/HT), गवर्नर, तापमान/आवृत्तियां।
- डेटा: आकार, कार्डिनैलिटी, वितरण।
- क्या प्रकाशित करें: p50/p95/p99 टेबल, त्रुटि/सेकंड, थ्रूपुट, संसाधन (CPU/RAM/IO), CI।
- कलाकृतियाँ: रन स्क्रिप्ट, रेखांकन, फ्लेमीग्राफ, कच्चे JSON/CSV परिणाम, पर्यावरण प्रोटोकॉल।
फेयर बेंचमार्किंग
आइडेंटिकल लिमिटर (कॉन पूल, कीपलाइव, चेन टीएलएस, ओसीएसपी स्टेपलिंग)।
बातचीत के समय/रिट्रेज़और HTTP संस्करण (h2/h3)।
तापमान संतुलन: संतुलन (टर्बो-बूस्ट प्रभाव के बिना) तक वार्मिंग।
निष्पक्ष कैश: या तो "ठंडा" या दोनों "गर्म"।
नेटवर्क समरूपता: समान मार्ग/MTU/ECN/AQM।
समय बजट: DNS/TLS/कनेक्ट - स्पष्ट रूप से गिनती या समान रूप से बाहर।
एंटी-पैटर्न
एक रन → "आउटपुट"।
एक श्रृंखला में मोड (भाग ठंडा, भाग गर्म) का मिश्रण।
इंटरनेट लोड के लिए एक खुले मॉडल के बजाय एक बंद मॉडल → झूठी "स्थिरता"।
बेहिसाब रिट्रेज़ - "आरपीएस 5xx की कीमत पर" बढ़ ता है "।
विभिन्न ग्रंथियों/कोर/पावर सर्किट पर तुलना।
कोई प्रोफाइलिंग नहीं - अंधा अनुकूलन।
प्रोफाइल विश्लेषण के बिना जीसी/ढेर के साथ खेलना - पूंछ प्रतिगमन।
व्यावहारिक व्यंजनों
न्यूनतम बेंच पाइपलाइन चरण:1. वातावरण ठीक करें (स्क्रिप्ट 'env _ कैप्चर। sh ')।
2. वार्म अप (5-10 मिनट), रिकॉर्ड आवृत्तियों/तापमान।
3. लघु + 1 लंबे समय तक चलने वाले एन दोहराव का संचालन करें।
4. शीर्ष पर प्रोफाइल (CPU/alloc/IO) हटाएँ।
5. सीआई/रेखांकन की गणना करें, कलाकृतियों का संग्रह करें।
6. समाधान: परिकल्पना को स्वीकार/अस्वीकार करें, अगले चरण बनाएं।
क्षमता वक्र:- आरपीएस कदम (चरण का 10%) → p95/त्रुटियों को ठीक करें → "घुटने" का पता लगाएं।
- हम RPS→latency और RPS→CPU का एक कार्यक्रम बनाते हैं: हम सीमा और आगे की% की लागत देखते हैं।
iGaming/fintech विशिष्ट
प्रति मिलीसेकंड लागत: $ प्रभाव (रूपांतरण/मंथन/पीएसपी सीमा) द्वारा रैंक सुधार।
चोटियों (मैच/टूर्नामेंट): टीएलएस/सीडीएन/कैश वार्मिंग के साथ स्पाइक + पठार बेंचमार्क।
भुगतान/PSP: सैंडबॉक्स सीमा, निष्क्रियता और गिरावट के लिए प्रतिक्रियाओं के साथ अंत-से-अंत मापते हैं; प्रॉक्सी मेट्रिक्स के साथ टाइम-टू-वॉलेट ठीक करें।
एंटी-फ्रॉड/बॉट फिल्टर: मैक्रो बेंच (झूठी-पॉजिटिव-रेट, लेटेंसी एडिटिव) में एक नियम प्रोफ़ाइल शामिल है।
नेता/जैकपॉट: टेस्ट हॉट कुंजी/रैंकिंग, ताले, परमाणु।
बेंचमार्किंग चेकलिस्ट
- परिकल्पना/मैट्रिक्स/सफलता मानदंड।
- चर निगरानी (पावर/NUMA/IRQ/नेटवर्क/कैश)।
- रन प्लान (प्रतिकृति, अवधि, वार्म-अप)
- ठंडा/गर्म अलगाव।
- प्रोफाइलिंग सक्षम (CPU/alloc/IO/DB)।
- आंकड़े: सीआई, महत्व परीक्षण, रेखांकन।
- रिपॉजिटरी में कलाकृतियां और रेप्रो स्क्रिप्ट (बेंच के लिए IaC)।
- "सुधार लागत" और सिफारिशों के साथ रिपोर्ट करें।
- प्रतिगमन perf।
मिनी रिपोर्ट (टेम्पलेट)
लक्ष्य CPU वृद्धि> 10% के बिना p95 API को 15% तक कम करना है।
विधि: ए/बी, के 6 ओपन-मॉडल 1k आरपीएस, 10 × 3 रन, गर्म कैश।
कुल: p95 − 12% [− 9%; − 15%], CPU + 6%, 5xx अपरिवर्तित।
फ्लेमग्राफ: ↓ JSON धारावाहिक (− 30% CPU), अड़ चन डेटाबेस में स्थानांतरित हो गई है।
निर्णय: अनुकूलन स्वीकार करें अगला चरण डेटाबेस अनुरोधों को बैच करना है।
कलाकृतियाँ: ग्राफिक्स, प्रोफाइल, कॉन्फ़िग, कच्चे JSON।
कुल
अच्छी बेंचमार्किंग कठोर पद्धति + निष्पक्ष तुलना + सांख्यिकीय वैधता + प्रोफाइलिंग + प्रजनन क्षमता है। परिकल्पना करें, पर्यावरण को नियंत्रित करें, आत्मविश्वास के अंतराल को पढ़ें, कलाकृतियों को प्रकाशित करें और सुधार की लागत पर निर्णय लें। इसलिए आपको प्रस्तुति में एक सुंदर आंकड़ा नहीं मिलेगा, लेकिन मंच की गति और पूर्वानुमेयता में वास्तविक वृद्धि होगी।