一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

λ-IO:存儲計算下的IO棧設(shè)計

SSDFans ? 來源:SSDFans ? 2024-12-02 10:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

動機(jī)和背景

存儲計算&IO棧

存儲計算可以降低數(shù)據(jù)移動開銷并充分利用設(shè)備內(nèi)帶寬,相比于特定計算加速,通用存儲計算框架可以允許用戶自定義卸載到存儲設(shè)備的計算邏輯。然而大部分工作都關(guān)注于控制存儲設(shè)備的接口和用戶空間,但是缺乏對主機(jī)側(cè)計算&存儲資源的充分利用。IO棧是管理存儲器的的基本組件,包括設(shè)備驅(qū)動、塊接口層、文件系統(tǒng),目前一些用戶空間IO庫(如SPDK)有效降低了延遲,但是io棧仍然不可或缺。這是因為1)大部分引用采用POSIX接口需要IO棧的兼容性;2)IO棧提供了包括page cache、文件系統(tǒng)等多種功能模塊。而用戶空間IO庫只提供原始數(shù)據(jù)傳輸功能;3)IO??梢允沟貌煌脩?、應(yīng)用充分共享存儲設(shè)備。

主機(jī)-設(shè)備協(xié)作

作者通過測試,發(fā)現(xiàn)不同特征的應(yīng)用,對主機(jī)/設(shè)備具有不同的適應(yīng)性。例如,在主機(jī)/設(shè)備側(cè)分別運(yùn)行Stat64和stat32。stat64在主機(jī)側(cè)運(yùn)行更快,stat32在設(shè)備側(cè)運(yùn)行更快。另外,一個應(yīng)用的不同運(yùn)行階段,也具有不同的特征。例如使用warm page-cache策略運(yùn)行stat64,發(fā)現(xiàn)無緩存時在設(shè)備上更快,緩存越多主機(jī)端越快。

eBPF

eBPF是一種內(nèi)核中的虛擬機(jī),允許用戶在不修改內(nèi)核源碼的情況下運(yùn)行一段代碼,其運(yùn)行過程如下圖所示。因為eBPF可以提供硬件無關(guān)的字節(jié)碼格式,其可用于構(gòu)建ISC運(yùn)行時。然而,eBPF也存在一些問題:1)eBPF的靜態(tài)校驗器過于嚴(yán)格;2)缺乏指針訪問和動態(tài)長度循環(huán)機(jī)制。因此,需要對eBPF進(jìn)行擴(kuò)展以更好的支持存儲計算。

ee87e4a2-ade0-11ef-93f3-92fbcf53809c.png

設(shè)計方案

λ-IO通過擴(kuò)展vanilla-IO框架,支持將計算動態(tài)卸載到內(nèi)核/設(shè)備中進(jìn)行計算。

它由三部分組成,如下圖所示:

λ-IO API:用于提供擴(kuò)展的應(yīng)用編程接口

λ運(yùn)行時:包括λ內(nèi)核運(yùn)行時和λ設(shè)備運(yùn)行時,用于提供λ請求的計算接口

請求分發(fā)器:用于評估效率,將任務(wù)自動分發(fā)給設(shè)備/內(nèi)核執(zhí)行。

ee9c9690-ade0-11ef-93f3-92fbcf53809c.png

λ-API

λ-API繼承了vanilla IO的open/close/read/write接口,并擴(kuò)展了λ_load/ λ _read/λ_write接口用于應(yīng)用提交計算卸載請求。其中,λ函數(shù)是計算方法的實體,load_ λ用于將λ函數(shù)編譯為eBPF代碼;而open_λ/close_ λ:與vanilla中的定義保持一致,可以使用vanilla/ λ擴(kuò)展函數(shù)。

eeb93426-ade0-11ef-93f3-92fbcf53809c.png

pread_λ和pwrite_λ用于執(zhí)行計算卸載,其中pread_λ表示以fd,offset,length表示的文件內(nèi)容作為入?yún)?zhí)行λ_id表示的λ函數(shù),并將返回結(jié)果寫到buf中。其執(zhí)行步驟為:1)將文件數(shù)據(jù)作為輸入數(shù)據(jù)加載到內(nèi)存buffer中;2)為輸出數(shù)據(jù)分配buffer空間;3)執(zhí)行λ函數(shù);4)將輸出buffer的數(shù)據(jù)拷貝到用戶分配的buffer中。pwrite_λ與pread_λ類似,但是其輸入、輸出參數(shù)相反。

λ運(yùn)行時

