USENIX ATC 2024 Sepehr Jalalian, Shaurya Patel, Milad Rezaei Hajidehi, Margo Seltzer, and Alexandra Fedorova
Motivation
메모리 하드웨어가 점차 다양해지고, Application마다의 요구사항이 천차만별인 현 상황에서, 모든 응용프로그램에 적합한 Memory management policy는 더이상 존재하지 않는다.
Importance
기존 논문들은 Memory management policy를 LibOS나 아니면 VFS kernel module과 같은 형태로 만들어서, Implement하기도 힘들고 Deploy하기도 힘들다는 단점이 있었다. User-level MM들은 성능적인 측면에서 문제가 있었다.
Challenge
EXTMEM은 다음과 Memory management에 대한 Challenge들을 해결하고자 하였다.
- Non-intrusive: Kernel modification을 최소화 하며, Linux에 Porting가능해야 함
- Extensible: Rapid development가 가능해야 함
- Transparent: Application 수정이 없어야 함
- Safe: Application의 MM이 다른 Application이나 커널을 침범하지 않도록 하여야 함
- Efficient: 효율적이어야 함
Main Idea
Kernel이 Security와 Isolation을 담당하게 하고, Memory management policy는 User-level에서 하도록 하였다. EXTMEM은 다음과 같은 Layer로 구현되어 있다.
- Core layer: System call과 Page fault를 처리
- Observability layer: Memory management가 자주 사용하는, pte bit접근과 같은 기능을 제공함
- Policy layer: Page eviction 정책과 같은 여러 MM정책들이 존재함
Design
- Core-layer
- Core-layer의 API는 Userfaultfd를 모방하였다. Application은 Transparent하게 LD_PRELOAD를 통해서 EXTMEM과 연결되었다. Page fault를 Overhead를 최소화 하면서 User-level에 전달하기 위해서 IPC가 아닌 Upcall mechanisms을 사용하였다. Upcall은 미리 등록된 User-level page fault handler entry point로 kernel-level #PF에서 jump하도록 하여서 IPC에서 발생하는 오버헤드를 최소화 하면서 page fault handler를 처리할 수 있도록 하였다. SIGBUS를 통한 Upcall은 그러나 per-thread가 아니라서 Async-safe인 경우에만 사용할 수 있었음으로, 이를 per-thread로 만들어서 Scalability측면에서 도움을 주었다.
- Observability layer
- Memory manager의 memory access info를 효율적으로 가져오기 위해서, EXTMEM은 ioctl콜을 통해서 여러 PTE entry bit과 같은 여러 요소를 가져올 수 있도록 하였다.
- Policy layer
- Policy layer를 통해서 User들은 Custom page management에 대한 정책을 효율적으로 구현할 수 있도록 하였다. Policy layer은 Free된 페이지들에 대한 list를 가지고, swap operation과 같은 일들을 처리할 수 있도록 하였다.
Result
Evaluation에서는 EXTMEM은 Micro에서는 대략 최대 5배 정도느를 Latency를 (Userfaultfd의 경우 대략 20배정도 였음), Macro에서는 특정 케이스에서는 기존 Linux userfaultfd보다 빠른 결과를 얻을 수 있었다.
Conclusion
EXTMEM은 효율적인 Userfaultfd의 매커니즘 (Upcall)을 제시하였다는 점에서 의미가 있는 논문이다. 저자는 다양한 Evaluation으로 그들의 생각을 뒷받침하고 있다. 그러나 매커니즘이외에는 Novelty가 조금 떨어질 수 있다는 점과, Evaluation에서 Memory overhead와 같은 중요한 정보가 없이 단순 속도 비교만 하고 있어서, 정확한 분석을 얻을 수 없다는 점이 아쉬운 점이다.