亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        用戶態(tài)并行文件系統(tǒng)性能優(yōu)化*

        2022-03-19 01:37:16鄧通亮陳宸殷樹(shù)
        關(guān)鍵詞:描述符內(nèi)核調(diào)用

        鄧通亮,陳宸,殷樹(shù)

        (1 上海科技大學(xué)信息科學(xué)與技術(shù)學(xué)院,上海 201210;2 中國(guó)科學(xué)院上海微系統(tǒng)與信息技術(shù)研究所,上海 200050;3 中國(guó)科學(xué)院大學(xué),北京 100049)(2020年3月23日收稿;2020年5月11日收修改稿)

        在高性能計(jì)算系統(tǒng)中,并行文件系統(tǒng)的性能表現(xiàn)起著至關(guān)重要的作用[1-3]。目前存在不少的并行文件系統(tǒng),例如PVFS[4]、PLFS[5]和Lustre[6]等。高性能計(jì)算系統(tǒng)由多個(gè)部分組成,應(yīng)用的工作負(fù)荷往往復(fù)雜多變,系統(tǒng)中的薄弱環(huán)節(jié)易成為性能瓶頸,需要對(duì)其進(jìn)行針對(duì)性的優(yōu)化。例如,文獻(xiàn)[7]對(duì)并行文件系統(tǒng)的小文件性能進(jìn)行優(yōu)化,文獻(xiàn)[8]對(duì)文件系統(tǒng)中元數(shù)據(jù)的訪問(wèn)進(jìn)行優(yōu)化。

        一般地,文件系統(tǒng)(例如 ext4)在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)。但是,由于開(kāi)發(fā)內(nèi)核態(tài)文件系統(tǒng)難度大,不少開(kāi)發(fā)者選擇使用FUSE[9](filesystem in userspace,用戶態(tài)文件系統(tǒng)框架)作為文件系統(tǒng)和內(nèi)核之間的中間層,在用戶態(tài)開(kāi)發(fā)文件系統(tǒng)[10-11]。通過(guò)FUSE,使用者可以在不修改內(nèi)核的情況下部署文件系統(tǒng),開(kāi)發(fā)者可以在不進(jìn)入內(nèi)核的情況下調(diào)試文件系統(tǒng)。常見(jiàn)的基于FUSE的用戶態(tài)文件系統(tǒng)有PLFS[5]、GlusterFS[12]和Sshfs[13]等。

        然而,在基于FUSE實(shí)現(xiàn)的用戶態(tài)文件系統(tǒng)中,由于FUSE的介入,處理每一個(gè)I/O請(qǐng)求都會(huì)額外引入多次用戶態(tài)和內(nèi)核態(tài)之間的運(yùn)行態(tài)切換(下文簡(jiǎn)稱:運(yùn)行態(tài)切換)、上下文切換和內(nèi)存拷貝,加上FUSE內(nèi)部的等待隊(duì)列和I/O請(qǐng)求重排,存在一定的性能損失。Bent等[5]發(fā)現(xiàn)FUSE能夠造成20%左右的性能下降。Vangoor等[14]研究了ext4上FUSE的性能特點(diǎn),表明FUSE在不同的工作負(fù)荷下導(dǎo)致不同程度的性能下降,最大下降83%。最近研究者發(fā)現(xiàn)Intel 處理器中存在Meltdown[15]等一系列漏洞,操作系統(tǒng)發(fā)布的補(bǔ)丁程序增強(qiáng)了用戶態(tài)和內(nèi)核態(tài)內(nèi)存空間的隔離性,導(dǎo)致運(yùn)行態(tài)切換的開(kāi)銷增加。

        為優(yōu)化用戶態(tài)文件系統(tǒng)的性能,Ishiguro等[16]提出一種通過(guò)FUSE的內(nèi)核模塊直接與內(nèi)核文件系統(tǒng)交互的方法,優(yōu)化用戶態(tài)文件系統(tǒng)的性能,但該方法需要對(duì)內(nèi)核進(jìn)行修改,可移植性較差。Zhu等[17]提出一種將FUSE移植到用戶空間的方法,雖然消除了運(yùn)行態(tài)切換和上下文切換,但是由于只有基于libsysio[18]API 進(jìn)行開(kāi)發(fā)的應(yīng)用程序才能使用該方法,存在一定的可擴(kuò)展性問(wèn)題。Rajgarhia和Gehani[19]通過(guò)JNI(Java native interface)實(shí)現(xiàn)了基于JAVA的FUSE接口,并且給出性能測(cè)試,但是缺乏深入的性能結(jié)果分析。文獻(xiàn)[20]基于特定應(yīng)用的I/O工作負(fù)荷特征,對(duì)高性能文件系統(tǒng)進(jìn)行優(yōu)化和深入的結(jié)果分析。

        本文利用動(dòng)態(tài)鏈接技術(shù),在用戶態(tài)并行文件系統(tǒng)中實(shí)現(xiàn)了一種繞過(guò)FUSE的方法,消除FUSE的性能影響,對(duì)比了用戶態(tài)并行文件系統(tǒng)在基于FUSE和繞過(guò)FUSE后的性能特點(diǎn)。該方法可以運(yùn)用于所有動(dòng)態(tài)鏈接了標(biāo)準(zhǔn)I/O庫(kù)的應(yīng)用,不需要對(duì)應(yīng)用進(jìn)行任何修改就可以提高I/O性能。實(shí)驗(yàn)結(jié)果表明,該方法可以顯著提高I/O性能。其中,在傳輸塊較大時(shí),讀性能最大提高131%,寫(xiě)性能和有FUSE時(shí)性能相仿;傳輸塊較小時(shí),寫(xiě)性能最大提高5倍左右。

        1 背景與問(wèn)題分析

        1.1 用戶態(tài)文件系統(tǒng)框架

        文件系統(tǒng)通常在內(nèi)核中實(shí)現(xiàn),應(yīng)用的I/O請(qǐng)求通過(guò)系統(tǒng)調(diào)用的方式陷入內(nèi)核態(tài),利用其更高的執(zhí)行權(quán)限完成I/O。與此同時(shí),存在一類攔截I/O請(qǐng)求的中間層文件系統(tǒng),它們向應(yīng)用提供文件的抽象,并支持POSIX文件I/O語(yǔ)義,但是不實(shí)際存儲(chǔ)文件,而是將文件的內(nèi)容重新組織并存儲(chǔ)到底層存儲(chǔ)系統(tǒng)中,這樣的中間層稱為可堆疊文件系統(tǒng)[21]。FUSE作為應(yīng)用和用戶態(tài)文件系統(tǒng)之間的橋梁攔截并轉(zhuǎn)發(fā)I/O請(qǐng)求,因此可以使用FUSE開(kāi)發(fā)此類可堆疊文件系統(tǒng)。

        圖1[14]展示了FUSE的基本架構(gòu)與操作流程。FUSE由兩部分組成,內(nèi)核模塊和用戶態(tài)守護(hù)進(jìn)程,二者通過(guò)虛擬設(shè)備/dev/fuse進(jìn)行通信。在基于FUSE的文件系統(tǒng)上觸發(fā)I/O請(qǐng)求時(shí),內(nèi)核虛擬文件系統(tǒng)(virtual filesystem, VFS)將該請(qǐng)求轉(zhuǎn)發(fā)至FUSE內(nèi)核模塊,內(nèi)核模塊再將其重定向到對(duì)應(yīng)的用戶態(tài)守護(hù)進(jìn)程,守護(hù)進(jìn)程處理該請(qǐng)求,請(qǐng)求結(jié)果沿著原路返回。由此可見(jiàn),處理1次I/O請(qǐng)求最少需要4次運(yùn)行態(tài)切換,2次上下文切換和2次內(nèi)存拷貝;如果守護(hù)進(jìn)程涉及本地文件系統(tǒng)的讀寫(xiě),那么至少還需要2次運(yùn)行態(tài)切換和1次內(nèi)存拷貝。傳統(tǒng)的內(nèi)核文件系統(tǒng)處理1次I/O請(qǐng)求一般只需要2次運(yùn)行態(tài)切換和1次內(nèi)存拷貝,而不需要上下文切換。相比之下,F(xiàn)USE 2次不可避免的上下文切換會(huì)帶來(lái)較大的性能損失[22]。

        圖1 FUSE的基本架構(gòu)[14]

        1.2 并行日志文件系統(tǒng)

        為應(yīng)對(duì)軟硬件的錯(cuò)誤,高性能計(jì)算系統(tǒng)會(huì)采用各種容錯(cuò)方案,例如檢查點(diǎn)技術(shù)[23]。通過(guò)定期地將中間結(jié)果保存到存儲(chǔ)系統(tǒng),當(dāng)系統(tǒng)發(fā)生錯(cuò)誤并且被重置后,應(yīng)用可以從最近的檢查點(diǎn)中恢復(fù)狀態(tài)并且繼續(xù)運(yùn)行。

        并行日志文件系統(tǒng)(parallel log-structured file system, PLFS)[5]通過(guò)在存儲(chǔ)棧中引入一個(gè)中間層的方式對(duì)檢查點(diǎn)的寫(xiě)性能進(jìn)行優(yōu)化。PLFS重新組織存儲(chǔ)模式,將N-1讀寫(xiě)模式轉(zhuǎn)成N-N讀寫(xiě)模式,同時(shí)利用日志型文件系統(tǒng)利于寫(xiě)操作的特點(diǎn)[24],極大地提高了檢查點(diǎn)的寫(xiě)入性能。PLFS專用于并行I/O,并且進(jìn)行了大量的優(yōu)化,可以通過(guò)FUSE掛載到目錄樹(shù),因此能夠在大量的I/O工作負(fù)荷下對(duì)FUSE進(jìn)行測(cè)試,充分反映本文所設(shè)計(jì)方法的優(yōu)勢(shì)與不足。圖2給出了通過(guò)FUSE掛載PLFS后的I/O操作流程。

        圖2 PLFS通過(guò)FUSE的I/O操作流程

        2 繞過(guò)FUSE的實(shí)現(xiàn)

        PLFS提供了一組API,應(yīng)用可以通過(guò)API直接使用PLFS的功能。繞過(guò)FUSE的一種方法是將應(yīng)用源代碼中所有I/O相關(guān)的函數(shù)調(diào)用替換成對(duì)PLFS API的調(diào)用,然后將源代碼重新編譯得到直接使用PLFS的可執(zhí)行文件。該方法需要得到應(yīng)用的源代碼,并且對(duì)其有比較深入的理解,對(duì)于大多數(shù)應(yīng)用來(lái)說(shuō)局限性較大。

        另一種方法是采用動(dòng)態(tài)鏈接庫(kù)覆蓋用戶態(tài)I/O函數(shù)的方式,將I/O操作重定向到PLFS內(nèi)部。本文基于PLFS API設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)動(dòng)態(tài)鏈接庫(kù)libplfs,通過(guò)libplfs能夠在不需要對(duì)應(yīng)用進(jìn)行修改的情況下,達(dá)到繞過(guò)FUSE的目的。與此同時(shí),在libplfs中收集相關(guān)數(shù)據(jù),分析FUSE性能表現(xiàn)背后的原因。

        2.1 鏈接與加載

        動(dòng)態(tài)鏈接庫(kù)能夠在運(yùn)行時(shí)被鏈接到進(jìn)程的地址空間,因此可以定義和I/O調(diào)用具有相同函數(shù)簽名的函數(shù),然后編譯成動(dòng)態(tài)鏈接庫(kù),利用該動(dòng)態(tài)鏈接庫(kù)對(duì)應(yīng)用中的I/O調(diào)用進(jìn)行高效地重定向,最終實(shí)現(xiàn)將I/O請(qǐng)求轉(zhuǎn)發(fā)到PLFS中,把核心操作都放在用戶態(tài)中完成。

        LD_PRELOAD[25]環(huán)境變量用于指定最先加載的動(dòng)態(tài)鏈接庫(kù),讓自定義的動(dòng)態(tài)鏈接庫(kù)擁有甚至比標(biāo)準(zhǔn)庫(kù)高的最高優(yōu)先級(jí),達(dá)到優(yōu)先加載和鏈接自定義函數(shù)庫(kù)的目的。

        本文的方法是將PLFS API封裝到libplfs動(dòng)態(tài)鏈接庫(kù)中,利用LD_PRELOAD實(shí)現(xiàn)優(yōu)先加載和鏈接libplfs中的I/O庫(kù)函數(shù)。

        2.2 文件映射表與文件狀態(tài)管理

        由于POSIX API與PLFS API之間存在差異,上層應(yīng)用通過(guò)POSIX文件描述符進(jìn)行I/O操作,而在PLFS上進(jìn)行I/O操作所使用的文件描述符具有其自身特點(diǎn),因此需要在libplfs中實(shí)現(xiàn)從POSIX文件描述符到PLFS文件描述符的轉(zhuǎn)換,并且對(duì)文件的狀態(tài)進(jìn)行管理。

        本文通過(guò)2個(gè)內(nèi)存中的全局哈希表(時(shí)間復(fù)雜度O(1))實(shí)現(xiàn)文件映射關(guān)系的管理,分別為fd_table和path_table。fd_table中的key為上層應(yīng)用所使用的POSIX文件描述符fd,value為plfs_file結(jié)構(gòu)體指針(見(jiàn)圖3)。fd_table的作用是向應(yīng)用提供POSIX文件描述符,保證可以在不對(duì)應(yīng)用進(jìn)行修改的情況下繞過(guò)FUSE并且使用PLFS。path_table哈希表用于對(duì)同一文件打開(kāi)多次的情況,結(jié)合引用計(jì)數(shù),實(shí)現(xiàn)將多個(gè)POSIX文件描述符fd映射到同一個(gè)plfs_file對(duì)象。fd_table中的鍵值對(duì)在libplfs中的open函數(shù)內(nèi)完成插入(偽代碼1中第10和16行),在close函數(shù)中進(jìn)行刪除,在libplfs中重載的其他I/O函數(shù)內(nèi),通過(guò)查詢fd_table哈希表實(shí)現(xiàn)從POSIX文件描述符到PLFS文件描述符的轉(zhuǎn)換。path_table僅在libplfs中的open函數(shù)(偽代碼1中第8、9、10和15行)和close函數(shù)內(nèi)使用。

        以libplfs中重載的open函數(shù)為例(偽代碼1),在打開(kāi)某一文件時(shí),通過(guò)路徑參數(shù)判斷該文件是否位于PLFS文件系統(tǒng)中,如果是,則在tmpfs上創(chuàng)建一個(gè)POSIX API所使用的文件描述符fd,然后打開(kāi)該P(yáng)LFS文件,利用fd_table和path_table記錄fd與PLFS文件描述符之間的映射關(guān)系,為接下來(lái)應(yīng)用通過(guò)POSIX文件描述符fd觸發(fā)PLFS上的I/O操作提供翻譯功能。偽代碼1中涉及的Plfs_file結(jié)構(gòu)體中具體成員信息見(jiàn)圖3。

        Pseudocode 1 open()function in libplfs

        圖3 libplfs的處理流程

        2.3 libplfs的實(shí)現(xiàn)

        libplfs的主要功能是在用戶空間維護(hù)一個(gè)文件狀態(tài)映射表,將對(duì)C標(biāo)準(zhǔn)庫(kù)和POSIX I/O函數(shù)的調(diào)用轉(zhuǎn)換成對(duì)PLFS API的調(diào)用。libplfs的具體函數(shù)調(diào)用流程見(jiàn)圖3。

        本文通過(guò)open(), read(), write()和close()這4個(gè)具有代表性的I/O函數(shù)對(duì)libplfs的實(shí)現(xiàn)進(jìn)行說(shuō)明。在打開(kāi)一個(gè)文件時(shí),libplfs在本地文件系統(tǒng)上創(chuàng)建一個(gè)臨時(shí)的虛擬文件,為應(yīng)用進(jìn)程分配一個(gè)文件描述符fd。接著libplfs調(diào)用plfs_open()函數(shù)創(chuàng)建一個(gè)PLFS API使用的文件對(duì)象plfs_file,并且建立虛擬文件描述符fd與plfs_file的映射關(guān)系。當(dāng)應(yīng)用通過(guò)文件描述符fd讀寫(xiě)文件時(shí),libplfs利用plfs_file文件對(duì)象直接調(diào)用PLFS API,同時(shí)將應(yīng)用傳遞過(guò)來(lái)的內(nèi)存地址、請(qǐng)求大小和文件偏移量傳遞給PLFS API;在PLFS上完成I/O請(qǐng)求后對(duì)虛擬文件描述符fd的當(dāng)前偏移量進(jìn)行對(duì)應(yīng)的調(diào)整。在關(guān)閉文件時(shí),釋放包括映射表中對(duì)應(yīng)項(xiàng)在內(nèi)的所有內(nèi)存資源。對(duì)于并發(fā)的I/O請(qǐng)求,例如若干個(gè)線程同時(shí)打開(kāi)同一個(gè)文件,通過(guò)引用計(jì)數(shù)的方式記錄打開(kāi)的次數(shù),避免創(chuàng)建冗余的對(duì)象,提高內(nèi)存利用率。

        在進(jìn)行I/O操作之前,libplfs對(duì)接收的參數(shù)進(jìn)行判斷,區(qū)分該操作是一般的I/O操作還是在PLFS上相關(guān)的I/O操作。如果是對(duì)PLFS的操作,那么libplfs調(diào)用對(duì)應(yīng)PLFS API處理該請(qǐng)求,否則通過(guò)調(diào)用dlsym()函數(shù)得到libc中對(duì)應(yīng)I/O函數(shù)的指針并調(diào)用它,如偽代碼1中的第3和第5行。

        libplfs重載了69個(gè)幾乎所有l(wèi)ibc中的I/O庫(kù)函數(shù)。用戶可以簡(jiǎn)單地通過(guò)設(shè)置LD_PRELOAD環(huán)境變量,將目標(biāo)程序中的I/O操作重定向到libplfs動(dòng)態(tài)鏈接庫(kù)中,進(jìn)而直接調(diào)用PLFS API,達(dá)到繞過(guò)FUSE的目的。該方法對(duì)所有在運(yùn)行時(shí)動(dòng)態(tài)鏈接了libc庫(kù)中I/O相關(guān)函數(shù)的可執(zhí)行文件都適用。

        3 實(shí)驗(yàn)與分析

        3.1 實(shí)驗(yàn)平臺(tái)

        測(cè)試集群由5個(gè)節(jié)點(diǎn)組成,其中1個(gè)作為主節(jié)點(diǎn),4個(gè)以HDD(hard disk drive, 機(jī)械硬盤(pán))為介質(zhì)的存儲(chǔ)節(jié)點(diǎn)。節(jié)點(diǎn)配置如表1所示。

        表1 集群節(jié)點(diǎn)配置

        PLFS 作為一個(gè)可堆疊文件系統(tǒng),實(shí)際不存儲(chǔ)數(shù)據(jù),而是將數(shù)據(jù)重新組織到底層文件系統(tǒng)中,向應(yīng)用提供一個(gè)虛擬文件的接口。CephFS[26]是常見(jiàn)的高性能的文件系統(tǒng),本文使用它作為PLFS的后端存儲(chǔ)。4個(gè)存儲(chǔ)節(jié)點(diǎn)組成一個(gè)Ceph對(duì)象存儲(chǔ)池,其中1個(gè)節(jié)點(diǎn)還充當(dāng)元數(shù)據(jù)服務(wù)器。主節(jié)點(diǎn)通過(guò)Ceph的內(nèi)核模塊將CephFS掛載到主節(jié)點(diǎn)的目錄樹(shù)中,將該掛載點(diǎn)目錄設(shè)置成PLFS的后端存儲(chǔ)。

        3.2 實(shí)驗(yàn)設(shè)計(jì)

        測(cè)試libplfs時(shí),在LD_PRELOAD的作用下,所有I/O函數(shù)的調(diào)用被重定向到libplfs中,該測(cè)試探究libplfs下PLFS的性能,記作no-FUSE。在有FUSE并且默認(rèn)設(shè)置的情況下進(jìn)行測(cè)試,作為控制組FUSE-with-cache。在有FUSE時(shí),不使用內(nèi)核頁(yè)緩存的方式下進(jìn)行測(cè)試,探究FUSE內(nèi)核模塊中頁(yè)緩存對(duì)性能的影響,記作FUSE-direct-IO。后端CephFS文件系統(tǒng)通過(guò)Ceph的內(nèi)核模塊掛載,并且啟用緩存功能,采用默認(rèn)配置。

        本文通過(guò)文件大小、傳輸塊大小和并發(fā)度3個(gè)參數(shù)的組合配置進(jìn)行測(cè)試。每組實(shí)驗(yàn)重復(fù)10次,實(shí)驗(yàn)參數(shù)配置見(jiàn)表2。

        表2 實(shí)驗(yàn)參數(shù)設(shè)置

        本文采用LANL開(kāi)發(fā)的fs_test[27]作為基準(zhǔn)測(cè)試工具。為便于敘述,本文對(duì)測(cè)試點(diǎn)采用形如“4-512M-16K-read”的命名方式,表示4個(gè)線程并發(fā)讀同一個(gè)大小為512 MB的文件,傳輸塊大小為16 KB。在讀測(cè)試之前,我們先完成對(duì)應(yīng)的寫(xiě)測(cè)試以此來(lái)達(dá)到系統(tǒng)預(yù)熱的效果,目的是更好地利用后端存儲(chǔ)的緩存,避免后端存儲(chǔ)成為性能瓶頸,從而掩蓋FUSE的性能影響,造成實(shí)驗(yàn)數(shù)據(jù)偏差。每個(gè)測(cè)試點(diǎn)完成后,清空緩存中的數(shù)據(jù)。

        得到測(cè)試結(jié)果之后,我們對(duì)一些測(cè)試點(diǎn)使用系統(tǒng)剖析工具進(jìn)行深入分析,探究FUSE如何影響I/O性能,以及l(fā)ibplfs的優(yōu)勢(shì)。

        3.3 實(shí)驗(yàn)結(jié)果

        本文選擇具有代表性的結(jié)果來(lái)進(jìn)行說(shuō)明,類別為小文件和大文件、串行和并發(fā)、讀和寫(xiě)、小傳輸塊(1 KB, 4 KB, 16 KB)和大傳輸塊(64 KB, 256 KB, 1 MB)。

        傳輸塊大小與緩存利用率直接相關(guān),決定了在給定文件大小條件下系統(tǒng)調(diào)用和內(nèi)核函數(shù)調(diào)用的數(shù)量。選擇傳輸塊大小作為x軸。每一個(gè)實(shí)驗(yàn)運(yùn)行10次,結(jié)果去掉最大最小值后取平均。

        圖4展示讀測(cè)試的結(jié)果。從結(jié)果中可以得出,在所有傳輸塊大小下,no-FUSE總是比FUSE-direct-IO的帶寬要高。當(dāng)傳輸塊大于32 KB時(shí),no-FUSE的帶寬最高,最大提升131%。當(dāng)傳輸塊小于32 KB時(shí),F(xiàn)USE-with-cache帶寬最高。FUSE-with-cache的帶寬總是比FUSE-direct-IO高。變化趨勢(shì)方面,F(xiàn)USE-direct-IO與no-FUSE的變化趨勢(shì)類似,而FUSE-with-cache的變化趨勢(shì)比較平穩(wěn)。單線程與多線程下讀性能相仿。

        圖4 讀性能比較

        圖5展示寫(xiě)測(cè)試的結(jié)果。從結(jié)果中可以得出,在所有傳輸塊大小下,F(xiàn)USE-direct-IO的帶寬總是比FUSE-with-cache高。當(dāng)傳輸塊小于64 KB時(shí),no-FUSE帶寬最高,最大提升5.7倍。當(dāng)傳輸塊大于64 KB時(shí),no-FUSE被FUSE-direct-IO超過(guò),二者性能差距大部分位于1%~8%,但二者都比FUSE-with-cache高。

        圖5 寫(xiě)性能比較

        圖6給出了寫(xiě)測(cè)試中no-FUSE對(duì)比FUSE-with-cache所帶來(lái)的的性能提升結(jié)果。結(jié)果表明,當(dāng)傳輸塊為1 KB時(shí),4線程寫(xiě)測(cè)試的性能提升更大,當(dāng)傳輸塊大于1 KB時(shí),單線程寫(xiě)測(cè)試提升更加明顯。換句話說(shuō),在并發(fā)小請(qǐng)求的寫(xiě)工作負(fù)荷下,繞過(guò)FUSE帶來(lái)的性能提升更加明顯。

        圖6 寫(xiě)性能提高比較

        3.4 結(jié)果分析

        FUSE的內(nèi)核模塊可以利用內(nèi)核頁(yè)緩存,進(jìn)行預(yù)取和寫(xiě)回操作,進(jìn)而影響性能。通過(guò)libplfs繞過(guò)FUSE之后,運(yùn)行態(tài)切換、系統(tǒng)調(diào)用和內(nèi)存拷貝的減少有利于提升性能。

        本節(jié)借助Linux系統(tǒng)提供的系統(tǒng)調(diào)優(yōu)和調(diào)試工具對(duì)得到的結(jié)果進(jìn)行分析和研究,所涉及的工具包括perf和ftrace。我們利用這些工具統(tǒng)計(jì)分析I/O過(guò)程中系統(tǒng)調(diào)用操作的數(shù)量、內(nèi)核函數(shù)調(diào)用的情況以及頁(yè)緩存的使用率。

        3.4.1 讀操作與頁(yè)緩存利用率

        FUSE的主要特點(diǎn)之一是可以利用內(nèi)核頁(yè)緩存。Linux內(nèi)核將FUSE內(nèi)核模塊和底層文件系統(tǒng)當(dāng)作2個(gè)不同的文件系統(tǒng),它們?cè)趦?nèi)核有獨(dú)立的緩存空間,因此FUSE存在雙重緩存的問(wèn)題。換句話說(shuō),對(duì)一個(gè)文件進(jìn)行讀操作將導(dǎo)致同一份內(nèi)容被緩存2次。在CephFS緩存被清空后運(yùn)行“4-2G-1K-read”測(cè)試,頁(yè)緩存使用情況見(jiàn)表3。

        表3 清空緩存后測(cè)試緩存使用情況

        表3結(jié)果顯示,當(dāng)后端存儲(chǔ)緩存被清空時(shí),雙重緩存使FUSE-with-cache的緩存命中率最低;當(dāng)后端緩存被預(yù)先填充時(shí),F(xiàn)USE-with-cache的緩存命中率可以提高到80%左右。

        在讀測(cè)試之前,先進(jìn)行寫(xiě)測(cè)試然后卸載PLFS,保證讀測(cè)試時(shí)CephFS的緩存處于有效狀態(tài)。重新運(yùn)行“4-128M-1K-read”和“4-128M-1M-read”測(cè)試項(xiàng),統(tǒng)計(jì)VFS、FUSE和CephFS上內(nèi)核函數(shù)的調(diào)用情況,結(jié)果見(jiàn)表4。

        表4 內(nèi)核函數(shù)調(diào)用數(shù)量

        當(dāng)傳輸塊為1 KB時(shí),F(xiàn)USE-with-cache在緩存的作用下,使Ceph上的讀操作只被觸發(fā)1 506次;FUSE-direct-IO和no-FUSE的情況下,Ceph上的讀操作是其350倍之高。當(dāng)傳輸塊為1 MB時(shí),它們之間的差距縮小很多,只有2.4和1.1倍。結(jié)果表明,當(dāng)傳輸塊比較小時(shí),在內(nèi)核頁(yè)緩存的作用下,F(xiàn)USE-with-cache的性能最高。

        3.4.2 系統(tǒng)調(diào)用(運(yùn)行態(tài)切換)

        I/O通過(guò)系統(tǒng)調(diào)用完成,系統(tǒng)調(diào)用數(shù)量與運(yùn)行態(tài)切換數(shù)量正相關(guān)。當(dāng)傳輸塊很小時(shí),一個(gè)I/O請(qǐng)求的實(shí)際數(shù)據(jù)傳輸時(shí)間很短,導(dǎo)致運(yùn)行態(tài)切換開(kāi)銷占比很大。除此之外,系統(tǒng)調(diào)用數(shù)量與用戶空間和內(nèi)核空間之間的內(nèi)存拷貝次數(shù)存在密切聯(lián)系。對(duì)“4-128M-1K-write”和“4-128M-1M-read”兩項(xiàng)測(cè)試中觸發(fā)的系統(tǒng)調(diào)用次數(shù)進(jìn)行統(tǒng)計(jì),得到表5。

        表5 系統(tǒng)調(diào)用情況

        表5展示了測(cè)試的帶寬和系統(tǒng)調(diào)用數(shù)量。在傳輸塊為1 KB的寫(xiě)測(cè)試中,F(xiàn)USE-direct-IO的系統(tǒng)調(diào)用數(shù)量是no-FUSE的4.4倍,然而每一個(gè)I/O請(qǐng)求的數(shù)據(jù)傳輸時(shí)間很短,大量系統(tǒng)調(diào)用使運(yùn)行態(tài)切換的總開(kāi)銷占比很高,導(dǎo)致no-FUSE的寫(xiě)性能是FUSE-direct-IO的3.5倍。對(duì)于傳輸塊為1 MB的讀測(cè)試,no-FUSE的系統(tǒng)調(diào)用數(shù)量為34 267遠(yuǎn)小于FUSE-direct-IO的91 872,導(dǎo)致no-FUSE的讀性能提升了131%。

        4 結(jié)束語(yǔ)

        本文研究FUSE在并行文件系統(tǒng)中的性能問(wèn)題,基于動(dòng)態(tài)鏈接的機(jī)制,實(shí)現(xiàn)了一種繞過(guò)FUSE的libplfs動(dòng)態(tài)鏈接庫(kù),并且在PLFS文件系統(tǒng)進(jìn)行實(shí)驗(yàn)和驗(yàn)證。實(shí)驗(yàn)結(jié)果表明,通過(guò)libplfs繞過(guò)FUSE后,可以在保證寫(xiě)性能的前提下,當(dāng)傳輸塊較大時(shí),讀性能提高最大可達(dá)131%;當(dāng)傳輸塊較小時(shí),寫(xiě)性能提高最大5倍左右。對(duì)結(jié)果進(jìn)行研究分析,發(fā)現(xiàn)內(nèi)核頁(yè)緩存和大量的系統(tǒng)調(diào)用是FUSE影響性能的重要因素?;贔USE的文件系統(tǒng)在傳輸塊較小時(shí),雙重緩存給文件系統(tǒng)的讀性能帶來(lái)了一定的性能提升,但同時(shí)大量的系統(tǒng)調(diào)用使其寫(xiě)性能降低2.5倍以上。對(duì)于并行文件系統(tǒng),并且存在大量大塊I/O,利用libplfs的方法可以帶顯著的性能提升。我們后續(xù)將對(duì)基于FUSE的不同文件系統(tǒng)進(jìn)行研究,開(kāi)展關(guān)于FUSE系統(tǒng)性能優(yōu)化的通用性方面的探索,擴(kuò)展現(xiàn)有的優(yōu)化方案。

        猜你喜歡
        描述符內(nèi)核調(diào)用
        萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
        基于結(jié)構(gòu)信息的異源遙感圖像局部特征描述符研究
        強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
        Linux內(nèi)核mmap保護(hù)機(jī)制研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        Linux單線程并發(fā)服務(wù)器探索
        利用CNN的無(wú)人機(jī)遙感影像特征描述符學(xué)習(xí)
        基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
        青青草亚洲视频社区在线播放观看| 国产成a人亚洲精v品无码性色| 午夜福利92国语| 日韩精品无码区免费专区| 97SE亚洲国产综合自在线不卡| 久久中文字幕亚洲精品最新| 一区二区三区熟妇人妻18| 久久精品国语对白黄色| 国产三级精品三级在线专区2| 国产流白浆视频在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 男女猛烈无遮挡免费视频| 欧美又大又色又爽aaaa片 | 久久精品国产精油按摩| 欧美日韩亚洲tv不卡久久| 99热在线精品播放| 亚洲欧美日韩国产精品一区| 日本久久精品在线播放| 国产精品女同av在线观看| 亚洲性无码av中文字幕| 人妻少妇精品无码专区| 国内精品久久久久影院一蜜桃| 久久久久久久女国产乱让韩| 亚洲中文字幕每日更新| 久激情内射婷内射蜜桃人妖 | 亚洲最大中文字幕无码网站| 日韩精品国产自在欧美| 丰满人妻一区二区乱码中文电影网 | 久久免费亚洲免费视频| 丰满熟妇乱又伦精品| 国产激情久久久久影院老熟女免费 | 黄片大全视频在线播放| 国产欧美日韩综合精品一区二区| 日本成本人三级在线观看 | 欧美激情在线不卡视频网站| 免费国产黄片视频在线观看| 一级午夜理论片日本中文在线| 极品夫妻一区二区三区| 99久久无码一区人妻| a级特黄的片子| 亚洲精品无码久久毛片|