浪潮存儲資深架構(gòu)師 葉毓睿、鮑磊
浪潮存儲AS5600G2在SPC-1全球存儲性能基準測試中,以752萬IOPS、0.472ms時延的測試值刷新全球16控存儲性能記錄。這一測試成績遠超業(yè)界中端存儲的性能,甚至已經(jīng)超越絕大部分高端存儲性能,受到業(yè)界廣泛關(guān)注。
如何更加高效的提升存儲系統(tǒng)的應(yīng)用性能,構(gòu)建起一套類似汽車自動變速箱的技術(shù)系統(tǒng),讓存儲系統(tǒng)可根據(jù)前端應(yīng)用自適應(yīng)和調(diào)配不同數(shù)據(jù)處理策略,實現(xiàn)智能的IO感知、路徑選擇、組織和調(diào)度;讓我們一起走近浪潮存儲的這項核心技術(shù)“智能加速引擎iTurbo”。
智能加速引擎iTurbo是浪潮存儲I/O軟件棧的一套完整的智能加速算法,涵蓋對介質(zhì)、芯片、組件、OS等的優(yōu)化,具備對I/O、路徑、數(shù)據(jù)塊、空間條帶、計算存儲網(wǎng)絡(luò)資源等關(guān)鍵要素的智能調(diào)度能力,即保障百萬級的命令和數(shù)據(jù)在一系列先進的硬件,如高性能處理器、FPGA、PCIe、Optance介質(zhì)以及NVMe、RDMA協(xié)議組成的高速數(shù)據(jù)處理系統(tǒng)上暢通無阻和高效運行。
本篇文章我們揭秘iTurbo的核心技術(shù)之一:智能I/O感知。它包括智能緩存預讀和特征數(shù)據(jù)識別。
智能緩存預讀:實現(xiàn)“熱”升“冷”降的數(shù)據(jù)電梯
在介紹緩存預讀之前,我們首先要搞清楚關(guān)于緩存的兩個基本問題,一是為什么要用緩存,二是緩存是如何工作的。
首先,我們來看看為什么要用緩存。大家知道,CPU 的運行速度比磁盤的速度快很多倍,這樣會導致 CPU 需等待磁盤完成處理后才能繼續(xù)下一道指令, 緩存的處理速度能夠跟得上 CPU,它作為CPU與磁盤之間的過渡,很好的解決了這一問題。當CPU處理完數(shù)據(jù)后,將數(shù)據(jù)直接發(fā)送給緩存,然后立即向應(yīng)用返回確認,緩存中數(shù)據(jù)達到一定水位定期寫入磁盤,從而提升效率。
其次,我們來探索下緩存的工作原理。在程序運行過程中,緩存會有一個局部性原理,即程序會頻繁訪問局部緩存。如果緩存地址變換頻繁,那么緩存中存放的數(shù)據(jù)就會頻繁改變;如果程序頻繁訪問局部數(shù)據(jù),那么 緩存中的數(shù)據(jù)改變就不會很大。因而命中率就會提高,CPU 的運行效率也會提升。
浪潮存儲的緩存工作原理
由此可知,衡量緩存管理的優(yōu)劣有兩個指標:一是緩存命中率,命中率高,性能就高,否則反之;二是有效緩存的比率,有效緩存是指真正會被訪問到的緩存項,如果有效緩存的比率偏低,則相當部分磁盤帶寬會被浪費到讀取無用緩存上,而且無用緩存會間接導致系統(tǒng)緩存緊張,最后可能會嚴重影響性能。
現(xiàn)在我們清楚了緩存的工作原理及性能指標,那么為了充分發(fā)揮緩存的作用,僅僅依靠“暫存剛剛訪問過的數(shù)據(jù)”是遠遠不夠的,還要通過使用數(shù)據(jù)預讀算法——盡可能把將要使用的數(shù)據(jù)預先從內(nèi)存中取到緩存里。那么關(guān)鍵問題來了,一是如何更精準的判斷哪些數(shù)據(jù)是應(yīng)用程序?qū)⒁褂玫臄?shù)據(jù)?二是當緩存寫滿時,如何判斷哪些數(shù)據(jù)被淘汰?這就是浪潮存儲緩存預讀算法的精髓所在。接下來我們就來深入剖析浪潮存儲緩存預讀的工作原理。
一方面,浪潮存儲基于緩存預讀,可精準判斷數(shù)據(jù)熱度。浪潮存儲的緩存預讀算法,可以根據(jù)歷史數(shù)據(jù)的I/O模式,通過智能分析、預判將要訪問的數(shù)據(jù),提前將這些數(shù)據(jù)預讀到緩存中,提升緩存命中率,降低I/O訪問時延。這里主要有兩個關(guān)鍵技術(shù)要點:
浪潮存儲的智能緩存預讀算法
一是自適應(yīng)緩存預讀策略。讀I/O分為隨機讀和順序讀兩大類,為了保證預讀命中率,針對不同的I/O模式采用不同的預讀算法。對于順序讀根據(jù)區(qū)域地址進行順序預讀,對于隨機讀根據(jù)區(qū)域熱度進行預讀。根據(jù)不同的讀I/O模式兩種預讀策略動態(tài)調(diào)整,不僅可以保證很高的預讀命中率,同時有效率/覆蓋率也很好。
因為順序讀是最簡單而普遍的,而隨機讀在內(nèi)核來說也確實是難以預測的。內(nèi)核通過驗證如下兩個條件來判定是否順序讀:該區(qū)域內(nèi)容被第一次讀,并且讀的是首部;當前的讀請求與前一個讀請求在區(qū)域內(nèi)的位置是連續(xù)的;如果不滿足上述順序性條件,就判定為隨機讀。預讀策略根據(jù)讀I/O模式不同動態(tài)調(diào)整。
二是預讀粒度動態(tài)調(diào)整。當確定了要進行順序預讀時,就需要決定合適的預讀粒度。預讀粒度太小的話,達不到應(yīng)有的性能提升效果;預讀太多,又有可能載入太多程序不需要的內(nèi)容,造成資源浪費。為此,浪潮存儲可根據(jù)實際的需求動態(tài)調(diào)整預讀數(shù)據(jù)內(nèi)容的粒度,從而提高緩存的有效率。如果緩存命中率提高,后續(xù)的預讀粒度將逐次倍增,直到系統(tǒng)的最佳預讀大小;隨著緩存命中率降低,后續(xù)預讀粒度將逐漸減小,直到系統(tǒng)的最佳預讀大小。
另一方面,浪潮存儲基于緩存替換算法 實現(xiàn)低訪問數(shù)據(jù)下移。當緩存滿了怎么辦?不得覆蓋掉一個,覆蓋掉哪一個?這就是替換算法要解決的。浪潮存儲的緩存替換算法是基于預讀數(shù)據(jù)的命中率,結(jié)合數(shù)據(jù)的訪問熱度,淘汰最近最少用的那一塊,從而提升預讀數(shù)據(jù)的有效性,保證預讀持續(xù)、高效的正向性能提升。
浪潮存儲的設(shè)計思路是,如果一個數(shù)據(jù)在最近一段時間沒有被訪問到,那么在將來它被訪問的可能性也很小。也就是說,當限定的空間已存滿數(shù)據(jù)時,應(yīng)當把最久沒有被訪問到的數(shù)據(jù)淘汰。具體實現(xiàn)算法如下:
硬件緩存每一行都有一個計數(shù)器,用來記錄被使用次數(shù)。
計數(shù)器變化規(guī)則:
− 每組4行時,計數(shù)器有兩位,計數(shù)值越小則說明越被常用
− 命中時被訪問行的計數(shù)置0,比其低的計數(shù)器加1,其余不變
− 未命中且該組未滿時,新行計數(shù)器置為0,其余全加1
− 未命中且該組已滿時,計數(shù)值為3的那一行中的主存塊被淘汰,新行計數(shù)器置為0,其余全加1
說到這里,估計大家還是沒有看懂,為了更加直觀的展示算法原理,我們舉個例子:
智能緩存替換算法原理
現(xiàn)在有四個格子,但是有 5 個不一樣的塊要進來,緩存替換過程如下:。
1 來,沒有命中,1 進入緩存。計數(shù)器為 02 來,沒有命中,2 進入緩存。2 計數(shù)器 0, 1計數(shù)器為 1(對應(yīng)第三條)3 來同上4 來同上1 又來,命中,1 的計數(shù)器變?yōu)?0。其余加 1。2 又來,命中,2 的計數(shù)器變?yōu)?0。其余加 1。5 來了,但是現(xiàn)在 Cache 滿了。去掉哪一個呢?計數(shù)器最大的那個! …
特征數(shù)據(jù)識別:基于“逐字節(jié)”比對實現(xiàn)去重
根據(jù)用戶的數(shù)據(jù)特征建立數(shù)據(jù)特征表單,當新的數(shù)據(jù)請求與表單中的特征匹配時,說明該部分數(shù)據(jù)已經(jīng)落盤,這部分數(shù)據(jù)可以避免重復寫入。特征匹配采用近似匹配的策略,存在兩份不同數(shù)據(jù)的特征一致的情況,為了確保用戶的數(shù)據(jù)安全,每份不同的數(shù)據(jù)都能一字不落的存放起來,浪潮存儲還對特征匹配的數(shù)據(jù)需要進行“逐字節(jié)”比較,為了降低逐字節(jié)比較時的訪盤時延,系統(tǒng)會智能感知特征數(shù)據(jù)的訪問熱度,將頻繁訪問的熱點特征數(shù)據(jù)提取到內(nèi)存中,保證系統(tǒng)時延最低。
浪潮存儲的特征數(shù)據(jù)識別算法
總結(jié)一下,浪潮存儲的智能I/O感知,通過自適應(yīng)緩存預讀算法對歷史數(shù)據(jù)I/O模式進行分析、判斷識別,對其提前讀取到緩存,從而達到緩存最高命中率。當緩存寫滿時,通過獨特的替換算法將使用最少數(shù)據(jù)的淘汰,將緩存發(fā)揮出其最大的價值,從而提升存儲整體I/O性能;通過特征數(shù)據(jù)識別和逐字節(jié)的比較,在確保數(shù)據(jù)安全的前提下減少數(shù)據(jù)落盤,從而提高存儲的性能及空間使用率。
(免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關(guān)資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )