sypark9646 / paper-logs

2022.10 ~
0 stars 0 forks source link

vNVML: An Efficient User Space Library for Virtualizing and Sharing Non-Volatile Memories #27

Closed sypark9646 closed 1 year ago

sypark9646 commented 1 year ago

어떤 내용의 논문인가요? 👋

NVM을 가상화하고 공유하는 사용자 공간 라이브러리인 vNVML을 제안하여 여러 애플리케이션에서 공유할 수 있는 더 크고 빠른 바이트 주소 지정이 가능한 NVM에 관한 연구

  1. NVM에 대한 바이트 수준 라이브러리 인터페이스인 vNVML 개발
  2. NVM을 쓰기 로그와 쓰기 캐시로 사용하고 DRAM을 읽기 캐시로 사용
  3. 실제 워크로드로 평가하여 단일 O/S와 컨테이너와 같은 도커를 사용하는 경우 모두에서 애플리케이션이 NVM을 공유할 수 있음을 보여줌

Abstract (요약) 🕵🏻‍♂️

Abstract—The emerging non-volatile memory (NVM) has attractive characteristics such as DRAM-like, low-latency together with the non-volatility of storage devices. Recently, byteaddressable, memory bus-attached NVM has become available. This paper addresses the problem of combining a smaller, faster byte-addressable NVM with a larger, slower storage device, like SSD, to create the impression of a larger and faster byteaddressable NVM which can be shared across many applications. In this paper, we propose vNVML, a user space library for virtualizing and sharing NVM. vNVML provides for applications transaction like memory semantics that ensures write ordering and persistency guarantees across system failures. vNVML exploits DRAM for read caching, to enable improvements in performance and potentially to reduce the number of writes to NVM, extending the NVM lifetime. vNVML is implemented and evaluated with realistic workloads to show that our library allows applications to share NVM, both in a single O/S and when docker like containers are employed. The results from the evaluation show that vNVML incurs less than 10% overhead while providing the benefits of an expanded virtualized NVM space to the applications, allowing applications to safely share the virtual NVM.

이 논문을 읽어서 무엇을 배울 수 있는지 알려주세요! 🤔

💡 요약

  • abstract: 여러 애플리케이션에서 공유할 수 있는, 더 크고 빠른 바이트 주소 지정이 가능한 NVM을 구현할 수 있도록 NVM을 가상화하고 공유하는 사용자 공간 라이브러리인 vNVML을 소개한다. DRAM을 읽기 캐시로 사용하는 방법을 살펴보고, 특정 읽기에 대해 NVM을 우회하여 잠재적으로 쓰기 액세스 횟수를 줄이는 방법을 제안함.
  • introduction: NVM 기술은 DRAM에 필적하는 빠른 액세스 시간과 바이트 주소 지정 기능을 제공하여 기존 저장 장치와 휘발성 메모리를 대체할 수 있지만, 기존의 기술로는 NVM을 효율적으로 가상화하고 공유할 수 없다는 문제가 있다.
  • related works:
    • SPAN: 운영 체제 커널의 스왑 기능을 개선하여 NVM을 확장된 시스템 메모리로 활용하도록 제안
    • NV-Heaps: 안전 포인터 및 가비지 컬렉션과 같은 기능을 제공하지만 특정 프로그래밍 프레임워크 및 하드웨어 지원이 필요
    • 인텔 PMDK 및 Mnemosyne과 같은 사용자 공간 라이브러리: NVM을 활용하며 가상화를 위해 실행 취소 로깅, 다시 실행 로깅, 스와핑 가능함. 단, Mnemosyne에는 DRAM 읽기 캐시와 프로세스 간 NVM의 공유 기능이 없다
  • method: NVM을 시스템의 스토리지 디바이스만큼 크고, DRAM만큼 빠르게 처리할 수 있도록 하는 것이 목표
    • 트랜잭션이 커밋되기 전에 기록된 데이터를 저장하기 위해 임시 로그 버퍼로 비휘발성 메모리(NVM)를 사용: 쓰기 크리티컬 경로에서 매우 중요한 로깅 프로세스 중에 원자성과 내구성을 보장함으로써 성능 이점을 제공한다. => vNVML 시스템에서는 재실행 로깅을 사용, 쓰기 연산만 유지한다. (=NVM 수명 문제 해결) 로그 버퍼가 너무 꽉 차는 것을 방지하기 위해 커밋된 데이터는 로그 버퍼에서 저장 장치의 영구 저장 위치로 점진적으로 이동함
    • 실행 취소 로깅: 새 데이터를 업데이트하기 전에 이전 데이터를 로그로 유지
    • 다시 실행 로깅: 저장 장치를 업데이트하기 전에 모든 새 데이터를 로그로 유지
    • 스토리지 장치에 데이터를 기록할 때
      • 프라이빗 영역: 데이터가 로그 버퍼와 NVM 캐시에 기록
      • 공유 영역: 데이터가 DRAM에서 스토리지 디바이스로 직접 기록되며 로그 버퍼는 복구 목적으로만 사용
    • 메모리 매핑된 파일을 통해 바이트 주소 수준의 로드/저장 인터페이스를 제공
    • DRAM을 읽기 캐시로 활용: 트랜잭션이 커밋된 후 전체 로그 버퍼를 검색할 필요 없이 DRAM에서 데이터에 직접 접근할 수 있다. (= 읽기 연산 속도를 크게 향상)
  • experiment:
    • vNVML의 특성 및 실제 애플리케이션에서 사용할 때 성능에 미치는 영향: 캐시 크기 1GB, 로그 크기 2GB, 삽입된 레코드 3만 개에서 vNVML은 NVM을 성공적으로 가상화할 수 있으며, 로그 버퍼와 읽기 캐시에 데이터를 쓰면서 발생하는 오버헤드가 10% 미만
    • 제한된 NVM에서 로그 버퍼와 캐시의 크기를 어떻게 결정해야 할지: write working set 크기가 커지면, 런타임 동안 데이터를 저장하기 위해 더 많은 NVM 캐시가 필요하다. 만약 write working set > NVM 캐시의 용량이 되면 캐시 페이지가 스토리지 디바이스에 다시 기록되어 성능이 저하된다.
    • 실험결과 캐시 크기를 일정하게 유지할 때 로그 버퍼 크기를 조정하는 것이 전체 처리량에 미치는 영향이 미미하다. => 로그 버퍼의 크기보다 캐시의 크기가 시스템의 처리량에 더 큰 영향을 미친다 = NVM 리소스가 제한되어 있는 경우 로그 버퍼보다는 캐시로 더 많은 NVM을 할당하는 것이 더 바람직하다
    • 여러 프로세스가 vNVML을 통해 NVM에 액세스할 때의 성능
    • 컨테이너 환경에서 vNVML 사용: 도커 컨테이너 내에서 vNVML을 사용해도 성능에 큰 영향을 미치지 않는다
    • 다른 라이브러리와 vNVML 비교: 인텔의 PMDK, SoftWrAP, vNVML와 비교 => 총 기록 데이터가 증가할수록 vNVML의 성능이 더 우수하며, NVM 크기를 8GB로 확대해도 성능은 비슷하게 유지됨
  • conclusion & discussion: vNVML은 읽기 캐싱에 DRAM을 활용하여 성능을 개선하고 쓰기 횟수를 줄여 잠재적으로 NVM 수명을 연장할 수 있다.

같이 읽어보면 좋을 만한 글이나 이슈가 있을까요?

레퍼런스의 URL을 알려주세요! 🔗

markdown 으로 축약하지 말고, 원본 링크 그대로 그냥 적어주세요!