λ運(yùn)行時是執(zhí)行l(wèi)oad_ λ, pread_ λ, pwrite _λ的核心,它的實現(xiàn)具有兩方面的關(guān)鍵挑戰(zhàn):1)計算:內(nèi)核/設(shè)備的λ運(yùn)行時都需要保存、執(zhí)行計算函數(shù);2)數(shù)據(jù):λ運(yùn)行時需要保存、訪問文件數(shù)據(jù)和用戶應(yīng)用信息。

作者通過允許sBPF對BPF代碼執(zhí)行動態(tài)驗證,使能指針、循環(huán)將eBPF擴(kuò)展為sBPF。其中,指針訪問的修改包括在JIT中增加指針地址檢測代碼,讓sBPF可以在運(yùn)行中檢查指針,若指針未落在輸入buffer中,則停止執(zhí)行并返回錯誤碼。另外,作者表示,所有循環(huán)都包括一個offset為負(fù)的跳轉(zhuǎn)指令,因此sBPF使用了一個動態(tài)的后跳計數(shù)器,并限制后跳的執(zhí)行次數(shù),以避免死循環(huán)的發(fā)生。作者之后對其安全性進(jìn)行了分析,并表示雖然增加了功能,但由于檢驗嚴(yán)格,并不會增加eBPF的安全性風(fēng)險。

關(guān)于數(shù)據(jù)問題,主要是設(shè)備/內(nèi)核的一致性訪問問題。對于λ內(nèi)核運(yùn)行時,作者使用內(nèi)核中通用的kernel_write和kernel_read訪問文件,讓內(nèi)核管理頁緩存和文件一致性,另外為了減少讀寫文件引起的大規(guī)模內(nèi)存搬移,作者提出kernel_mmap進(jìn)行內(nèi)存映射解決這個問題。

對于設(shè)備運(yùn)行時的文件一致性訪問,作者提出,雖然由于設(shè)備對文件語義不可知,需要準(zhǔn)確的物理地址,但是文件的IOCTL中由FIEMAP和FIBMAP用于提取元數(shù)據(jù)中的物理地址,可以解決設(shè)備的文件訪問問題。而一致性問題包括內(nèi)核-用戶空間一致性和主機(jī)-設(shè)備一致性兩方面,對于內(nèi)核-用戶空間一致性問題,由于采用的是標(biāo)準(zhǔn)syscall接口,內(nèi)核可以管理一致性,而主機(jī)設(shè)備一致性問題則通過1)使用讀寫鎖避免同時訪問帶來的一致性風(fēng)險;2)在分發(fā)λ請求前,將請求數(shù)據(jù)文件相關(guān)的臟頁刷入設(shè)備并清空緩存,可以解決其一致性問題。

請求分發(fā)器

請求分發(fā)器的目的是通過預(yù)測主機(jī)、設(shè)備對某個任務(wù)的執(zhí)行時間,選擇其中更快的那個進(jìn)行分發(fā),以達(dá)到更快、更高效的目的。為了評估執(zhí)行時間,需要對執(zhí)行時間進(jìn)行建模。

為此,首先對相關(guān)變量進(jìn)行符號表示如下表。

D 存儲器中內(nèi)容大小
Bs 存儲介質(zhì)-控制器傳輸帶寬
Bd 主機(jī)-設(shè)備傳輸帶寬
Bh 主機(jī)計算的等效帶寬
α 輸入/輸出長度比值
β 設(shè)備/主機(jī)計算吞吐量比值

之后,對主機(jī)、設(shè)備端分別建模其執(zhí)行時間,當(dāng)不考慮緩存時,使用pread_λ在內(nèi)核、設(shè)備端的執(zhí)行時間如下公式所示

eec4cee4-ade0-11ef-93f3-92fbcf53809c.png

。當(dāng)考慮緩存時,則其形式變?yōu)槿缦?/p>

eedf63d0-ade0-11ef-93f3-92fbcf53809c.png

。而pwrite_λ的執(zhí)行時間則為

eef4a286-ade0-11ef-93f3-92fbcf53809c.png

。

評估

評估環(huán)境

本文中在一個配備4核8線程的I7-7700@3.6GHz,16GB DDR4內(nèi)存的電腦上運(yùn)行內(nèi)核為linux 5.10.21的Ubuntu20.04LTS操作系統(tǒng)進(jìn)行測試。存儲計算設(shè)備則采用Xilinx Zynq Ultrascale+ ZU17EG搭配2GB內(nèi)存核64GBNand Flash。測試負(fù)載包括Stat64, Stat32, KNN, Grep, Bitmap。評估對比對象包括了1)Buffer IO(B):默認(rèn)的vanilla IO;2)DirectIO(I):類似Buffer IO,但開啟O_DIRECT;3)Mmap(M):將數(shù)據(jù)文件讀入用戶空間,避免內(nèi)核數(shù)據(jù)拷貝;4)λ-IO kernel(K):使用內(nèi)核計算的λ-IO;5)λ-IO device(D):使用設(shè)備計算的λ-IO;6)λ-IO(λ):啟用請求分發(fā)的λ-IO。

