<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          利用SPDK改善NVMe存儲I/O性能

          共 5284字,需瀏覽 11分鐘

           ·

          2021-06-03 10:37



          長期以來,SATA、SAS盤統(tǒng)治著企業(yè)級存儲,雖然前些年 SSD固態(tài)存儲介質(zhì)的出現(xiàn)對 AHCI協(xié)議類型的存儲訪問帶來了一定性能提升,但與 CPU 的計算速度相比,只能是杯水車薪,并且 SSD 的性能也不能充分地得到發(fā)揮。傳統(tǒng)存儲技術(shù)也由于訪問路徑長、時延大和吞吐量低而越發(fā)不能滿足 “大數(shù)據(jù)” 存儲的需求,并且飽受詬病。


          近幾年推出的 NVMe 技術(shù)以 PCIe作為 SSD 的訪問接口,極大地縮短了 I/O 的訪問路徑,同時 NVMe 的軟件棧也以精簡的調(diào)用關(guān)系進(jìn)一步降低了數(shù)據(jù)訪問的時延。可以說,NVMe 技術(shù)的出現(xiàn)和快速發(fā)展,是對存儲技術(shù)領(lǐng)域的重大革新。由此 NVMe 存儲的應(yīng)用自然成了業(yè)內(nèi)的發(fā)展趨勢,各廠商也都積極投入NVMe存儲的研發(fā)中來。


          越來越多的分布式文件系統(tǒng)積極參與全閃陣營,通過橫向擴(kuò)展能力,對外提供塊、對象、文件服務(wù)接口及一些增值特性服務(wù),可以通過存儲節(jié)點堆疊,獲得容量和性能的同步提升。硬件上使用 RDMA、NVMe、NVDIMM等先進(jìn)技術(shù),提供高性能的硬件節(jié)點;同時采用軟硬件一體化的設(shè)計達(dá)成高可靠性的目標(biāo)。為了減少存儲產(chǎn)品面臨的傳統(tǒng)共性問題,如頻繁的系統(tǒng)調(diào)用和上下文切換、多次的數(shù)據(jù)拷貝、過高的協(xié)議棧開銷、復(fù)雜的并發(fā)互斥等痛點問題,在用戶態(tài)化實現(xiàn)的過程中,引入了 Intel 的 DPDK/SPDK作為關(guān)鍵基礎(chǔ)技術(shù)來進(jìn)行集成和開發(fā)。基于 DPDK 和 SPDK 的用戶態(tài)實現(xiàn)前端NVMe-oF、FCP、iSCSI 塊服務(wù)相關(guān)接口。


          DPDK/SPDK 技術(shù)的引入,通過大頁(Huge page)、輪詢、分核、無鎖化等機(jī)制減少了 CPU 上下文切換、并發(fā)互斥等帶來的系統(tǒng)開銷,提高了 I/O 的響應(yīng)速度,帶來了系統(tǒng)性能的提升,有效地解決了前端網(wǎng)絡(luò)、后端網(wǎng)絡(luò)和落盤等環(huán)節(jié)存在的性能瓶頸。同時 SPDK 提供的 BDEV 框架,定義了上層的訪問接口,和下層存儲設(shè)備的注冊接口,向上可以支撐多種不同協(xié)議的Target,向下可以掛載多種不同的存儲設(shè)備。BDEV 框架實現(xiàn)了對后端存儲設(shè)備的統(tǒng)一抽象,可以和后端存儲解耦,產(chǎn)品前后端可針對框架開發(fā),減小模塊耦合,進(jìn)行獨立的測試驗證,提高了產(chǎn)品開發(fā)維護(hù)的效率。


          Intel DPDK/SPDK 技術(shù)作為該產(chǎn)品設(shè)計的關(guān)鍵一環(huán),與分布式架構(gòu)融合應(yīng)用,充分發(fā)揮全閃(NVMe)存儲設(shè)備和 RDMA 傳輸通道的能力,提供了高性能的系統(tǒng)特性。當(dāng)前產(chǎn)品開發(fā)的先期任務(wù)主要完成針對新技術(shù)的可行性分析、驗證及高性能硬件節(jié)點的原型機(jī)開發(fā):兼容業(yè)界主流廠商的 RDMA、FC卡,并基于 DPDK/SPDK 實現(xiàn)前端 NVMe-oF、FCP、iSCSI 塊服務(wù)類型接口。當(dāng)前的開發(fā)實現(xiàn),驗證了新一代全閃(NVMe)技術(shù)的高性能能力,為最終的分布式全閃(NVMe)存儲產(chǎn)品的實現(xiàn)打下了堅實的基礎(chǔ)。


          SPDK NVMe-oF 介紹

          SPDK是 Intel 提供的高性能存儲開發(fā)套件,在 DPDK 基礎(chǔ)上實現(xiàn)(封裝了 DPDK 的一些資源管理的組件,例如 CPU,內(nèi)存和PCI 設(shè)備管理等)。其核心是基于用戶態(tài)、異步、輪詢方式實現(xiàn)的一套編程框架(SPDK Application Framework),以及在該框架下開發(fā)的 NVMe 驅(qū)動和 Target。同時,SPDK 也提供了一個用戶態(tài)的塊設(shè)備抽象層(Block Device Abstract Layer)用以支持開發(fā)人員按需構(gòu)造私有的、高效的存儲應(yīng)用。SPDK 主要架構(gòu)可如下圖。


          SPDK 的應(yīng)用框架可概述為:


          其一,對 CPU core 和線程的管理;

          其二,線程間的高效通信;

          其三,I/O 的處理模型以及數(shù)據(jù)路徑(data path)的無鎖化機(jī)制。


          這幾個機(jī)制的共同配合,使得SPDK形成了一套低 I/O 時延和單 CPU 核 IOPS最大化的高性能解決方案。塊設(shè)備抽象層通過 BDEV 框架向前與存儲協(xié)議層對接,支持各類 Target 的實現(xiàn);向后通過對塊設(shè)備的抽象可以適配各類型的存儲設(shè)備。并且用戶可以基于 BDEV 框架開發(fā)自己特有的應(yīng)用策略,實現(xiàn)差異化的應(yīng)用場景。SPDK 同時實現(xiàn)了后端 NVMe 盤的用戶態(tài)驅(qū)動和在前端支持主機(jī)遠(yuǎn)程訪問 NVMe 塊設(shè)備的 Target,在 NVMe 的使用場景具有天然的優(yōu)勢。可以毫不夸張地說,SPDK 支持的核心業(yè)務(wù)主要就是 NVMe Over Fabrics,即 NVMe-oF。基于 SPDK 的 NVMe-oF 應(yīng)用層次關(guān)系如下圖。



          NVMe-oF 的核心思想在于讓 I/O 的各個階段均在同一個 CPU 核上處理,以此來實現(xiàn)免鎖和性能最大化。其關(guān)鍵實現(xiàn)主要是 nvmf功能模塊。nvmf 功能模塊一方面通過 Transport層的實現(xiàn)機(jī)制屏蔽了底層 “通道”(當(dāng)前主要是 RDMA、FC、 TCP)實現(xiàn)的差異;同時也藉由 BDEV 層的抽象,可以對接各類型的塊設(shè)備。基于 SPDK 的應(yīng)用編程框架機(jī)制,NVMe-oF 可以實現(xiàn)將各個 I/O 的所有操作在同一個 CPU 核上完成處理,有效減少了上下文切換和并發(fā)訪問帶來的開銷,并且能讓 I/O 均勻地分布在各個 CPU 核上,進(jìn)一步提升了系統(tǒng)的性能。


          SPDK 實現(xiàn)上采用了模塊化的設(shè)計思路。簡單而言,可以將SPDK 套件的內(nèi)容分為三個層次:


          其一,基礎(chǔ)環(huán)境層,主要是調(diào)用 DPDK 接口進(jìn)行底層運行環(huán)境的初始化,同時構(gòu)建 SPDK 基于 CPU 核進(jìn)行串行、輪詢的調(diào)度機(jī)制;

          其二,諸如 bdev、nvmf、nvme等分別歸集的核心功能模塊,實現(xiàn)具體的業(yè)務(wù)邏輯功能;

          其三,特定應(yīng)用示例的實例程序和測試框架代碼,集成和運行各個功能組件。這樣的設(shè)計和實現(xiàn)策略使得 SPDK 具有很強(qiáng)的適應(yīng)性和可擴(kuò)展性,用戶可以根據(jù)需要靈活地進(jìn)行修改或二次開發(fā),來實現(xiàn)特定場景的應(yīng)用。


          SPDK NVMe-oF 應(yīng)用方案介紹

          H3C當(dāng)前產(chǎn)品的先期開發(fā),主要是完成了通過 SPDK 對接主流廠商的 RDMA 卡以及FC卡來實現(xiàn)塊存儲服務(wù)類型的 NVMe-oF、FCP、iSCSI 的接口,以支持相應(yīng) Target 運行業(yè)務(wù)。目前使用 Intel DPDK/SPDK 的具體方案框架如下圖所示。方案支持業(yè)界主流廠商的 RDMA 卡驅(qū)動運行在內(nèi)核態(tài),通過 Verbs框架的接口向上支撐 SPDK 的調(diào)用,向下屏蔽不同卡的底層實現(xiàn)差異,同時 FC 卡的驅(qū)動直接使用 DPDK 的機(jī)制在用戶態(tài)實現(xiàn),提供接口支撐上層使用。



          對于 NVMe-oF 而言,在 SPDK 的 nvmf 功能模塊中,通過 Transport 層屏蔽了作為 “傳輸通道” 的 FC 和 RDMA 的實現(xiàn)差異,具體如圖所示。


          在基于 SPDK 進(jìn)行二次開發(fā)的過程中,主要完成了如下方面的修改或?qū)崿F(xiàn),具體可參見表所述。


          1. 增加了 FC Transport 的具體實現(xiàn);產(chǎn)品需要在前端同時通過 RDMA 及 FC 通道支持 NVMe-oF 業(yè)務(wù),因而針對需要的使用場景,增加了nvmf Transport 層的 FC 實現(xiàn)。


          2. 增加了 FC 卡的用戶態(tài)驅(qū)動;該驅(qū)動基于 DPDK 及 UIO驅(qū)動框架實現(xiàn),主要包含硬件適配、通用管理、連接處理,I/O 處理等功能。


          3. 調(diào)整了接口分層;為了更符合實際業(yè)務(wù)場景的使用需求,增加操作、管理的靈活性,也為了減少模塊對外的耦合,在考慮后續(xù)版本升級和兼容的情況下,對 SPDK nvmf 功能模塊的代碼作了如下分層封裝。


          4. 增加了NQN 的唯一性機(jī)制;在 NVMe-oF 應(yīng)用中,需要確保 subsystem的 NQN 的唯一性,至少在當(dāng)前網(wǎng)絡(luò)域內(nèi)是唯一的,因此引入了 NQN 與節(jié)點唯一標(biāo)識相結(jié)合的方案。這樣,只要能保證節(jié)點內(nèi)的 subsystem 的 NQN 不重復(fù),即可保證網(wǎng)絡(luò)內(nèi) NQN 不重復(fù)。



          5. 增加abort 的處理;集成的 SPDK 版本尚未支持對 abort 命令的響應(yīng),在 nvmf 功能模塊來模擬實現(xiàn)對 abort 命令的支持。


          6. 斷鏈時等待 I/O 歸零;斷鏈過程(可能是主動斷鏈或者異常出現(xiàn)時的斷鏈)中,可能有 I/O 請求還在處理,此時若直接釋放鏈接資源,則有可能會存在未處理完成的請求訪問非法資源的情況。因而斷鏈過程中需要等待 I/O 請求的完成。


          7. 主動斷鏈;增加 Target 側(cè)主動斷開鏈接功能的支持,特別是針對跑業(yè)務(wù)過程中出現(xiàn)重大錯誤時的處理。


          8. Target 側(cè) keep-alive 機(jī)制;NVMe Over Fabrics Spec 中定義了由主機(jī)定期發(fā)送 keepalive 報文來判斷通道是否正常的機(jī)制,當(dāng)網(wǎng)絡(luò)不通暢時,主機(jī)可以感知,并主動斷開鏈接。但如果網(wǎng)絡(luò)突然完全中斷后,主機(jī)斷開鏈接的請求無法到達(dá) Target 側(cè),并且 Target 也無法感知網(wǎng)絡(luò)的中斷,之前與相關(guān)主機(jī)的鏈接會持續(xù)存在,一方面造成資源泄漏,另外也可能對網(wǎng)絡(luò)恢復(fù)后的業(yè)務(wù)恢復(fù)產(chǎn)生影響(如 Target 側(cè)會認(rèn)為已與當(dāng)前新來的主機(jī)建立了鏈接拒絕重復(fù)建鏈等)。


          9. 性能統(tǒng)計;為了更好地統(tǒng)計每個 I/O 請求從到達(dá) Target 側(cè)后一直到響應(yīng)從 Target 側(cè)返回的這個過程中各個階段的時延情況,當(dāng)前開發(fā)過程中對 I/O 請求進(jìn)行了階段標(biāo)識并進(jìn)行打點計時統(tǒng)計,可以清晰看到實時的時延變化及 IOPS 情況的統(tǒng)計,增加了可定位性手段。


          10. 監(jiān)聽的合法性判斷及同主機(jī)同 port 拒絕重復(fù)建鏈;集成的 SPDK NVMe-oF 應(yīng)用中,暫未實現(xiàn) “認(rèn)證”、“加密” 等相應(yīng)內(nèi)容,目前能做合法性判斷策略的主要就是監(jiān)聽和檢查主機(jī)的合法性。當(dāng)前的實現(xiàn)中,一方面,增加了對請求所屬的監(jiān)聽是否當(dāng)前 subsystem 所允許的合法性判斷,同時也對同一個主機(jī),通過同一個 port(主機(jī)側(cè)的 port 和 Target 側(cè)的監(jiān)聽均一樣)來進(jìn)行重復(fù)建鏈(建立控制鏈接)的情況的限制。


          11. cli 功能添加;為了便于調(diào)試及問題定位,在開發(fā)過程中增加了獨立的 cli 功能,可以支持命令的動態(tài)查詢、創(chuàng)建、設(shè)置等操作,提高了系統(tǒng)的可定位性和可維護(hù)性。


          12. 可靠性問題修改;在本項目的開發(fā)過程中,修改了許多可靠性問題,如異常處理不完善、Target 進(jìn)程主動終止時異常退出等,總體的解決思路均是:遵從 SPDK 分核思路,將操作通過 SPDK 的分核輪詢機(jī)制串化、延后處理,實現(xiàn)免鎖和消除并發(fā)。如下可列舉部分已解決的典型問題。


          1) 共享斷鏈時 RDMA 的共享完成隊列報錯及造成非法地址訪問的問題;

          2) 斷鏈時判斷當(dāng)前鏈接數(shù)并發(fā)造成的判斷不準(zhǔn);

          3) 創(chuàng)建監(jiān)聽時的異常處理;

          4) 主動終止進(jìn)程時出現(xiàn)的異常退出。


          總體而言,本項目對 SPDK 的nvmf、iSCSI等模塊做了相應(yīng)的擴(kuò)展和修改,以更符合實際的業(yè)務(wù)場景的需求。


          今天的內(nèi)容分享完畢,深入技術(shù)細(xì)節(jié)及解決方案,請參考:
          詳解DPDK和SPDK技術(shù)知識點
          高性能計算技術(shù)、方案和行業(yè)全解(第二版)
          InfiniBand架構(gòu)和技術(shù)實戰(zhàn)總結(jié)(第二版)
          RDMA原理分析、對比和技術(shù)實現(xiàn)解析

          推薦:全店資料打包(含現(xiàn)有、新增和內(nèi)容更新)持續(xù)更新,微店留言免費獲取更新

          全店鋪技術(shù)資料打包(全)




          轉(zhuǎn)載申明:轉(zhuǎn)載本號文章請注明作者來源,本號發(fā)布文章若存在版權(quán)等問題,請留言聯(lián)系處理,謝謝。


          推薦閱讀

          更多架構(gòu)相關(guān)技術(shù)知識總結(jié)請參考“架構(gòu)師全店鋪技術(shù)資料打包”相關(guān)電子書(35本技術(shù)資料打包匯總詳情可通過“閱讀原文”獲取)。

          全店內(nèi)容持續(xù)更新,現(xiàn)下單“全店鋪技術(shù)資料打包(全)”,后續(xù)可享全店內(nèi)容更新“免費”贈閱,價格僅收198元(原總價350元)。



          溫馨提示:

          掃描二維碼關(guān)注公眾號,點擊閱讀原文鏈接獲取架構(gòu)師技術(shù)全店資料打包匯總(全)電子書資料詳情


          瀏覽 189
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中国一级毛片 | 老妇裸体乱婬A片 | a视频在线观看免费 | 国产91又粗又大又爽的视频网站 | 天天干天天很天天狠狠 |