FBMM: Making Memory Management Extensible With Filesystems | |
---|---|
Author | Bijan Tabatabai, James Sorenson and Michael M. Swift, University of Wisconsin–Madison |
Conference | USENIX ATC 2024 |
https://www.usenix.org/conference/atc24/presentation/tabatabai | |
Year | 2024 |
개요
Virtual file system을 이용해서 Memory management도 확장가능할 수 있도록 Memory file system이라는 것을 만들었다. 이를 통해서 File Based Memory Management (FBMM)이라는 실증 프레임 워크를 만들어서, 기존의 리눅스 방식과 비슷한 성능을 보이는 것을 확인하였다.
Motivation & Importance
새로운 하드웨어 소프트웨어적인 최적화 방안들이 Memory management분야에서 나오고 있지만, 복잡하고 Extensible을 고려하지 않는 Linux의 MM구현은 이러한 최적화 방안들이 적용되는 것의 장애물로 작동하고 있다. 정확하게 만드는 것과 더불어서, 기존 시스템의 작동을 Break하지 않기 위해서는 정말 많은 엔지니어의 노력이 필요하다. 이에 반해서 파일 시스템이나 스토리지는 VFS레이어를 통해서 쉽게 확장 가능하다.
Main Idea
Memory Management를 위한 VFS Layer를 리눅스에 추가한다.
Design

- 1A: FBMM이 작동중이면, File operation을 FBMM Shim layer로 전달한다.
- 2B: FBM Shim layer는 지정된 VFS Layer로 File operation을 전달한다.
- 1C: FBMM은 MFS로 File operation을 전달한다.
- 1D: FBMM은 미리 등록된 File system operation에 따라서 Hardware와 통신한다.
- 2A-2B: Page fault와 같은 경우에는 Application의 페이지 폴트를 지정된 MFS레이어의 오퍼레이션으로 전달하여 처리한다.
- 2A-3B: MFS는 이외에도, Thread spawn과 같은 일을 통해서 기존 커널이 Background에서 처리하던 일 같은 것도 처리할 수 있다.
API Design

- get_unmapped_area: VMA영역에 지정된 부분을 가져온다. 없으면 새로 만든다.
- page_fault: Page fault가 날경우 호출되는 Callback이다.
- fallocate: MMAP_POPULATE처럼 미리 지정된 영역만큼 memory를 할당하고 싶을 경우 호출되는 부분이다.
이 외에도 Callback함수 내부에서, Kernel의 alloc_pages
와 같은 함수를 사용해서 Memory management를 관리할 수 있다.
Conclusion
Linux의 메모리 관리가 static하고 다양한 커널 시스템들과 interleaving되어 있기 때문에, 이를 수정하기 어렵다는 점은 좋은 motivation이다. 또한, VFS 레이어를 통해 리눅스 메모리 관리를 수행할 때 어떤 점을 고려해야 할지 잘 디자인한 논문이라고 생각한다.
Application-specific한 memory extension을 만들 수 있다는 점은 장점이지만, 이는 kernel의 메모리 시스템을 완전히 수정할 수 있기 때문에, FUSE처럼 안전하게 memory를 확장해주는 방식은 아니다. 그리고 VMA 관리를 기존 커널에 의존하고 있기 때문에, vm_area_struct를 customizing할 수 없다. 이는 예를 들어 OTA와 같은 방식에서 memory fragmentation을 해결하기 위해 VMA 영역을 customizing하는 경우에 적용이 불가능하다는 의미다.
논문에 나오는 단점은 다음과 같다 [1].
- MFS가 동시에 여러개의 Operation을 수행할 수 없다.
- Page cache, Swaption처럼 Core physical address management를 수정할 수는 없다.
- Copy-on-write과 같은 기능을 구현할 수 없다.
- 커널의 기본 VFS Layer에 의존하여, VFS Customization이 불가능하다.
요약하자면, 몇몇 specific한 use-case를 제외하면, 효과적으로 memory management를 확장할 수 있기 때문에 디자인 측면에서는 잘 만들어진 연구라고 생각한다.
- ↑ Section 3.4 Limitations