經(jīng)常逛微軟的 Github 倉庫會發(fā)現(xiàn)很多好東西,比如這次介紹的 diskspd 命令行工具。diskspd 是一款磁盤性能測試工具,Github 項(xiàng)目地址為:使用 diskspd 可以輕松將磁盤的性能跑滿,從而測試磁盤的吞吐量、IOPS和延遲。對于很多虛擬機(jī)、網(wǎng)絡(luò)文件系統(tǒng),比如 NAS 、iSCSI,它們并非真實(shí)的硬件。使用硬盤測速、SSD測速等硬件測速工具無法對其進(jìn)行有效的測試。diskspd 可以通過讀寫文件的形式來測試真實(shí)系統(tǒng)的IO性能。diskspd -t2 -o32 -b4k -r4k -w0 -d120 -Sh -D -L -c100M test.io
以上例子對 C 盤下的 test.io 文件進(jìn)行測試,起了兩個(gè)測試線程,文件大小為 100M ,測試時(shí)間為 120s,最終測試報(bào)告如下:兩個(gè)線程,每個(gè)IO吞吐量為400MB/s,一共800MB/s,IOPS為 200000,延遲為 0.027 msdiskspd 的參數(shù)比較多,通過 diskspd /? 可以查看幫助文檔。以上例子中用的的參數(shù)有:-t2:這表示每個(gè)目標(biāo)/測試文件的線程數(shù)。此數(shù)字通?;?CPU 核心數(shù)。在本例中,使用兩個(gè)線程來對所有 CPU 核心施加壓力。
-o32:這表示每個(gè)目標(biāo)每個(gè)線程的未完成 I/O 請求數(shù)。這也稱為隊(duì)列深度,在本例中,使用 32 來強(qiáng)調(diào) CPU。
-b4K:這表示塊大?。ㄒ宰止?jié)、KiB、MiB 或 GiB 為單位)。在本例中,使用 4K 塊大小來模擬隨機(jī) I/O 測試。
-r4K:這表示隨機(jī) I/O 與指定大小(以字節(jié)、KiB、MiB、Gib 或塊為單位)對齊(覆蓋-s參數(shù))。使用常見的 4K 字節(jié)大小與塊大小正確對齊。
-w0:指定寫入請求操作的百分比(-w0 相當(dāng)于 100% 讀?。?。在本例中,0% 寫入用于進(jìn)行簡單測試。
-d120:這指定了測試的持續(xù)時(shí)間,不包括冷卻或預(yù)熱時(shí)間。默認(rèn)值為 10 秒,但我們建議對于任何嚴(yán)重的工作負(fù)載至少使用 60 秒。在本例中,使用了 120 秒來盡量減少任何異常值。
-Suw:禁用軟件和硬件寫入緩存(相當(dāng)于-Sh)。
-D:以毫秒為間隔捕獲 IOPS 統(tǒng)計(jì)數(shù)據(jù),例如標(biāo)準(zhǔn)偏差(每個(gè)線程、每個(gè)目標(biāo))。
-L:測量延遲統(tǒng)計(jì)數(shù)據(jù)。
-c100M:設(shè)置測試中使用的樣本文件大小??梢砸宰止?jié)、KiB、MiB、GiB 或塊為單位進(jìn)行設(shè)置。在本例中,使用了 100M 的目標(biāo)文件。
Examples:
Create 8192KB file and run read test on it for 1 second:
------------------------------------
創(chuàng)建一個(gè)8192KB的文件,并對其運(yùn)行1秒的read test:
diskspd -c8192K -d1 testfile.dat
Set block size to 4KB, create 2 threads per file, 32 overlapped (outstanding)
I/O operations per thread, disable all caching mechanisms and run block-aligned random
access read test lasting 10 seconds:
-------------------------------------------
將塊大小設(shè)置為4KB,每個(gè)文件創(chuàng)建2個(gè)線程,每個(gè)線程32個(gè)重疊I/O操作,
禁用所有緩存機(jī)制并運(yùn)行塊對齊隨機(jī)訪問讀取測試,持續(xù)10秒:
diskspd -b4K -t2 -r -o32 -d10 -Sh testfile.dat
Create two 1GB files, set block size to 4KB, create 2 threads per file, affinitize threads
to CPUs 0 and 1 (each file will have threads affinitized to both CPUs) and run read test
lasting 10 seconds:
-----------------------------
創(chuàng)建兩個(gè)1GB的文件,將塊大小設(shè)置為4KB,
為每個(gè)文件創(chuàng)建2個(gè)線程,將線程關(guān)聯(lián)到cpu 0和1(每個(gè)文件將有線程關(guān)聯(lián)到兩個(gè)cpu),
并運(yùn)行持續(xù)10秒的read測試:
diskspd -c1G -b4K -t2 -d10 -a0,1 testfile1.dat testfile2.dat
最后對硬盤性能中的主要參數(shù)做個(gè)說明:
“吞吐量”是一個(gè)比較容易理解的性能參數(shù),與我們平時(shí)拷貝文件時(shí)看到的拷貝速度是一個(gè)意思。吞吐量越大代表拷貝大文件時(shí)的速度越快。與“吞吐量”相對應(yīng)的是,IOPS代表對小文件的操作性能。IOPS是個(gè)頻率,IOPS越高代表“手?jǐn)?shù)”越快,也就是短時(shí)間內(nèi)可操作的文件數(shù)越多。在處理海量小文件時(shí),光統(tǒng)計(jì)文件數(shù)量這個(gè)操作對IOPS的要求就比較高。延遲代表著多任務(wù)排隊(duì)時(shí)需要等待。一般實(shí)時(shí)程序、數(shù)據(jù)庫對IO延遲比較敏感。并且 IOPS 越高并不代表著延遲越低,相反當(dāng)IOPS提高時(shí),延遲可能會增加。IOPS用于衡量存儲設(shè)備能處理的I/O請求的頻率,而延遲衡量每個(gè)I/O請求的響應(yīng)速度。高IOPS并不一定意味著低延遲,反之亦然。高并發(fā)操作可能導(dǎo)致更高的延遲。選擇存儲時(shí),需要考慮使用場景,確定是更需要高IOPS(例如海量小文件操作),還是低延遲(例如數(shù)據(jù)庫查詢或?qū)崟r(shí)處理)。
閱讀原文:原文鏈接
該文章在 2024/12/30 14:36:45 編輯過