磁盘I:O 性能指标 以及 如何通过 fio 对nvme ssd,optane ssd, pmem 性能摸底
文章目錄
- 1. 磁盤I/O性能指標
- 1.1 性能指標
- 1.2 I/O 觀測
- 1.2.1 磁盤I/O 觀測
- 1.2.2 進程I/O觀測
- 2. Fio 性能測試
- 2.1 環境準備
- 2.2 測試維度選擇
- 2.3 測試
- 2.3.1 optane ssd和nvme ssd性能測試
- 2.3.2 aep性能測試(intel persistent memory)
真正測試之前 我們需要清楚 評判磁盤I/O性能 是通過哪一些指標以及以查看相關指標的工具,這樣在實際測試以及生產環境中才能對磁盤I/O性能又有一個全面而正確的評估。
本文并沒有對文中提到的相關硬件的實現原理做描述,如有不足還請指正,謝謝。
1. 磁盤I/O性能指標
這里有一個磁盤性能指標相關的思維導圖
1.1 性能指標
- 使用率 :磁盤處理I/O時間的百分比,使用率過高(超過80%),可能存在I/O瓶頸。這個指標一般在機械硬盤中用來評判I/O瓶頸準確率會高一點,但是在固態硬盤,nvme,optane以及持久化內存aep中基本不會特別準確,即使達到100%,但并未達到其I/O帶寬。
- 飽和度:磁盤處理I/O的繁忙程度。飽和度過高,存在嚴重的性能瓶頸。如果飽和度為100%,則磁盤無法繼續接受I/O
- IOPS:每秒的I/O請求數
- 吞吐量(磁盤帶寬):每秒I/O請求總的大小
- 響應時間(I/O latency):I/O請求從發出到收到響應的時間
1.2 I/O 觀測
1.2.1 磁盤I/O 觀測
-
iostat
-
r/s: 每秒發送給磁盤的讀請求數。合并后的請求數 -
w/s: 每秒發送給磁盤的寫請求數。同上也是合并后的 -
rKB/s每秒從磁盤讀取的數據量 -
wKB/s:每秒向磁盤寫入的數據量 -
rrpm/s:每秒合并的讀請求數 -
wrpm/s:每秒合并的寫請求數 -
await: 讀/寫 請求處理完成的等待時間 -
r_wait:讀請求處理完成等待時間,也包括隊列中的等待時間和設備實際處理的時間,單位是ms -
w_wait:寫請求處理完成等待時間,也包括隊列中的等待時間和設備實際處理的時間,單位是ms -
avgqu-sz:平均請求隊列長度 -
avgrq-sz: 平均讀請求塊(sector)大小,一個sector是512B -
svctm:處理I/O請求所需的平均時間(不包括等待時間),單位ms。該指標不被推薦作為參考,后續該指標會在新版本的 iostat中移除
-
%utill: 磁盤處理I/O時間的百分比。
100% 并不一定是磁盤I/O瓶頸。
-
-
PS:
iostat 中的指標和我們磁盤I/O指標對應如下:
- %util 磁盤I/O的使用率
- r/s + w/s 即IOPS
- rKB/s + wKB/s 即 吞吐量
- r_await + w_await 響應時間
1.2.2 進程I/O觀測
pidstat -d 1UID用戶IDPID進程IDkB_rd/s進程每秒讀取的數據大小kB_wd/s進程每秒發出的數據大小kB_ccwr/s進程每秒取消的寫請求數據大小Command進程名稱
iotop追蹤多個正在處理讀寫的進程,需要root權限strace -p $pid/$tid -f查看進程/線程系統調用情況lsof -p pid追蹤一個具體進程打開的文件
2. Fio 性能測試
2.1 環境準備
軟件準備:
環境有fio ,那么就不需要安裝了。如果沒有,則可以直接通過環境中的安裝命令安裝一下,我的基礎環境是CentOS Linux release 7.4.1708 (Core) ,fio版本是:fio-3.7
硬件準備:
選擇要測試的磁盤,先確認磁盤型號 以及 官網給定的磁盤性能情況。
-
非AEP(intel pmem 持久化內存)的磁盤 查看磁盤型號命令可以通過:
sudo smartctl -a /dev/nvme0n1
-
這里很明顯是intel的ssd, 可以通過intel官網初步確認該ssd性能
intel 產品官網 搜索對應的 model number
這其實有點麻煩,當然買他們產品的時候肯定會附帶對應的文檔,會有相關的性能描述信息。
這里需要注意的是官網的latecny 一般是使用1depth+1job跑出來的延時,并非帶寬瓶頸時的延時
這個時候我們軟硬件都準備好了,同時也有了對應的性能標準,接下來就是按照自己的workload來測試當前硬件下的不同性能。
2.2 測試維度選擇
我們測試磁盤性能,那么內存/cache 相關的選項其實就沒有必要開了,直接用direct選項。
當然,如果測試的是aep 持久化內存相關的性能,這里其實只需要選擇intel在fio中提供的測試引擎即可。
下面的測試主要列一下通用的測試維度:
-
隊列深度
-
workload
磁盤性能的話 主要是隨機讀 ,隨機寫 以及 混合讀寫(5:5 和 9:1讀寫比)
2.3 測試
這里是通過將待測試設備格式化成文件系統,并將其掛載起來,然后通過fio的direct選項進行測試;當然fio也可以直接壓測裸盤,需要注意的是如果測盤不用的話可以直接壓測,如果磁盤上有數據或者該磁盤是系統盤,使用fio直接壓測會破壞磁盤的分區表。
2.3.1 optane ssd和nvme ssd性能測試
將設備格式化成xfs文件系統并掛載,通用的fio測試腳本如下,會將不同的workload全部跑完
[global]
ioengine=libaio # 選擇的i/o引擎,即使用什么方式的系統調用
direct=1 # direct選項,表示不經過文件系統
norandommap=1 # 覆蓋size內的每一個磁盤block,保證寫入均勻
randrepeat=0 # 保證完全隨機的I/O
time_based # 增加這個選項后面的runtim才會生效
runtime=60 # 保證進程運行60秒,如果寫/讀完成了size的大小,那么重復讀/寫,直到完成
size=1G # 一個文件大小是1G
directory=./fio # 指定fio壓測的文件目錄,一般會在該目錄內生成numjobs個size大小的文件group_reporting # 最終會將壓測結果形成可讀的報告[read4k-rand] # 壓測隨機讀
bs=4k
rw=randread
numjobs=1
iodepth=1[write4k-rand] # 壓測隨機寫
bs=4k
rw=randwrite
numjobs=1
iodepth=1[mixread50-rand] # 壓測1:1 隨機讀寫
bs=4k
rw=randrw
rwmixread=50
numjobs=1
iodepth=1[mixread90-rand] # 壓測9:1 隨機讀寫
bs=4k
rw=randrw
rwmixread=50
numjobs=1
iodepth=1
最后可以通過fio fio.conf命令來運行
不過以上的測試腳本僅僅選擇了workload的維度,并沒有增加iodepth和numjobs 維度,因此基本達不到ssd的性能瓶頸,需要測試的同學可以增加一下這個測試維度。
每一次跑完 輸出結果類似如下:
在測試過程中可以通過blktrace 系列工具進一步確認設備耗時情況:
# 以下命令默認在root權限下執行# -a read, 表示只抓讀請求,也可以-a write。默認是讀寫都抓
# -d 指定設備,最后會在當前目錄生成cpu邏輯核數個文件,類似nvme0n1.blktrace.55
# -w 指定抓取時間
blktrace -a read -d /dev/nvme0n1 -w 180 # 解析所有nvme0n1開頭的數據到一個文件nvme0n1.blktrace.bin
blkparse -i nvme0n1 -d nvme0n1.blktrace.bin# 生成報表
btt -i nvme0n1.blktrace.bin -o bttout
2.3.2 aep性能測試(intel persistent memory)
aep是intel 開發出來的新硬件,叫做持久化內存 pmem
擁有接近內存性能,但能夠持久化存儲。
其在整個intel存儲產品族中所處位置如下:
官方給的單個128G pmem的性能指標如下:
將pmem格式化成xfs文件系統,然后使用dax選項掛載:
mkfs.xfs /dev/pmem1
mount -o rw,noatime,attr2,dax,inode64,noquota /dev/pmem1 /mnt/disk1
以上主要是通過dax方式進行掛載,則寫入數據會跳過文件系統的IO棧,直接對接通用塊層的接口,否則沒有這個選項很難壓測到aep的性能瓶頸。
這里建議的測試腳本如下:
[global]
# 使用 pmem開發的io引擎,會跳過文件系統的相關調用,直接通過mmap寫入到持久化內存中
ioengine=libpmem
direct=1
norandommap=1
randrepeat=0
runtime=30
time_based
size=1G
directory=./fiogroup_reporting[read4k-rand]
bs=256B
rw=randread
numjobs=32
iodepth=4
cpus_allowed=0-15,32-47 #CPU綁核,cpu之間遷移造成的開銷會影響性能[write4k-rand]
bs=256B
rw=randwrite
numjobs=32
iodepth=4
cpus_allowed=0-15,32-47 #CPU綁核,cpu之間遷移造成的開銷會影響性能
關于aep 的設備IO情況,使用 linux操作系統工具比如(blktrace, iostat)是看不到的,需要使用intel提供的ipmwatch工具查看設備吞吐,以及emon查看耗時,兩個工具安裝比較辛苦,建議購買產品的時候直接讓intel搞定。
總結
以上是生活随笔為你收集整理的磁盘I:O 性能指标 以及 如何通过 fio 对nvme ssd,optane ssd, pmem 性能摸底的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Rocksdb 的优秀代码(一) --
- 下一篇: 电影的资源