目錄
硬幣的兩面
首頁 運維 linux運維 linux fuse是什麼意思

linux fuse是什麼意思

Apr 18, 2023 am 11:20 AM
linux

Linux用來支援使用者空間檔案系統的核心模組名叫FUSE。 fuse全名為“Filesystem in Userspace”,中文意思是“用戶空間檔案系統”,指完全在用戶態實現的檔案系統,是Linux中用於掛載某些網路空間,是一個通用作業系統重要的組成部分。

linux fuse是什麼意思

本教學操作環境:linux7.3系統、Dell G3電腦。

linux fuse是什麼

使用者空間檔案系統(Filesystem in Userspace),指完全在使用者態實作的檔案系統,是Linux中用於掛載某些網路空間,如SSH,到本地檔案系統的模組,在SourceForge上可以找到相關內容。

Linux用來支援使用者空間檔案系統的核心模組叫做FUSE,FUSE一詞有時特別指Linux下的使用者空間檔案系統。是一個通用作業系統重要的組成部分。傳統上作業系統在核心層面上對檔案系統提供支援。而通常內核態的程式碼難以調試,生產率較低。

所謂“用戶態檔案系統”,是指一個檔案系統的data和metadata都是由使用者狀態的程序提供的(這種程序稱為"daemon")。對於micro-kernel的作業系統來說,在使用者態實作檔案系統不算什麼,但對於macro-kernel的Linux來說,意義就有所不同。

雖然叫做用戶態檔案系統,但不代表其完全不需要核心的參與,因為在Linux中,對檔案的存取都是統一透過VFS層提供的核心介面進行的(例如open/read),因此當一個進程(稱為"user")存取由daemon實現的檔案系統時,依然需要途徑VFS。

當VFS接到user程序對檔案的存取請求,並且判斷出該檔案是屬於某個用戶態檔案系統(根據mount type),就會將這個請求轉交給一個名為"fuse"的內核模組。而後,"fuse"將該請求轉換為和daemon之間約定的協定格式,傳送給daemon程序。

linux fuse是什麼意思

可見,在這個三方關係中,"fuse"這個核心模組起的是一個轉接的作用,它幫助建立了VFS(也可以說是user進程)和daemon之間的交流通道,通俗點說,它的角色其實就是一個「代理」。

這一整套框架的實作在Linux中即為FUSE (Filesystem in Userspace)。如圖1所示,紅框的部分才是FUSE類型檔案系統的具體實現,才是使用者態檔案系統的設計者可以發揮的空間。目前,已有不下百種基於FUSE實作的檔案系統(一些基於核心的檔案系統也可以porting成用戶態檔案系統,例如ZFS和NTFS),而本文將選用一個現成的fuse-sshfs來進行示範。

首先安裝fuse-sshfs的軟體包,使用以下的指令進行檔案系統的mount(將遠端機器的"remote-dir"目錄掛載到本機的"local-dir"目錄):

sshfs :
##之後,在"/sys/fs"目錄下,將產生一個名為"fuse"的資料夾,同時可以看到"fuse"核心模組已載入(其對應的裝置為"/dev/fuse"),且本機的掛載目錄的類型已被載入(其對應的裝置為"/dev/fuse"),且本機的掛載目錄的類型已成為" fuse.sshfs":

linux fuse是什麼意思
產生裝置節點的目的是方便使用者狀態的控制,但是對於檔案系統這種層級的應用來說,直接使用ioctl() 來存取設備還是顯得麻煩,因為呈現了太多的細節,所以libfuse作為一個中間層應運而生,daemon進程實際上都是透過libfuse提供的介面來操作fuse設備文件的。

你來我往

接下來,以在"fuse.sshfs"檔案系統中透過"touch"指令新建一個檔案為例,查看fuse核心模組和daemon行程(即" sshfs")具體的互動流程(程式碼部分基於核心5.2.0版本):

#【第一輪】

最開始是permission的校驗,不過這裡的校驗並不等同於VFS的權限校驗,它的主要目的是為了避免其他user存取到了自己私有的fuse檔案系統。

linux fuse是什麼意思

然後就是根據檔案路徑尋找檔案的inode。由於是新建的文件,inode並不在核心的inode cache中,所以需要向daemon發送"lookup"的請求:

linux fuse是什麼意思

這些請求會被放入一個pending queue中,等待daemon進程的回复,而user進程將陷入睡眠:

linux fuse是什麼意思

