모든 이야기

DDR4 refresh를 잘게 나누면 긴 멈춤이 정말 사라질까

DRAM이 refresh 때문에 멈추는 시간이 길다면 한 번의 refresh를 잘게 나누면 좋을 것 같다. DDR4의 Fine Granularity Refresh가 그런 선택을 제공한다. 그런데 짧아진 한 번의 멈춤만 보고 총 refresh 부담까지 감소했다고 말하면 틀릴 수 있다. 자주 실행해야 하므로 누적 비가용 시간은 오히려 늘 수 있다.

정상 access 중 controller가 REF를 보내면 해당 refresh가 끝날 때까지 다음 일반 명령을 기다린다. 한 번의 동작 minimum은 tRFC, refresh를 평균적으로 얼마나 자주 보내는지는 tREFI다. Fine Granularity Refresh는 두 값을 함께 바꾼다. 2x mode는 짧은 동작을 두 배 자주, 4x mode는 더 짧은 동작을 네 배 자주 요구하는 식이다.

한 번의 정지와 시간 점유율을 분리한 실제 문서 예

Alliance AS4C1G8D4A DDR4 데이터시트의 Fine Granularity Refresh 설명과 표 19에 있는 8Gb 제품 조건을 보자. 표의 TCASE≤85°C 구간에서 base tREFI는 7.8μs이고 tRFC minimum은 1x 350ns, 2x 260ns, 4x 160ns다. 여기서 계산할 수 있는 것은 이 문서의 해당 조건에 한정한 timing 부담이다.

한 번의 refresh는 350→260→160ns로 짧아진다. 그러나 반복 간격은 7.8→3.9→1.95μs로 줄어든다. 단순하게 tRFC/tREFI를 계산하면 아래처럼 된다.

문서의 mode한 번의 최소 refresh 시간평균 간격timing 점유율 계산
1x350ns7.8μs약 4.49%
2x260ns3.9μs약 6.67%
4x160ns1.95μs약 8.21%

이 비율은 모든 명령을 정확히 minimum에 맞추고 주기적으로 발행한 단순 점유율이다. refresh 전 행을 닫는 비용, controller 재정렬, 다른 rank와의 겹침, 실제 workload의 대기시간은 포함하지 않는다. 계산만으로 측정 대역폭 손실이나 전력 변화까지 단정할 수 없다.

그래도 한 가지 결론은 명확하다. 이 제품 조건에서는 가장 잘게 나눈 mode가 한 번의 blackout을 줄이지만 누적 minimum timing 부담은 더 크다. refresh 단위를 쪼개면 모든 overhead까지 비례해서 쪼개지는 것은 아니다.

긴 정지를 줄이는 것이 중요한 작업

latency 상한에 민감한 요청은 refresh가 막 시작된 순간 가장 오래 기다린다. 한 번의 350ns 정지를 160ns로 줄이는 것은 이런 긴 단발 대기를 낮추는 데 유리할 수 있다. 반대로 충분히 많은 요청으로 bandwidth를 계속 채우는 작업에서는 늘어난 누적 refresh 점유율이 더 중요할 수 있다.

따라서 평균 throughput과 tail latency를 따로 봐야 한다. 짧은 refresh가 더 자주 온다면 영향을 받는 요청 수와 각 요청의 잔여 대기시간 분포가 함께 바뀐다. 긴 정지 하나가 여러 요청의 queue를 만드는 조건과 빈 시간에 refresh를 숨길 수 있는 조건도 다르다.

온도 조건을 바꾸면 표의 해석도 바뀐다. 같은 문서의 높은 온도 구간은 각 mode의 tREFI를 더 짧게 요구한다. 작은 정지의 이득만 가져오면서 다른 온도 구간의 느슨한 간격을 섞는 비교는 안 된다. 제품 density와 세대가 달라지면 tRFC 관계 자체도 다시 확인해야 한다.

mode 전환도 횟수 제약을 갖는다

fixed mode는 하나의 rate로 동작하고, on-the-fly mode는 설정한 범위 안에서 refresh command의 선택으로 rate를 바꿀 수 있다. 그렇다고 짧은 REF를 한 번만 보내고 긴 간격으로 돌아가는 임의 조합이 허용되는 것은 아니다. 이 데이터시트는 mode 사이 전환에 REF2x의 짝수 개수, REF4x의 네 배수 같은 조건을 설명한다. 전체 저장 영역을 필요한 주기로 관리하는 규칙을 지켜야 한다.

Fine Granularity Refresh를 선택할 때는 비교표에 두 열을 유지하자. 한 번의 tRFC는 가장 긴 단발 정지 후보를, tRFC/tREFI는 누적 timing 부담의 첫 근사를 나타낸다. 그리고 현재 온도·density·전환 규칙을 붙여 해석한다. refresh를 잘게 나누는 답은 “멈춤이 무조건 줄어든다”가 아니라, 긴 대기를 짧은 대기 여러 번으로 교환하는 선택이다.

DDR4 refresh를 잘게 나누면 긴 멈춤이 정말 사라질까 · ariser