Extension Framework for File Systems in User space


Ashish Bijlani, Umakishore Ramachandran
2019 USENIX Annual Technical Conference

개요

ExtFuse는 user file system을 구현하면서, eBPF handler를 커널에 등록시킬 수 있게 하여서, Filesystem의 성능을 개선하였다.

Motivation

FUSE Filesystem in userspace는 User level에서 Filesystem을 제작할 수 있도록 해주는 Linux의 기법이다. Application이 Fuse가 마운트된 위치의 Write이나 Read와 같은 File system access 시스템 콜을 날리면, VFS는 Operation에 대한 Query를 User-level Fuse daemon으로 전달하고, Fuse Daemon은 전달받은 일을 처리한다. 이때 Application에서 한번의 시스템콜이 발생하면 최소 2번의 IPC가 발생하여, FUSE의 성능은 일반 File system보다 많이 느리다. 특히 이 논문에서는 Fuse를 통해서 공개되는 시스템 프레임워크가 너무 Low-level이고 General-purpose임을 또한 지적하고 있다.

Importance

기존 시스템은 이러한 문제를 해결하기 위해서, 여러 Optimization을 하고 있지만, 이러한 문제들은 모두 Generality vs Specialization이라는 문제에 맞닥트리게 되었다. Flexibility를 위해서 Low-level이 되면 User-kerenl context change가 많아지고 개발 비용이 높아지는 문제가 생기며, 너무 General하게 Kernel의 기능을 주면 Flexibility가 떨어지는 문제가 생겼다. 이 문제를 해결하기 위해서는 ExoKernel처럼 커널의 유저레벨 수정을 통해서 해결가능하다고 주장하고 있다.

Main Idea

FUSE의 로직을 Slow path와 Fast path로 나누고, eBPF가 특정 상황에서 Fast path로 넘어갈지 아니면 Slow-path (기존 FUSE시스템)으로 넘어갈지를 선택하게 하였다. Fast path에서는 Low-level의 Operation이 작동할때, eBPF희 함수를 실행시켜서, 유저가 Intend한 로직이 유저로의 도메인 체인지가 없어도 가능하게 하였다.

Usages

Customized in-kernel metadata caching
VFS cache는 Rigid한 단점이 있다. 이를 극복하기 위해서 Metadata와 같은 caching을 BPF로 구현하여서 Fast-path에서 캐싱되어 있는 유저가 선택한 로직으로 체크할 수 있도록 하면, OS의 Flexibility를 살리면서 Optimization할 수 있다는 장점이 있다.
Passthrough I/O for stacking functionality
간단한 stacking functionality를 위해서 FUSE를 통해서 User로 올라가는 것은 비요적인 측면에서 낭비이다. 이러한 간단한 Operation을 처리하기 위해서 EXTFUSE를 사용하면 XDP_DROP처럼 Low-level에서 Policy를 정할 수 있어서 속도를 향상시킬 수 있다.

Contribution

  • eBPF가 User level filesystem에서 활용되어 성능적인 향상을 보일 수 있음을 여러 예시를 통해서 보임.

Criticize

  • 초반에 문제 설명이 계속해서 중복되는 느낌이 있음. Redundant한 콘텐츠가 있는 느낌.
  • 성능 향상이 많이 나타나지는 않는다.
  • Use case가 적다.

References