NVL-C: Static analysis techniques for efficient, correct programming of non-volatile main memory systems

Ahn9807 (토론 | 기여)님의 2023년 2월 4일 (토) 03:53 판 (새 문서: 분류: 시스템 논문 == 개요 == NVM을 위한 Static analysis compiler를 만드는 고민을 작성한 논문이다. # Minimal, familiar한 인터페이스를 제공해야 한다. # Pointer safety를 위해서 Volatile그리고 NVM의 포인터를 어떻게 static하게 분리할지 고민해야 한다. # Transaction을 위해서 logging에 대한 시스템적 제공이필요하다. # 이 모든것과 함께 Performance를 신경써야 한다. == Design == ;nvm, nv...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)


개요

NVM을 위한 Static analysis compiler를 만드는 고민을 작성한 논문이다.

  1. Minimal, familiar한 인터페이스를 제공해야 한다.
  2. Pointer safety를 위해서 Volatile그리고 NVM의 포인터를 어떻게 static하게 분리할지 고민해야 한다.
  3. Transaction을 위해서 logging에 대한 시스템적 제공이필요하다.
  4. 이 모든것과 함께 Performance를 신경써야 한다.

Design

nvm, nvl_wp
type을 통해서 nvl에서 사용할 오브젝트를 분리하였다. 배열은 const한 type을 가지기에, nvl로 선언된 배열은 항상 nvl타입의 데이터를 저장한다. 또한 만약 구조체가 nvl타입으로 선언되어 있으면, 구조체 내부의 원소들도 자동으로 컴파일러에 의해서 nvl type을 lvalue에 상속하도록 하였다. 모든 nvl그리고 nvl_wp타입은 const로 생각되어 진다. 즉 type conversion은 금지되어 있다.
V and NV
NV<->NV (inter pool)와, V->NV는 허용되어 있지만 NV->V와 NV<->NV(intra pool)는 금지되어 있다.
NVM Allocation
NVM allocation은 항상 named된 NVM heap에 할당된다. 이를 위해서 filesystem처럼 nvl_heap_t, nvl_open, nvl_close와 같은 인자들을 제공하였다. 특히 NVL파일을 열떄는 type이 기존 할당된 타입과 일치하는지 검사하기 위해서 checksum을 계산하여 일관성을 보장하였다.
Reference count
NV 오브젝트에다가 reference를 저장하는 것이 아니라, NVM allocation마다 저장하였다. 이는 Array와 같은 경우에는 Object마다 저장할 수 없기 때문이다. RC에는 NV-NV RC와 V-RC가 있는데, 전자는 NVM오브젝트가 살아있는한 계속 할당되어 있으며 후자는 application이 종료되는 순간 0으로 초기화 된다. 또한 Cycle로 인하여 Memory leak이 생기는 것을 막기 위하여, NVL-C에서는 Weak pointer를 제공한다. nvl과 nvl_wp자료구조의 차이가 바로 이 weak pointer의 유무이다.
Transactions
ACID를 보장하기 위해서, NVL-C는 transaction을 위한 방법을 제공하였다. NVL-C에서는 이러한 transaction을 두개의 type으로 분리하였다. Implicit transaction, Explicit transaction. 예를 들어서 NVM에 pointer를 저장하는 것과 같은 행위는 Implicit transaction이며 자료구조에서 consistency가 필요한 부분은 프로그래머가 직접 마킹해야 한다.