作為daemon,sshfs進程通過讀取"/dev/fuse"設備檔案來獲得數據,如果pending queue為空,它將陷入阻塞等待:

linux fuse是什麼意思

當pending queue上有請求到來時,daemon進程將被喚醒並處理這些請求。被處理的請求會被移入processing queue,待daemon進程向fuse核心模組做出reply之後,user進程將被喚醒,對應的request將從processing queue移除。

linux fuse是什麼意思

【第二回合

接下來就是執行"touch"指令時所觸發的其他系統調用,如果是之前訪問過的data/metadata,那很可能存在於cache中,再次訪問這部分data/metadata的時候,fuse內核模組就可以自行解決,不需要去用戶空間往返一趟,否則還是需要回報daemon進程進行處理。

這裡 get_fuse_conn() 取得的是在fuse類型的檔案系統被mount時建立的"fuse_conn"結構體實例。作為daemon進程和kernel聯繫的紐帶,除非daemon進程消亡,或對應的fuse檔案系統被卸載,否則該connection將一直存在。

linux fuse是什麼意思

在daemon進程這一端,還是類似的操作。需要注意的是區別 fuse_write/read() fuse_dev_write/read() 這兩個系列的函數,前者是user進程在存取fuse檔案系統上的檔案時的VFS讀寫請求,屬於對常規檔案的操作,而後者是daemon程序對"/dev/fuse"這個代表fuse核心模組的裝置的讀寫,目的是為了取得request和給予reply。

linux fuse是什麼意思

【第三輪

fuse核心模組和daemon進程的最後一輪互動是在代表fuse檔案系統的superblock中取得inode號,並填寫這個metadata的相關資訊。

linux fuse是什麼意思

硬幣的兩面

不難發現,在fuse檔案系統中,即便執行一個相對簡單的"touch"操作,所涉及的用戶態和內核態的切換都是比較頻繁的,並且還伴隨著多次的資料拷貝。相較於傳統的核心檔案系統,它整體的I/O吞吐量更低,而延遲也更大。

那為什麼fuse在作業系統支援的檔案系統裡面依然佔有一席之地呢?說起來,在使用者態開發是有很多優勢的。 一是方便調試,特別適合做一個新文件系統prototype的快速驗證,因此在學術研究領域頗受青睞。在核心裡面,你只能用C語言吧,到了用戶態,就沒那麼多限制了,各種函數庫,各種程式語言,都可以上。

二是核心的bug往往一言不合就導致整個系統crash(在虛擬化的應用中更為嚴重,因為宿主機的crash會導致其上面運行的所有虛擬機crash),而用戶態的bug所造成的影響相對有限一些。

所以,硬幣的正面是便於開發,不過到底有多方便,這畢竟是一種主觀的感受,而反面則是性能的影響,這可是能夠用客觀的實驗數據來驗證的。那應該用什麼方法才能相對精確地衡量fuse所帶來的損耗呢?

還是用前面用過的這個fuse-sshfs,不過這裡我們不再使用遠端掛載,而是採用本地掛載的方式(假設本機的"dir-src"目錄位於ext4文件系統):

sshfs localhost:

當daemon進程收到請求後,它需要再次進入內核,去存取ext4的核心模組(這種檔案系統模式被稱為"stackable"的):

linux fuse是什麼意思

#以user進程向fuse檔案系統發出write() 請求為例,右邊紅框部分是一次原生的ext4呼叫路徑,而左邊多出來的就是因為引入fuse後增加的路徑:

linux fuse是什麼意思
##根據

這篇文件給予的數據,在這一系統呼叫中使用到的"getxattr"所形成的request,需要2倍的"user-kernel"交互量。對於順序寫,相較於起原生的ext4檔案系統,I/O吞吐量降低27%,隨機寫入則降低44%。

不過,在fuse檔案系統誕生的這麼多年裡,大家還是為它想出了很多的優化舉措。例如,順序讀寫的時候,可以設計成向daemon程序批量發送request的形式(但隨機讀寫不適合)。

還有就是使用

splicing這種zero-copy技術,由Linux核心提供的splicing機制允許用戶空間在轉移兩個核心的記憶體buffer的資料時,不需要拷貝,因此尤其適合在stackable模式下,從fuse核心模組直接傳遞資料到ext4核心模組(但splicing通常用於超過4K的請求,小資料量的讀寫用不上)。

經過這些努力,fuse檔案系統的效能可以達到什麼樣的一種程度呢?根據

這篇報告列出的測試結果,相較於原生的ext4,在最理想的情況下,fuse的效能損耗可以控製到5%以內,但最差的情況則是83% 。同時,其對CPU的資源佔用也增加了31%。

從Android v4.4到v7.0之間存在的sdcard daemon,到近年來的Ceph和GlusterFS,都曾經採用過或正在採用基於FUSE的實作。 FUSE在network filesystem和虛擬化應用中都展現了自己的用武之地,它的出現和發展,並不是要取代在內核態實現的檔案系統,而是作為一個有益的補充(理論上,FUSE還可以用於實作根檔案系統,但是不建議這麼做,"can do"和"should do"是兩回事)。

相關推薦:《

Linux影片教學

以上是linux fuse是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

centos和ubuntu的區別 centos和ubuntu的區別 Apr 14, 2025 pm 09:09 PM

CentOS 和 Ubuntu 的關鍵差異在於:起源(CentOS 源自 Red Hat,面向企業;Ubuntu 源自 Debian,面向個人)、包管理(CentOS 使用 yum,注重穩定;Ubuntu 使用 apt,更新頻率高)、支持週期(CentOS 提供 10 年支持,Ubuntu 提供 5 年 LTS 支持)、社區支持(CentOS 側重穩定,Ubuntu 提供廣泛教程和文檔)、用途(CentOS 偏向服務器,Ubuntu 適用於服務器和桌面),其他差異包括安裝精簡度(CentOS 精

centos如何安裝 centos如何安裝 Apr 14, 2025 pm 09:03 PM

CentOS 安裝步驟:下載 ISO 映像並刻錄可引導媒體;啟動並選擇安裝源;選擇語言和鍵盤佈局;配置網絡;分區硬盤;設置系統時鐘;創建 root 用戶;選擇軟件包;開始安裝;安裝完成後重啟並從硬盤啟動。

Centos停止維護2024 Centos停止維護2024 Apr 14, 2025 pm 08:39 PM

CentOS將於2024年停止維護,原因是其上游發行版RHEL 8已停止維護。該停更將影響CentOS 8系統,使其無法繼續接收更新。用戶應規劃遷移,建議選項包括CentOS Stream、AlmaLinux和Rocky Linux,以保持系統安全和穩定。

docker原理詳解 docker原理詳解 Apr 14, 2025 pm 11:57 PM

Docker利用Linux內核特性,提供高效、隔離的應用運行環境。其工作原理如下:1. 鏡像作為只讀模板,包含運行應用所需的一切;2. 聯合文件系統(UnionFS)層疊多個文件系統,只存儲差異部分,節省空間並加快速度;3. 守護進程管理鏡像和容器,客戶端用於交互;4. Namespaces和cgroups實現容器隔離和資源限制;5. 多種網絡模式支持容器互聯。理解這些核心概念,才能更好地利用Docker。

Centos停止維護後的選擇 Centos停止維護後的選擇 Apr 14, 2025 pm 08:51 PM

CentOS 已停止維護,替代選擇包括:1. Rocky Linux(兼容性最佳);2. AlmaLinux(與 CentOS 兼容);3. Ubuntu Server(需要配置);4. Red Hat Enterprise Linux(商業版,付費許可);5. Oracle Linux(與 CentOS 和 RHEL 兼容)。在遷移時,考慮因素有:兼容性、可用性、支持、成本和社區支持。

centos停止維護後怎麼辦 centos停止維護後怎麼辦 Apr 14, 2025 pm 08:48 PM

CentOS 停止維護後,用戶可以採取以下措施應對:選擇兼容髮行版:如 AlmaLinux、Rocky Linux、CentOS Stream。遷移到商業發行版:如 Red Hat Enterprise Linux、Oracle Linux。升級到 CentOS 9 Stream:滾動發行版,提供最新技術。選擇其他 Linux 發行版:如 Ubuntu、Debian。評估容器、虛擬機或云平台等其他選項。

docker desktop怎麼用 docker desktop怎麼用 Apr 15, 2025 am 11:45 AM

如何使用 Docker Desktop? Docker Desktop 是一款工具,用於在本地機器上運行 Docker 容器。其使用步驟包括:1. 安裝 Docker Desktop;2. 啟動 Docker Desktop;3. 創建 Docker 鏡像(使用 Dockerfile);4. 構建 Docker 鏡像(使用 docker build);5. 運行 Docker 容器(使用 docker run)。

vscode需要什麼電腦配置 vscode需要什麼電腦配置 Apr 15, 2025 pm 09:48 PM

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

See all articles