《大神教你玩轉(zhuǎn) SSD 系列三:數(shù)據(jù)處理》要點:
本文介紹了大神教你玩轉(zhuǎn) SSD 系列三:數(shù)據(jù)處理,希望對您有用。如果有疑問,可以聯(lián)系我們。
如何評估固態(tài)存儲設(shè)備的性能,并根據(jù)業(yè)務(wù)需求挑選出合適的SSD產(chǎn)品?在之前兩篇文中,介紹了 SSD 基準(zhǔn)測試應(yīng)該關(guān)注哪些指標(biāo)以及測試環(huán)境,今天我們把最后一個主題也分享給大家——數(shù)據(jù)處理.
一、SSD基準(zhǔn)測試應(yīng)該關(guān)注哪些指標(biāo)
二、基準(zhǔn)測試環(huán)境(工具/磁盤要求等)
三、針對磁盤的具體測試項目
四、數(shù)據(jù)處理
本篇主要介紹第四點——數(shù)據(jù)處理,在后面的文章推送中會繼續(xù)將把本系列的其他各主題分享給大家.
如果記錄原始log,日志都很大,好處是可以利用這些原始日志按照想要的粒度隨意進(jìn)行多次的拆分.
下面是之前測試記錄的原始日志.
2016/09/21 ?10:25 ? ?<DIR> ? ? ? ? ?.
2016/09/21 ?10:25 ? ?<DIR> ? ? ? ? ?..
2016/09/19 ?01:30 ? ? 1,027,468,938 log_read_fio_4k_qd16_bw.1.log
2016/09/19 ?01:31 ? ? ? 955,376,526 log_read_fio_4k_qd16_clat.1.log
2016/09/19 ?01:32 ? ? ? 864,600,350 log_read_fio_4k_qd16_iops.1.log
......此處省略若干行......
2016/09/19 ?12:43 ? ? 2,890,345,859 log_write_fio_4k_qd8_bw.1.log
2016/09/19 ?12:47 ? ? 2,678,596,965 log_write_fio_4k_qd8_clat.1.log
2016/09/19 ?12:49 ? ? 2,432,692,073 log_write_fio_4k_qd8_iops.1.log
2016/09/19 ?12:45 ? ? 2,678,904,975 log_write_fio_4k_qd8_lat.1.log
2016/09/19 ?12:46 ? ? 2,510,603,551 log_write_fio_4k_qd8_slat.1.log
? ? ? ? ? ? ?60 File(s) 85,850,810,754 bytes
? ? ? ? ? ? ? 2 Dir(s) ?279,943,782,400 bytes free
解釋一下其中的命名,前面的 logxxxfio_xxx基本都一樣,是用戶指定的前綴.
后面的 iops, clat, slat, lat, bw 等是對應(yīng)的測試項.
bw 是帶寬
clat slat 和 lat 是每次 io 操作的延遲.
其中 slat 是io請求提交到操作系統(tǒng),得到響應(yīng)的時間,經(jīng)過分析發(fā)現(xiàn)這個時間一般都很短,可以忽略.
clat 是 io 操作完成所需要的時間,一般來說可以認(rèn)為是 設(shè)備從接到 io請求到完成的時間. lat 就是整個時間了, so, clat + slat = lat. 但由于 slat 很小,看 lat 和 clat 區(qū)別不大.既然是做磁盤基準(zhǔn)測試,瓶頸總不能在操作系統(tǒng)吧,因而后期的測試都指定了 disable clat 和 slat .
原始日志格式如下:
fio 帶寬log
# fio bandwidth log
0, 21005, 0, 4096
0, 20378, 0, 4096
0, 21222, 0, 4096
0, 22755, 0, 4096
fio iops log
# fio iops log
0, 1, 0, 4096
0, 1, 0, 4096
0, 1, 0, 4096
0, 1, 0, 4096
fio 延遲 log
# fio s / c / latency log
0, 453, 0, 4096
0, 435, 0, 4096
0, 436, 0, 4096
0, 436, 0, 4096
格式比較好猜.除了那一排0,于是 google,有人問過了:http://www.spinics.net/lists/fio/msg01064.html
如果記錄的原始值,剩下的問題就是套路了,按照需要的分度做一些簡單的加和,最大值最小值運(yùn)算統(tǒng)計:
log文件結(jié)構(gòu)都很簡單,很容易改成 csv,并保留原始數(shù)據(jù).其中bw數(shù)據(jù)可能會讓人感覺有點奇怪.搜到的解釋:
Time: in milliseconds. Bandwidth logs are usually 500 or 1000ms apart;
that can be controlled by the config file with “bwavgtime=[x ms]”.
Rate/latency: for bandwidth, this is in KB/sec. For latency, it’s microseconds.
然而實際計算發(fā)現(xiàn),bw 的數(shù)據(jù)并沒有那么平均,而是每次完成io之后,block size / clat 的值. 既然fio都這么設(shè)計,那bw log實際上來看用處已經(jīng)不大,因為有iops log + clat log,一樣的. 于是作圖中,也選用clat,忽略 lat和slat了,畢竟 slat 都很小(對于sata設(shè)備來說忽略不計),clat和lat基本就一樣了.
文件大小也小了好多好多.其實如果指定了采樣間隔,fio自身生成log也跟這個類似,實際測試可以考慮直接指定對應(yīng)參數(shù). 數(shù)據(jù)文件處理完畢,可以按照需求作圖了,作圖可以直觀的看到趨勢,更容易發(fā)現(xiàn)問題.
這是測試中的兩款磁盤,都直接從穩(wěn)定態(tài)開始進(jìn)行的測試,由于持續(xù)讀寫測試沒有太大意義,故不做介紹,以4K隨機(jī)為例做一個對比
先上兩張隨機(jī)讀取的對比圖:
前兩張圖是讀取延遲的對比圖,可以看到讀取延遲大家都沒超過毫秒級,由于是企業(yè)級的盤,加上raid卡神秘加成,可以看到兩個盤幾乎都是一條直線下來.區(qū)別是 SanDisk的延遲明顯比 Micron的延遲低.查過datasheet可以知道美光用了3D eTLC,相比傳統(tǒng)MLC來說,TLC相對有較高的延遲并不奇怪.
同時可以看到 Micron的磁盤延遲上下浮動范圍稍寬,iops也有類似的表現(xiàn),對于SanDisk,則幾乎是一條直線,也可以看出SanDisk的性能幾乎保持在同一個水平,對請求的處理及時,到位.但Micron的這一點點波動,不會對服務(wù)產(chǎn)生可以感知的影響,只是經(jīng)過作圖,直觀的感受.但如果測試結(jié)果發(fā)現(xiàn),波動范圍非常大,那就要小心了.它可能是線上服務(wù)質(zhì)量的殺手.
服務(wù)質(zhì)量的好與壞,主要看延遲有多高,如果最長的延遲非常高,那平均時間也好不到哪去,而且通常最大延遲高的盤,延遲超過容忍程度(比如 200 ms)的幾率也相對更高,直觀表現(xiàn)就是“一卡一卡的”.
取某個時間段內(nèi)的最大值,如果絕大多數(shù)時間這個最大值接近理想的平均值,并且整個測試階段的最長時間在可以接受的范圍內(nèi),出現(xiàn)的頻率也不是很高,那么勢必平均延遲也不高,可以判定整體服務(wù)質(zhì)量還不錯.
其實隨機(jī)讀取對于各種SSD來說其實是小兒科.因為沒有什么成本,主控不忙,閃存不忙.確切的說,跟寫入比起來,輕松許多,極少 wear leveling,極少 GC,極少擦除
于是此處應(yīng)有寫入測試(其實是混合讀寫測試,讀3寫7).
于是看起來就比較費(fèi)勁了.
SanDisk的磁盤之前在線上機(jī)器服役過幾個月,Micron的是新盤.
可以看到SanDisk的測試結(jié)果離散度比較大,跟美光的“一條直線”比起來,一點都不養(yǎng)眼.但并不意味著磁盤性能不好.雖然延遲范圍比較大,但最大延遲控制在了 2ms 以內(nèi),跟美光的盤差不多,并且可以看到不同QD下,延遲也有上限,iops沒有出現(xiàn)零點,而對于2ms QD32 的延遲來說,業(yè)務(wù)無感知.
美光的幾乎是新盤(但在測試過程中也早就達(dá)到了穩(wěn)定態(tài))表現(xiàn)相對養(yǎng)眼一點,但并不搶眼,因為對比可以看出,美光的盤平均寫入延遲都比同QD下SanDisk的要高,而且寫入吞吐量要比 SanDisk的略低一點(SanDisk 12K 左右,Micron大約10K),原因,同樣是TLC和 MLC的差別,同時,SanDisk有200多G的 OP,而美光,只有40多G,美光說:這還是有些許的不公平啊.
由于盤都是在進(jìn)入穩(wěn)定態(tài)之后的測試結(jié)果,所以喜聞樂見的磁盤性能下降都沒能在圖上反映出來,如果是全新的盤,可以明顯看到iops分層的現(xiàn)象,比如之前美光M4的結(jié)果:
而且圖中還能看到iops的零點,同時最高延遲也飆到了 600ms,像這種服務(wù)質(zhì)量,是無法保證線上服務(wù)質(zhì)量的.當(dāng)然,這也只是一塊消費(fèi)級的盤.
在完成了對兩張磁盤的“虐待”之后,其實還有一點需要關(guān)心的,就是磁盤的寫入放大.
寫入放大一詞,最早由Intel提出,隨著 NAND 顆粒容量的增大,page 也從 4k 變成 8k, 16k,32k……,而且NAND擦除時,并不能直接擦除一個 page,加上磨損平衡策略,造成了實際寫入 NAND 的數(shù)據(jù)量大于 主機(jī)寫入的數(shù)據(jù)量.這種寫入放大在 4k 隨機(jī)寫入測試時尤為明顯.線上的 RDBMS 應(yīng)用,KV 存儲記錄,分布式 block / object 存儲,更多的用到了隨機(jī)寫入.因而能減小寫入放大,就能在某種程度上延長SSD的使用壽命.
可能有些公司已經(jīng)開始采用 PCI-E卡甚至 NVMe SSD用于線上業(yè)務(wù),當(dāng)然這是極好的,NVMe為SSD而生,硬件性能需要滿足業(yè)務(wù)需求,但至少,SSD作為通用存儲,要滿足以下一個要求,才能保證一般線上業(yè)務(wù)(比如RDBMS)的穩(wěn)定.
4k 無文件系統(tǒng)測試能否代表真實的磁盤性能
有些盤拿到手之后,跑上幾十個小時的4k qd32 write,效果相當(dāng)不錯,iops,帶寬,延遲都在比較理想的范圍之內(nèi), 但是否能代表有文件系統(tǒng)時磁盤的性能?通常認(rèn)為,差別不大.可能有文件系統(tǒng)的時候會稍稍慢一點.但網(wǎng)上有一哥們確實遇到了很詭異的事情 (http://www.vojcik.net/samsung-ssd-840-pro-performance-degradation/).
某品牌的磁盤在特定固件版本下,特定文件系統(tǒng)表現(xiàn)非常不穩(wěn)定.如果沒有做過全面測試,這種事情出現(xiàn)在線上,是非常崩潰的, 并且,排查問題幾乎完全找不到頭緒.
trim,raid卡造成的性能波動
雖然本次測試覆蓋了一款 raid 卡,但實際生產(chǎn)環(huán)境中每一批的固件,緩存策略等均可能對性能和穩(wěn)定性產(chǎn)生影響,因而有必要做兼容性測試
高壓環(huán)境下的穩(wěn)定性、極端環(huán)境、掉電,上電測試
短時間的壓測或基準(zhǔn)測試可能并不能將產(chǎn)品潛在的bug發(fā)掘出來,比如鎂光有就有著名的 “5200小時門”,雖然是消費(fèi)級產(chǎn)品,但已經(jīng)足夠毀滅一大批數(shù)據(jù).又諸如Intel的祖?zhèn)?“8M門”,國外也有DC S3700用戶中獎.測試只是劃定門檻的手段.
以上就是 SSD 系列的完結(jié)篇,如果想看之前的兩個主題,戳這里:
《大神教你玩轉(zhuǎn) SSD 系列一:關(guān)注哪些指標(biāo)》
《大神教你玩轉(zhuǎn) SSD 系列二:基準(zhǔn)測試環(huán)境和項目》
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/4205.html