개요
PMEM은 persistentance memory의 약자로 DRAM과 SSD에 중간에 위치하는 새로운 스토리지 계층을 의미한다. NVM (Non-volatile memory)혹은 Intel의 거의 독점적인 상표권을따서 Optane메모리라고 불리기도 한다. 기존 SSD보다 대략 1000배 정도 빠른 Latency를 이론적으로 확보할 수 있다.
Persistent memory를 이용하면 다음과 같은 장점이 있다.
- Cache line에 맞는 크기로 정보를 가져오기 때문에 fine-grained (byte addressable)한 storage를 사용할 수 있다. 이는 data serialization에 소요되는 시간을 줄이거나 없앤다.
- DIMM에 직접 설치할 수 있기 때문에 PCIe에서 오는 성능저하가 없다.
- CPU가 load-store로 직접 접근할 수 있다.
- Driver, file system을 거치지 않고 직접 접근 가능하다.
- 최종적으로 영구적이며, latency가 적고, 높은 throughput을 기대할 수 있다.
Things to consider
- Data Persistence: CPU와 Memory간의 상관관계는 기존에는 Memory에 데이터가 유지되지 않기 때문에 persistent하지 않아도 괜찮았다. 그러나 Persistent메모리에서는 CPU cache와의 동기화로 인하여 메모리에 persistent한 데이터를 유지하는 것이 매우 중요해 졌다.
- Data Consistency: x86에서 Atomic의 최소단위는 8 byte이다. 즉 8바이트 write에서 데이터는 Atomic하게 작성된다. 그러나 이 8바이트보다 큰 데이터들은 transaction하기 위해서 logging/recovery 방식이 필요해진다. 즉 Data consistency를 위해선 기존 파일 시스템의 저널링처럼 무언가 추가적인 방법이 필요해지는 것이다.
- Memory Leak: 만약 Persistent메모리에 Leak이 발생하면 기존의 시스템처럼 재부팅하는 것으로 해결할 수 없다. persistent memory의 leak은 역시 마찬가지로 memory leak이 된다.
- Byte Level Access: Application개발자들은 Stroage Block size에 맞추어서 쓸 필요가 없어진다. 즉 Performance향상과 Memory footprint들을 줄일 수 있다.
- Error handling: Storage의 Error은 Memory error로 사용자에게 전달된다.
Finding
- FH1: Read/Write 속도가 DRAM과 달리 다르다. 즉 Write이 Read보다 느리다.
- FH2: Write이 Latency가 크고 Bandwidth가 작기 떄문에 bottleneck이 된다.
- FH3: Sequential NVM access는 이러한 단점을 커버한다. (Sequential read가 random read보다 빠르다.)
- FH4: Persistence를 지키는 것은 cache line invalidation, flushing을 일으키기 때문에 생각보다 느리다.
- FH5: Cache coherence protocol은 NUMA머신의 scalability를 방해한다. 이는 Directory coherence protocol에서 기원하는데, directory write이 느린 NVM속도때문에 더욱 과장되어 보이기 때문이다.
Guidelines for NVM Systems Software
- GS1: Crash consistency operations들을 자주 사용하는 것은 큰 write overhead를 부르기 때문에 속도 저하의 주범이 된다. 따라서 Memory allocation, 혹은 write과 같은 NVM state를 바꾸는 작업들은 NVM lag + Crash consistency를 위한 속도 저하를 극복해야 한다.
- GS2: Persistent memory allocation은 NUMA장치를 신경써서 작성해야 한다. 이는 NUMA장치에서 write lag가 더욱 크게 보이기 때문이다.
Guidelines for Persistent Index Algorithm
- GA1: Lookup operation은 대다수의 IO operation을 차지하는 경향이 있는데, 이 Lookup operation을 효율적으로 작성하여 NVM의 read latency가 보이지 않도록 하여야 한다.
- GA2: Lookup 그리고 Scan operation은 Read를 하게 되는데, 이는 Directory cache protocol의 사용을 만들어서 NVM에 특정 write log을 시키기도 한다. 이러한 write lag에서 오는 속도저하도 무시할 수 없다.
- GA3: Write operation을 위하여 자주 NVM allocation하게 되면 Atomic allocate를 위한 logging에 대한 lag가 심해짐으로 latency가 커질 수 있다. 즉 최대한 NVM memory allocation을 하는 횟수를 줄여야 한다.
- GA4: Persistent write operation의 수를 줄여야 한다. 즉 logging위하여 저장되어야 하는 필수적인 요소의 수를 줄여야 한다.
- GA5: Scan operation과 같은 경우에는 Sequential하게 실행되어야 한다.
Guidelines for Concurrency Control
- GC1: Concurrent access를 통해서 NVM에 대한 다중접근이 가능하도록 하여야 한다.
- GC2: NVM에 저당되는 자료구조에서 Strutural modification operation즉 merge나 split에 드는 시간을 줄여야 한다. 이는 이러한 연산이 필연적으로 Blocking이라는 점에서 기인하는데 이는 NVM에서 DRAM보다 더욱 두드러진 성능저하의 요소로 보이게 된다.
- GC3: NVM은 저장하는 단위가 큰 만큼, persistent memory에서 data 사이즈로 인한 성능저하가 있으면 안된다. 예를 들어서 cache size보다 큰 데이터의 경우에는 cache miss를 지속적으로 부를 수 있는데, NVM에서는 이러한 성능저하가 더욱 큼으로 신경써서 작업해야 한다.
요약 하자면, write/read 가 느리기 때문에 효율적으로 접근해야 하고, consistency를 유지하기 위한 비용이 비싸며, 이러한 performance down은 특히 NUMA머신에서 심하게 일어난다, 로 정리할 수 있다.