- 일반적으로 서버 성능 한계는
top같은 모니터링 도구의 % CPU 사용률로 판단하지만, 실제로는 이 지표가 선형적으로 성능을 반영하지 않음 - Ryzen 9 5900X 환경에서 stress-ng로 테스트한 결과, 50% 사용률일 때 실제 작업량은 60~100% 에 달해 지표와 큰 괴리가 있음
- 주요 원인은 하이퍼스레딩과 터보 부스트로, 논리 코어 간 자원 공유와 클럭 속도 변화가 지표를 왜곡함
- 따라서 단순한 CPU 사용률 대신, 실제 처리 가능한 작업량 벤치마크와 현재 처리량 비교가 더 정확한 지표임
- CPU 사용률을 선형적으로 해석하면 성능 추정에 큰 오류가 발생하므로, 시스템 계획 시 벤치마크 기반 접근이 필요함
서버의 CPU 사용률 수치와 실제 처리량의 불일치
- 서버 운영 시, 많은 사람이 최대 사용률에 가까운지 확인하고 싶어함
- 일반적으로
top등의 모니터링 도구를 통해 네트워크, 메모리, CPU 사용률 중 가장 높은 값을 참조함 - 하지만 실제로 CPU 사용률 수치와 처리 가능한 작업량이 선형적으로 증가하지 않는 문제가 발생
테스트 환경 및 방법
- Ubuntu 데스크톱 + Ryzen 9 5900X (12코어/24스레드) 기반 실험
- Precision Boost Overdrive(Turbo) 활성화
- stress-ng로 다양한 부하(1~24 워커, 1~100% 사용률) 시뮬레이션
- 측정 지표: 시스템이 보고하는 CPU 사용률과 실제 연산량(Bogo ops)
결과 요약
- 일반 CPU 부하: 50% 사용률 시 실제 60~65% 처리량
- 64비트 정수 연산: 50% 사용률 시 65~85% 처리량
- 행렬 연산(Matrix math): 50% 사용률 시 80~100% 처리량
- 실제로는 추가 워커가 성능에 기여하지 않아도 CPU 사용률은 상승함
원인 분석
-
하이퍼스레딩
- 12개 물리 코어 + 12개 논리 코어 구조
- 12개 이하 워커는 물리 코어에 최적 배치되지만, 초과 시 논리 코어 공유로 성능 저하
- 특히 SIMD 연산(행렬 연산) 에서는 공유 자원이 없어 성능 향상 불가
-
터보 부스트
- 저부하 시 4.9GHz → 풀로드 시 4.3GHz로 15% 클럭 저하
- CPU 사용률 계산식(= busy cycles / total cycles)에 왜곡 발생
- 분모(총 사이클 수)가 줄어들면서, 사용률 상승 폭이 실제 작업량보다 과대평가됨
시사점
- CPU 사용률은 절대적 성능 지표가 아님
- 서버 용량 산정 및 성능 예측 시:
- 1. 벤치마크로 최대 처리량 측정
- 2. 실시간 처리량 모니터링
- 3. 두 값을 비교하여 성능 한계 근접 여부 판단
- CPU 아키텍처(AMD vs Intel), 하이퍼스레딩 효율, 터보 동작 방식에 따라 편차가 크므로 프로세서별 분석 필요
결론
- CPU 사용률은 단순히 바쁜 사이클 비율일 뿐, 실제 처리 성능을 정확히 반영하지 않음
- 효율적 활용 시 "50% 사용률"이라도 이미 최대 성능의 80~100% 수준일 수 있음
- 따라서 성능 모니터링과 시스템 계획은 CPU 사용률 대신 벤치마크 기반 작업 처리량을 중심으로 해야 함