如何快速debug定位SSD延遲問題?
一塊固態硬碟設計背後,有硬體控制器,NAND快閃記憶體顆粒、DRAM,還有韌體FTL演算法等。SSD設計的本身其實是一件特別複雜的過程,需要考慮各種客戶需求且要保證可靠性、效能、穩定性。
針對SSD的相關效能測試,SNIA也有專門針對SSD相關測試SPEC,同時各個SSD廠商也有很多獨有的測試用例(
一家SSD廠商的測試用例很多也是靠多年的填坑積累完善的
)。現在看似SSD行業門檻很低,隨便買個主控、NAND/DRAM顆粒就可以組裝了(
的確市場上有魚龍混雜,有投機倒把之輩
)。但是,
如果真心要做出一款效能穩定的SSD,不但需要強大的技術實力,更需要豐富的經驗積累。
SSD出廠之前經過了嚴格的測試,到了使用者手裡,是不是就不會有延遲問題呢?答案是否定的。比如下面一幅圖就是業內最經典案例,4KB隨機寫最開始效能會很高,因為SSD內部還沒啟動GC,當SSD隨機預測完全後,此時4KB隨機寫才是穩態的效能。很多客戶在拿到SSD後測試的資料和經過一段時間測試後的會出現明顯的差異,在不瞭解SSD隨機預熱穩態的機理時,就會出現很多誤解。使用者使用方式,對延遲問題的定義也會有存在很大的差異。經常會出現一種情況:“
IO延遲,在某些場景,是一種不是問題的問題
!”
不同的客戶的業務場景,千差萬別,SSD的設計也不無法100%兼顧所有複雜的IO負載型別。
出現延遲問題並不可怕,可怕的是無從入手,不能快速debug定位延遲的來源
。
IO延遲定位前,我們先了解下Windows和Linux核心中的IO堆疊,簡單理解IO的產生、流動過程、最終目的地。
第一圖:Windows環境中IO堆疊
第二圖:Linux環境中IO堆疊
從上面的IO堆疊示意圖來看:
Windows和Linux IO堆疊的基本邏輯是一致的
IO在軟體層產生,經過檔案系統、核心模組、驅動層,最終達到硬體儲存裝置SSD。
IO延遲通常是應用客戶先感知到,使用者也是從最上層感知,但是經過這麼層的路徑,最終的延遲來源是在哪一層?這個並不能很清晰的展示,這也導致很多場景下,SSD也成為了背鍋俠,不管什麼原因導致的IO異常,首先都會被先扣在SSD頭上。所以,
快速IO定界也是幫助SSD解放“背鍋”壓力的有效辦法
。
目前用於IO延遲定界場景的軟體,也有多種:
在Windows場景下:開源的工具有perfmon,以及SNIA SSSI Workload I/O Capture Program (WIOCP) 推薦的hiomon,可以記錄隨機讀寫、順序讀寫的延遲、佇列深度QD,IO延遲統計等。
Linux場景下,常用的經典開源工具也有blktrace,可以記錄從IO產生,到最終返回的時間,跟IO分析工具iostat的延遲來源保持一致,與iostat一起搭配定位延遲問題最為合適。
在硬體定位過程中,I2D代表進入核心IO workqueue佇列到傳送給硬體的時間。D2C代表驅動IO下發到硬體完成IO返回的時間。
除了上面基礎的開源IO分析工具,目前第三方也有專業的商用軟體,比如Calypso的IOProfiler、Teledyne Lecroy的WorkloadIntelligence。
IO延遲定界過程中,如果定位延遲來源於硬體,此時,
SSD的延遲記錄能力也是至關重要
。市場上目前只有少數的廠商在資料中心客戶的強烈的需求下,有延遲定位功能。大部分SSD廠商還沒這個功能。不過,
隨著OCP也開始關注SSD延遲定位能力,相信後續會有更多的場景加入這個功能
。
在擁有Latency Monitoring功能的SSD上,可以清楚知道,在上層使用者看到延遲抖動的時候,SSD內部硬體延遲的真實分佈,可以快速確定延遲是不是來自於硬體,讓資料中心和SSD供應商都可以更加清楚業務的行為與SSD硬體的適配情況。
以下幾個是IO異常的案例,供大家參考:
案例1: 業務模型與延遲的關係
延遲升高的時候,佇列深度和程序數也在相應地增加。這種情況多數是跟業務的使用方式有關。
案例2:Trim對延遲的影響
讀延遲的升高的時間段,正好看到系統有Discard/Trim的操作。Trim操作會給讀延遲帶來極大的影響。雖然Trim可以提升隨機效能(
擴充套件閱讀:
SSD寫放大的最佳化策略要統一標準了嗎?),建議使用者執行Trim要在業務低谷觸發,不然上層會看到非常明顯的延遲抖動。
案例3:CPU core與延遲的關係
CPU所有core中只有少數core或者個別core出現IO繁忙的情況,導致IO集中,延遲升高。這個就需要從系統角度最佳化IO使用模式。
案例4: 同一負載下,不同SSD表現也有明顯差異
A/B/C/D/E/F:6個盤是消費級NVME SSD,容量在480GB-512GB
G/H/I:3個盤是企業級NVME SSD,容量在960GB-1000GB
同一個負載下,企業級SSD G表現最差,消費級SSD E表現相對穩定,可以媲美企業級SSD。通常情況下,企業級SSD相對消費級SSD做了很多IO的最佳化。
結語
IO延遲分析是一項複雜而有趣的工程,需要帶著好奇深挖每一個資訊,總會有不同的風景
。如果你有不同的經驗分享,歡迎留言交流~