日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

磁盘I:O 性能指标 以及 如何通过 fio 对nvme ssd,optane ssd, pmem 性能摸底

發布時間:2023/11/27 生活经验 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 磁盘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 1
    • UID 用戶ID
    • PID 進程ID
    • kB_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 性能摸底的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。