《大神教你玩轉(zhuǎn) SSD 系列二:基準(zhǔn)測(cè)試環(huán)境和項(xiàng)目》要點(diǎn):
本文介紹了大神教你玩轉(zhuǎn) SSD 系列二:基準(zhǔn)測(cè)試環(huán)境和項(xiàng)目,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
如何評(píng)估固態(tài)存儲(chǔ)設(shè)備的性能,并根據(jù)業(yè)務(wù)需求挑選出合適的SSD產(chǎn)品?在上一篇中,介紹了 SSD 基準(zhǔn)測(cè)試應(yīng)該關(guān)注哪些指標(biāo),這里我們繼續(xù)關(guān)注基準(zhǔn)測(cè)試環(huán)境和具體測(cè)試項(xiàng)目.
本系列將分為以下 4 個(gè)主題進(jìn)行介紹.
一、SSD基準(zhǔn)測(cè)試應(yīng)該關(guān)注哪些指標(biāo)
二、基準(zhǔn)測(cè)試環(huán)境(工具/磁盤要求等)
三、針對(duì)磁盤的具體測(cè)試項(xiàng)目
四、數(shù)據(jù)處理
本篇主要介紹第二、三點(diǎn)——基準(zhǔn)測(cè)試環(huán)境和具體測(cè)試項(xiàng)目,在后面的文章推送中會(huì)繼續(xù)將把本系列的其他各主題分享給大家.
測(cè)試工具選擇有很多,比如fio, iometer, iozone, sysbench 等,但之所以選 fio,有以下原因:
fio 可以使用一系列的進(jìn)程或者線程,來完成用戶指定的一系列io操作,典型的使用方式是寫一個(gè) JobFile,來模擬特定的 io 壓力.
fio是測(cè)試IOPS的非常好的工具,用來對(duì)硬件進(jìn)行壓力測(cè)試和驗(yàn)證,支持13種不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等.
對(duì)于單qd,可以直接用 sync,對(duì)于多qd,libaio + 深qd 或者 深qd+多進(jìn)程(numjobs).
已經(jīng)踩過的坑:
測(cè)試中沒有使用 jobfile 的形式,而是直接使用了命令行,其實(shí)這兩種沒有什么本質(zhì)區(qū)別,依據(jù)個(gè)人喜好.
/usr/local/bin/fio –filename={FIO_TEST_FILE}
–direct=1
–ioengine=libaio
–group_reporting
–lockmem=512M
–time_based
–userspace_reap
–randrepeat=0
–norandommap
–refill_buffers
–rw=randrw –ramp_time=10
–log_avg_msec={LOG_AVG_MSEC}
–name={TEST_SUBJECT}
–write_lat_log={TEST_SUBJECT}
–write_iops_log={TEST_SUBJECT}
–disable_lat=1
–disable_slat=1
–bs=4k
–size={TEST_FILE_SIZE}
–runtime={RUN_TIME}
–rwmixread={READ_PERCENTAGE}
–iodepth={QUEUE_DEPTH}
–numjobs={JOB_NUMS}
介紹一下測(cè)試中可能會(huì)用到的參數(shù)
–filename 指定fio的測(cè)試文件路徑.可以是文件或設(shè)備(設(shè)備需要root權(quán)限)
–direct=1 繞過緩存
–ioengine=libaio 使用libaio,linux原生異步io引擎,更多引擎參考fio man
–group_reporting 將所有的進(jìn)程匯總,而不是對(duì)于每一個(gè)job 單獨(dú)給出測(cè)試結(jié)果
–lockmem=512M 將內(nèi)存限制在 512M,然而實(shí)際測(cè)試中發(fā)現(xiàn)似乎沒什么用,有待考察
–time_based 即使文件讀寫完畢依舊繼續(xù)進(jìn)行測(cè)試,直到指定的時(shí)間結(jié)束
–rwmixread 讀寫比例,0為全讀,100為全寫,中間為混合讀寫
–userspace_reap 提高異步IO收割的速度.
這是霸爺?shù)慕忉?(?http://blog.yufeng.info/archives/2104?),未做深入研究,但從測(cè)試來看,似乎影響不大
–randrepeat=0 指定每次運(yùn)行產(chǎn)生的隨即數(shù)據(jù)不可重復(fù)
官方解釋 Seed the random number generator in a predictable way so results are repeatable across runs. Default: true.
–norandommap 不覆蓋所有的 block
一般來說,在進(jìn)行4k 讀寫時(shí),由于隨機(jī)數(shù)的不確定性,可能有些塊自始至終都沒有被寫到,有些塊卻被寫了好多次.但對(duì)于測(cè)試來說 是否完全覆蓋到文件并沒有什么關(guān)系,而且測(cè)試時(shí)間相對(duì)足夠長(zhǎng)的時(shí)候,這些統(tǒng)計(jì)都可以略過.
–ramp_time=xxx(seconds)
指定在 xxx 秒之后開始進(jìn)行日志記錄和統(tǒng)計(jì)(預(yù)熱),非穩(wěn)態(tài)測(cè)試這里指定了10秒,用于讓主控和顆粒“進(jìn)入狀態(tài)”
–name 指定測(cè)試的名稱,代號(hào)
–write_latency_log=latency_log前綴 記錄延遲日志
–write_bw_log 記錄帶寬(吞吐量)日志
–write_iops_log 記錄 iops 日志
–bs=4k 4K測(cè)試
–size=XXXG 指定測(cè)試文件大小,如不指定,寫滿為止 或者全盤(例如/dev/sdX /dev/memdiskX)
–runtime=1200 執(zhí)行1200秒,或者執(zhí)行完整個(gè)測(cè)試,以先達(dá)到的為準(zhǔn).如果指定了 –time_based,則以此為準(zhǔn).
–log_avg_msec 本次采用1000,即每秒,相對(duì)記錄原始數(shù)據(jù)來說 fio 占用的內(nèi)存會(huì)大大減少.巨大的原始數(shù)據(jù)log也會(huì)占用大量磁盤空間,如果并非一定要記錄原始數(shù)據(jù),建議開啟.
即便是只做全盤的測(cè)試,不考慮不同OP的情況,也已經(jīng)有十幾項(xiàng),根據(jù)磁盤大小的不同,一項(xiàng)的測(cè)試時(shí)間也從兩小時(shí)~幾十小時(shí)不等.如果所有的測(cè)試都進(jìn)行,從開始測(cè)試到收割數(shù)據(jù)將是一個(gè)相當(dāng)漫長(zhǎng)的等待.并且這種測(cè)試還不能夠并行執(zhí)行.因而,選幾個(gè)典型的,線上可能出現(xiàn)的測(cè)試就可以.
本次進(jìn)行了QD1-32的讀取,寫入,混合讀寫測(cè)試.
測(cè)試應(yīng)該控制在多少時(shí)間,可以粗略的估算:比如某一款磁盤宣稱的最大 iops 為 100,000 iops,換算成帶寬,100000 * 4K 為越 400M,要超過至少寫滿3次磁盤容量,讓磁盤變得足夠臟的時(shí)間.
測(cè)試腳本為通用腳本,其中{}內(nèi)的數(shù)據(jù)會(huì)根據(jù)測(cè)試項(xiàng)目動(dòng)態(tài)生成,一共十多個(gè)項(xiàng)目,每個(gè)項(xiàng)目對(duì)應(yīng)一個(gè)腳本.
由于機(jī)器性能尚可,當(dāng) queue depth 達(dá)到32的時(shí)候,磁盤性能已被榨干,但單核心cpu占用率遠(yuǎn)沒有到 100%(實(shí)測(cè)平均在 40%左右,峰值60%左右),可以認(rèn)為處理器性能不是基準(zhǔn)測(cè)試的瓶頸. 但對(duì)于一些性能彪悍的 NVMe 設(shè)備或 PCI-E 卡,在隊(duì)列深度達(dá)到64的時(shí)候,磁盤性能還沒有被榨干,但單個(gè)CPU核心已經(jīng)100%了,此時(shí)需要保持 QD 在一個(gè)相對(duì)低一些的水平,增加 numjobs,使得總qd上去.來保證磁盤被“喂飽”,以免測(cè)試結(jié)果不準(zhǔn)確.但目前來看,一般業(yè)務(wù)真的很難用到QD64隊(duì)列.
于是此處又要注意幾個(gè)問題:
以上就是在做基準(zhǔn)測(cè)試時(shí)選擇的測(cè)試環(huán)境以及具體的測(cè)試項(xiàng)目,下一篇將會(huì)介紹測(cè)試數(shù)據(jù)處理.
可以從上一次推送《大神教你玩轉(zhuǎn) SSD 系列一:關(guān)注哪些指標(biāo)》了解最關(guān)注?SSD 的哪些指標(biāo).
原文來自微信公眾號(hào): HULK一線技術(shù)雜談
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4213.html