單應(yīng)用性能測試

對單個應(yīng)用的性能分析,作者將執(zhí)行時間細(xì)分為三部分:IO/計算/其他。首先對比λ-IO Device(d)和Buffer IO(B)??梢园l(fā)現(xiàn),d相比B,Stats64, KNN, Grep, Bitmap分別提升23.24%, 10.82%, 87.13%, 60.15%。這是由于主機(jī)端IO時間占比超過92.04%。另外,由于設(shè)備僅有4核4線程,而主機(jī)發(fā)送請求為8線程,因此出現(xiàn)了請求排隊現(xiàn)象。在stat32中d執(zhí)行時間超過B 6.65倍 ,是由于64位eBPF對32位程序執(zhí)行效率不高導(dǎo)致的。

之后作者對比了λ-Io Kernel(k)核vanilla-IO(B)之間的性能差異,并發(fā)現(xiàn)二者性能基本相同。λ-IO由于sBPF增加了運(yùn)行時動態(tài)檢驗,帶來了部分額外開銷,但是又因為kernel_mmap避免了內(nèi)存復(fù)制的開銷,二者基本相互抵消。

最后作者對比了λ-IO不同模式之間的性能差異,并發(fā)現(xiàn),引入請求分配器的λ-IO在每項測試中的性能都基本相當(dāng)于k、d模式下更快的那一個,并且通過對比,可以發(fā)現(xiàn)請求分配器帶來的額外開銷約為4.98%。

eeff49ac-ade0-11ef-93f3-92fbcf53809c.png

多應(yīng)用評估

作者通過同時運(yùn)行5種負(fù)載之二評估同時運(yùn)行不同負(fù)載的性能差別。發(fā)現(xiàn),當(dāng)運(yùn)行項包括stat32時,Stat32被分發(fā)到主機(jī),另一個分發(fā)到設(shè)備運(yùn)行,因此λ-IO性能提升2.19倍,其他情況下λ-IO也有1.98倍的整體性能提升。

ef26d6d4-ade0-11ef-93f3-92fbcf53809c.png

敏感性分析

作者接著進(jìn)行了敏感性分析。首先是數(shù)據(jù)集大小敏感性,作者使用stat64測試為例,發(fā)現(xiàn)在緩存>數(shù)據(jù)集大小時,由于避免了IO瓶頸,內(nèi)核性能最佳,當(dāng)緩存≈?jǐn)?shù)據(jù)大小時,頁緩存的影響變小,λ-IO性能更好,當(dāng)數(shù)據(jù)>緩存大小時,λ-IO由于高效分發(fā)請求,比其他對照組快1.28-1.60倍不等。

接著是熱啟動敏感性,作者發(fā)現(xiàn)Buffer-IO在熱啟動下性能比冷啟動更好一些,但是λ-IO性能仍是Buffer-IO的4.05倍。

之后作者分析了請求分發(fā)器的預(yù)測周期和預(yù)測長度的敏感性,發(fā)現(xiàn),當(dāng)預(yù)測周期超過200后,性能基本不發(fā)生改變,因此將默認(rèn)預(yù)測周期設(shè)為200,而對于預(yù)測長度,可以看到隨著預(yù)測長度增加,執(zhí)行時間迅速增長,因此默認(rèn)預(yù)測長度被設(shè)為5。

ef47eebe-ade0-11ef-93f3-92fbcf53809c.png

ef671488-ade0-11ef-93f3-92fbcf53809c.png

對于緩存大小和線程數(shù)量,可以看到大部分應(yīng)用對緩存大小不敏感,且大部分應(yīng)用隨著線程數(shù)增長而增長,并在4線程時基本觸頂。

BPF開銷

通過對比運(yùn)行時間,作者表示sBPF相比eBPF,循環(huán)檢查對內(nèi)核/設(shè)備增加不超過2.44%和10.09%的開銷,加上指針檢查,sBPF對內(nèi)核/設(shè)備引入不超過16.96%和22.68%的額外開銷。

ef7023de-ade0-11ef-93f3-92fbcf53809c.png

Spark SQL

