하드웨어 성능표에는 GHz, GT/s, GB/s, ns가 함께 등장하지만 같은 종류의 수치가 아니다. 클럭은 상태가 변하는 기준 주기를 세고, 전송률은 초당 몇 번의 전송 단위를 보내는지를 센다. 대역폭은 단위 시간에 실제로 옮길 수 있는 데이터량이며, 지연시간은 요청한 뒤 결과가 돌아오기까지 기다린 시간이다. 측정하는 대상이 서로 다르므로 숫자만 놓고 같은 잣대로 바꾸어 해석하면 성능을 잘못 읽을 수 있다.
네 가지 수치
- 클럭
- 상태가 변하는 기준 주기를 센다
- 전송률
- 초당 몇 번의 전송 단위를 보내는지 센다
- 대역폭
- 단위 시간에 실제로 옮길 수 있는 데이터량
- 지연시간
- 요청한 뒤 결과가 돌아오기까지 기다린 시간
클럭 읽기
- 5GHz
- 초당 50억 번의 기준 주기가 있다는 뜻
- 아닌 것
- 한 주기에 명령을 하나만 처리한다는 뜻이 아니다
- 비교
- 마이크로아키텍처가 다르면 클럭 숫자만으로 성능을 견줄 수 없다
환산
- PCIe
- GT/s에 부호화 비율과 Lane 수를 반영해야 GB/s가 된다
- DDR
- MT/s는 메모리 코어 클럭을 그대로 옮긴 숫자가 아니다
병목
- 대역폭
- 대용량 파일 복사와 연속 스트리밍에서 먼저 걸린다
- 지연시간
- 작은 작업이 앞 결과에 의존할 때 중요해진다
- 예
- NVMe 순차 속도가 몇 배여도 프로그램 실행 시간이 그 비율로 줄지 않는다
- Queue Depth
- 깊게 만들면 처리량은 오르지만 요청 하나의 지연은 줄지 않는다
단위 구분
- b와 B
- b는 bit, B는 byte이며 8bit가 1byte다
- 접두어
- GB는 10진수, GiB는 2진수다
- 구분
- 양방향 합계와 한 방향, 원시 링크 속도와 payload 처리량을 나눈다
CPU 클럭이 5GHz라는 말은 초당 50억 번의 기준 주기가 있다는 뜻이다. 한 주기에 명령을 하나씩만 처리한다는 뜻은 아니다. 명령의 종류, 실행 포트, 파이프라인, 캐시 적중률에 따라 한 주기 동안 끝내는 작업량이 달라진다. 따라서 마이크로아키텍처가 다른 CPU를 클럭 숫자만 견주면 실제 처리 성능을 잘못 판단할 수 있다.
PCIe의 GT/s는 초당 전송 횟수를 나타낸다. 여기에 부호화 비율과 Lane 수를 반영해야 GB/s 단위의 데이터량으로 바뀐다. DDR 메모리의 MT/s도 메모리 코어 클럭을 그대로 옮긴 숫자가 아니다. 이론 대역폭을 구하려면 전송률에 버스 폭과 채널 수를 반영해 계산해야 한다.
대역폭과 지연시간은 다른 병목이다
대용량 파일 복사와 연속 스트리밍은 많은 데이터를 꾸준히 옮기므로 대역폭이 병목이 되기 쉽다. 반면 작은 데이터를 처리하면서 다음 작업이 앞 결과에 의존하면 첫 응답이 돌아오는 시간, 곧 지연시간에 민감하다. NVMe SSD의 순차 읽기 속도가 SATA SSD보다 몇 배 높아도 일반 프로그램 실행 시간이 그 비율만큼 줄지 않는 이유가 여기에 있다.
대기열을 깊게 만들면 여러 요청을 겹쳐 놓아 총 처리량을 높일 수 있다. 그렇다고 요청 하나가 끝나기까지 기다리는 시간이 줄어드는 것은 아니다. 같은 장치라도 Queue Depth에 따라 처리량과 지연시간이 다르게 보일 수 있다. 서버용 저장장치와 네트워크 성능에서 Queue Depth를 함께 기록하는 까닭이다.
단위와 표기
b는 bit,B는 byte다. 8bit가 1byte다.- SI 접두어 GB는 보통 10진수, GiB는 2진수다.
- 양방향 합계와 한 방향 대역폭을 구분한다.
- 원시 링크 속도와 프로토콜 payload 처리량을 구분한다.
- 평균 지연시간만 보지 말고 긴 꼬리 지연도 확인한다.
관련: PCI Express, SATA·SAS·NVMe
계산으로 보는 전송률과 응답시간
DDR5-6000의 64비트 데이터 채널 하나는 이론적으로 6000 MT/s × 8 byte = 48 GB/s를 전송한다. 두 채널이면 96GB/s지만 명령·리프레시·읽기/쓰기 전환과 접근 패턴 때문에 응용 프로그램이 이 값을 항상 내지는 못한다. DDR5 DIMM의 두 32비트 서브채널은 합계 데이터 폭 64비트이며, 이를 다시 두 배로 세면 대역폭을 과대 계산하게 된다.
CL은 클럭 주기 수이므로 다른 전송률의 CL 숫자만 비교할 수 없다. DDR5-6000 CL30의 CAS 구간은 30 ÷ 3000MHz = 10ns, DDR5-5600 CL28도 28 ÷ 2800MHz = 10ns다. 이 계산은 CAS 구간만의 시간이고, 행 열기·메모리 컨트롤러·캐시 미스·대기열을 포함한 CPU의 전체 메모리 접근 지연은 아니다.
병렬 요청과 긴 꼬리
작은 요청을 여러 개 동시에 보내면 장치 내부 병렬성을 이용해 IOPS와 총 처리량을 높일 수 있다. 그러나 포화 상태에서 추가 요청은 대기열에 쌓여 응답시간을 늘린다. 평균값이 같아도 일부 요청이 오래 걸리면 실시간 오디오나 온라인 서비스의 체감이 나빠질 수 있어, 평균과 함께 95·99백분위 지연을 보는 이유가 된다. 측정 결과를 비교할 때는 블록 크기·Queue Depth·동시 작업 수·읽기/쓰기 비율을 같은 조건으로 맞춘다.
메모리 타이밍의 세부 항목은 메모리 타이밍과 실제 지연시간, 저장장치의 캐시·온도 영향은 SSD 성능과 수명에서 이어진다.