Persistent Memory (영구 메모리)
0. 개요
Persistent Memory(PMEM, 영구 메모리)는 DRAM의 빠른 바이트 주소 접근성과 NAND Flash의 비휘발성을 결합한 차세대 메모리 기술입니다. 전통적인 메모리 계층에서 DRAM은 빠르지만 휘발성이고, NAND Flash는 비휘발성 하지만 블록 단위 접근과 높은 지연 시간을 가지는 반면, 영구 메모리는 메모리 버스를 통해 바이트 단위로 직접 접근하면서도 전원이 꺼져도 데이터를 유지합니다.
영구 메모리는 메모리와 스토리지 사이에 새로운 제3의 계층(third tier)으로 자리매김하며, 기존의 스토리지 스택에서 발생하는 오버헤드를 크게 줄입니다. DAX(Direct Access) 모드를 통해 파일 시스템 레이어를 우회하고 응용 프로그램이 직접 물리적 주소에 접근할 수 있어, I/O 스택의 컨텍스트 스위치와 데이터 복사 비용을 제거합니다. 본 문서는 영구 메모리의 개념, 구현 기술, 프로그래밍 모델, 파일 시스템 통합, 그리고 메모리 계층에서의 활용을 종합적으로 분석합니다.
1. 핵심 개념
| 개념 | 의미 | 왜 중요한가 |
|---|---|---|
| PMEM | 비휘발성 바이트 주소 가능 메모리 | DRAM 속도와 Flash 지속성을 결합합니다 |
| NVDIMM | Non-Volatile DIMM 폼 팩터 | 메모리 슬롯에 장착되는 영구 메모리 모듈입니다 |
| DAX | Direct Access 모드 | 파일 시스템 오버헤드를 제거하고 직접 접근합니다 |
| PMDK | Persistent Memory Development Kit | 영구 메모리 프로그래밍을 위한 라이브러리 모음입니다 |
| ADR | Asynchronous DRAM Refresh | 전원 장애 시 DRAM 캐시를 플러시하는 하드웨어 기능입니다 |
| FLUSH | 캐시 라인을 영구 메모리로 쓰기 | 데이터 영속성을 보장하는 핵심 연산입니다 |
| CLFLUSH/CLWB | x86 캐시 플러시 명령어 | 캐시 라인을 메모리로 강제 쓰기합니다 |
| SFENCE/pmem_drain | 영속성 펜스 | 이전 쓰기의 영속성 순서를 보장합니다 |
| eADR | Enhanced ADR | CPU 캐시까지 자동 플러시하는 확장 기능입니다 |
| 메모리 파일 시스템 | PMEM을 파일로 관리 | 기존 파일 API로 영구 메모리를 접근합니다 |
2. 영구 메모리의 위치 — 메모리 계층 혁신
그림 1. 메모리 계층에서 영구 메모리의 위치와 전통적 스택 비교
기존 스택 vs 영구 메모리 스택
기존 스토리지 스택에서 응용 프로그램은 파일 시스템을 거쳐 블록 I/O 레이어, 디바이스 드라이버를 통해 스토리지에 접근합니다. 이 과정에서 컨텍스트 스위치, 데이터 복사, 인터럽트 처리 등 상당한 오버헤드가 발생합니다.
영구 메모리는 DAX 모드에서 파일 시스템의 page cache를 우회하고 응용 프로그램이 직접 물리적 주소 공간에 매핑하여 접근합니다. 이를 통해 기존 대비 수십 배에서 수백 배까지 지연 시간이 감소하며, 특히 초당 처리량(IOPS)이 크게 향상됩니다.
메모리-스토리지 경계의 흐림
영구 메모리는 DRAM보다 느리지만 NAND Flash보다 빠르며, DRAM보다 밀도가 높지만 NAND보다 낮은 특성을 가집니다. 이러한 중간 특성으로 인해 메모리와 스토리지의 전통적인 경계가 흐려지며, 시스템 아키텍처의 재고가 필요합니다.
3. 하드웨어 구현 기술
NVDIMM 폼 팩터
영구 메모리는 주로 NVDIMM(Non-Volatile DIMM) 형태로 구현됩니다. NVDIMM은 기존 DRAM DIMM 슬롯에 장착되며, 메모리 버스를 통해 CPU와 직접 통신합니다.
| NVDIMM 유형 | 원리 | 대표 제품 | 특징 |
|---|---|---|---|
| NVDIMM-N | NAND로 백업 | Smart Modular | DRAM 성능 + NAND 지속성 |
| NVDIMM-F | Flash 기반 | Viking | Flash 스토리지를 메모리로 접근 |
| NVDIMM-P | 영구 메모리 | Intel Optane | 차세대 영구 메모리 표준 |
인텔 옵테인 DC 영구 메모리
Intel Optane DC Persistent Memory는 3D XPoint 기술을 기반으로 한 대표적인 영구 메모리 제품입니다. 2018년 출시되어 2022년 단종되었지만, 영구 메모리 기술의 상용화에 중요한 이정표가 되었습니다.
- 모드 1 (Memory Mode): DRAM 캐시로 동작하여 용량 확장에 활용 (휘발성)
- 모드 2 (App Direct Mode): 영구 메모리로 동작하여 DAX 지원 (비휘발성)
- 대역폭: 최대 3,200 MT/s, 8채널 구성 시 최대 102.4 GB/s
- 용량: 128GB, 256GB, 512GB 모듈
영속성 보장 메커니즘
그림 2. 전원 장애 시 데이터 영속성을 위한 ADR/eADR 메커니즘
전원 장애가 발생하면 CPU 캐시에 있는 데이터가 유실될 수 있습니다. 이를 방지하기 위해 다음 메커니즘이 필요합니다:
- ADR (Asynchronous DRAM Refresh): 전원 장애 감지 시 DRAM 내부의 데이터를 영구 메모리로 자동 플러시
- eADR (Enhanced ADR): CPU 캐시까지 포함하여 자동 플러시 (CLFLUSH 불필요)
- 소프트웨어 FLUSH: ADR만 있는 시스템에서는 응용 프로그램이 CLWB/CLFLUSHOPT와
SFENCE또는pmem_drain()으로 영속성을 보장해야 합니다.
4. 프로그래밍 모델
파일 기반 접근 (Memory-Mapped File)
영구 메모리는 mmap() 시스템 콜을 통해 파일로 접근할 수 있습니다. 파일 시스템이 DAX를 지원하면 page cache를 우회하고 직접 물리적 주소 공간에 매핑됩니다. PMDK의 libpmem은 pmem_map_file(), pmem_is_pmem(), pmem_persist() 같은 API로 매핑과 영속성 처리를 단순화합니다.
#include <libpmem.h>
size_t mapped_len;
int is_pmem;
void *addr = pmem_map_file(
"/mnt/pmem/data",
PMEM_LEN,
PMEM_FILE_CREATE,
0666,
&mapped_len,
&is_pmem);
// 영구 메모리로 데이터 복사
if (is_pmem) {
pmem_memcpy_persist(addr, buffer, size);
} else {
memcpy(addr, buffer, size);
pmem_msync(addr, size);
}
pmem_unmap(addr, mapped_len);
FLUSH와 영속성 순서
그림 3. 영구 메모리 프로그래밍의 핵심: FLUSH와 펜스 순서
영구 메모리 프로그래밍에서 가장 중요한 것은 데이터 영속성 순서(data persistence ordering)입니다. 여러 데이터 구조를 갱신할 때, 의존성 순서대로 flush하고 마지막에 SFENCE 또는 pmem_drain() 같은 펜스를 넣어야 합니다.
// 올바른 영속성 보장 순서
// 1단계: 새 데이터 쓰기
meta->count++;
data[index] = new_value;
// 2단계: 의존성 순서대로 FLUSH
pmem_flush(&data[index], sizeof(data[index]));
pmem_flush(&meta->count, sizeof(meta->count));
// 3단계: SFENCE로 순서 보장
pmem_drain(); // 또는 _mm_sfence()
PMDK 라이브러리
PMDK(Persistent Memory Development Kit)는 영구 메모리 프로그래밍을 위한 오픈소스 라이브러리 모음입니다.
| 라이브러리 | 용도 | 특징 |
|---|---|---|
| libpmem | 기본 영속성 연산 | low-level FLUSH/펜스 래퍼 |
| libpmemobj | 객체 기반 프로그래밍 | 트랜잭션, 자동 영속성 |
| libpmemlog | 로그 구조 | append-only 로그 파일 |
| libpmemblk | 블록 구조 | 고정 크기 블록 배열 |
| libpmemkv | 키-값 스토리지 | 다양한 백엔드 지원 |
5. 파일 시스템 통합
DAX 지원 파일 시스템
영구 메모리를 효과적으로 활용하려면 DAX(Direct Access)를 지원하는 파일 시스템이 필요합니다.
| 파일 시스템 | DAX 지원 | 특징 |
|---|---|---|
| ext4 | ✓ | 범용 리눅스 파일 시스템, per-inode DAX 정책 지원 |
| XFS | ✓ | 대용량 워크로드에 널리 사용, dax=inode 정책 지원 |
| ext2 | ✓ | 단순 구조로 실험/테스트에 자주 사용 |
| virtiofs | ✓ | 가상화 환경에서 호스트 정책 기반 DAX 지원 |
| erofs | ✓ | 읽기 중심 이미지 배포에서 DAX 활용 가능 |
DAX 동작 원리
DAX는 mmap()을 사용할 때 page cache를 우회하고 파일의 물리적 블록을 직접 응용 프로그램 주소 공간에 매핑합니다.
- 응용 프로그램이 파일을 mmap()으로 매핑
- 파일 시스템이 DAX 플래그 확인
- 물리적 블록 주소를 직접 반환 (page cache 우회)
- 응용 프로그램이 load/store 명령어로 직접 접근
- FLUSH 명령어로 영속성 보장
6. 장단점 분석
장점
| 장점 | 설명 |
|---|---|
| 초저지연 | DRAM 수준의 나노초대 지연 시간 (100ns 이하) |
| 바이트 주소 | 블록 I/O 없이 직접 접근 가능 |
| 높은 대역폭 | 기존 NAND 대비 10배 이상 대역폭 |
| 높은 내구성 | NAND보다 훨씬 높은 쓰기 내구성과 낮은 write amplification |
| 전력 효율 | DRAM 대비 낮은 대기 전력 |
| 즉시 부팅 | 전원 복구 시 즉시 데이터 접근 가능 |
| 스택 간소화 | 파일 시스템/블록 I/O 오버헤드 제거 |
단점
| 단점 | 설명 |
|---|---|
| 높은 비용 | DRAM보다 3-5배 높은 비트당 비용 |
| 낮은 밀도 | DRAM 대비 낮은 메모리 밀도 |
| 프로그래밍 복잡성 | 영속성 관리, 순서 보장 필요 |
| 제한된 생태계 | 호환 소프트웨어/하드웨어 제한적 |
| Optane 단종 | 인텔 옵테인 양산 중단으로 대안 부족 |
| OS 지원 제한 | 리눅스 위주, 윈도우 지원 제한적 |
성능 비교
| 항목 | DRAM | 영구 메모리 | NAND Flash |
|---|---|---|---|
| 지연 시간 | ~10ns | ~100ns | ~100μs |
| 대역폭 | 50+ GB/s | 10+ GB/s | 1+ GB/s |
| 쓰기 내구성 | 제한적 | 무제한 | 제한적 |
| 비용 ($/GB) | 5-10 | 2-5 | 0.1-0.5 |
| 전력 (대기) | 높음 | 낮음 | 매우 낮음 |
| 바이트 주소 | ✓ | ✓ | ✗ |
7. 관련 기술 및 참고 문헌
관련 기술
| 기술 | 영구 메모리와의 관계 |
|---|---|
| CXL (Compute Express Link) | 차세대 영구 메모리 인터커넥트 |
| HBM (High Bandwidth Memory) | PIM과 결합한 인메모리 컴퓨팅 |
| NVMe (Non-Volatile Memory Express) | 영구 메모리 SSD 인터페이스 |
| Storage Class Memory | 영구 메모리의 상위 분류 |
| Computational Storage | 데이터 가공을 스토리지로 이동 |
참고 문헌
- Intel. "Intel Optane DC Persistent Memory Technical Brief." 2018.
- SNIA. "NVDIMM Messaging & FAQ." January 2014.
- pmem.io. "Persistent Memory Programming." https://pmem.io/
- Intel. "Programming Intel Optane Persistent Memory." Intel Developer Zone.
- Corbet, J. "DAX: Direct Access to Persistent Memory." LWN.net, 2015.
- Fuller, N. "Intel Optane DC Persistent Memory: A New Tier in the Memory Hierarchy." IEEE Micro, 2019.
- Wang, W. "Persistent Atomics for Lock-Free Data Structures." ACM SPAA, 2019.
8. 핵심 정리
-
영구 메모리는 DRAM의 빠른 접근성과 NAND의 비휘발성을 결합한 제3의 메모리 계층으로, 메모리-스토리지 경계를 흐리고 시스템 아키텍처를 혁신합니다.
-
DAX 모드를 통해 파일 시스템 오버헤드를 제거하고 직접 물리적 주소에 접근할 수 있어, 기존 I/O 스택 대비 수십 배에서 수백 배 빠른 접근이 가능합니다.
-
영속성 보장에는 ADR/eADR 하드웨어 메커니즘과 소프트웨어 FLUSH/SFENCE 순서가 필요하며, 이는 영구 메모리 프로그래밍의 가장 중요한 도전 과제입니다.
-
PMDK 라이브러리는 영구 메모리 프로그래밍의 복잡성을 추상화하여, 기존 응용 프로그램의 마이그레이션을 용이하게 합니다.
-
Intel Optane의 단종 이후 영구 메모리 시장은 변화하고 있으나, CXL 인터커넥트와의 결합을 통해 새로운 형태로 발전할 것으로 기대됩니다.
See Also
- PCM Analysis - 상변화 메모리와 3D XPoint 기술
- NVM Interface - 비휘발성 메모리 인터페이스 비교
- FeRAM Analysis - 페로전기 메모리 기술
- ReRAM Analysis - 저항 메모리 기술
- MRAM Analysis - 자기 저항 메모리 기술
- STT-MRAM Detailed - STT-MRAM 상세 분석