作者最后將spark SQL移植適配λ-IO,并測試了其在TPC-H負(fù)載下的真實性能表現(xiàn)。對比發(fā)現(xiàn)在buffer-IO模式下,IO占用了27.02%-60.41%的總時間,λ-IO Kernel與buffer-IO類似,λ-IO將任務(wù)分發(fā)至設(shè)備,提升最高81.55%的性能,暖啟動后λ-IO比B/K/D分別提升2.15、2.16、1.51倍,在CPU密集型任務(wù)中Q20任務(wù)在D中執(zhí)行時間比K少18.45%。

ef7ad9d2-ade0-11ef-93f3-92fbcf53809c.png

ef8768dc-ade0-11ef-93f3-92fbcf53809c.png

總結(jié)

在本文中提出了λ-IO,其擴(kuò)展了Linux IO,使計算能夠卸載到主機(jī)內(nèi)核和設(shè)備。作者在真實的軟硬件環(huán)境中實現(xiàn)并評估了λ-IO,其顯示出顯著的性能提升。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

    213849
  • BPF
    BPF
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    4351
  • IO棧
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    602

原文標(biāo)題:λ-IO:存儲計算下的IO棧設(shè)計

文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    IO如何實現(xiàn)

    。為了提供系統(tǒng)吞吐量, 降低硬件資源的開銷,IO模型也在不斷適應(yīng)大規(guī)模、高并發(fā)需求不斷演進(jìn),今天我們就來看看這個在網(wǎng)絡(luò)上高頻出現(xiàn)的詞匯 IO模型 linux IO模型 首先我們要明確,用戶程序從
    的頭像 發(fā)表于 09-25 10:57 ?1270次閱讀
    <b class='flag-5'>IO</b>如何實現(xiàn)

    簡單說一下阻塞IO、非阻塞IO、IO復(fù)用的區(qū)別?

    對于計算機(jī)而言,任何涉及到計算機(jī)核心(CPU和內(nèi)存)與其他設(shè)備間的數(shù)據(jù)轉(zhuǎn)移的過程就是IO
    的頭像 發(fā)表于 03-04 15:14 ?1868次閱讀
    簡單說一下阻塞<b class='flag-5'>IO</b>、非阻塞<b class='flag-5'>IO</b>、<b class='flag-5'>IO</b>復(fù)用的區(qū)別?

    緩存和RAID如何提高IO

    在這些存儲技術(shù)中使用最廣的就是高速緩存(Cache)和磁盤冗余陣列(RAID)了,本文就將探討緩存和磁盤陣列提高存儲IO性能的方法。
    發(fā)表于 03-28 11:56 ?3395次閱讀

    DSP的存儲器及IO空間

    DSP的存儲器及IO空間,DSP最好的教程,沒有之一
    發(fā)表于 01-06 15:04 ?1次下載

    不同應(yīng)用程序的存儲IO類型解析

    的數(shù)據(jù)訪問類型有所不同。 本文描述典型的不同應(yīng)用程序的存儲IO類型。幫助讀者了解不同應(yīng)用程序存儲IO類型的同時,提供的數(shù)據(jù)也可以為存儲模擬和
    的頭像 發(fā)表于 11-30 15:21 ?2528次閱讀
    不同應(yīng)用程序的<b class='flag-5'>存儲</b><b class='flag-5'>IO</b>類型解析

    鴻蒙系統(tǒng) IO和Linux IO對比分析

    。所以我們就拿 liteos_a 系統(tǒng)來分析一下它的 IO 吧,畢竟它應(yīng)對的場景更加復(fù)雜一些。 鴻蒙系統(tǒng) l
    的頭像 發(fā)表于 10-16 10:45 ?2616次閱讀
    鴻蒙系統(tǒng) <b class='flag-5'>IO</b><b class='flag-5'>棧</b>和Linux <b class='flag-5'>IO</b><b class='flag-5'>棧</b>對比分析

    如何使用io.Reader和io.Writer接口在程序中實現(xiàn)流式IO

    Go 語言標(biāo)準(zhǔn)庫 io 包內(nèi)有一些常用接口和方法,本文配合圖片和實際代碼,詳細(xì)介紹了 io 包。 前言 在 Go 中,輸入和輸出操作是使用原語實現(xiàn)的,這些原語將數(shù)據(jù)模擬成可讀的或可寫的字節(jié)流。 為此
    的頭像 發(fā)表于 07-29 16:46 ?3641次閱讀

    簡要敘述分布式IO和遠(yuǎn)程IO的區(qū)別

    遠(yuǎn)程IO與分布式IO的區(qū)別是什么?讓很多人糊涂,到底什么是遠(yuǎn)程IO,什么是分布式IO,網(wǎng)上包括各種聲音,連行內(nèi)有經(jīng)驗的老師們也可能把分布式IO
    的頭像 發(fā)表于 12-29 11:59 ?1.2w次閱讀
    簡要敘述分布式<b class='flag-5'>IO</b>和遠(yuǎn)程<b class='flag-5'>IO</b>的區(qū)別

    現(xiàn)代異步存儲訪問API探索:libaio、io_uring和SPDK

    最近的高性能存儲設(shè)備暴露了現(xiàn)有軟件的低效,因而催生了對I/O的改進(jìn)。Linux內(nèi)核的最新API是io_uring。作者提供了第一個針對io
    的頭像 發(fā)表于 06-27 10:54 ?1920次閱讀
    現(xiàn)代異步<b class='flag-5'>存儲</b>訪問API探索:libaio、<b class='flag-5'>io</b>_uring和SPDK

    信號驅(qū)動IO與異步IO的區(qū)別

    一. 談信號驅(qū)動IO (對比異步IO來看) 信號驅(qū)動IO 對比 異步 IO進(jìn)行理解 信號驅(qū)動IO: 內(nèi)核將數(shù)據(jù)準(zhǔn)備好的時候, 使用SIGIO
    的頭像 發(fā)表于 11-08 15:32 ?1510次閱讀
    信號驅(qū)動<b class='flag-5'>IO</b>與異步<b class='flag-5'>IO</b>的區(qū)別

    亞信電子推出全新IO-Link設(shè)備軟件協(xié)議解決方案

    亞信電子提供完整的EtherCAT從站轉(zhuǎn)IO-Link主站網(wǎng)關(guān)和IO-Link設(shè)備軟件協(xié)議解決方案,使客戶能夠?qū)⒆钚碌?b class='flag-5'>IO-Link智能傳感器和執(zhí)行器等設(shè)備,輕松地導(dǎo)入EtherCA
    的頭像 發(fā)表于 01-16 11:24 ?842次閱讀
    亞信電子推出全新<b class='flag-5'>IO</b>-Link設(shè)備軟件協(xié)議<b class='flag-5'>棧</b>解決方案

    亞信電子推出全新IO-Link設(shè)備軟件協(xié)議解決方案

    亞信電子提供完整的EtherCAT從站轉(zhuǎn)IO-Link主站網(wǎng)關(guān)和IO-Link設(shè)備軟件協(xié)議解決方案,使客戶能夠?qū)⒆钚碌?b class='flag-5'>IO-Link智能傳感器和執(zhí)行器等設(shè)備,輕松地導(dǎo)入EtherCA
    的頭像 發(fā)表于 01-17 08:11 ?844次閱讀
    亞信電子推出全新<b class='flag-5'>IO</b>-Link設(shè)備軟件協(xié)議<b class='flag-5'>棧</b>解決方案

    遠(yuǎn)程IO與分布式IO的區(qū)別

    在工業(yè)自動化和控制系統(tǒng)設(shè)計中,遠(yuǎn)程IO(Input/Output)和分布式IO是兩個重要的概念。它們各自具有獨特的特點和優(yōu)勢,適用于不同的應(yīng)用場景。本文將詳細(xì)探討遠(yuǎn)程IO與分布式IO
    的頭像 發(fā)表于 06-15 15:57 ?4034次閱讀

    初識IO-Link及IO-Link設(shè)備軟件協(xié)議

    亞信IO-Link設(shè)備軟件協(xié)議是基于亞信電子AXM-IOLS IO-Link設(shè)備評估板設(shè)計的,搭載意法半導(dǎo)體 STM32F469AI微控制器,并在STM32CubeIDE開發(fā)環(huán)境中進(jìn)行開發(fā)。此
    的頭像 發(fā)表于 07-08 13:55 ?4006次閱讀
    初識<b class='flag-5'>IO</b>-Link及<b class='flag-5'>IO</b>-Link設(shè)備軟件協(xié)議<b class='flag-5'>棧</b>

    亞信電子于IAS 2024展出最新IO-Link主站&amp;設(shè)備軟件協(xié)議解決方案

    亞信電子即將于IAS 2024展示最新的亞信IO-Link主站/設(shè)備軟件協(xié)議、集成亞信IO-Link主站軟件協(xié)議的AX58400 EtherCAT轉(zhuǎn)
    的頭像 發(fā)表于 09-18 15:28 ?709次閱讀
    亞信電子于IAS 2024展出最新<b class='flag-5'>IO</b>-Link主站&amp;設(shè)備軟件協(xié)議<b class='flag-5'>棧</b>解決方案