最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

一篇文綜合分析Fuse!

2023-03-09 15:23 作者:補給站Linux內(nèi)核  | 我要投稿

FUSE需

究竟什么樣的需求才能用到用戶文件系統(tǒng)?

來看一個小例子:

需求是這樣的。在deepin的安裝器中,安裝器就會給多分出一個分區(qū):數(shù)據(jù)盤。

數(shù)據(jù)盤的主要作用是讓用戶存放數(shù)據(jù)文件,也就是以前用Windows的時候D盤或者E盤等的作用,放點圖片、視頻資源等。用戶重裝系統(tǒng)的時候,也可以方便的做數(shù)據(jù)遷移。這個數(shù)據(jù)盤大概隱含隱性需求:

  1. 文件權限不要太嚴格;

主要差別體現(xiàn)在ACL規(guī)則的繼承上面,上面一句默認繼承

Linux(可能其他系統(tǒng)也是)對ACL的處理有點奇怪,假如在擁有ACL規(guī)則的對象(文件或者文件夾)上進行chmod操作,那么chmod?會對對象的ACL規(guī)則造成影響,影響的結果就是對象雖然有ACL規(guī)則,但是ACL的有效值會變成chmod要達成的效果。

造成的問題:系統(tǒng)里面的A用戶放在數(shù)據(jù)盤里面的文件B用戶怎么無法訪問

FUSE(Filesystem in Userspace)就是用戶空間的文件系統(tǒng),它的出現(xiàn)讓非內(nèi)核開發(fā)者開發(fā)自己的文件系統(tǒng)成為可能,非特權用戶不需要獲取特權就可以掛載自己的文件系統(tǒng)。對于開發(fā)者來說,F(xiàn)USE更多是一個開發(fā)框架,用來開發(fā)和實現(xiàn)用戶空間系統(tǒng),這個框架主要分為三個部分:內(nèi)核模塊、libfuse和文件系統(tǒng)守護進程,它們之間的關系如下圖所示:

圖中的./hello就是文件系統(tǒng)守護進程,/tmp/fuse則是這個文件系統(tǒng)的掛載點。文件系統(tǒng)工作在用戶空間,通過libfuse跟內(nèi)核中的FUSE模塊進程通信,代理所有用戶對掛載點內(nèi)文件的訪問請求,從而實現(xiàn)特殊的文件系統(tǒng)功能需求。

舉個例子,sshfs就是一種用戶空間文件系統(tǒng),用來將ssh服務器上的一個文件夾掛載到本地使用。它的使用方式特別簡單,只需執(zhí)行命令:sshfs [user@]host:[dir] mountpoint,這樣你在mountpoint下看到的文件的文件就是你ssh服務器上相應文件夾的文件,你再本地做得修改也都會在你的ssh服務器上體現(xiàn)出來。

因為libfuse使用起來非常方便,所以有不少有意思的文件系統(tǒng)都是基于FUSE完成的(見FUSE Filesystems)。類似上面的sshfs可能更像是開發(fā)者的一個玩具,但是FUSE家族也不缺乏一些重量級的文件系統(tǒng),像ZFSNTFS等也是基于FUSE實現(xiàn)的。這么說并不是在FUSE完美無瑕,實際上很多人批評FUSE的性能比較差,據(jù)To FUSE or Not to FUSE: Performance of User-Space File Systems這篇論文測算,F(xiàn)USE文件系統(tǒng)在吞吐量上比原生的文件系統(tǒng)要低83%,而CPU占用則要高31%。


【文章福利】小編推薦自己的Linux內(nèi)核技術交流群:【749907784】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ?



Extfuse提出背景

EXTFUSE與現(xiàn)有的用戶文件系統(tǒng)框架協(xié)同工作,允許快速路徑和現(xiàn)有的慢速路徑共存,而不會對目標用戶文件系統(tǒng)的設計進行重大更改

fuse 文件掛載的小例子:

Fuse 包含兩個部分 - kernel 和用戶態(tài) daemon。內(nèi)核部分是一個 Linux 的內(nèi)核模塊,它會在 Linux 的 VFS 上面注冊一個 Fuse 的文件系統(tǒng)驅(qū)動。這個 Fuse 驅(qū)動可以認為是一個 proxy,會將請求給轉(zhuǎn)發(fā)到后面的用戶態(tài) daemon 上面。

