피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Branch Prediction의 5% Misprediction이 유발하는 Pipeline Flush 및 보안 취약점 분석
Your CPU Is Guessing the Future, and Wrong 5% of the Time
AI 요약
Context
현대 CPU는 처리량 극대화를 위해 Pipeline 구조에서 Branch Prediction을 통한 Speculative Execution을 수행함. 대부분의 Hot Path에서는 높은 예측 정확도를 보이나, Data-dependent한 Cold Path에서 발생하는 Misprediction이 전체 시스템 레이턴시의 병목으로 작용함.
Technical Solution
- TAGE 아키텍처 기반의 다중 Tagged Table을 도입하여 다양한 길이의 Branch History를 추적함으로써 예측 정밀도 향상
- Short-history Table을 통한 단순 루프 처리 및 Deep-history Table을 통한 복잡한 불규칙 패턴 분석 구조 설계
- Misprediction 발생 시 Pipeline Flush를 통해 Speculative Work를 폐기하고 정답 경로로 복귀하는 복구 메커니즘 적용
- 보안 경계 내의 데이터 유출 방지를 위해 Constant-time Comparison 및 cmov 지시어를 활용한 Branchless 구현 방식 채택
- Speculative Execution 과정에서 Cache 상태 변화를 이용한 Side-channel 공격(Spectre 등) 차단을 위한 마이크로아키텍처 수준의 완화책 적용
실천 포인트
- `perf stat -e branches,branch-misses` 명령어로 바이너리의 aggregate ratio 및 함수별 Miss 비율 측정 - 데이터 의존적 분기가 빈번한 루프 내에서는 정렬(Sorting)을 통해 Branch Predictor의 적중률을 높이는 최적화 검토 - 암호화 및 보안 민감 로직 설계 시 `if` 대신 `cmov` 등 Branchless 구현을 통해 Side-channel 공격 벡터 제거 - 컴파일러의 자동 최적화 여부를 확인하기 위해 최종 어셈블리 코드를 통한 분기 제거 여부 검증