벤치마킹 및 성능 비교
간략한 요약
벤치마킹은 "5 분 동안 실행하는 실험 '이 아니다. "주요 원칙:1. 공식 가설 및 지표.
2. 제어 변수 (하드웨어, 코어, 전력, 배경 노이즈).
3. 충분한 데이터 (복제, 신뢰 구간) 를 수집하십시오.
4. 프로파일 링을하십시오-" 이유 "를 이해할 수 없습니다.
5. 리프로 수행: 스크립트, 수정 버전 및 아티팩트.
벤치 마크 목표 및 비즈니스 지표
처리량: RPS/QPS/CPS, 쓰기/초
대기 시간: p50/p95/p99/꼬리 밀도.
효율성: 1k 당 RPS 비용, 거래 당 와트, $/밀리 초 개선.
안정성: 지터, 사이클 간/노드 간 변동성.
탄성: 지표가 N × 리소스 (Amdahl/Gustafson 벤치 마크) 에서 어떻게 확장되는지.
방법론: 실험 설계
가설: "HTT/3을 사용한 특사는 동일한 RPS로 p95 TTFB를 10-15% 줄입니다".
비교 단위: 철의 빌드/설정/인스턴스 버전.
A/B 다이어그램: 동일한 환경에서 병렬 실행; 또는 드리프트의 영향을 줄이기 위해 ABAB/Latin Square.
반복 횟수: 안정적인 등급을 위해 구성 당 10 개 이상의 짧은 + 3 개의 긴 실행.
통계: 중앙값, MAD, 부트 스트랩 신뢰 구간; "꼬리" 분포에 대한 비모수 테스트 (Mann-Whitney).
DoE (최소): 한 번에 하나의 변수 (OVAT) 또는 2-3 요소에 대한 계승 인수 분해 (예: TLS 프로파일 × TH 버전 × 커널).
가변 및 노이즈 컨트롤
CPU 총재: '성능'; "전원 저장" 을 비활성화하십시
터보/스로틀 링: 주파수, 온도 및 스로틀 링 모니터링 (그렇지 않으면 예열하면 잘못된 상금이 발생합니다).
NUMA/Hyper-Threading: 핀 IRQ 및 프로세스 ('taskset/numactl') 는 메모리 위치를 측정합니다.
C 상태/IRQ 균형: 설정을 수정합니다. 네트워크 테스트 용-특정 코어의 IRQ 핀.
배경 프로세스: 깨끗한 노드, 크론/백업/안티 바이러스/업데이트.
네트워크: 안정적인 경로, 고정 MTU/ECN/AQM, 채널 플러터 없음.
데이터: 동일한 세트, 카디널리티 및 배포.
캐시: 별도의 "차가운" (첫 번째 패스) 및 "따뜻한" (반복) 모드를 명시 적으로 표시합니다.
벤치 마크 클래스
1) 마이크로 벤치 마크 (함수/알고리즘)
목적: 특정 코드/알고리즘을 측정하십시오.
도구: 내장 벤치 프레임 워크 (Go 'test. B ', JMH, pytest-benchmark).
규칙: JIT 예열, 밀리 초 → 나노초; GC 격리; 고정 종자.
2) 메소 벤치 마크 (구성 요소/서비스)
한 노드의 HTP 서버, 캐시, 브로커, 데이터베이스.
도구: wrk/wrk2, k6 (오픈 모델), 채소, ghz (gRPC), fio,
규칙: 연결/파일 제한, 풀; CPU/IRQ/GC 보고서.
3) 매크로 벤치 마크 (e2e/요청 경로)
전체 방법: CNC/edge → 프록시 → 서비스 → DB/캐시 → 답변.
도구: k6/Locust/Gatling + RUM/OTel 추적; 현실적인 경로 혼합.
규칙: 레트라와 깔끔하게 현실 ("더러운" 데이터, 외부 시스템의 지연) 에 더 가깝습니다.
레이어 별 메트릭
템플릿 및 명령 테스트
(PHP 3 = 3.0.6, PHP 4)
bash iperf3 -s # server iperf3 -c <host> -P 8 -t 60 # parallel, stable bandwidth
STP서버 (안정적인 부하, rk2):
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
데이터베이스 (소 벤치 + 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 회 실행, 특이 치 제외 (견고성: 중앙값/MAD).
신뢰 간격: p95/p99에 대한 부트 스트랩 95% CI 및 수단.
효과 크기: 상대적 변화 및 CI (예: -12% [-9%; -15%]).
실질적인 중요성: + 30% CPU 가격으로 p95가 10% 감소합니다. 그만한 가치가 있습니까?
그래프: 분포에 대한 바이올린/ECDF, "채도 곡선" (RPS → 대기 시간).
병목 현지화 프로파일 링 및 현지화
CPU: 'perf', 'async-profiler', eBPF/pyroscope; 전후 화염 그래프.
Alloc/GC: 런타임 프로파일 (Go pprof/Java JFR).
I/O: 'iostat', 'blktrace', 'fio-lat _ percentiles = 1'.
확인: 'ss -s', 'ethtool -S', 'dropwatch', 'tc -s qdiscs'.
확장자: 'EXPLAIN (ANALYZE, BUFFERS)', pg _ stat _ shapts, slowlog입니다.
현금: 상단 키, TTL, 퇴거 원인.
보고 및 아티팩트
수정해야 할 사항:- Git Ś빌드, 컴파일/최적화 플래그.
- 커널/네트워크 구성 (sysctl), 드라이버 버전/NIC/펌웨어.
- 토폴로지 (vCPU/NUMA/HT), 총재, 온도/주파수.
- 데이터: 크기, 카디널리티, 분포.
- 게시 대상: p50/p95/p99 테이블, 오류/초, 처리량, 리소스 (CPU/RAM/IO), CI.
- 아티팩트: 스크립트, 그래프, 화염 그래프, 원시 JSON/CS 결과, 환경 프로토콜 실행.
공정한 벤치마킹
동일한 리미터 (콘 풀, keeplive, 체인 SL, OCSP 스테이플 링).
협상 된 타임 아웃/리트레이 및 TP 버전 (h2/h3).
온도 균형: 평형까지 예열 (터보 부스트 효과없이).
공정한 캐시: "차가운" 또는 "따뜻한" 둘 다.
네트워크 대칭: 동일한 경로/MTU/ECN/AQM.
시간 예산: DNA/SL/연결-명시 적으로 계산하거나 동일하게 제외하십시오
반 패턴
하나의 실행 → "출력".
하나의 시리즈에서 모드 (부분 차가움, 부분 따뜻함) 를 혼합합니다.
인터넷로드 → 잘못된 "안정성" 을 위해 열린 모델 대신 닫힌 모델.
설명되지 않은 배설물 → "RPS 성장" 은 5xx의 비용으로 계산됩니다.
다른 땀샘/코어/전력 회로에 대한 비교.
프로파일 링 → 블라인드 최적화가 없습니다.
프로파일 분석없이 GC/힙으로 재생 → 꼬리 회귀.
실용 레시피
최소 벤치 파이프 라인 단계:1. (PHP 3 = 3.0.6, PHP 4) sh ').
2. 워밍업 (5-10 분), 주파수/온도 기록.
3. 짧은 + 1 장기의 N 반복을 수행하십시오.
4. 최고점에서 프로파일 (CPU/alloc/IO) 을 제거합니다.
5. CI/그래프를 계산하고 아티팩트를 수집하십시오.
6. 해결책: 가설을 수락/거부하고 다음 단계를 형성하십시오.
용량 곡선:- RPS 단계 (단계의 10%) → p95/오류 수정 → "무릎" 을 찾으십시오.
- RPS → 대기 시간 및 RPS → CPU 일정을 작성합니다. 국경과 추가 비용이 표시됩니다.
iGaming/fintech 특정
밀리 초 당 비용: $ effect (변환/이탈/PSP 제한) 순위 개선.
피크 (매치/토너먼트): 온난화가 가능한 스파이크 + 고원 벤치 마크.
지불/PSP: 샌드 박스 제한, demempotency 및 분해에 대한 반응으로 엔드 투 엔드를 측정합니다. 프록시 메트릭으로 지갑 간 시간을 수정합니다.
사기 방지/봇 필터: 매크로 벤치에 규칙 프로파일을 포함합니다 (오 탐지 율, 대기 시간 첨가제).
리더/잭팟: 핫 키/랭킹, 자물쇠, 원자 성을 테스트하십시오.
벤치마킹 체크리스트
- 가설/지표/성공 기준.
- 가변 모니터링 (전력/NUMA/IRQ/네트워크/캐시).
- 실행 계획 (복제, 지속 시간, 예열)
- 차가운/따뜻한 분리.
- 프로파일 링 활성화 (CPU/alloc/IO/DB).
- 통계: CI, 유의성 테스트, 그래프.
- 저장소의 아티팩트 및 리프로 스크립트 (벤치 용 IaC).
- "개선 비용" 및 권장 사항으로보고하십시오.
- 회귀 퍼프.
미니 보고서 (템플릿)
목표는 CPU 성장> 10% 없이도 p95 API를 15% 줄이는 것입니다.
방법: A/B, k6 오픈 모델 1k rps, 10 × 3 런, 따뜻한 캐시.
합계: p95-12% [-9%; -15%], CPU + 6%, 5xx는 변경되지 않았습니다.
화염 그래프: -JSON 직렬화 (-30% CPU), 병목 현상이 데이터베이스로 이동했습니다.
결정: 최적화 수락; 다음 단계는 데이터베이스 요청을 배치하는 것입
아티팩트: 그래픽, 프로필, 구성 요소, 원시 JSON.
합계
좋은 벤치마킹은 엄격한 방법론 + 공정 비교 + 통계적 유효성 + 프로파일 링 + 재현성입니다. 가설, 환경 제어, 신뢰 구간 읽기, 인공물 게시 및 개선 비용 결정. 따라서 프레젠테이션에서 아름다운 인물을 얻지 못하지만 플랫폼의 속도와 예측 가능성이 실제로 증가합니다.