-
[Linux] FUSELinux/FUSE 2024. 11. 17. 16:21
FUSE(Filesystem in userspace)
- root가 아닌 유저가 커널 코드 수정없이 사용자 공간 내에서 파일 시스템을 쉽게 구현할 수 있도록 해주는 소프트웨어 인터페이스
FUSE는 내부 구현이 복잡해서 이를 추상화하여 libfuse 라이브러리로 개발자에게 제공한다.
장점
- 디버깅을 편리하게 해준다.
- 개발 속도를 빠르게 해준다.
- 유연한 파일 시스템 작성이 가능하다.
단점
- 기존 시스템과 비교했을 때, 속도가 최대 83%까지 느려질 수 있다.
매 요청마다 유저 레벨로의 RTT(round trip time)이 필요
데이터를 커널과 유저가 공유하기 위해서 복사본을 사용
FUSE에서 제공하는 라이브러리 2가지
- high-level API (fuse.h)
- low-level API (fuse_lowlevel.h)
high-level로 구현하면 쉽게 구현 가능하지만 성능이 상대적으로 낮을 수 있다.
- 파일 이름 및 경로 기반으로 작동 가능, inode로 검색을 파일 시스템에 위임 불가능
low-level로 구현하면 더 세밀하게 구현 가능하지만 더 복잡해진다.
- inode를 이용한 작업 등등
FUSE 세부 동작과정
1. 사용자가 FUSE 파일 시스템에서 작업 요청하면 VFS가 FUSE 커널 모듈로 전달
2. FUSE 커널 모듈은 FUSE 요청 큐에 추가, 해당 프로세스는 대기 상태로 전환
3. FUSE 사용자 공간 데몬은 /dev/fuse를 통해 요청 큐에서 요청을 읽는다.
4. FUSE 데몬이 사용자 정의 코드 실행해서 요청 처리
5. 요청 처리 완료 시 FUSE 데몬이 결과를 /dev/fuse를 통해 커널로 반환
6. 대기 중인 사용자 애플리케이션을 깨우고 작업 결과 제공
참고
- https://junhoahn.kr/noriwiki/index.php/Filesystem_in_userspace
'Linux > FUSE' 카테고리의 다른 글
[Linux] 파일 시스템 (0) 2024.11.17