International Conference on Architectural Support for Programming Languages and Operating Systems - ASPLOS
개요
Pmem (이 논문에서는 SCM storage class memory)에 대한 설명은 Pmem, PACTree참고.
Mnemosyne의 Contribution은 다음과 같다.
- 거의 최초의 Pmem을 위한 OS + Library지원을 제시한 논문
- Pmem사용에 있어서, Consistency와 Durability에 대한 중요성을 어필
- Atomic log writes에 대한 기존에는 없던 접근법 제공
디자인
- User level access
- 기존의 메모리 처럼 byte level의 User level접근을 SCM에서 가능하도록 함
- Persistent Regions. Persistent regions은 kernel에서 user level access에 대한 Permission을 저장하고 있어서 기존의 VA-PA변환처럼 User level에서 kernel을 거치지 않고도 하드웨어적인 방식으로 Security를 보장하면서 SCM에 접근할 수 있도록 하였다. pstatic을 사용하여 static하게 링킹하던지 아니면 pmap이라는 API를 통해서 동적으로 persistent region을 확보할 수 있도록 하였다. 또한 persistent키워드를 이용하여서 static 하게 persistent포인터에는 Voltaile 포인터가 저장되지 않도록 할 수 있게 하였다. 그러나 이러한 방식에서는 persistent data가 volatile메모리에 저장되는 경우 생길 수 있는 memory leak을 막지는 못하였다.
- Consistent updates
- failure상황에서 persistent memory의 correctness를 보장
- 기존의 파일시스템들은 여러 다양한 consistency를 위한 방법들을 제공한다. 이를 위해서 Mnemosyne는 persistentce primitives, persistent heap그리고 log를 제공하여서 유저가 다양한 persistent기법에 대처할 수 있도록 하였다. 특히 Consistency를 확보하기 위해서는 Cache와의 상호작용도 고려해야 한다. programmer가 atomic키워드를 넣으면 그 부분이 컴파일러에 의하여 자동으로 transaction으로 변환하도록 하였다. 또한 memory leak을 예방하기 위하여 persistent키워드를 제공하였으며, GC혹은 RC를 이용하여 persistent메로리가 관리 될 수 있도록 하였다.
구현
- Persistent Regions
- 'pstatic키워드를 통해서 persistent object에 저장되어야 하는 내용들을 linker가 .persistent ELF section에 저장되도록 하였다. 혹은 pmap를 이용하여 dynamic allocation이 가능하게 하였다. 이를 위해서 kernel에는 Region manager라는 것이 상주하도록 하였다. Region manager은 linux VM시스템과 통합되어 있어서 persistent기능을 제공하도록 하였다. 또한 여러 logging이라던지 Allocation이라던지 insight를 제공하였으나, 최신 논문과 겹치는 내용이 많아서 생략한다.
- Durable Memory Transactions
- atmoic{}을 사용하여서 in-place update를 가능하게 하였다.
- 이는 Compiler와 Logging을 통해서 기존의 코드의 메모리 write를 write ahead logging을 통해서 journaling이 일어나도록 수정하는 작업을 통해서 이루어졌다. 구체적인 implementation은 enginnering works으로서 논문 참고.