經歷了近十幾年的快速發展,SSD已在眾多領域取代了HDD。消費級SSD的規格趨于穩定,成本要求不斷提高,技術和市場的格局已基本固定。所以,許多初創團隊和大廠開始將研發重心放在了企業級SSD上。在這個大背景下,我們開發了一套NVMe SSD的測試軟件PyNVMe3。通過最近三年多的推廣,我們和眾多OEM廠商、SSD廠商建立了良好的合作關系。很多廠商使用我們的產品和服務,并取得了良好的效果:以前抓不到的問題可以抓到了,以前不能測的特性可以測了。
快是王道
為什么PyNVMe3能找出更多的bug?原因在于,PyNVMe3對性能有極致的追求。對于企業級SSD來說,最基本的要求就是穩定。我們對性能的極致追求并不是為了性能測試的結果,而是要最大化對測試盤的壓力,提供最緊湊的時序,這樣才有可能在有限的開發周期內壓出各種潛在的問題。
雖然所有企業級SSD都會使用fio進行性能和壓力測試,但其也有一定的局限性。PyNVMe3可以帶來比fio更大的測試壓力。我們在同一臺主機和同一塊SSD盤上對fio和PyNVMe3的4K隨機讀性能進行了測試。fio的單核IOPS為445k,而PyNVMe3可達到831K。PyNVMe3只利用單核CPU就可以打到大部分SSD盤的性能瓶頸。
但有人會問:那我們在用fio測試的時候定義numjobs=4甚至更多的jobs,不就可以了嗎?本質上,1個job和4個job是兩個不同的測試用例。無論性能還是可靠性,4個job的測試都不能替代1個job的測試。PyNVMe3對性能的極致追求不是為了性能測試的成績更好看,而是要在各種workload下對測試盤提供最大的壓力和最緊湊的時序,用比真實業務場景更大的壓力盡量把問題在研發階段就打出來。
從設計上來看,PyNVMe3能實現比fio更高的性能,是因為PyNVMe3使用了我們基于SPDK自主研發的用戶態NVMe驅動。如下圖所示,fio的每一個IO都需要經過復雜的內核存儲子系統軟件堆棧。而PyNVMe3直接通過用戶態驅動把IO命令寫到和測試盤共享的命令隊列,并使用輪詢機制從回收隊列獲得IO的結果。這種方式避免了主機端的內核和中斷開銷,性能更快、延遲更小,并且性能和延遲的一致性也更好,更接近測試盤的本來面目。打個比方,傳統測試工具在測試盤上面蓋上了一層厚厚的棉襖,讓我們看不清盤的真實面貌;而PyNVMe3的輕量級的驅動只是一層薄薄的紗,讓測試腳本可以觸摸到測試盤的每一個棱角。
還要可靠
任何存儲設備對可靠性的要求都非常高,SSD也是如此。可靠性具體可以分成很多方面:性能要可靠、設備要可靠、數據要可靠。性能可靠:SSD盤要在任何workload下面都提供高并且穩定的性能。設備可靠:SSD盤即便在很大IO壓力下,也要能正確處理一些異常事件和命令。數據可靠:SSD盤在各個生命周期的階段都不能丟數據,真的發生數據丟失也一定要如實報告。
要測試SSD盤的可靠性,需要一個更可靠的測試工具。
PyNVMe3通過上文提到的高性能低延遲的用戶態驅動,能給盤最大的壓力,并且記錄準確的性能跳動和延遲分布。
PyNVMe3可以在Python腳本中創建多個進程,利用多個CPU的資源對同一個測試盤下不同的測試命令。譬如在一個CPU大壓力讀寫測試盤的同時,另一個CPU發指令對測試盤掉電或reset;也可以在一個CPU大壓力讀寫測試的同時,另一個CPU對測試盤發Admin命令或做帶外管理操作。
PyNVMe3實現了對測試腳本透明的數據校驗機制:通過在DRAM中維護每一個LBA的CRC值,來檢查每一筆讀數據的正確性。借助x86和ARM提供的CRC專用指令,PyNVMe3可以在實現極高IO性能的同時,對每一筆讀IO進行CRC校驗。這種機制簡化了數據一致性測試的實現,可以在大部分測試中都實現對數據一致性的檢查。
PyNVMe3本身的設計也非常注重可靠性。如下圖所示,我們在底層驅動中實現了高效的數據流,而將各種各樣的NVMe SSD特性放到上層庫和Python腳本中實現。通過這種分層設計,將復雜多變的特性和穩定可靠的數據流分開實現,上層的變化不會影響到下層驅動的穩定性。譬如,我們在擴展對ZNS、SRIOV、MI等特性的時候,都是通過上層腳本實現的,避免各種新特性的加入對下層驅動的穩定性造成影響。
二次開發
PyNVMe3不僅具有極高的性能和可靠性,而且還非常容易實現二次開發。在PyNVMe3設計之初,我們就確定將所有功能都通過Python API作為唯一的接口開放給客戶使用。測試工程師可以通過開發Python腳本來實現他們的創新,并將腳本部署到自動化的測試流程中,實現項目的敏捷開發模式。這對快節奏和高要求的SSD研發項目來說是至關重要的。
PyNVMe3的API設計遵循NVMe協議,通過面向對象的方式把不同的概念和功能封裝到不同的類中實現。下圖是PyNVMe3 API提供的各種類及其關聯方式。
利用PyNVMe3提供的API,用戶可以快速實現以下各種特性的Python測試腳本:
各種類型的Admin命令
各種壓力和類型的IO場景
自定義的NVMe初始化過程
雙端口
SRIOV
多Namespace
各種LBA format
各種NVMe的特性,如:ZNS,SGL,Reservation,metadata,Arbitration等
注入各種錯誤和reset事件
掉電測試
Latency和QoS
數據一致性
MI/SMBus帶外管理接口
受限于測試工具,以往很多特性不能充分測試。PyNVMe3不僅可以實現上述各種特性的測試,還可以將多種特性結合起來構造更復雜的測試場景。譬如我們發現,將大壓力IO和Admin命令放到一起測試,有些盤處理Admin命令的延遲會長達數秒。PyNVMe3提供的這些API讓用戶可以通過二次開發實現更多的測試用例,讓測試開發的效率更高、更富有成效。
我們的腳本開發指南提供了PyNVMe3二次開發的更多細節。
公共平臺
PyNVMe3具有很高的性能和可靠性,可以便捷地二次開發各種特性的測試腳本,所以很多客戶開始選擇PyNVMe3作為內部研發階段的測試平臺,這些客戶覆蓋了消費級、企業級、數據中心、工業和車載等各類SSD產品和主控的研發。
PyNVMe3是一個軟件定義的NVMe SSD測試平臺,可以工作在筆記本、臺式機、工作站以及服務器等各種通用計算機平臺之上。PyNVMe3不捆綁特定硬件平臺,降低用戶大規模部署的成本和風險。PyNVMe3也可以適配各種專門的測試制具,用來實現電源控制、功耗測量、帶外管理接口命令等測試。PyNVMe3是一個為廣大SSD廠商定制開發的NVMe SSD測試平臺,受到廣大廠商的關注和信任。
當我們的客戶發現他們的合作伙伴也在使用PyNVMe3的時候,PyNVMe3作為一個獨立第三方的測試平臺的優勢就體現出來了:各個廠家可以各自開發PyNVMe3的測試腳本,并且和他們的合作伙伴共享這些測試腳本,來保證雙方合作的順暢。我們經常會遇到一些問題只能通過SSD廠商的內部平臺來復現,但是出于各種技術、商業和IP的考慮,這些內部平臺無法開放給合作伙伴使用。現在我們只需要在PyNVMe3上面開發腳本,這樣合作各方都可以在PyNVMe3這個公共平臺上面跑相同的測試腳本。相對于開放整個內部測試平臺,共享一些Python測試文件的使用權限在公司之間更容易操作。PyNVMe3正在成為業界一個專業的可獲得的SSD測試公共平臺。
我們與眾多SSD廠商和OEM廠商建立了合作關系,為客戶提供我們的測試工具和服務。我們通過PyNVMe3的開放的理念、優越的性能和可靠性、強大的二次開發擴展能力,和業界合作伙伴一起做出更好更穩定的SSD產品!
-
內核
+關注
關注
3文章
1372瀏覽量
40290 -
SSD
+關注
關注
21文章
2862瀏覽量
117423 -
python
+關注
關注
56文章
4797瀏覽量
84689 -
HDD
+關注
關注
0文章
143瀏覽量
27442 -
nvme
+關注
關注
0文章
221瀏覽量
22640
原文標題:PyNVMe3:重塑企業級SSD測試的新范式
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論