Fuse 內(nèi)核模塊也會注冊一個?/dev/fuse?的塊設備,這個就是 kernel 和用戶態(tài) daemon 交互的接口。通常 Daemon 會從?/dev/fuse?上面讀取到 Fuse 的請求,處理并且將數(shù)據(jù)寫回到?/dev/fuse。一個簡單的 Fuse 流程如下:

  • 應用程序在掛載的 Fuse 的文件系統(tǒng)上面進行操作。

  • VFS 會將操作轉(zhuǎn)發(fā)到 Fuse 的 kernel driver 上面。

  • Fuse 的 kernel driver 分配一個 request,并且將這個 request 提交到 Fuse 的 queue 上面。

  • Fuse 的用戶態(tài) daemon 會從 queue 里面通過讀取?/dev/fuse?將這個 request 取出來并且處理。這里需要注意,處理 request 的時候仍然可能進入 kernel,譬如可能將 request 發(fā)到 Ext4 去實際處理。

  • 當請求處理完畢,Daemon 會將結果寫回到?/dev/fuse。

  • Fuse 的 kernel 標記這個 request 結束,然后喚醒用戶應用程序。

EXTFUSE由三個組件組成。首先是一個幫助器用戶庫,它提供了一組熟悉的文件系統(tǒng)API來注冊擴展并實現(xiàn)C語言子集的定制快速路徑功能。其次,包裝器(no-op)插入驅(qū)動程序,該驅(qū)動程序與低級VFS接口連接,并提供必要的支持,以便根據(jù)需要將請求轉(zhuǎn)發(fā)到已注冊的內(nèi)核擴展以及較低的文件系統(tǒng)。第三,安全地執(zhí)行擴展的內(nèi)核內(nèi)的虛擬機(VM)運行時。

慢速路徑:開銷大,紅色的切換

快速路徑:開銷小,迅速切換

工作流程:

1.掛載階段:在掛載用戶文件系統(tǒng)時,F(xiàn)USE驅(qū)動程序向用戶空間守護進程發(fā)送FUSE_INIT請求。(1&&4)

2.用戶守護進程通過在請求參數(shù)中查找FUSE_CAP_EXTFUSE標志來檢查操作系統(tǒng)內(nèi)核是否支持EXTFUSE框架。如果支持,守護程序必須調(diào)用libExtFUSE init API將包含專用處理程序(擴展)的eBPF程序加載到內(nèi)核中,并將其注冊到EXTFUSE驅(qū)動程序。這是使用bpf_Load_prog系統(tǒng)調(diào)用來實現(xiàn)的,該系統(tǒng)調(diào)用eBPF驗證器來檢查擴展的完整性。

復現(xiàn)進度

extfuse已完成,開始SandFs

接下來的計劃

全過程追蹤(就是把extfuse的路程圖與代碼對應起來)

1.Extfuse Library:extfuse/src at master · extfuse/extfuse · GitHub

2.Modified:ExtFUSE: Extension Framework for FUSE · extfuse/linux@b7923d6 · GitHub

3.libfuse:?Add support for detecting/enabling ExtFUSE · extfuse/libfuse@7c88efb · GitHub

Comparing libfuse:master...extfuse:ExtFUSE-1.0 · libfuse/libfuse · GitHub

性能分析(論文中提到了很多性能的對比)

1.可以嘗試將eBPF開源項目中已有的文件性能測試相關的代碼單獨抽取出來做demo


原文作者:Linux內(nèi)核之旅





一篇文綜合分析Fuse!的評論 (共 條)

分享到微博請遵守國家法律
辉县市| 巴彦淖尔市| 定边县| 云霄县| 淳安县| 禹州市| 合山市| 长垣县| 秦皇岛市| 府谷县| 万载县| 唐河县| 沛县| 睢宁县| 灵川县| 巩义市| 隆化县| 昌邑市| 兴安盟| 临泉县| 富锦市| 云林县| 黔东| 砀山县| 喜德县| 洞头县| 安远县| 鸡西市| 边坝县| 房产| 自治县| 化德县| 逊克县| 沈丘县| 林芝县| 宕昌县| 武夷山市| 息烽县| 古交市| 永登县| 宁海县|