High Velocity Kernel File Systems with Bento


Samantha Miller, Kaiyuan Zhang, Mengqi Chen, Ryan Jennings, Thomas Aderson
19th USENIX Conference on File and Storage Technologies (FAST 21)

개요

벤토는 리눅스 커널 파일시스템을 작성하면서 Error-prone할 수 있는 커널 코드 수정을 Rust를 통해서 쉽고 빠르고, 안전하게 작성 할 수 있도록 한 프레임 워크를 제한하였다.

Motivation

새로운 하드웨어가 계속 해서 쏟아지고, 점점더 빠른 하드웨어가 나오는 시점에서 리눅스 커널의 파일시스템은 그 복잡성으로 인해서 패칭이 느려지며 여러 Security 위협이 계속해서 발생하고 있다.

Importance

기존에 FUSE와 같은 방식들은 Performance에 손해가 있던지 Generality에 손해가 있다는 문제가 있었다. eBPF와 같은 경우에는 Programmability의 제약사항때문에 File system과 같은 복잡한 Logic을 커널에 구현하기에는 문제가 있었다.

Main idea

리눅스 파일 시스템을 벤토 Rust 라이브러리를 통해서 접근할 수 있도록 하고, 컴파일된 바이너리를 유저 혹은 커널에서 작동하도록 하여서 쉽고, 빠르고, 안전한 리눅스 파일 프로그래밍 환경을 제시하자. 즉 Main idea는 두개인데, 첫째는 Rust 프로그래밍 환경을 제공하는 것이고, 둘째는 Compatibility와 Debugging을 신경쓴 디자인으로 Debugging환경을 제시하는 것이다.

Design

Bento Figure 1.png

BentoFS은 VFS가 만든 Request를 챕쳐해서 Controller역활을 하며 통신을 중지한다. LibBentoFs는 BentoFS가 보낸 Pointer와 같은 Unsafe한 오브젝트를 Rust의 Safe object로 파싱하는 역활을 한다. BentoFS와 LibBentoFs는 러스트의 Safety를 보장하는 역활을 한다. 예를 들어서 Mut reference는 시스템의 다른 스레드가 사용하고 있지 않다는 것을 보장하거나, Allocate된 메모리는 Drop되기 전까지 다른 곳에서 Deallocate되지 않는 다는 조건들을 만족시킨다. LibBentoKS는 파일시스템이 아닌 커널의 서비스를 유저에게 제공하는 역활을 한다. 예를 들어서 Synchornization위한 RwLock이나 아니면 Allocator와 같은 것들이 LibBentoFS로 제공된다. Live upgrade와 Debugging을 제공하기 위해서 Bento는 커널의 환경을 유저에다 그대로 제공하는 등의 여러 노력을 통해서, 유저에서 커널의 기능을 구현하고 테스트 할수 있도록 하였다.

Contribution

  • 실제 리눅스 파일 시스템에 러스트를 적용시켜서 디자인 관점과 그에 따른 결과를 도출함.

Criticize

  1. Bento 디자인이 그림이나 설명이나 부족한 부분이 있어서 이해하기 너무 어려웠음.
  2. Evaluation을 위해서 사용된 파일 시스템이 Pratical 하게 Valid한것인지 궁금하다.