서버/고성능 PC의 메인 메모리를 변화시키는 NVDIMM 기술 https://gigglehd.com/gg/1856174 에서 이어지는 글입니다.
PC와 서버의 메인 메모리는 앞으로도 DRAM DIMM이 계속 쓰이겠지만, 5년 후-2020년대 초반에는 DRAM DIMM의 모습이 상당히 바뀌었을 가능성이 높습니다. 이 변화는 비휘발성 DIMM(NVDIMM : Non-Volatile Dual-Inline Memory Module) 기술이 견인해 나갑니다.
NVDIMM 기술에 의한 메인 메모리의 변화는 2단계로 진행됩니다. 처음에는 NVDIMM-N이 메인 메모리에 등장합니다. 시기는 2018~2019년. DDR 메모리에선 DDR4 후반기에 해당하는 시기입니다. 그 다음에는 NVDIMM-P이 나옵니다. 2020년대 초반이죠. 이때 DDR 메모리는 DDR5가 막 시작될 단계입니다.
NVDIMM-N을 도입하면 정전으로 인한 데이터 손실을 걱정할 필요가 없어져, 시스템 정지에서 비롯되는 손해를 최소화합니다. NVDIMM-N은 DRAM과 낸드 플래시 메모리, 백업용 전원(슈퍼 캐패시터)를 장착한 모듈로 정전을 감지하면 DRAM의 데이터를 낸드 플래시 메모리로 전송해 데이터를 유지합니다. 전원이 정상 공급되면 다시 데이터를 기록하며, 이 시간은 매우 짧습니다. 현재 DDR4 호환 NVIDMM-N은 상품화/표준화가 끝나, 리눅스와 윈도우에서 지원을 시작했습니다.
그럼 NVDIMM-P는 NVDIMM-N과 무엇이 다른가. 외부에서 직접 비휘발성 메모리(낸드 플래시 메모리)에 데이터를 기록한다는 점입니다. NVDIMM-N은 낸드 플래시 메모리를 백업 위주로 운용할 뿐, 실질적인 데이터는 DRAM에 기록합니다. 이에비해 NVDIMM-P는 비휘발성 메모리에 데이터를 직접 기록, DIMM의 메모리 용량은 DRAM 칩과 낸드 플래시 칩의 총 합이 됩니다. 따라서 메인 메모리의 용량이 늘어나고, 저장 용량당 비용도 DRAM 대비 낸드가 저렴하니 가격이 저렴해지는 장점이 있지요.
낸드 플래시 메모리의 다이 1개의 용량은 64~512Gbit, DRAM은 4~8Gbit입니다. 16~128배가 차이납니다. 8Gbit의 DRAM 칩을 32개 탑재한 DIMM의 용량은 32GB입니다. 여기에 512Gbit(64GB)의 낸드 플래시 칩을 2개 추가하면 총 용량은 160GB가 됩니다. DRAM 모듈의 저장 용량이 5배로 늘어나지만 가격은 DRAM으로만 구성했을 경우보다 훨씬 쌉니다. 그리고 이 DRAM 모듈에서 대기 상태에서 전력을 사용하는 건 DRAM 부분 뿐이며, 낸드 플래시 칩은 데이터를 액세스할때만 전기를 씁니다. 그래서 전력 사용량도 줄어듭니다.
그럼 앞으로 서버와 PC의 메모리 계층은 어떻게 바뀔까요? 우선 NVDIMM의 첫번째 세대인 NVDIMM-N은 DDR4 세대에 등장해 DRAM DIMM 과 SSD 사이에 위치하게 됩니다.
DDR5 세대에선 NVDIMM-P가 보급되면서 DRAM DIMM이 사라지고 HBM DRAM이 그 위치를 대체합니다. NVDIMM-P는 비싼 HBM와 SSD 사이에 위치하게 됩니다.
NVIDIMM-N은 내년부터 본격적으로 보급되며 NVDIMM-P는 2018년에 표준이 완성됩니다. 그러나 운영체제에서의 지원과 에코시스템 구축까지 고려하면 2020년대 초반이어야 될 것입니다.
NVDIMM-P의 특징은 DRAM과 낸드 플래시 메모리를 모두 자유롭게 다룰 수 있다는 데 있습니다. 이것은 큰 장점이지만 제어 프로토콜이 그만큼 복잡해진다는 말이기도 합니다.
왼쪽은 모든 데이터가 컨트롤러를 통해 입출력되는 모듈로서 컨트롤러 차원에서 DRAM의 존재를 커버합니다. 메모리 액세스의 지연 시간이 길어지지만 제어가 간단합니다. 오른쪽은 컨트롤러를 거치지 않고 DRAM이 외부와 데이터를 주고 받는 것인데 지연 시간은 짧지만 컨트롤이 그만큼 어렵습니다.
제어 프로토콜의 가장 큰 차이점은 아웃 오브 오더 실행의 지원 여부입니다. DRAM DIMM은 데이터를 읽고 출력하는 순서가 같으나, NVDIMM-P는 항상 그렇진 않습니다. 왜냐면 DRAM과 비휘발성 메모리의 지연 시간이 다르기 때문입니다. 서로 다른 특성을 지닌 DRAM과 비휘발성 메모리를 함께 사용하다보니 어쩔 수 없는 일입니다.
NVDIMM-P의 읽기/쓰기 프로토콜도 DRAM과는 다릅니다. 여기에선 해드 쉐이크를 기본으로 동작합니다. 읽기에선 XREAD와 SREAD의 두가지 명령이 있습니다. XREAD는 정상적인 데이터 읽기에 해당되는 명령입니다. 호스트(CPU 나 메모리 컨트롤러)가 XREAD 명령과 주소를 NVDIMM-P에 보내면 비휘발성 메모리에서 데이터를 읽어 DIMM 내부의 컨트롤러(버퍼)에 저장합니다. 그리고 데이터가 준비되었다는 RD_RDY(읽기 준비 완료) 신호를 호스트에 보냅니다. 이를 받은 호스트는 SEND 신호를 보내 tSEND 시간이 지난 후 DIMM이 데이터(DQ)와 오류 정정 코드(ECC), 읽기 ID(RID)를 호스트에 보냅니다.
다른 읽기 명령인 SREAD는 캐시에서 데이터를 가져오는 경우를 상정한, NVDIMM-P 고유의 명령입니다. NVDIMM-P는 상대적으로 느린 대용량 비휘발성 메모리와 고속 소용량 캐시 메모리(보통은 DRAM)을 모두 아우릅니다. 자세한 내용은 아직 정해지지 않았으나, 서로 다른 종류와 크기의 캐시를 지원합니다.
SREAD 명령과 주소를 호스트가 DIMM에 전달하면 tSEND 시간이 지난 후 데이터(DQ)와 오류 정정 코드(ECC), 히트/미스 식별 부호를 송출합니다. 여기에서 가장 중요한 건 히트/미스의 식별 부호입니다. 히트는 캐시에 데이터가 있어 데이터를 호스트가 읽을 수 있음을 의미합니다. 캐시 미스가 나면 DIMM 컨트롤러가 데이터를 비휘발성 메모리에서 컨트롤러 버퍼로 전송합니다. 그 다음엔 XREAD와 똑같이 RD_RDY, SEND 프로토콜이 진행됩니다.
쓰기 작업에도 두가지 명령이 있습니다. XWRITE와 PWRITE입니다. XWRITE는 정상적인 데이터 쓰기에 해당하는 명령입니다. 호스트가 XWRITE 명령과 주소를 DIMM에 전송합니다. 그리고 일정 시간(tWL) 후 호스트가 데이터를 DIMM에 전송합니다. DIMM은 일정한 시간 안에 데이터를 수신합니다.
PWRITE는 DIMM의 비휘발성 메모리에 데이터를 쓰는 명령입니다. XWRITE 명령은 데이터가 DIMM의 어떤 메모리에 저장되는지를 알지 못합니다. 허나 PWRITE 명령으로 쓰면 데이터가 비휘발성 메모리에 저장됩니다. PWRITE 명령으로 데이터를 기록하는 전 단계는 XWRITE 명령과 같습니다. 호스트가 타이밍을 맞춰 데이터를 DIMM 전달합니다. 그 다음부터가 달라집니다. DIMM은 데이터를 비휘발성 메모리에 기록하는 신호 W_PER를 호스트로 전송합니다. 그러면 호스트가 보통의 읽기 명령인 XREAD 프로토콜로 스테이터스 패킷을 읽어냅니다. 여기에는 비휘발성 메모리에 기록된 데이터 비트맵이 포함되며, 이는 앞으로 DIMM 액세스에 활용됩니다.
NVDIMM-P에는 데이터를 비휘발성 메모리에 저장하는 다른 명령으로 FLUSH가 있습니다. FLUSH는 DIMM 내부의 컨트롤러(버퍼)에 저장된 데이터를 DIMM의 비휘발성 메모리에 전송하는 명령입니다. 호스트가 FLUSH 명령을 전송하면 DIMM은 데이터를 비휘발성 메모리에 기록합니다. 데이터 기록이 끝나면 확인 신호인 W_PER를 호스트에 돌려 보냅니다. 이후 PWRITE 명령으로 호스트가 스테이터스 패킷을 판독합니다.
DDR4 메모리에 대응하는 NVDIMM-P 보드의 핀 배열은 이미 정해졌습니다. 구체적으로는 독자적인 프로토콜을 실행하기 위한 RSP_R 핀과 RSP_E 핀을 DDR4 DRAM DIMM에 추가합니다. 그러나 핀이 늘어나진 않습니다. 이 핀은 기존의 ODT1과 CKE1에 할당됩니다. 또 DDR4 메모리의 NVDIMM-P는 이들 2개 핀을 1개의 RSP_n으로 통합할 예정입니다.
DDR4 메모리는 읽기 준비 신호 RD_RDY을 RSP_R 핀에, 비휘발성 메모리의 데이터 쓰기 완료 신호 W_PER을 RSP_E 핀이 맡습니다.
낸드 플래시 메모리와 DRAM을 함께 사용하면 메모리 액세스 성능이 떨어지며, 낸드 플래시 메모리의 용량이 커질수록 이 문제는 심해집니다. 낸드 플래시 메모리는 DRAM보다 데이터 쓰기 속도가 늦거든요. DRAM DIMM의 성능을 100%로 가정하면 DRAM의 용량이 1, 낸드 플래시가 4의 비율로 탑재한 NVDIMM-P에서 성능이 80%로 떨어집니다. 낸드 플래시의 비율을 2 정도로 줄이면 성능은 90%가 됩니다.
이렇게 보면 낸드 플래시 메모리를 섞어 쓰는 건 성능에서 불리한 선택처럼 보입니다. 그러나 DRAM을 1, 낸드 플래시 메모리를 4로 잡은 모듈의 용량은 5이며, 5의 용량을 갖춘 DRAM 모듈과 비교했을 때 이런 결과가 나왔음을 짚고 넘어가야 합니다. 5의 용량을 갖춘 DRAM은 낸드를 섞어 쓴 메모리보다 훨씬 비싸죠. 애시당초 돈을 신경써도 되지 않았다면 NVDIMM-P는 필요하지 않습니다.
여기에서 중요한 건 메모리 그 자체가 아닙니다. 애플리케이션이 요구하는 저장 용량이 급격히 늘어난다는 것이죠. 1xnm 세대의 단일 다이로 실현 가능한 DRAM 저장 용량은 이미 포화 상태에 도달했습니다. 16Gbit까진 나왔으나 32Gbit부터는 어렵습니다. 반면 낸드 플래시는 3D 낸드 기술의 등장과 급격한 개량으로 1tbit(1024Gbit)가 눈 앞에 있습니다.
2020년대 초반, 5년 후를 상정하면 DRAM 모듈의 저장 용량 확대는 더 이상 어려울 것입니다. 저장 용량 확대의 수요에 맞추기 위해선 대용량의 저렴한 낸드 플래시 메모리, 혹은 3D XPoint 메모리의 도움을 받을 수밖에 없습니다. NVDIMM의 등장은 DRAM DIMM의 한계가 도달했음을 증거하는 것이기도 합니다.
램 오버 하는 사용자는 고민을 해야겠습니다.