4. 메모리 시스템 구조
이전 글들에서는 DRAM 디바이스의 기본적인 내부 블럭 구조들과 DRAM 디바이스들로 입력되는 데이터의 연속적인 저장과 전송을 제한하는 시그널링 문제에 관하여 설명했습니다. 이번 글에서는 DRAM 메모리 시스템의 기본적인 용어들과 외부 블럭 구조들에 대해 설명하도록 하겠습니다. 또한 이전에 서술된 기본 블럭들을 사용하여 보다 큰 메모리 시스템에 있는 다수의 DRAM 디바이스들의 구현, 구성과 동작을 구체적으로 설명하려고 합니다. 그리고 다양한 종류의 메모리 모듈의 구조와 더불어, 관련 용어 및 토폴러지(topology)에 대한 내용도 포함됩니다.
4.1 기본적인 메모리 시스템
DRAM 디바이스의 저장 용량은 제조 공정 기술, 셀의 크기, 배열 효율, 그리고 수율 향상을 목적으로 결함 셀을 재배치하는 메커니즘의 효율성 등에 의해 제한될 수 있습니다. 하지만 Moore' Law(무어의 법칙)으로 본다면, 제조 공정 기술이 발전함에 따라 DRAM 디바이스의 저장 용량은 수 년마다 2배씩 증가하고 있기도 합니다. Moore's Law뿐만 아니라, 현재는 데이터 센터, 딥러닝/머신러닝 등을 활용한 AI 애플리케이션 개발, 디지털 컨텐츠 크리에이션(Digital Contents Creation)을 위해 제작된 일부 소프트웨어들은 자동으로 시스템에서 사용 가능한 메모리를 측정하여 해당 용량에 맞게 소프트웨어가 운용되기도 하기 때문에, 이러한 사용량 증가 트렌드에 따라 DRAM 디바이스의 용량 또한 그에 발맞춰 증가하고 있다는 것도 알 수 있습니다. 따라서 현재 단일 DRAM 디바이스에 있는 저장 용량은 임베디드 시스템을 제외한 일반적인 컴퓨팅 플랫폼을 위한 주기억장치로서 불충분한 상태가 지속되고 있다고 판단할 수도 있습니다.
과거 수십 년간 DRAM 디바이스의 저장 용량 증가 속도는 데스크탑 컴퓨터, 워크스테이션, 서버 등에 사용되는 메모리 시스템 크기의 성장 속도와 유사했습니다. 이 성장 속도는 대부분의 컴퓨팅 플랫폼의 메모리 시스템을 형성하기 위해 다수의 DRAM 디바이스들이 함께 연결되어야만 하므로, 시스템 설계 방향 또한 이에 따라 좌우됩니다. 여기서는 비용과 성능을 개선하기 위한 다른 멀티 칩 DRAM 메모리 시스템 구조와 연결 방식에 대해서도 설명하게 됩니다.
(그림 4-1) 여러 DRAM 디바이스들이 DRAM 메모리 컨트롤러를 통해 프로세서에 연결된 모습
(그림 4-1)은 단일 메모리 컨트롤러에 의해 제어되는 다수의 DDR4 SDRAM 디바이스들이 연결된 하나의 메모리 시스템을 보여줍니다. 오늘날의 컴퓨터 시스템에서는 다수의 DRAM 메모리 컨트롤러들이 프로세서 패키지에 포함되어 있거나 프로세서 패키지 외부의 시스템 컨트롤러에 통합되어 있습니다.
DRAM 메모리 컨트롤러의 위치와는 상관없이, 컨트롤러는 보편적으로 다음과 같은 순서로 기능을 수행하게 됩니다.
1. 프로세서나 시스템의 요청(request)을 메모리 시스템의 커맨드(command)로 변환한다.
2. 해당 커맨드들의 우선 순위를 판단하여 타이밍 시퀀스를 생성한다.
3. 선택한 DRAM 디바이스의 어드레스(Row, Column)를 통해 read/write/refresh 등의 커맨드나 모드 레지스터를 전송한다.
4. 프로세서나 시스템의 I/O 디바이스를 대신하여 데이터를 검색하거나 저장한다.
마이크로프로세서에 내장된 DRAM 메모리 컨트롤러의 내부 구조와 아래에서 설명할 오류 정정 기능(ECC)에 대해서는 각각 다른 글을 통해 자세하게 설명하도록 하고, 이번 글에서는 최근의 마이크로프로세서에 내장된 컨트롤러를 기초로 하여 다중 디바이스 기반의 메모리 시스템에서 사용되는 DRAM 디바이스의 구조에 초점을 맞춰 설명하도록 하겠습니다.
4.2 기초적인 명명
메모리 시스템에서 DRAM 디바이스의 구조는 시스템 저장 용량, 데이터 동작 속도, 접근 지연 시간, 지속 가능한 대역폭 특성의 측면에서 메모리 시스템의 성능에 영향을 미치게 됩니다. 따라서 대용량 메모리 시스템에서 다수의 DRAM 디바이스를 자세히 이해하는 것은 매우 중요합니다. 그러나 우리가 일반적으로 사용하는 명명법의 부재는 DRAM 메모리 시스템 구조의 이해를 어렵게 합니다. 제대로 정리된 명명법의 일반적인 기초 없이는 DRAM 메모리 시스템에 대한 논의에 혼란만 가중시킬 수 있기 때문에, 이 글에서는 채널, 랭크, 뱅크, 로우와 칼럼 등의 용어에 대해서 기술 표준에 따라 명확하게 정의하도록 하겠습니다.
4.2.1 채널
(그림 4-2) 단일 메모리 컨트롤러와 다른 데이터 버스 폭을 가지는 시스템
(그림 4-2)는 미세하게 다른 세 가지 DRAM 메모리 시스템의 시스템 컨트롤러들을 보여주고 있습니다. 각 시스템 컨트롤러는 하나의 DRAM Memory Controller(DMC)를 가지고 있으며, 각 DRAM 메모리 컨트롤러는 하나의 채널을 제어하게 됩니다. 'Typical system controller'로 명명된 시스템 컨트롤러는 하나의 64비트 와이드 채널을 제어합니다. 최근의 DRAM 메모리 시스템은 범용 DRAM 메모리 모듈에서 64비트 와이드 데이터 버스로 표준화되었고, 메모리 모듈의 64비트 데이터 버스 폭은 전형적인 PC 시스템 컨트롤러의 데이터 버스 폭과 일치합니다. Intel E7205 system controller는 시스템 컨트롤러가 144비트 와이드 데이터 버스를 가지는 DRAM의 단일 채널에 연결됩니다. 그러나 범용 DRAM 모듈이 72비트 와이드의 데이터 버스를 가지기 때문에, 144비트 와이드 데이터 버스와 1:1로 동기화되어 동작하기 위해 72비트 와이드의 메모리 모듈 한 쌍이 필요하게 됩니다. 이러한 한 쌍의 메모리 모듈 구성을 '듀얼 채널' 구성이라고 불립니다. 그러나 단 하나의 메모리 컨트롤러가 존재하고 또한 두 메모리 모듈이 Lockstep에서 144비트 폭의 데이터 버스를 통해 데이터를 저장하거나 검색하도록 동작하기 때문에, 이러한 메모리 모듈 구성은 144비트 폭의 단일 채널 메모리 시스템과 동일하다고 할 수 있습니다.
하나의 DRAM 메모리 컨트롤러와 (그림 4-2)와 같은 다수의 피지컬 채널들로 이루어진 메모리 시스템들은 다른 것들과 보조를 맞춰 동작하는 피지컬 채널들로 설계됩니다. 이는 동일하지 않은 메모리 모듈(용량과 전송 속도 등)의 사용이 가능하다는 것을 의미하기도 하지만, 이런 경우는 asymmetric(비대칭) 모드에서 동작하게 되고 DRAM 모듈의 피지컬 채널들을 독립적으로 제어하게 됩니다. 그러나 단 하나의 DRAM 메모리 컨트롤러만 존재하기 때문에 서로 다른 메모리 모듈은 다수의 피지컬 채널에 동시 접근이 불가능하며, 오직 하나의 채널만 일시적으로 액세스할 수 있습니다. 그러므로 asymmetric 구성에서는 최대 시스템 대역폭은 단일 피지컬 채널의 대역폭과 동일하다는 뜻이기도 합니다.
(그림 4-3) 두 개의 메모리 컨트롤러와 두 개의 메모리 로직 채널을 가지는 시스템
전체 메모리 시스템을 제어하기 위해서 단일 DRAM 메모리 컨트롤러를 사용하는 시스템 컨트롤러와는 다르게, (그림 4-3)의 Alpha EV7 프로세서와 최근의 시스템 컨트롤러는 64비트 폭의 데이터 버스들을 독립적으로 동작시키기 위한 두 개의 메모리 컨트롤러들을 가지게 됩니다. 좁은 채널은 캐시 라인 요청에 대해 더 긴 데이터 버스트를 요구하기 때문에, DRAM 메모리 컨트롤러들의 독립적인 사용은 더 넓은 대역폭을 지속적으로 얻을 수 있게 해줍니다. 그리고 DRAM 액세스 프로토콜에 의해 통제되는 상당히 비효율적인 부분들(메모리 컨트롤러의 타이밍 시퀀스에 의한 파이프라인 스톨 등)을 부분적으로 개선할 수 있게 만들어 줍니다. 결론적으로 최근의 시스템 컨트롤러들은 프로세서 다이의 추가적인 면적과 비용 증가에도 불구하고 다수의 메모리 컨트롤러들을 포함할 수 있게 설계됩니다. 현재 일반적인 PC 시스템은 두 개의 64비트 또는 72비트(8bit = ECC, 메인보드에서 별도의 ECC 선로가 구현되어야 사용 가능) 메모리 컨트롤러를 포함하고 있으며, HEDT 시스템에서는 4개의 메모리 컨트롤러가 포함된 프로세서가 주류를 이룹니다.
(그림 4-4) Interleaved Quad channel을 보유한 고성능 메모리 컨트롤러와 HEDT 프로세서
최근의 HEDT 시스템에서는 상호 배치 방식으로 작동하는 다수의 채널들을 사용하고 있습니다. (그림 4-4)는 정교하게 제어되는 시스템 컨트롤러가 서로 다른 채널들을 통해 다수의 액세스 명령을 수행하는 방식 보여줍니다. 이러한 구성에서 여러 개의 채널들은 고성능 워크스테이션들이나 서버에서 필요로 하는 지속적인 처리량을 확보할 수 있게 만들어지고, 이러한 파이프라이닝을 통해 연속적인 사이클에서 여러 개의 칼럼으로부터 전송되는 데이터를 한 번에 처리할 수도 있습니다.
현재 JEDEC 표준에 따라 DDR4/5는 하나의 채널에 두 개의 DIMM 슬롯만 사용할 수 있게 설계(메인보드의 DIMM 수용 면적과 전송 선로 증가 방지)되기 때문에, 쿼드 채널은 총 여덟 개의 DIMM 슬롯을 가지게 됩니다.
Quiz 1 : 최근 일반 소비자용 마이크로프로세서는 두 개의 메모리 컨트롤러를 각각의 채널에 하나씩 할당하여 듀얼 채널 모드로 동작합니다. 만약 각 채널에 상이한 용량을 가진 두 개의 DIMM을 하나씩 장착할 경우, 각각의 메모리 컨트롤러는 어떻게 동작하게 될까요?
4.2.2 랭크
(그림 4-5) Dual rank DRAM 디바이스 메모리 시스템
(그림 4-5)는 DRAM 디바이스들이 2개 랭크로 구성된 하나의 메모리 모듈을 보여줍니다. 본질적으로 메모리의 랭크는 주어진 명령에 대해 보조를 맞춰 동작하는 하나 혹은 그 이상의 DRAM 디바이스의 '뱅크'라고 말할 수 있습니다. 그러나 뱅크라는 단어는 이미 DRAM 디바이스에서 독립적인 DRAM 배열들의 수를 표현하는 데 사용하고 있기 때문에, 명명 방식의 중첩에 의한 혼란을 피하기 위해 랭크(Rank)라는 단어를 사용하게 됐습니다. 하나의 랭크는 JEDEC 표준에 따라 64bit 와이드 또는 72bit 와이드 데이터 블럭으로 정의되며, 일반적인 UDIMM의 경우 x8 DRAM 디바이스 8개를 포함하게 되면 하나의 랭크가 구성됩니다. 동일한 기준에서 ECC UDIMM은 8bit ECC 칩 하나를 포함하여 총 72bit 와이드로 하나의 랭크가 구성됩니다.
DRAM 메모리 시스템 토폴러지에서 커맨드와 어드레스, 클럭 및 컨트롤 버스들은 메모리 시스템의 모든 DRAM 디바이스에 연결되어 있습니다. 그러나 상대적으로 넓은 폭의 데이터 버스는 각각 8bit로 분할되고 PCB를 관통하여 서로 마주보고 있는 다른 랭크에 위치°한 DRAM 디바이스에 연결(다른 버스들과의 타이밍 동기화를 위해 데이터들은 leveling하여 전송)됩니다. 이러한 시스템 토폴러지에서 메모리 컨트롤러는 주어진 커맨드에 반응하여 DRAM 디바이스의 적절한 랭크를 선택하기 위해 chip select 신호를 사용하게 됩니다.
최근의 메모리 시스템에서 다수의 DRAM 디바이스들은 메모리 시스템이 요구하는 데이터 버스 폭과 용량을 공급하기 위해 한데 묶이게 됩니다. 예를 들어 하나의 메모리 랭크에서는 64비트 너비의 데이터 버스를 형성하기 위해 각각 8비트 너비의 데이터 버스들을 가진 8개의 DRAM 디바이스들이 필요하는 뜻입니다. 하지만 큰 용량이나 넓은 데이터 버스를 필요로 하지 않는 임베디드 시스템에서는 각 메모리 랭크에서 훨씬 적은 수의 디바이스들을 사용하기도 합니다. 또한 하나의 랭크에 단 하나의 DRAM 디바이스만을 사용하는 경우도 존재합니다.
° : PCB를 사이에 두고 서로 마주하고 있는 두 개의 DRAM 디바이스를 배선으로 연결하는 방식을 clamshell topology라고 합니다. 모듈의 선로 구현이 용이한 편이지만 PCB의 레이어(층)가 증가할 수 있습니다. 위의 그림에서는 데이터 버스는 clamshell을, 나머지 버스들에서는 fly-by topology를 적용한 메모리 모듈을 예로 들어 설명했습니다. 아래의 그림과 같이, 나머지 버스들도 clamshell topology 방식을 적용할 수 있습니다.
4.2.3 뱅크
(그림 4-6) 8뱅크 배열을 가지는 DDR4 SDRAM 디바이스
앞서 설명한 것과 같이, 이 글에서의 '뱅크'는 JEDEC 표준에 따라 DRAM 디바이스 내에서의 독립적인 메모리 배열들의 묶음을 표현하는 데 사용합니다. (그림 4-6)은 8개의 뱅크를 보유한 DDR4 SDRAM 디바이스를 보여주고 있습니다. 최근의 DRAM 디바이스는 다른 DRAM 배열들에 대하여 여러 독립적인 접근이 병렬로 실행될 수 있도록 여러 개의 뱅크 그룹과 뱅크들로 구성됩니다. 이와 같은 표준 설계에서 메모리의 각 뱅크들은 로우(row)에 대한 접근 사이클에서 다른 위상에 존재할 수 있는 독립적인 배열로 정의할 수 있습니다. 물론 데이터 핀에 접근할 수 있도록 하는 I/O 게이팅과 같은 공통적인 자원들은 서로 다른 뱅크들과 공유합니다. 또한 멀티 뱅크 구조에서는 서로 다른 뱅크에 대한 read/write 커맨드가 인터리빙을 통해 병렬로 처리되어 보다 빠른 데이터 처리도 가능하게 만들어줍니다.
리프레시 커맨드와 같은 특정 명령들은 여러 뱅크들에 대해 병렬로 주어질 수도 있고, chip select 신호에 의해 선택된 일부 뱅크에서만 실행될 수도 있습니다. 이러한 방식으로 여러 뱅크들은 커맨드에 따라 독립적, 혹은 동시다발적으로 리프레시를 수행할 수 있게 됩니다. 이는 DRAM 디바이스가 규정된 전력 소모 제한을 가지고 있기 때문에, 주어진 시간(tREFI) 내에서 얼마나 자주 이러한 리프레시 커맨드를 실행시킬 수 있는지(tRFC) 결정된다는 것을 의미하기도 합니다.
4.2.4 로우
(그림 4-7) 4뱅크, 8196로우, 로우당 512칼럼, 칼럼당 16 데이터 비트를 가지는 DRAM 디바이스 DRAM 디바이스에서 로우(row)란, 로우 활성화 명령에 응답하여 병렬로 활성화되는 저장 셀들의 그룹을 말합니다. 최근의 DDR3 SDRAM부터 현재의 DDR5 SDRAM 이르는 DRAM 메모리 시스템에서는 일반적으로 여러 DRAM 디바이스들이 하나의 메모리 랭크에 연결되어 있습니다. (그림 4-7)은 DRAM 디바이스들이 어떠한 방식으로 연결되어 메모리의 랭크를 형성하는지 보여줍니다.
메모리 컨트롤러의 관점에서 보자면, 이러한 배열은 로우의 크기가 단순하게 특정 랭크에 있는 DRAM 디바이스의 수를 특정 DRAM 디바이스의 로우의 크기에 곱한 값을 의미하며, DRAM 로우는 특정 메모리 랭크의 여러 DRAM 디바이스들에 걸쳐 동일한 크기로 존재해야 한다는 뜻과 같습니다.
로우는 Sense amplifier에서 메모리 페이지를 저장하고 있기 때문에 DRAM 페이지라고도 불립니다. DRAM 페이지 수준에서 작은 공간(locality)의 장점을 살리기 위해서 다양한 방식들이 제안되어 왔습니다. 그러나 DRAM 페이지 수준의 작은 공간의 개발에는 한 가지 문제점이 뒤따르는데, 이는 DRAM 페이지 사이즈°°(page size)가 프로세서의 구조적인 페이지 사이즈보다는 DRAM 디바이스와 메모리 모듈의 구성에 의존할 수밖에 없다는 것입니다.
°° : 페이지 사이즈에 따라 DRAM 디바이스가 한 번에 리프레시해야 하는 로우의 개수가 달라지게 됩니다. 이는 바로 다음 글에서 다룰(여러분들이 상당히 좋아하시는) DRAM 액세스 프로토콜에서 등장할 DRAM 디바이스의 근간인 tREFI와 tRFC를 규정하는 아주 중요한 패러미터이므로, 뒤에서 설명하게 될 메모리 모듈의 구성을 통해 자신이 보유한 모듈의 페이지 사이즈와 로우 사이즈를 필히 확인하고 숙지하셔야 합니다.
4.2.5 칼럼
(그림 4-8) 각 DRAM 디바이스의 데이터 폭은 칼럼의 크기와 일치한다.
DRAM 메모리 시스템에서 데이터의 칼럼(column)은 메모리의 자체 어드레스를 가진 가장 작은 단위로 정의할 수 있습니다. (그림 4-8)은 (그림 4-5)에 있는 메모리 시스템과 유사한 토폴러지를 가지는 SDRAM이나 DDRx SDRAM과 같은 메모리 시스템들은 데이터 칼럼의 크기가 데이터 버스의 폭과 일치한다는 것을 보여줍니다.
'beat'는 간단하게 데이터 버스에서 데이터의 값이 변경되는 최소 단위를 의미합니다. SDRAM 메모리 시스템에서는 한 클럭에 한 번만 데이터 값이 변경되므로 하나의 데이터 beat가 한 클럭 사이클마다 전송됩니다. 하지만 DDRx SDRAM 메모리 시스템에서는 각각의 클럭 사이클에서 두 번의 데이터 전송이 발생하므로 단일 클럭 사이클에서 두 개의 데이터 beat가 전송됩니다. 이 beat라는 용어는 DDRx SDRAM 디바이스에서 사이클이라는 단어에 여러 의미가 중첩되는 것을 막기 위해 사용하고 있습니다.
DDRx SDRAM 메모리 시스템에서는 각각의 칼럼 액세스 커맨드가 프로그램된 버스트 길이에 의해 한 번에 여러 데이터 칼럼을 가져옵니다. 예를 들어, DDR3와 DDR4 SDRAM 디바이스에서는 각각의 메모리 read 커맨드가 8개의 데이터 칼럼(x8)을 리턴하게 되고, DDR5 SDRAM은 16개의 데이터 칼럼(x16)을 메모리 컨트롤러로 리턴하게 된다는 뜻입니다.
Quiz 2 : 현재 JEDEC 표준은 x64(ECC 모듈의 경우 x72)의 데이터 폭을 가진 DRAM 디바이스들의 그룹을 하나의 '랭크'로 규정하고 있습니다. 그렇다면 DDR5 SDRAM에서 하나의 랭크는 최소 몇 개의 DRAM 디바이스로 구성될 수 있을까요?
4.2.6 메모리 시스템 구성의 예
(그림4-9)는 4개의 랭크로 구성된 DRAM 메모리 시스템을 보여줍니다. 메모리의 각 랭크는 4개의 디바이스들로 구성되어 있으며, 각각의 디바이스들은 내부적으로 4개의 뱅크로 이루어져 있습니다. 또한 각 뱅크는 8,192개의 로우로 이루어져 있으며 각각의 로우는 512개의 데이터 칼럼으로 구성되어 있습니다. DRAM 메모리 컨트롤러는 메모리 시스템의 데이터에 접근하기 위해서 물리적인 어드레스를 수신하여 각각의 어드레스로 분해합니다. 어드레스들은 데이터가 위치한 특정 채널, 랭크, 뱅크 그룹, 뱅크, 로우와 칼럼들을 지정하고 있습니다.
그림은 균등하게 조직된 메모리 시스템을 보여주고 있지만, 많은 컴퓨터 시스템에 있는 메모리 시스템(특히나 최종 사용자가 설정을 변경할 수 있는 시스템)의 구성은 전반적으로 비대칭인 경우가 많습니다. 그 이유는 대부분의 컴퓨터 시스템들이 최종 사용자로 하여금 메모리 모듈 제품을 추가 또는 제거함으로써 메모리 시스템의 능력을 향상시키는 것을 허용하도록 설계되었기 때문입니다. 물론 최종 사용자의 선택에 의해 메모리 성능을 개선하는 것이 가능한 것은 DRAM 컨트롤러가 컴퓨터 시스템에 추가하는 각각 다른 형태(용량이나 속도 등)의 모듈들을 유연하게 수용할 수 있다는 뜻입니다. 이러한 지원은 어드레스 범위 레지스터의 사용을 통해 제공되며, 어드레스 범위 레지스터의 기능에 대해서는 메모리 컨트롤러 관련 글에서 별도로 설명하도록 하겠습니다.
4.3 메모리 모듈
초기 컴퓨터 시스템은 메인보드에 추가 DRAM 디바이스를 삽입할 수 있는 슬롯을 제공함으로써 메모리 성능(용량과 속도)을 최종 사용자가 개선할 수 있게 구성되어 있었습니다. 당시에는 DRAM 디바이스의 가격이 메인보드의 슬롯 가격에 비하여 상대적으로 매우 고가였기 때문에 이러한 확장 슬롯이 상당한 메리트를 보유하고 있었습니다. 이와 같은 초기 컴퓨터의 메인보드는 최종 사용자가 DIPs(dual in-line packages)안에 포함된 개별 DRAM 디바이스들을 제거하거나 삽입할 수 있는 슬롯을 보유한 형태로 설계되었습니다. DRAM 디바이스들은 각 슬롯에 개별적으로 추가/제거되어야 했기에 메모리 업그레이드의 프로세스는 상당히 난해하고 어려운 작업이었습니다. 당시 DRAM 디바이스의 핀들은 대부분 구부러진 형태였고 그 사실을 육안으로 식별하는 것이 어려운 경우도 있었습니다. 만약 핀에 결함이 있다면(제품 배송이나 이동 중 훼손되는 경우) 장착조차 불가능했으며, 대용량 메모리 시스템을 위한 라우팅은 메인보드에서 넓은 면적을 차지하기도 했습니다. 게다가 제조사가 원래의 방향에서 180도 틀어진 방향으로 의도적으로 슬롯을 배치하는 경우도 허다했습니다. 이러한 메모리 업그레이드에 관련된 문제점들을 개선하기 위한 방법이 메모리 모듈을 제조하고 그 위에 DRAM 디바이스들을 배치하는 것이었습니다.
메모리 모듈의 본질은 여러 개의 DRAM 디바이스들이 배치된 별도의 축소형 보드입니다. 개별적인 DRAM 칩의 추가/제거 대신에 다수의 DRAM 칩을 포함한 모듈은 빠르고 쉽게 모듈을 탈착할 수 있기에 메모리 업그레이드 과정에서 오는 난이도를 줄일 수 있었습니다. 이는 DRAM 디바이스의 수요 또한 증가시켜 판매 증가 효과도 가져오게 됐습니다.
이런 과정들을 거치며 메모리 모듈은 한층 더 정교해졌으며, 최근에는 메모리 시스템 설계 과정의 한 부분으로 자리잡게 되었습니다.
4.3.1 Single In-line Memory Module
1980년대 후반에서 1990년대 초반에는 30핀 SIMM이 표준화되었다가 나중에 72핀 SIMM으로 변경되었습니다.
30핀 SIMM은 파워, 접지, 어드레스, 커맨드, 메인보드와 DRAM 디바이스들 사이의 chip select 신호뿐만 아니라 데이터 버스의 8개 또는 9개의 신호들 간의 상호 연결을 제공합니다. 72핀 SIMM은 파워, 접지, 어드레스, 커맨드, 칩 셀렉트 신호뿐만 아니라 데이터 버스의 32개에서 36개의 신호들 간의 상호 연결을 제공합니다.
일반적으로 30핀 1메가바이트 SIMM상의 DRAM 디바이스들은 메모리 시스템으로 가는 9비트 패리티가 보호하는 데이터 버스 인터페이스를 지원합니다. 1980년대 후반 PC 시스템들은 메모리 컨트롤러에 의한 패리티 체크를 지원하기 위해 36비트 너비의 메모리 인터페이스를 제공하여 4개의 30핀 SIMM 세트를 사용했습니다. 추후 더 넓은 데이터 버스를 가진 메모리 시스템을 지원하기 위해 1990년대 초반에 72핀 SIMM이 등장하게 됩니다.
4.3.2 Dual In-line Memory Module
1990년대 후반, PC가 FPM/EDO DRAM을 거쳐 SDRAM을 사용하게 되면서 72핀 SIMM은 DIMM에게 자리를 내어주게 됩니다. DIMM은 물리적인 면적이 SIMM보다 크고, 64비트 또는 72비트 너비의 데이터 버스 인터페이스를 메모리 시스템에 제공하게 됩니다. SIMM과 DIMM의 가장 큰 차이는 전기적으로 다른 인터페이스를 통해 메인보드로부터 메모리 모듈로 가는 전송 신호의 라우팅 방식이라고 말할 수 있습니다. DIMM은 신호를 보다 조밀하게 라우팅할 수 있도록 구성되어 있습니다.
일반적으로 우리가 사용하는 데스크탑 시장을 위해 설계된 DIMM은 메모리 컨트롤러로부터 DRAM 디바이스들로 가는 어드레스나 데이터 경로에 버퍼링을 필요로 하지 않습니다. 이러한 DIMM을 UDIMM(Unbuffered DIMM)으로 정의합니다.
8GB (x64, Single Rank) 288-Pin DDR4 UDIMM
8GB (x64, Dual Rank) 288-Pin DDR4 UDIMM
16GB (x64, Dual Rank) 288-Pin DDR4 UDIMM
32GB (x64, Dual Rank) 288-Pin DDR4 UDIMM
16GB (x72, ECC, Dual Rank) 288-Pin DDR4 UDIMM
4.3.3 Registered Memory Module
최종 사용자가 설정을 변경할 수 있는 컴퓨터 시스템의 요구 사항들이 폭넓게 변화하면서, 일반적인 UDIMM 외에도 다양한 용량과 타이밍 특성을 보유한 메모리 모듈들이 필요해졌습니다. 일반적으로 워크스테이션이나 서버는 데스크탑 컴퓨터 시스템에서보다 더 큰 메모리 용량을 필요로합니다. 하지만 앞선 글에서 설명했다시피, 용량의 증가는 DRAM 디바이스의 개수가 증가하는 것을 의미하고 이것은 다양한 어드레스, 커맨드, 데이터 버스들에 전기적 로딩 문제(부하 불평등 또는 부하 불균형)를 유발합니다.
RDIMM(Registered Dual In-line Memory Module)은 메모리 모듈 인터페이스에 있는 컨트롤 신호들과 어드레스들을 버퍼링하는 레지스터 칩을 사용함으로써 대용량 메모리 시스템에서 많은 수의 DRAM 디바이스들에 인가되는 전기적 로딩 문제를 완화시킵니다.
(그림 4-10) 레지스터 칩은 커맨드와 어드레스를 버퍼하지만 추가적인 레이턴시가 발생한다.
(그림 4-10)은 RDIMM이 컨트롤 신호들과 어드레스를 버퍼링하기 위해 메모리 모듈 인터페이스의 레지스터 칩을 사용하는 것을 보여줍니다. 이러한 연결 방식으로 레지스터 칩은 메모리 컨트롤러가 반드시 직접 드라이브해야 하는 대단히 많은 양의 부하를 줄여줍니다. 이러한 메모리 시스템의 시그널은 두 개의 부분으로 나뉘게 됩니다. 하나는 메모리 컨트롤러와 레지스터 칩 간의 연결이고, 나머지 하나는 레지스터와 DRAM 디바이스들 간의 연결입니다. 이러한 시그널의 분리는 컨트롤 신호들의 경로 길이를 단축시키는 것뿐만 아니라 전기적 로딩의 수를 제한함으로써 메모리 시스템의 타이밍 특성도 최적화합니다. 그러나 메모리 모듈에서 레지스터된 래치의 사용은 몇 가지 단점을 가집니다. 먼저 어드레스와 컨트롤 신호들을 버퍼링함으로써 메모리 레이턴시가 증가하게 됩니다. 또한 대용량 메모리 시스템에서 신호 무결성(signal integrity)을 확보하기 위해 모든 요청을 지연시키므로, 이로 인한 추가적인 레이턴시도 발생하게 됩니다.
32GB (x72, ECC, Dual Rank) 288-Pin DDR4 RDIMM
32GB (x72, ECC, Quad Rank) 288-Pin DDR4 LRDIMM
32GB (x72, ECC, Dual Rank) 288-Pin DDR4 VLP RDIMM
4.3.4 Small Outline DIMM
지난 몇 년 동안 메모리 모듈의 설계는 새 DRAM 디바이스들의 출현과 함께 점차 치밀하게 발전하고 있습니다. 현재 상당히 다양한 모듈 사양들이 표준화되었으며, 최종 사용자들이 구입하여 다른 시기에 다른 모듈 제조사에서 제조된 메모리 모듈들 간의 호환성 측면에서 어떤 문제도 발생하지 않도록 멀티 소스 구성 요소들을 고려하여 설계됩니다. 그리고 시스템 레벨에서 호환성을 보장하기 위해 다양한 타입의 메모리 모듈들이 표준화됩니다.
이처럼 다양한 타입의 메모리 모듈들은 각자 다른 타겟을 가진 시장을 위해 제조되기 때문에, SODIMM과 같은 타입의 모듈은 모바일이나 노트북 컴퓨터들과 같이 크기가 제한되는 제품에 알맞게 모듈의 크기 또한 작게 설계됩니다.
16GB (x72, ECC Dual Rank) 260-Pin DDR4 SODIMM
오늘날 시판되는 DRAM 디바이스와 메모리 모듈 상품들은 DRAM 디바이스 제조사와 컴퓨터 시스템 설계자들이 길고 어려운 표준 설정 과정들을 통해 그 특징들을 갖게 됩니다. 표준 설정 과정은 DRAM 제조사들이 기능적으로 호환되는 DRAM 디바이스를 생산할 수 있도록 해주고 더 나아가 메모리 모듈 제조사 또한 다른 메모리 모듈들과 호환이 가능한 제품 설계를 가능하게 합니다. 이러한 멀티 레벨 표준화는 최종 사용자가 다른 DRAM 제조사의 DRAM 디바이스를 사용하거나 다른 모듈 제조사의 제품을 자유롭게 구매하여 사용할 수 있게 서로 호환이 가능합니다.
또한 JEDEC은 메모리 모듈 제조사에게 참고용 설계도를 제공합니다. 이 참고용 설계도는 메모리 모듈의 사양, 신호 이동 경로, 재료 목록을 담고 있습니다. 이는 제조사에게 메모리 모듈 설계를 통해 유효성을 확인하는 과정에서 공학적 자원 사용을 최소화할 수 있게 해줍니다. 또한 메모리 모듈을 제조하는 진입 장벽을 낮춰서 모듈 제조 사업에서의 경쟁을 촉진시키게 됩니다.
※ 기타 JEDEC 표준 메모리 모듈
16GB (x72, ECC, Dual Rank) 288-Pin DDR4 Mini RDIMM
16GB (x72, ECC, Single Rank) 288-Pin DDR4 Nonvolatile RDIMM
4.3.5 메모리 모듈 구성
최근의 DRAM 메모리 시스템들은 최종 사용자가 원하는 메모리 용량을 선택하고 구성함에 있어 유연성을 확보할 수 있도록 다양한 종류의 메모리 모듈들을 지원합니다. 하지만 DRAM 디바이스의 가격은 예측하기 힘든 세계 기술 경제를 앞당겨 반영하는 반도체 선물 시장의 거래 가격에 따라 변동되기 때문에, 최종 사용자가 원하는 용량과 속도를 고려하여 제품을 선택하더라도 구입 시기에 따라 제품의 가격이 유동적일 수밖에 없습니다. 그리고 최종 소비자는 가격에 민감하게 반응하여 제품을 선택하기에, 때에 따라서는 현재 보유한 모듈과 전혀 다른 모듈을 구입하기도 합니다. 이에 따라 메모리 시스템 설계 엔지니어는 필수적으로 상이한 용량의 메모리 모듈에 의한 조합뿐만 아니라, 동일한 용량의 상이한 구성을 가지는 모듈들에 대해서도 최종 소비자의 선택을 고려하여 호환이 가능하도록 제품 설계에 반영해야 할 책임이 있습니다.
(표 4-1) 각각 다른 DRAM 디바이스 구성
(표 4-1)은 4Gb, 8Gb, 16Gb의 서로 다른 세 가지 타입의 DRAM 디바이스의 구성을 볼 수 있습니다. 표를 통해 메모리 모듈은 서로 다른 수의 DRAM 디바이스를 사용하여 구성될 수 있을뿐만 아니라, 메모리 컨트롤러가 서로 다른 수의 행과 열을 지정해야 한다는 것 또한 확인할 수 있습니다.
메모리 컨트롤러는 특정한 DRAM 디바이스에 접근하기 위해 최종 사용자에 의해 선택된 메모리 모듈을 구성하는 DRAM 디바이스들을 인식하고 지원할 수 있어야 합니다. 하지만 최종 사용자가 새로운 세대의 DRAM 디바이스로 구성된 모듈을 선택하여 시스템에 장착했다면, 이를 지원하도록 설계되지 않은 메모리 컨트롤러는 최종 사용자가 선택한 모듈을 인식할 수 없으며 정상적인 호환 또한 불가능합니다.
4.3.6 Serial Presence Detect
앞서 확인했던 (표 4-1)에서 DRAM 메모리 모듈이 여러 뱅크의 DRAM 디바이스로 구성되고 다른 수의 로우와 칼럼을 가질 수 있다는 것을 확인했습니다. 그러나 (표 4-1)에서 확인할 수 없는 것이 있는데, 이는 DRAM 메모리 모듈이 tCAS, tRAS, tRCD, tRP의 최솟값 측면에서 서로 다른 타이밍 특성을 가질 수 있다는 것입니다. DRAM 모듈의 가변성은 메모리 시스템 설계 엔지니어가 다루어야만 하는 복잡성을 증가시킵니다. 이러한 설계 측면에서의 복잡성을 감소시키고 최종 사용자가 메모리 업그레이드나 오버클러킹 과정에서 겪을 수 있는 많은 혼란을 방지하기 위해서, JEDEC은 EEPROM을 활용하여 해당 메모리 모듈의 구성 정보를 저장하는 방식을 표준으로 채택하게 되었습니다. 이 EEPROM에 저장된 데이터는 시스템 이니셜라이즈 과정 중 메모리 컨트롤러에 의해 읽히게 되고, 메모리 컨트롤러는 모듈에서 각 DRAM 디바이스로부터 전송되는 데이터의 최적화된 접근 방식에 필요한 구성과 타이밍 패러미터를 얻을 수 있게 됩니다.
(그림 4-11) SPD 디바이스는 메모리 모듈의 구성 정보를 저장한다.
(그림 4-11)은 메모리 모듈에 부착된 작은 EEPROM(8핀으로 구성, 그림 가운데)을 확인할 수 있는 사진입니다. 이 작은 EEPROM을 SPD라고 부르며, 서로 다른 메모리 모듈 구성 방식에 존재할 수 있는 다양한 데이터들을 저장하고 있습니다.
또한 측정 센서가 포함된 SPD는 시스템 버스(I2C 또는 SM)를 통해 컴퓨터 시스템이 현재 모듈의 상태 변화(온도나 전압)를 측정할 수 있게 돕기도 합니다.
(표 4-2) SDP에 저장된 샘플 변수들
(표 4-2)는 DDRx SDRAM으로 구성된 메모리 모듈의 SPD에 저장된 몇 가지 값들과 패러미터들, 그리고 주요 DRAM 제조사들(이 글의 검/교정용 초안 제출 시점인 2020년 1월 22일 현재 시장 점유율 기준 상위 5개 제조사)을 보여줍니다.
한편 튜닝 디바이스 제조사들은 주요 데이터를 저장하고 남은 EEPROM의 공간을 색다른 용도로 활용하기도 합니다. 이들은 마이크로프로세서 제조사의 별도 지침에 따라(Intel® eXtreme Memory Profile, AMD Memory Profile) 자체적인 선별 과정과 스트레스 테스트를 거쳐 JEDEC의 표준 speed bin table에서보다 공격적으로 재구성된 주요 타이밍 패러미터들을 SPD에 추가로 저장하고 방열판과 LED 소자들을 부착하여 최종 사용자에게 판매하기도 합니다. 최종 사용자는 이렇게 튠업된 모듈을 인식할 수 있고 추가로 저장된 데이터를 불러오기 가능한 메인보드의 구입을 통해 메모리와 메모리 컨트롤러 오버클러킹, 그리고 신뢰성 테스트에 소요되는 시간을 획기적으로 감소시킬 수도 있습니다.
4.4 메모리 시스템 토폴러지
(그림 4-12) 일반적인 DRAM 메모리 시스템의 토폴러지
(그림 4-12)는 16개의 DRAM 디바이스들이 단일 DRAM 컨트롤러에 연결되어 있는 DDR4 SDRAM UDIMM 메모리 시스템을 보여주고 있습니다. 16개의 DRAM 디바이스들은 2개의 분리된 메모리 랭크들로 조직되어 있습니다. 하지만 단방향의 커맨드/어드레스, 컨트롤 버스나 클럭 시그널과는 다르게 데이터 버스는 양방향으로 연결되어 있고 다른 랭크에 있는 DRAM 디바이스 하나와 함께 데이터 버스를 공유한다는 것도 확인할 수 있습니다. 이러한 토폴러지에서 커맨드가 발생하게 되면 커맨드/어드레스 버스의 전기적 신호는 연결된 모든 DRAM 디바이스에 동시에 전달°°°되지만, 컨트롤 버스의 칩 셀렉트 신호는 특정한 랭크에 포함된 8개의 DRAM 디바이스 그룹을 선택할 수 있게 합니다.
이렇게 메모리 시스템 토폴러지는 신호 경로의 길이와 전기적 부하 특성을 결정하게 되므로 결과적으로 최근의 고성능 DRAM 메모리 시스템의 설계자들은 토폴러지와 DRAM 메모리 시스템의 구조 설계에 상당한 주의를 기울여야만 합니다.
(그림 4-12)의 하단을 보면, 컨트롤 버스(CKE, ODT, Chip Select 등)의 신호들은 하나의 랭크를 기준으로 연결되고 전송되는 것을 확인할 수 있습니다. 이는 랭크가 증가할 경우 메모리 컨트롤러가 제어해야 할 신호의 개수가 증가한다는 것을 의미합니다. 클러킹 네트워크 또한 마찬가지입니다. 클럭 신호는 멀티 랭크 DIMM에서 각 랭크에 두 개의 클럭 신호(CKx_t, CKx_n / CK, CK#)를 보내게 되므로 하나의 채널에 두 개 이상의 멀티 랭크가 존재할 경우 PLL과 DLL을 사용하는 클럭 신호의 특성상 메모리 컨트롤러에 상당한 부담을 주게 됩니다. 이는 최종 사용자가 메모리 업그레이드나 오버클러킹 과정에서 자신의 컴퓨터 시스템에 알맞은 메모리 모듈을 선택하지 못할 경우, 제품의 구매 비용에 관계없이 기대하는 성능의 구현이 불가능할 수 있다는 것을 시사합니다.
°°° : 각 채널에 Dual Rank를 가진 모듈이 장착된 경우, 해당 모듈이 UDIMM이라 하더라도 Command Rate를 2T로 증가시켜 전기적 로딩 문제를 일정 부분 완화하는 것이 가능합니다. 하지만 CR을 2T로 조절할 경우 1T 때보다 C/A bus의 대역폭이 감소하여 추가적인 레이턴시를 발생시킵니다.
4.5 요약
이 글과 앞선 글들에서 설명한 다양한 주제들을 되짚어 본다면, 최종 사용자가 오버클러킹을 위한 메모리 업그레이드나 또는 그 반대의 경우(용량의 업그레이드를 제외한 타이밍이나 클럭의 상향 조정)라 할지라도 상당히 많은 요인을 고려하여 제품 선택에 심혈을 기울여야 한다는 것을 확인할 수 있습니다. 이는 최종 사용자가 구매하기를 희망하는 마이크로프로세서와 그에 포함된 메모리 컨트롤러의 성능과 개수, 메인보드의 전송 선로, 신호 전달 방식과 전원부 조합, 메모리 모듈의 구성과 미래를 대비한 용량 증가 등을 숙고하여 컴퓨터 시스템을 한 번에 완성하지 못한다면 추가적인 비용의 지출이 불가피하다는 것을 의미합니다.
(그림 4-13) 메인보드상의 다양한 클럭 시그널 라우팅 방식과 DIMM 토폴러지
또한 단순히 빠른 클럭 속도와 액세스 타이밍을 추구하는 오버클러킹을 목적으로 하는 메모리 모듈 구입이라 할지라도, 메인보드의 DIMM 토폴러지를 간과할 수는 없습니다.
위의 (그림 4-13)을 통해 하나의 채널이 가질 수 있는 두 개의 DIMM 슬롯들을 보여주고 있으며, 이러한 DIMM 슬롯들이 서로 다른 세 가지의 클럭 분배 방식을 통해 연결되어 있는 것을 확인할 수 있습니다.
Fly-by 방식은 가장 많은 메인보드에서 사용하는 토폴러지입니다. 일반적으로 메인 슬롯만 사용할 경우 가장 높은 효율과 신호 무결성을 보여줍니다. 하지만 두 개의 DIMM 슬롯을 모두 사용할 경우, 직렬 연결 방식의 가장 큰 문제인 신호 감쇠가 발생한다는 단점이 존재합니다.
Point-to-point 방식은 작은 폼 팩터를 가진 메인보드에서 쉽게 찾아볼 수 있습니다. 이 토폴러지의 가장 큰 장점은 신호를 다른 슬롯으로 분배할 필요가 없기 때문에 배선의 길이도 상대적으로 짧아서 신호 감쇠나 반사로 인한 품질 저하 현상이 적다는 점입니다. 하지만 각 채널에 단 하나의 DIMM 슬롯만 존재하기 때문에 확장성이 떨어진다는 단점이 존재합니다.
마지막 Tree 방식은 대부분 확장 슬롯과 메인 슬롯을 구분하지 않는 워크스테이션이나 서버 시스템을 수용하는 메인보드에서 주로 사용하는 토폴러지입니다. 이 방식은 쿼드 채널 이상에서 각각의 슬롯에 대용량 메모리 모듈을 장착하여 사용할 때 최고의 효율을 보여줍니다(물론 일반 데스크탑 프로세서를 지원하는 메인보드에서도 이러한 토폴러지를 구현한 제품이 존재함). 하지만 슬롯들을 병렬로 연결하는 과정에서 다른 방식에 비해 상대적으로 임피던스 불연속 지점이 증가하여 신호 품질이 저하된다는 단점이 존재합니다.
보다 빠르고 효율적인 컴퓨터 시스템을 위해 최종 사용자는 DRAM 디바이스들의 클러킹 네트워크, 데이터 버스, 커맨드/어드레스와 컨트롤 버스의 설계 경로가 모두 일치하는 제품을 선택해야 합니다. 이러한 선택은 신호 왜곡을 최소화하고 전기 신호들을 더 높은 주파수로 증가시킬 수 있습니다. 그리고 각 채널에 장착되는 메모리 모듈의 용량을 동일하게 구성하여 메모리 컨트롤러가 싱글 채널이나 플렉서블 모드로 전환되는 것을 방지해야 합니다. 또한 멀티 랭크 메모리 모듈의 사용을 최대한 억제하여 원활한 오버클러킹을 방해하는 파이프라인 스톨을 사전에 차단할 수 있는 지혜로운 제품 선택도 필요합니다. 이와 같은 시스템 차원의 동기화와 최적화 원리를 인지하고 컴퓨터 시스템을 구성한다면, 최종 사용자는 오버클러킹이라는 험난한 과정을 조금 더 유연하게 극복할 수 있습니다.
Faber est suae quisque fortunae.