作者簡介
唐傑
目前在Xilinx從事DC架構,曾任職於Fusion-IO,LSI,希捷等公司。
想要和唐大師還有全世界的大牛討論SSD及存儲相關技術?加nanoarch為微信好友,拉你進ssdfans微信群
「磚」的緣起
事情的起因是這樣的,這個ssdfans群裡,冬瓜哥和往常一樣在幫助大家回答問題。在回答一個SSD上文件系統mount的參數的問題是,俺不知深淺地插了一句嘴,該打。然後就為了拍瓜哥一個馬屁,就說瓜哥應該寫一個SSD性能測試的指導,結果瓜哥說自己不是專業人士不能寫,俺又不明就裡地說俺可以寫一個,結果,瓜哥說俺寫了,瓜哥就寫一個。
正好在杭州到上海的高鐵上,信號一如往常的爛,於是有了這一片」磚」來引瓜哥的玉了。
在談這個具體內容之前,俺要強調,俺的磚全是腦中所記,因為不方便上網,而且也是磚,就比較散漫,寫到哪裡算哪裡了。
工具篇:
FIO: 目前最常用的性能測試工具,主要是linux下。這個工具是目前我用過的最能生成IO請求的工具。Fio可以用比較小的代價在短時間能生產IO,這個能力的確沒有其他工具可以比。因此文中預設的測試工具就是它了。
Vdbench: SUN遺留下來的工具,因為基於Java,他的可移植性比fio好,同時支持壓縮和dedup的測試,因此也是企業測試的首選。
Iometer:Windows平臺為主,因為是gui的,因此腳本化比較難,之前windows比較流行的時候,用的多,現在在數據中心就呵呵了。
SQLIO和orion都是資料庫廠商的工具,主要測試8K的隨機I/O和1M的順序I/O,是DBA的最愛,作為SSD性能狗必須跪舔。
Sysbench因為可以測試MySQL,也是新貴的最愛,要知道霸爺到ali的第一個blog就是sysbench.
Workload 篇:
I/O size: 4K 是主流,8K是MSSQL和Oracle,16K是Mysql Innodb
Queue Depth:這個預設是32, 因此目前的SSD,特別是SATA的SSD,NCQ是31,因此不能太少。
Numjobs:生成I/O的engine的數量,如果thread=1就是幾個線程,否則就是進程,建議線程。Numjobs可以等於CPU的core就行,不算HT。
Numjobs和Queue Depth定義了I/O的workload的壓力,基本上是 fio numjobs×QD = vdbench的thread。
I/O 引擎: 基本上是libaio,這個是衝IOPS的,對於延時為主的測試,建議psync。
Direct I/O: 這個是本地測試標配,但是要注意網絡I/O可能只支持buffer I/O。
隨機順序和IO比例方面:
測試建議先做隨機,再做順序,因為順序可能有cache的影響。先做寫,再做讀,因為SSD的特性,寫入量大之後會性能下降。
I/O讀寫比例,資料庫基本是7:3, 9:1, 對於網絡存儲,建議的比例是5:5
文件系統篇:
Ext2 無視,基本上是ext3和ext4。預設的格式化流行,如果基於md,要考慮I/O的對齊問題。
Mount的時候,不管XFS,EXT3/4都建議noatime,noadirtime和nobarrier。Discard這東西還是免了,真心不知道trim的用處。
其他的,在測試文件系統的時候,要注意在寫入的時候會有鎖的問題,因此建議使用nrfiles來生成多個文件。
作業系統篇:
對於基於SATA的SSD,對於block層的修改是必須的,必須參考之前LSI nytro的推薦,基本上是:
增大queue的深度
Disable 預讀
Disable 和隨機發生器的關係
還有就是IO affinity, 建議使用的配置是使用生成I/O請求的CPU來響應I/O,降低context 切換的影響。
比較懶的可以用RHEL的tuned-adm來設置。
這裡還有一個就是作業系統的I/O監控:
Iostat –dmx /dev/sda 1 這個是必須的命令
Mpstat –P ALL 1, 看CPU的使用情況,如果都在softirp,說明你I/O生成有問題,使用numactl來控制。如果都在iowait,說明你的I/O設備的確不行。如果都在sys,說明跑的很正常。不可能都在user,因為fio的I/O請求的數據直接就丟掉了,不可能有usr。
高級一點的,可以用perf top看看系統調用的時間,如果都在spinlock上,說明你的IO文件有互斥了。
硬體系統篇:
BIOS裡面,CPU的C states是必須disable,測性能,省毛電。
HT也是要關的,但是在NVME SSD中,HT貌似不錯,請自行研究。
VT之類,都是必須關的。Dell/HP/IBM都有BIOS推薦的設置。
NUMA,這東西對於性能真心沒好處,還是一點要避免。BIOS能關就關,不能關的話,用numactl來指定吧。
還有就是硬體的中斷,不要用irqbalance,一定要用irq_affinity來做mask。
對於PCIE slot,儘可能讓兩個設備在不同的CPU上,用taskset,或者numactl來進行分離。
最後一點,測試只是測試,一定要上應用,這個是對自己和公司負責的行為。
車已經到了嘉興,俺也吐了兩頁,希望可以擠出瓜哥的玉了。找個信號好的地就發了。嘿嘿
不想錯過唐大師的後續精彩文章?長按或掃描下面二維碼關注ssdfans就可以了!
公司招聘:
Memblaze華東區高薪招聘,銷售經理,FAE 上海/杭州
聯想SSD專家招聘,FW,QA,NAND特性工程師,北京/武漢
上海飛斯招聘: 存儲開發工程師,RAID、USB、SATA、AHCI、NVME、FTL、文件系統的開發及調試
ssdfans幫你內推
ssdfans幫你賺推薦費
歡迎轉載,轉載請保留二維碼!