Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Extension Framework for File Systems in User space

From noriwiki


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