ReFlex - Remote Flash ≈ Local Flash
一種提供高帶寬低延時和多租戶場景下可保證的服務質量的遠程flash訪問架構
一、背景
對NVMe Flash的遠程訪問實現了數據中心內Flash容量以及IOPS的靈活擴展和高利用率。但是,現有的用于遠程Flash訪問的系統會帶來巨大的性能開銷,或者無法隔離共享每個Flash設備的多個遠程clients。
二、問題與挑戰
在實現對Flash的遠程訪問方面存在重大挑戰。
要實現低延遲,需要在server和client的網絡和存儲層上將處理開銷降至最低。除了低延遲之外,每臺服務器還必須以最低成本實現高吞吐量,從而使一個或多個NVMe Flash設備且具有少量CPU cores的機器達到飽和。此外,要管理共享一個Flash設備的多個租戶之間的干擾以及Flash設備的不均勻讀寫行為,需要一種隔離機制,以保證所有租戶的可預測性能。最后,在共享程度,部署規模和用于遠程連接的網絡協議方面需要具有靈活性?,F有的僅軟件用于遠程Flash訪問的選項(例如iSCSI或基于事件的服務器)無法達到性能預期。最近提出的硬件加速選件,例如基于RDMA架構的NVMe,缺乏性能隔離,并且部署靈活性有限。
由于讀、寫干擾的影響,可預測的性能對于NVMe Flash設備是一個挑戰。圖1繪制了Flash上的尾部讀取延遲(第95個百分位數)與各種讀寫比率的工作負載的吞吐量(IOPS)的關系。尾部讀取延遲取決于吞吐量(負載)和讀寫比率。對于我們測試過的所有NVMe Flash設備,此行為都是典型的,因為寫入操作速度較慢,并且觸發磨損平衡和垃圾回收活動,這些活動無法始終被隱藏。當單個應用程序使用本地Flash設備時,可以管理讀/寫干擾,但是對于遠程Flash和共享同一設備但彼此不知道的多個租戶而言,這成為一個巨大的挑戰。
三、ReFlex設計
1.數據平面架構
ReFlex緊密集成了網絡和存儲層,提供了對遠程Flash的低延遲和高吞吐量訪問。它通過TCP和UDP等通用網絡協議為任意大小的邏輯塊提供遠程讀/寫請求。ReFlex主要是軟件系統,它利用NIC和NVMe Flash設備中的硬件虛擬化功能直接在硬件隊列上運行,并有效地在NIC和Flash設備之間轉發請求和數據,而無需拷貝。
每個ReFlex服務器線程使用專用core,可以直接和排它地訪問網絡隊列對以進行數據包的接收/發送,并使用NVMe隊列進行Flash命令的提交/完成。
圖2展示了ReFlex服務器線程的執行模型,該線程處理傳入的Flash讀/寫請求。首先,NIC接收網絡數據包,然后通過DMA將其傳送到網絡棧提供的預分配的內存緩沖區(1)。ReFlex線程輪詢接收描述符環,并通過以太網驅動程序和網絡棧(例如TCP/IP)處理數據包,從而生成事件條件,指示新消息的可用性(2)。同一線程使用libix(類似于Linux libevent的庫)來處理事件。這涉及切換到服務器代碼,以解析消息,提取IO請求,執行訪問控制檢查以及提交Flash read/write系統調用之前所需的任何其他存儲協議的處理(3)。然后,線程切換到系統調用處理并執行IO調度,以在共享ReFlex服務器的所有租戶之間實施SLO。調度之后,請求將通過NVMe提交隊列提交給Flash設備(4)。Flash設備執行讀/寫IO,并通過DMA將數據傳送到預分配的用戶空間緩沖區(或從預分配的用戶空間緩沖區獲取數據)(7)。線程輪詢完成隊列(5),并提供完成事件(6)。事件回調通過libix執行并發出send系統調用(7)。最后,線程處理send系統調用,以通過網絡棧將請求的數據傳遞回發起方(8)。執行模型支持每條網絡消息多個IO請求以及跨多個網絡消息的大型IO。
2.調度機制
QoS調度程序允許ReFlex為共享服務器中Flash設備的租戶提供性能保證。租戶是一種邏輯抽象,用于說明和執行服務級別目標(SLO)。SLO在特定吞吐量和讀/寫比率下指定尾部讀取延遲的限制。例如,租戶可以以80%的讀取比率注冊具有200us讀取尾部延遲(95%百分數)的50K IOPS的SLO。除了此類延遲關鍵(LC)租戶,這些租戶在尾部延遲和吞吐量方面保證了分配,ReFlex還為盡力而為(BE)租戶提供服務,這些租戶可以機會使用任何未分配或未使用的Flash帶寬并容忍較高的延遲。租戶定義可以由成千上萬的網絡連接共享,這些連接來自運行任何應用程序的不同客戶端計算機。應用程序可以使用多個租戶為不同的數據流請求單獨的SLO。
在Flash設備訪問上強制執行SLO有兩個因素。首先,設備可以支持的最大帶寬(IOPS)取決于它在所有租戶中看到的請求的總體讀寫比率。其次,讀取請求的尾部等待時間取決于總體讀取/寫入比率和當前帶寬負載。因此,QoS調度程序需要全局可見性和對Flash上的總負載以及未完成的IO操作類型的控制。我們使用請求代價模型來說明每個Flash IO對讀取尾部延遲的影響,并使用一種新穎的調度算法來保證所有租戶和所有數據平面線程之間的SLO。
1) 請求代價模型
針對ReFlex服務器中部署的每種類型的Flash設備校準成本模型。首先,對于具有各種讀寫比率和請求大小的工作負載,我們使用本地Flash測量了尾部等待時間與吞吐量的關系(請參見圖1中的4KB示例)。由于寫入請求的成本取決于垃圾回收和頁面擦除事件的頻率,因此我們保守地使用隨機寫入模式來觸發最壞的情況。接下來,我們使用曲線擬合來得出C(I / O type,r)
2) 調度算法
QoS調度器構建在成本模型之上,保持延遲關鍵租戶的尾端延遲和吞吐量的SLO,同時允許盡力交付型租戶以公平的方式利用剩余的吞吐量。
token管理
QoS調度器以等于Flash設備在給定尾端延遲SLO上可以支持的最大加權IOPS(上述的成本模型)的速率生成token。ReFlex在所有共享一個Flash設備的延遲關鍵租戶中執行最嚴格的延遲SLO。在它們的SLO指示的讀寫比加權情況下,延遲關鍵(LC)租戶被提供能夠滿足它們IOPS SLO的token供應。由調度程序生成但未分配給延遲關鍵的token將在盡力交付型租戶之間公平分配。當調度程序將租戶的請求提交到Flash設備時,它會根據每個請求的成本來花費租戶的token。
每個ReFlex線程將Flash請求排入每個租戶的軟件隊列中。當線程到達數據平面執行模型中的QoS調度步驟時,線程使用計算排隊請求的加權成本,并將所有允許的請求提交給Flash設備,從而逐漸花費每個租戶的token。根據線程負載和批處理因子,執行模型每0.5us至100us進入一次調度回合。通過對控制平面和批處理大小限制確保調度程序調用之間的時間不超過最嚴格SLO的5%。必須進行頻繁的調度,以避免過多的排隊延遲并保持NVMe設備的高利用率。
其次,ReFlex采用自適應批處理請求,以分攤開銷并提高預取和指令緩存效率。在低負載下,將立即處理傳入數據包或已完成的NVMe命令。隨著負載的增加,NIC接收和NVMe完成隊列將填滿,并為批量處理多個傳入數據包或多個完成的訪問提供了機會。批大小隨負載增加而增加,但上限為64,以避免過多的延遲。不同于傳統的批處理,后者需要在帶寬和延遲之間進行權衡,自適應批處理在高吞吐量和低延遲之間實現了良好的平衡。
四、結果與評估
從上圖可以看出,ReFlex可以達到與本地閃存訪問相近的遠程訪問吞吐量和帶寬;
同時,ReFlex的IO調度能夠實現對不同類型的用戶提供相對應的服務。上圖是四個不同類型的租戶同時訪問一個ReFlex服務器的場景,其中A和B是兩個延遲敏感型的租戶,從實驗結果可以看出,對于延遲敏感型用戶,能夠保證其所要求的的訪問延時和訪問帶寬。
五、總結
ReFlex作為一種新的純軟件層面的遠程flash訪問架構,能夠在提供低延時和高帶寬的訪問性能的同時,在多用戶訪問的場景下為延遲敏感性的租戶提供可保證的服務質量。
審核編輯:湯梓紅
-
FlaSh
+關注
關注
10文章
1588瀏覽量
147260 -
服務器
+關注
關注
12文章
8601瀏覽量
84246 -
數據中心
+關注
關注
16文章
4464瀏覽量
71393 -
高帶寬
+關注
關注
0文章
12瀏覽量
7692 -
nvme
+關注
關注
0文章
202瀏覽量
22480
原文標題:高帶寬低延時遠程flash訪問架構
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論