Filesystem in userspace: 두 판 사이의 차이

잔글편집 요약 없음
잔글편집 요약 없음
 
1번째 줄: 1번째 줄:
[[분류: 파일 시스템]]
[[분류: 파일 시스템]]
[[분류: 오픈 소스 프로젝트]]
[[분류: 오픈소스 프로젝트]]


[[파일:FUSE structure.png|섬네일|가운데|대체글=FUSE structure overview|FUSE structure overview]]
[[파일:FUSE structure.png|섬네일|가운데|대체글=FUSE structure overview|FUSE structure overview]]

2023년 3월 16일 (목) 11:57 기준 최신판


FUSE structure overview
FUSE structure overview

개요

FUSE는 Non-root유저가 커널 코드의 수정없이 스스로의 파일시스템을 구현할 수 있도록 하는 Extension이다. Application이 Fuse가 마운트된 위치의 Write이나 Read와 같은 File system access 시스템 콜을 날리면, VFS는 Operation에 대한 Query를 User-level Fuse daemon으로 전달하고, Fuse Daemon은 전달받은 일을 처리한다. 이때 Application에서 한번의 시스템콜이 발생하면 최소 2번의 IPC가 발생하여, FUSE의 성능은 일반 File system보다 많이 느리다.

FUSE를 통해서 파일 시스템을 구현하면, 유저레벨에 파일시스템이 구현되어 있기 때문에, 디버깅이 편리해 지며, 개발 속도를 매우 빠르게 할 수 있고, Flexible한 파일 시스템을 작성할 수 있다는 장점이 있다. Fuse는 내부적으로 복잡한 구현이 있는데, 이를 Abstract하여 개발자에게 전달하기 위해서 libfuse라는 라이브러리의 형태로 제공하고 있다.

FUSE에서 제공하는 라이브러리는 두가지의 종류로 나뉘어 진다. fuse_lowlevel_ops인터페이스는 VFS오퍼레이션에 대한 low-level (inodes)와 같은 Abstraction레벨까지 유저에서 구현하도록 한다. 두번쨰 사용 방식은 high-level API를 사용하여서 (read, write, ...) 파일시스템에 대한 Abstraction을 몰라도 작성할 수 있게 하는 방식이다. 프로그래머는 자신의 Need에 맞추어서 두 방식중 적절한 것을 취사 선택할 수 있다.

Fuse는 매 요청마다 User level로의 Round trip time이 필요하고 Data를 커널과 유저가 공유하기 위해서 Copy를 사용하고 있다. 따라서 기존 시스템과 비교하였을 경우에는 속도가 느려지는 경향이 있다. 특히 점점 하드웨어의 속도가 발전하는 현재 추세에서는 더욱 그러한 경향이 심해지고 있다. 이러한 한계를 극복하기 위해서 zero-cop data transfer나 VFS cache를 사용하는 것과 같이 Fuse도 Optimization을 위해서 노력하고 있다.