DRAM 행을 오래 열어 두는 것이 반복해서 여는 것과 다른 위험
DRAM disturbance를 감시하는 counter가 있다. 같은 row를 여러 번 여는 ACT를 센다. counter가 낮으니 안전하다고 표시했는데, 행을 오래 열어 둔 조건에서 이웃 bit가 변한다면 무엇을 빠뜨린 걸까? RowPress는 활성화 횟수만으로 설명하지 못하는 row-open 시간의 영향을 드러낸다.
ACT가 행을 열면 wordline이 활성 상태를 유지하고 그 행의 셀들이 sense amplifier 경로에 연결된다. 여러 column 요청을 같은 열린 행에서 처리하면 row hit가 늘고 ACT를 다시 보낼 필요가 적어진다. 성능 측면에서는 유리하지만 물리적인 영향도 명령 개수에 정비례한다고 가정할 수는 없다.
RowPress: Amplifying Read Disturbance in Modern DRAM Chips, ISCA 2023는164개의 DDR4 chip을 조사하며 aggressor 행을 열어 두는 시간에 따라 bitflip을 만드는 최소 활성화 수가 달라짐을 보여 준다. 논문의 그림1은 tAggON을 바꾸는 비교다. 표본·온도·pattern의 실험 결과이며 제품별 universal 안전 임계값을 제공하는 표는 아니다.
같은 ACT 수가 같은 stress 기록은 아니다
두 가상 trace를 놓자. trace A는 행을1000번 열고 각 활성 상태를40ns 유지한다. trace B는1000번 열고 각각4μs 유지한다. ACT count는 같지만 활성 상태 시간의 합은40μs와4ms로100배 다르다. 실제 오류가100배가 된다는 뜻은 아니다. count 하나로는 이 시간 축을 구분할 수 없다는 계산이다.
반대로 B의 활성화 수가 A보다 적더라도 긴 open time이 중요한 조건에서는 기존 count threshold의 의미가 달라질 수 있다. RowPress를 “조금 느린 RowHammer”로 줄여 부르기보다 횟수와 유지시간을 별도 변수로 놓아야 한다. 원 논문은 영향을 받는 셀과 온도·pattern에 대한 반응도 차이가 있음을 조사한다.
여기서 온도는 실험 조건의 일부다. 모든 데이터의 평균 reduction 숫자를 한 제품의 guaranteed threshold로 옮기는 방식은 적절하지 않다. device family, row와 data pattern에 따라 결과가 달라지므로 방어를 설정하려면 목표 표본과 최악 조건을 정의해야 한다.
row locality 최적화가 길어진 open time을 만들 수 있다
controller가 동일 row의 여러 요청을 모아 처리하면 PRE를 늦추고 row hit를 늘릴 수 있다. 필요한 요청을 효율적으로 처리하는 정상적인 선택이다. 그러나 성능 trace에서 높은 hit율만 기록하면 행이 얼마나 오래 유지됐는지는 빠진다. 어떤 queue 정책이 긴 open 구간을 만드는지 별도 관측해야 한다.
또 software가 read를 많이 했다는 숫자만으로 실제 DRAM ACT를 알 수 없다. cache hit는 DRAM까지 내려가지 않을 수 있고, DRAM의 동일 row hit는 새로운 ACT 없이 처리될 수 있다. RowPress 해석에는 CPU load count, column access count, ACT count, row-open duration을 구분하는 계층이 필요하다.
시간 상한을 넣으면 성능 비용이 생긴다
최대 row-open 시간을 제한하면 긴 active 구간을 끊을 수 있지만 이후 같은 row 요청에는 다시 ACT와 준비 시간이 필요할 수 있다. 너무 공격적으로 닫으면 locality 이득이 줄고 command와 activation 작업이 늘어난다. 시간 상한을 추가한 정책은 disturbance 여유와 성능을 함께 검증해야 한다.
기존 count 기반 방어와 시간 상한을 단순히 나란히 붙이는 것만으로 모든 조건이 보호된다고 단정할 수도 없다. count threshold가 긴 open 구간에서 충분한지, refresh와 재활성화가 어떤 이력을 만드는지, 다른 access pattern의 boundary는 어떤지 확인해야 한다. 원 논문이 방어를 조정할 때 여러 조건을 함께 다루는 이유다.
RowPress의 읽을거리는 “ACT가 적으면 물리 영향도 작다”는 연결을 해체하는 데 있다. controller trace에 행을 연 시점과 닫은 시점을 붙이고 count와 duration을 함께 비교하자. row hit를 통해 얻은 성능과 긴 active 상태의 disturbance를 같은 기록에서 볼 때, 효율적인 접근이 어느 조건에서 추가 관리가 필요한지 판단할 수 있다.