齊勇軍,湯海林
(廣東白云學(xué)院大數(shù)據(jù)與計算機(jī)學(xué)院,510450,廣州)
NVMe(NVM Express)主機(jī)控制器接口協(xié)議專為SSD和PCIe物理接口而設(shè)計,大大提高了主機(jī)到SSD訪問的并行性,突破了傳統(tǒng)SCSI協(xié)議和SATA/SAS硬盤接口的性能瓶頸[1]。NVMeoF(NVMe over Fabrics)協(xié)議進(jìn)一步將NVMe的優(yōu)勢擴(kuò)展到了存儲網(wǎng)絡(luò)結(jié)構(gòu),如高并發(fā)、低延遲、低協(xié)議開銷等。為了實現(xiàn)NVMe SSD通過以太網(wǎng)構(gòu)建高性能存儲網(wǎng)絡(luò),廣泛應(yīng)用于數(shù)據(jù)中心,Lightbits、Facebook、Intel、Cisco、Dell EMC、Micron[2-5]等公司聯(lián)合開發(fā)了NVMe over TCP標(biāo)準(zhǔn),被 NVM Express[6]組織批準(zhǔn)為新的 NVMeoF 傳輸層標(biāo)準(zhǔn)。然而,基于TCP的NVMeoF存儲網(wǎng)絡(luò)的NVMe需要計算節(jié)點(diǎn)和存儲節(jié)點(diǎn)在每次I/O請求完成時響應(yīng)多個中斷請求。在高并發(fā)I/O場景下,會向CPU發(fā)出海量的中斷請求。并且隨著超高速以太網(wǎng)在未來數(shù)據(jù)中心的部署和應(yīng)用,NVMe over TCP存儲網(wǎng)絡(luò)的性能瓶頸逐漸轉(zhuǎn)移到CPU對各類NVMeoF報文的處理效率上。
本文設(shè)計并實現(xiàn)了Load-Aware NVMeoF消息處理機(jī)制LANoT(Load-Aware NVMe over TCP)。 使用interupt合并技術(shù)緩解中斷風(fēng)暴問題,通過感知不同CPU核心和目標(biāo)NVMe SSD的專用隊列中的I/O負(fù)載,匹配相應(yīng)的NVMeOF存儲網(wǎng)絡(luò)消息處理機(jī)制,實現(xiàn)不同特性應(yīng)用的關(guān)鍵指標(biāo)表現(xiàn)。
與只有單個請求隊列的傳統(tǒng) SCSI 存儲設(shè)備不同,NVMe SSD 可以同時并發(fā)處理大量 I/O 請求。驅(qū)動完成NVMe請求的初始化后,立即通過Doorbell寄存器通知NVMe SSD開始處理NVMe指令。此外,通過單個磁頭串行執(zhí)行讀寫請求的磁盤相比,NVMe SSD具有通道間、芯片間、晶圓間和組間4個級別的并行性,可以并發(fā)執(zhí)行同時多條數(shù)據(jù)讀寫指令,并在指令執(zhí)行后并發(fā)向CPU發(fā)起中斷請求。
數(shù)據(jù)密集型應(yīng)用需要主機(jī)CPU和NVMe軟件協(xié)議棧每秒處理數(shù)百萬個數(shù)據(jù)中斷請求,這會導(dǎo)致主機(jī)CPU計算能力被中斷請求產(chǎn)生的上下文切換開銷消耗。本文將大量CPU資源用于處理NVMe SSD中斷請求而導(dǎo)致應(yīng)用執(zhí)行效率急劇下降的問題稱為NVMe中斷風(fēng)暴。
隨著人工智能技術(shù)、云計算、大數(shù)據(jù)和物聯(lián)網(wǎng)技術(shù)的發(fā)展,以及多通道CPU服務(wù)器和多核CPU技術(shù)在數(shù)據(jù)中心的普及,數(shù)據(jù)中心的數(shù)據(jù)流量呈指數(shù)級增長。數(shù)據(jù)中心計算節(jié)點(diǎn)通常同時運(yùn)行多個應(yīng)用程序,每個應(yīng)用程序具有不同的I/O特性和需求。CPU Core A上運(yùn)行著數(shù)據(jù)密集型應(yīng)用和延遲敏感型應(yīng)用。對于這2種應(yīng)用,服務(wù)質(zhì)量保證對不同的性能指標(biāo)敏感。
在計算節(jié)點(diǎn)和I/O節(jié)點(diǎn)的NVMeoF存儲網(wǎng)絡(luò)I/O關(guān)鍵路徑中,如果只用一套機(jī)制來管理不同CPU核對應(yīng)的NVeoF隊列中指令的處理和發(fā)送,是無法針對性地在不同應(yīng)用程序的 I/O 中實現(xiàn)。 I/O特性和需求準(zhǔn)確實現(xiàn)應(yīng)用負(fù)載感知指令處理和發(fā)送策略,更好地實現(xiàn)不同應(yīng)用的服務(wù)質(zhì)量保證。例如,針對數(shù)據(jù)密集型應(yīng)用優(yōu)化的NVeoF存儲網(wǎng)絡(luò)指令處理策略無法滿足延遲敏感應(yīng)用的I/O需求,甚至可能對延遲敏感應(yīng)用的I/O造成延遲放大問題,導(dǎo)致計算結(jié)果錯誤。點(diǎn)應(yīng)用之間的I/O干擾問題,針對延遲敏感應(yīng)用的NVeoF存儲網(wǎng)絡(luò)指令處理策略,由于追求極低的延遲,也無法充分發(fā)揮網(wǎng)絡(luò)性能及滿足數(shù)據(jù)密集型應(yīng)用的高吞吐要求。因此,如何為NVMe over TCP存儲網(wǎng)絡(luò)的主機(jī)和目標(biāo)I/O關(guān)鍵路徑中的每個CPU核設(shè)置專用的消息處理策略,并根據(jù)I/O負(fù)載動態(tài)調(diào)整,是有效避免多核CPU的關(guān)鍵。同時,正在運(yùn)行的應(yīng)用程序之間的I/O干擾問題,是為了充分發(fā)揮ULL-SSD高并發(fā)、低延遲所面臨的關(guān)鍵問題。
隨著計算能力的不斷提升和存儲技術(shù)的進(jìn)步,大型數(shù)據(jù)中心可以支持應(yīng)用程序進(jìn)行更復(fù)雜地分析和處理更大的數(shù)據(jù)集。例如,數(shù)據(jù)密集型分析應(yīng)用需要讀入大量原始數(shù)據(jù)才能獲得深入分析結(jié)果,而超大規(guī)模模擬應(yīng)用每次保存一個檢查點(diǎn)都會持續(xù)寫入TB級數(shù)據(jù)。數(shù)據(jù)密集型應(yīng)用程序需要大量 I/O 帶寬來訪問呈指數(shù)增長的數(shù)據(jù)。由于數(shù)據(jù)中心計算節(jié)點(diǎn)通常同時運(yùn)行多個應(yīng)用程序,并且它們可能具有不同的I/O特性,因此不可能使用固定的機(jī)制來管理所有CPU核對應(yīng)的NVeoF隊列。因此,需要應(yīng)用程序 I/O。I/O需要分析確定如何為每個CPU以及 NVMe over TCP 存儲網(wǎng)絡(luò)的主機(jī)側(cè)和目標(biāo)側(cè)之間設(shè)置專用的消息處理策略。根據(jù)對美國橡樹嶺國家實驗室管理的2個大型存儲集群的運(yùn)行記錄的研究,small I/O已成為存儲系統(tǒng)必須處理的重要I/O模式,其中60% Spider 2 集群上的寫入請求為4 kB 或更少。根據(jù)應(yīng)用程序的 I/O 特性,大致可以分為數(shù)據(jù)密集型應(yīng)用和時間敏感型應(yīng)用。
如果按照這個值設(shè)置聚合度,會導(dǎo)致聚合過大,在正常的定時器限制內(nèi)無法達(dá)到聚合度,對于PDU大小較大的情況,聚合度會導(dǎo)致發(fā)送到網(wǎng)卡的數(shù)據(jù)包需要再次拆分,給網(wǎng)卡帶來額外的工作量。
NVMe over TCP存儲網(wǎng)絡(luò)的Target端向Host端發(fā)送C2HData PDU和Resp PDU(消息結(jié)構(gòu))。其中,Resp PDU的典型大小為24 B,C2HData PDU根據(jù)攜帶的數(shù)據(jù)部分的大小而變化。根據(jù)聚合度的計算公式,合適的聚合度與CapsuleCmd PDU有較大差異。
1)對于寫入密集型應(yīng)用程序。NVMe over TCP存儲網(wǎng)絡(luò)的Host端向Target端密集發(fā)送CapsuleCmd PDU和H2CData PDU。此時的情況對應(yīng)于讀取密集型應(yīng)用程序。Host發(fā)送高頻大包,Target端發(fā)送高頻小包。
2)對于時間敏感的應(yīng)用程序。時間敏感的應(yīng)用程序通常沒有很高的吞吐率,消息大小也低于KB級別,例如實時控制流信息。雖然這種類型的應(yīng)用程序不需要高帶寬,但它需要足夠低的延遲來確保應(yīng)用程序的正常運(yùn)行和良好的用戶體驗。對于這類應(yīng)用,如果聚合度和定時器超時時間設(shè)置過高,則應(yīng)用的消息延遲會過高,影響用戶體驗,甚至影響應(yīng)用的正常運(yùn)行。因此,應(yīng)該采用低聚合、低定時器超時的策略,并犧牲一定的帶寬/吞吐量和CPU使用率,以換取時間敏感的應(yīng)用消息的低延遲。
LANoT有效地聚合了Host端的每個隊列中PDU,以減少Target端的中斷請求數(shù)量。LANoT引入了PG(PDU Group)數(shù)據(jù)結(jié)構(gòu)來記錄需要發(fā)送的多個PDU的內(nèi)存起始地址和長度。在PG聚合度達(dá)到閾值或等待時間結(jié)束后,通過調(diào)用kernel_sendmsg()接口一次將包含多個PDU的PG發(fā)送給Target。這樣,存儲節(jié)點(diǎn)網(wǎng)卡收到PG后,只需要向CPU發(fā)起中斷請求,CPU就可以在中斷處理的下半部分連續(xù)解析處理多個PDU,從而避免CPU響應(yīng)到多個中斷請求和上下文切換開銷?;贑PU核的負(fù)載檢測。
在基于聚合PDU的中斷合并策略中,如果要保證消息傳輸?shù)难舆t,必須設(shè)置一個較低的計時器超時時間,以確保在時限內(nèi)及時發(fā)送消息。但是,減少定時器時間后,等待時間會發(fā)生變化。總之,相應(yīng)的PG聚合度更難達(dá)到閾值,相當(dāng)于降低PG聚合度。為了保證消息傳輸?shù)母咄掏铝?,必須盡量提高PG的聚合度。PG的聚合度越大,中斷合并的效率就越高,同時也會獲得計算節(jié)點(diǎn)和存儲節(jié)點(diǎn)的有效CPU算力,保護(hù)得更好。但是,隨著PG聚合度的增加,如果想要PG聚合度達(dá)到閾值,就需要為定時器設(shè)置更長的超時時間,防止定時器超時超時。
這2個指標(biāo)所需的消息發(fā)送機(jī)制似乎相互矛盾,需要進(jìn)行一定的權(quán)衡。然而,根據(jù)華中科技大學(xué)楊穎等人的研究,通過觀察大量以往的實驗結(jié)果,多個應(yīng)用的并發(fā)運(yùn)行時負(fù)載呈現(xiàn)出規(guī)律的分布。在一定時間內(nèi),單個CPU核的負(fù)載特性表現(xiàn)出一定的一致性。雖然不可能同時達(dá)到2個最高的目標(biāo)NVMe over TCP存儲網(wǎng)絡(luò)中的吞吐率和最低延遲,可以為CPU內(nèi)核設(shè)置專用的消息處理隊列,并根據(jù)實時I/O負(fù)載狀態(tài)動態(tài)調(diào)整消息處理策略。最大程度滿足應(yīng)用對高吞吐量、低延遲的性能要求。
為解決應(yīng)用之間的I/O干擾問題,根據(jù)不同應(yīng)用的I/O特性,通過動態(tài)機(jī)制調(diào)整,首先要通過獲取相關(guān)維度的I/O傳輸特性數(shù)據(jù)來確定當(dāng)前的負(fù)載特性。在NVMeoF消息處理方法中,以每個CPU核的特殊消息處理隊列為粒度進(jìn)行I/O傳輸特征數(shù)據(jù)感知。對應(yīng)中斷合并機(jī)制中聚合、數(shù)據(jù)長度、等待時間3個維度的特點(diǎn),考察每個聚合PG在CPU核心專用隊列中的聚合度、聚合數(shù)據(jù)的長度、是否定時器超時,獲取的數(shù)據(jù)感知當(dāng)前運(yùn)行的應(yīng)用I/O負(fù)載特性,對每個CPU使用Qos算法內(nèi)核的專用消息處理隊列匹配當(dāng)前I/O負(fù)載特性對應(yīng)的專用消息處理策略正在運(yùn)行的應(yīng)用程序。
針對NVMe SSD在多核CPU中多個并發(fā)運(yùn)行應(yīng)用之間I/O干擾情況下面臨的高并發(fā)、低延遲特性的關(guān)鍵問題,本文采用機(jī)制與策略分離。設(shè)計思路是針對數(shù)據(jù)中心的多核CPU負(fù)載多樣性問題,在NVMe over TCP存儲網(wǎng)絡(luò)中設(shè)計Load-aware NVMe over TCP動態(tài)消息處理機(jī)制LANoT(Load Aware NVMe over TCP),并設(shè)置專門的消息處理機(jī)制針對每個CPU核根據(jù)I/O負(fù)載動態(tài)調(diào)整策略,有效避免了多核CPU中多個并發(fā)運(yùn)行的應(yīng)用程序之間的I/O干擾問題,充分發(fā)揮了CPU的高并發(fā)、低延遲特性NVMe固態(tài)硬盤。
如圖1所示,對應(yīng)聚合度、數(shù)據(jù)長度和等待時間3個維度,可實現(xiàn)對應(yīng)用負(fù)載情況的感知,主動調(diào)整響應(yīng)策略。例如,當(dāng)一個PDU Group對應(yīng)一個NVMeoF隊列時,如果因為數(shù)據(jù)長度達(dá)到閾值而連續(xù)N次觸發(fā)PDU Group的發(fā)送,則預(yù)測在NVMeoF隊列中要發(fā)送的NVMe指令主要來自來密集的I/O請求。CPU中運(yùn)行的程序歸類為高吞吐量應(yīng)用程序,針對CPU利用率進(jìn)行了優(yōu)化,提高了PDU Group的數(shù)據(jù)長度閾值,減少了中斷次數(shù)。如果因為等待時間達(dá)到閾值,連續(xù)N次觸發(fā)PDU Group的發(fā)送,預(yù)測NVMeoF隊列中要發(fā)送的NVMe指令主要來自非密集I/O請求,并且這些請求對應(yīng)的PDU在PDU Group中較長。時間等待會導(dǎo)致I/O延遲顯著增加。因此,對CPU中運(yùn)行的程序進(jìn)行了延時優(yōu)化,降低了PDU Group的數(shù)據(jù)長度閾值,適當(dāng)減少了等待時間。具體的策略調(diào)度由Qos算法控制。
圖1 Load-aware動態(tài)NVMeoF消息處理機(jī)制
不同I/O特性的應(yīng)用程序具有不同的性能目標(biāo)。對于數(shù)據(jù)密集型應(yīng)用,其追求的性能指標(biāo)是吞吐率,對延遲時間指標(biāo)要求不高。為了實現(xiàn)更高的吞吐量,NVMeoF存儲網(wǎng)絡(luò)應(yīng)在通信網(wǎng)絡(luò)允許的情況下,采用盡可能增加PDU聚合度的策略,以減少中斷次數(shù),提高CPU和數(shù)據(jù)的處理效率。對于延遲敏感的應(yīng)用,它追求的性能指標(biāo)是延遲時間,對吞吐量的要求相對較低。為了實現(xiàn)更低的時延,NVMeoF存儲網(wǎng)絡(luò)應(yīng)該在不浪費(fèi)CPU算力的情況下,盡量減少PDU傳輸?shù)却龝r間,從而減少網(wǎng)絡(luò)開銷以外的不必要的延遲,提高NVeoF存儲網(wǎng)絡(luò)的延遲性能。
感知具有不同I/O特性的應(yīng)用程序。當(dāng)應(yīng)用為數(shù)據(jù)密集型應(yīng)用時,特點(diǎn)是頻繁發(fā)送PG,定時器基本不超時。為了實現(xiàn)針對數(shù)據(jù)密集型應(yīng)用優(yōu)化的性能目標(biāo),此時的策略應(yīng)該是:逐漸增加聚合度,達(dá)到合適的值。當(dāng)應(yīng)用對時間敏感且數(shù)據(jù)不密集時,其特點(diǎn)是頻繁的定時器超時和NVeoF網(wǎng)絡(luò)中發(fā)送的PG的低聚合。為了達(dá)到針對數(shù)據(jù)密集型應(yīng)用優(yōu)化的性能目標(biāo),此時的策略應(yīng)該是:逐漸降低聚合度到合適的值。為了實現(xiàn)對不同應(yīng)用程序使用不同的策略,首先要解決如何確定的問題。LANoT為每個CPU核和目標(biāo)存儲節(jié)點(diǎn)設(shè)計了專用的處理隊列,設(shè)置了SmallPG-send、PG-send和doorbell-ring 3個統(tǒng)計每個隊列中的變量來收集每個隊列的工作狀態(tài),并實時傳遞給Qos算法,以達(dá)到根據(jù)不同的非通過工作狀態(tài)實時調(diào)整NVMeoF存儲網(wǎng)絡(luò)消息處理策略的設(shè)計目標(biāo)。隊列充分適應(yīng)不同特性應(yīng)用的性能需求。其中small PG-sned統(tǒng)計隊列發(fā)送的聚合度低的PG個數(shù),PG-send統(tǒng)計隊列發(fā)送的正常PG個數(shù),doorbell-ring統(tǒng)計定時器超時的次數(shù),當(dāng)一個變量到達(dá)a setthreshold 時,調(diào)整聚合度,重置2個變量的值。如果2個變量相差很小,說明當(dāng)前隊列應(yīng)用特征不明顯,直接重置2個變量,不調(diào)整策略。
為了評估LANoT的實際性能,在Linux內(nèi)核中實現(xiàn)了基于NVMe的TCP設(shè)計的LANoT原型系統(tǒng),在每個隊列中引入struct kvec類型的數(shù)組PDU組,記錄聚合PDU的內(nèi)存開始地址和數(shù)據(jù)長度,并為PG維護(hù)PG聚合度和PG定時器。每次發(fā)送PG時,更新SmallPG-send、PG-send和門鈴這3個統(tǒng)計變量的值,達(dá)到設(shè)定的閾值后調(diào)用Qos算法進(jìn)行判斷處理。
通過在真實系統(tǒng)上安裝并部署了LANoT,并測試了其性能。LANoT測試的硬件平臺包括2臺寶德(PowerLeader)PR2124G雙向服務(wù)器,CPU型號為Intel Xeon E5-2660 v3,主頻2.60 GHz,內(nèi)存256 GB。每臺服務(wù)器包含1塊邁絡(luò)思網(wǎng)卡(Mellanox CX555A),2塊服務(wù)器網(wǎng)卡的鏈路類型設(shè)置為以太網(wǎng)模式,通過EDR光纖直接連接。另外,在Target服務(wù)器上安裝了一塊2TB 的U.2規(guī)格DERA NVMe SSD,并通過PCIx8 NVMe擴(kuò)展卡連接CPU,保證了NVMe SSD的鏈路帶寬。LANoT軟件測試環(huán)境是基于CentOS 7.7.1908 (Core)操作系統(tǒng),內(nèi)核版本為Linux 4.20.0-rc3,網(wǎng)卡驅(qū)動版本為ofd -5.0-2.1.8。用于與NVMe內(nèi)核驅(qū)動交互的NVMe -cli軟件版本為1.8.1,用于測試存儲設(shè)備性能的FIO版本為FIO -3.7。
為了綜合評價LANoT的性能優(yōu)勢,引入了NVMe-Local、NVMe-TCP和PGIC(基于PG的中斷合并)3個比較對象。其中,NVMe-Local用于測試相同負(fù)載下Target端NVMe SSD的本地讀寫。NVMe-TCP用于測試Linux內(nèi)核中原生NVMe over TCP存儲網(wǎng)絡(luò)的性能,PGIC用于測試LANoT僅采用基于固定聚合PDU的中斷合并策略時的性能。此外,還對通過NVMe-TCP、PGIC和LANoT遠(yuǎn)程訪問的RAMDisk和NVMe SSD的性能進(jìn)行了測試對比,避免了NVMe SSD性能瓶頸對存儲網(wǎng)絡(luò)遠(yuǎn)程訪問性能的限制。在PGIC固定參數(shù)設(shè)置方面,根據(jù)實驗數(shù)據(jù)兼顧延遲和性能的平衡,將PG定時長度設(shè)置為50 μs,PG聚合度閾值設(shè)置為16。
圖2(a)和圖2(b)分別是4 K隨機(jī)寫入和4 K隨機(jī)讀取的IOPS性能測試結(jié)果。對比本地NVMe SSD的4 K讀寫IOPS,3個線程發(fā)出請求時可以達(dá)到最高性能。
圖2 基于SSD的讀寫IOPS對比
與本地NVMe SSD的性能不同,NVMe-TCP,PGIC和LANoT 3個NVMe通過TCP存儲網(wǎng)絡(luò)實現(xiàn)方法需要更多的CPU內(nèi)核參與到NVMe SSD的IOPS完全傳遞到計算節(jié)點(diǎn)的應(yīng)用程序。對于NVMe-TCP在Linux內(nèi)核中,10個CPU內(nèi)核都需要充分利用NVMe SSD的4 K下的隨機(jī)寫入負(fù)載的性能,而在4 K隨機(jī)讀取負(fù)載,20threads仍不能充分利用NVMe SSD的最高性能。這也間接驗證了 NVMe over TCP 存儲網(wǎng)絡(luò)比本地 NVMe SSD 消耗更多的 CPU 資源。在相同的I/O負(fù)載下,使用基于聚合PDU的中斷合并的PGIC和LANoT,可以通過5線程的存儲網(wǎng)絡(luò)充分發(fā)揮NVMe SSD的4K寫入性能。8個線程,充分發(fā)揮4K讀取性能,CPU資源消耗降低50%以上。
在NVMe over TCP存儲網(wǎng)絡(luò)中,4 K隨機(jī)寫入請求采用In-Capsule數(shù)據(jù)傳輸方式,寫入NVMe SSD的數(shù)據(jù)與CapsuleCmd PDU一起從Host發(fā)送到Target。4 K讀寫IOPS測試因為每個PDU比較小,在飽和測試的情況下CPU占用率較高。它是模擬數(shù)據(jù)密集型應(yīng)用程序的典型測試。
在基于NVMe SSD的性能評測中,LANoT在4 K隨機(jī)寫入負(fù)載下可比PGIC提升約25.30%的IOPS,在4 K隨機(jī)讀取負(fù)載下可比PGIC提升約36.06%的IOPS。但是由于PGIC和LANoT的性能在2個線程中接近NVMe SSD的最高性能,為了避免NVMe SSD的性能瓶頸掩蓋了LANoT的性能優(yōu)勢,進(jìn)行了性能評測。下圖3為計算節(jié)點(diǎn)通過NVMeTCP、PGIC和 LANoT遠(yuǎn)程訪問存儲節(jié)點(diǎn)中的RAMDisk時的性能評估結(jié)果。 RAMDisk的讀寫性能比NVMe SSD更高,可以更好地評估存儲網(wǎng)絡(luò)的邊界性能。如下圖3(a)和(b)所示,在4 K隨機(jī)讀寫負(fù)載下,當(dāng)存儲網(wǎng)絡(luò)性能不受NVMe SSD最大性能限制時,PGIC和LANoT基于聚合PDU中斷合并的優(yōu)勢大大提升。隨著fiothread數(shù)量的增加,PGIC和LANoT逐漸達(dá)到了網(wǎng)卡的極致性能,而NVMe-TCP由于海量PDU收發(fā)操作引入的中斷風(fēng)暴,嚴(yán)重限制了存儲網(wǎng)絡(luò)性能,無法與NVMe SSD相比,更高性能的ULLSSD的性能優(yōu)勢被傳遞到計算節(jié)點(diǎn)應(yīng)用程序。
圖3 基于RAMDisk的讀寫IOPS對比
比較2種基于中斷合并的NVMeoF消息處理機(jī)制,因為在使用fio進(jìn)行飽和測試的情況下,LANoT會根據(jù)負(fù)載逐步將NVMeoF存儲網(wǎng)絡(luò)的消息處理策略切換到對應(yīng)的一種情況。數(shù)據(jù)密集型應(yīng)用處理策略,增加PG定時器的超時時間,保證每次發(fā)送的PG有更高的聚合度,降低NVMeoF存儲網(wǎng)絡(luò)的計算開銷。與PGIC相比,LANoT在基于RAMDisk的4 K隨機(jī)寫飽和測試中IOPS性能指標(biāo)平均提升14.16%。當(dāng)fio線程數(shù)為20時,最高增幅為 20.9%。在基于RAMDisk的4 K隨機(jī)讀飽和測試中,LANoT的IOPS性能指標(biāo)平均可提升18.39%,最高提升28.24%。在基于RAMDisk的16 K隨機(jī)寫飽和測試中,LANoT將IOPS性能指標(biāo)平均提升了14.3%,最高提升了37.14%。在基于RAMDisk的16 K隨機(jī)讀飽和測試中,LANoT平均提升了22.64%的IOPS性能指標(biāo),最高提升了29.24%。
但相應(yīng)地,這是通過犧牲PDU延遲時間性能指標(biāo)來實現(xiàn)的。如圖4所示,在基于RAMDisk的4 K隨機(jī)讀寫飽和測試中,與PGIC和NVMe-TCP不同的最低延遲基本維持在200 μs。下面,LANoT的最低延遲達(dá)到了300 μs的范圍,而且由于LANoT采用動態(tài)NVeoF消息發(fā)送機(jī)制,其延遲穩(wěn)定性更差。在16 K隨機(jī)讀寫飽和測試中,LANoT的延遲不穩(wěn)定性進(jìn)一步加劇。但對于數(shù)據(jù)密集型應(yīng)用來說,其更關(guān)注的性能指標(biāo)是吞吐量,LANoT可以在滿足數(shù)據(jù)密集型應(yīng)用對延遲的性能需求的同時,大幅提升吞吐量。
圖4 基于RAMDisk的最低讀寫延遲對比
為了測試CPU內(nèi)核上運(yùn)行時間敏感應(yīng)用程序時LANoT的性能,使用fio在固定IOPS指標(biāo)上進(jìn)行了基于RAMDisk的4 K隨機(jī)讀寫和16 K隨機(jī)讀寫延遲測試,結(jié)果比較直觀,介紹了之前飽和讀寫測試中延遲性能最好的NVMe-TCP機(jī)制進(jìn)行對比。
如圖5所示,在不手動修改任何參數(shù)的情況下,使用fio來測試當(dāng)IOPS指標(biāo)從50變?yōu)?00時LANoT和NVMe-TCP的延遲。在基于RAMDisk的測試中,LANoT方法是最低的。延遲和平均延遲與NVMe-TCP方法基本相同。在基于SSD的測試中,LANoT的整體延遲性能略高于NVMe-TCP,但差距控制在100 μs以下。
圖5 小數(shù)據(jù)隨機(jī)讀寫延遲測試
本文設(shè)計并實現(xiàn)了Load-aware NVMeoF消息處理機(jī)制LANoT[7-8]。首先,針對NVMe over TCP存儲網(wǎng)絡(luò)在高并發(fā)I/O環(huán)境下引入的中斷風(fēng)暴問題,在每個NVeoF隊列中實現(xiàn)了一種基于聚合PDU的中斷合并方法的設(shè)計與實現(xiàn)。引入PDU Group數(shù)據(jù)結(jié)構(gòu),高效聚合Host端的CapsuleCmd PDU和H2CData PDU,減少Target端的
CPU中斷請求次數(shù),高效聚合Target端的C2HData PDU和CapsuleResp PDU,減少CPU中斷次數(shù)主機(jī)端的請求。其次,在PDU Group數(shù)據(jù)結(jié)構(gòu)中引入并維護(hù)3個統(tǒng)計變量SmallPG-send、PG-send和doorbell-ring,表征不同CPU內(nèi)核-目標(biāo)內(nèi)存專用隊列的負(fù)載情況,進(jìn)而感知各節(jié)點(diǎn)的運(yùn)行狀態(tài)。它們的應(yīng)用和基于不同類型的負(fù)載情況匹配不同的NVMeoF存儲網(wǎng)絡(luò)消息處理機(jī)制,實現(xiàn)不同I/O特性的應(yīng)用對應(yīng)的關(guān)鍵性能指標(biāo)的優(yōu)化。解決了多應(yīng)用I/O干擾問題,無法同時滿足數(shù)據(jù)密集型應(yīng)用和延遲敏感型應(yīng)用的需求,所有團(tuán)隊采用單一機(jī)制。LANoT原型系統(tǒng)的性能測試結(jié)果表明:與標(biāo)準(zhǔn)Linux內(nèi)核中的標(biāo)準(zhǔn)NVMe over TCP實現(xiàn)相比,LANoT 可以將數(shù)據(jù)密集型應(yīng)用程序的 IOPS 指數(shù)提高約2倍,并且可以保證延遲敏感應(yīng)用的延遲性能;與PGIC方法相比,LANoT可以將IOPS指標(biāo)提升高達(dá)37.14%。