在 Linux 下如何測試硬碟效能(feat. Ubuntu)
每個管理員都會需要知道手上的裝置到底有多少能耐,尤其是型號眾多的儲存裝置,自己沒測過還真的不安心。
使用圖形界面的工具

搜尋
Disk就可以找到

傳輸率:
- 取樣數目:以我個人的經驗來說,預設的 100 就夠了,更多也不會準到哪裡去。如果你測的是隨身碟之類較慢的裝置,那就請設的更小一點,不然會測到天荒地老。
- 取樣大小:這個就比較微妙,不過我建議是看你的硬碟快取有多大,然後要比它大一些,像是現在的桌機多數都有 128M 以上,這時候我會設成 200M
注:這裡的
MiB指的是 Mega Binary Byte,也就是 1024 進位的意思
存取時間:
取樣數目:按照預設值就好了,除非你測的是很大的傳統硬碟 ex. 3T 以上

上圖是 創見 JetFlash JF760 16GB 的測試結果。
使用 hdparm
就… 好用的內建工具
➜  ~ sudo hdparm -tT --direct /dev/sda
/dev/sda:
 Timing O_DIRECT cached reads:   3160 MB in  2.00 seconds = 1580.36 MB/sec
 Timing O_DIRECT disk reads: 2702 MB in  3.01 seconds = 897.76 MB/sec
上面的設定 -t 測有快取的,-T 測沒快取的,--direct 關閉分頁快取。
使用 Sysbench
當然直接從套件庫安裝也是可以,不過套件庫裡面的版本比較舊,輸出結果比較難懂,我不喜歡。
sudo apt install sysbench
我比較喜歡從官方的 GitHub 上編譯,反正程式很小,編譯不用花多少時間!
首先安裝編譯需要的工具:
sudo apt install make automake libtool pkg-config libaio-dev
# For MySQL support
sudo apt install libmysqlclient-dev libssl-dev
# For PostgreSQL support
sudo apt install libpq-dev
到這裡下載最新的版本:
https://github.com/akopytov/sysbench/releases/latest
編譯並安裝:
# 解壓縮
unzip sysbench-1.x.x.zip
# 編譯
cd sysbench-1.x.x
./autogen.sh
# 加入 --with-pgsql 選項,以啟用 PostgreSQL
./configure
make -j4
# 安裝
sudo make install
安裝完成之後,就可以開始測試!
首先設定建立總計 1G 的測試檔案,怎麼生成就靠預設值:
~ » sysbench fileio --threads=20 --file-total-size=1G --file-test-mode=rndrw prepare
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)
128 files, 8192Kb each, 1024Mb total
Creating files for the test...
Extra file open flags: (none)
Creating file test_file.0
Creating file test_file.1
Creating file test_file.2
 ...略...
 Creating file test_file.127
 1073741824 bytes written in 13.79 seconds (74.27 MiB/sec).
接下來就可以開始測試:
➜  ~ sysbench fileio --threads=20 --file-total-size=1G --file-test-mode=rndrw run    
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)
...略...
File operations:
    reads/s:                      38.69
    writes/s:                     25.87
    fsyncs/s:                     208.78
Throughput:
    read, MiB/s:                  0.60
    written, MiB/s:               0.40
General statistics:
    total time:                          20.1341s
    total number of events:              2944
Latency (ms):
         min:                                    0.00
         avg:                                   80.90
         max:                                 3867.97
         95th percentile:                      376.49
         sum:                               238155.27
Threads fairness:
    events (avg/stddev):           147.2000/55.00
    execution time (avg/stddev):   11.9078/1.87
然後也不要忘記清理剛才建立的檔案:
➜  ~ sysbench fileio --threads=20 --file-total-size=1G --file-test-mode=rndrw cleanup
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)
Removing test files...
嗯… 我知道這段
使用 fio
總之是個很複雜的工具,報告非常詳細,我也只用過幾次,我覺得 SSORC.tw 在參數的解釋上比較詳細,有興趣的各位就直接去看吧!
注意:千萬 不要 指到 block 裝置,會抹掉的!
➜  ~ fio --name fio_test_read  --direct=1 --rw=randrw --bs=4k --size=1G --refill_buffers --ioengine=libaio --iodepth=16
fio_test_read: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.1
Starting 1 process
Jobs: 1 (f=1): [m(1)][95.9%][r=0KiB/s,w=0KiB/s][r=0,w=0 IOPS][eta 00m:02s]            
fio_test_read: (groupid=0, jobs=1): err= 0: pid=3020: Mon Jul 15 02:12:47 2019
   read: IOPS=2740, BW=10.7MiB/s (11.2MB/s)(512MiB/47824msec)
    slat (usec): min=2, max=890, avg=30.84, stdev=23.99
    clat (usec): min=63, max=11126k, avg=3510.23, stdev=150054.01
     lat (usec): min=80, max=11126k, avg=3541.69, stdev=150053.58
    clat percentiles (usec):
     |  1.00th=[    281],  5.00th=[    343], 10.00th=[    404],
     | 20.00th=[    494], 30.00th=[    529], 40.00th=[    553],
...略...
- --ioengine=libaio:還蠻有效的,用- async io的方式可以避免被 CPU 限制
- --name fio_test_read:請千萬不要用- /dev/sda之類的,除非你很清楚自己在幹麻
- --refill_buffers:避免使用 buffer
- --iodepth=16:使用 16 個 Thread / Worker 進行測試

 
																			 
																			 
																			 
																											 
																											![[Linux] 如何使用 LUKS 建立加密的磁碟映像檔](https://img.alexleo.click/Team-BoB_luks_disk_image/pixy.org_97715-small.jpg) 
																											![[筆記] Matplotlib 使用上的一些建議](https://img.alexleo.click/Team-BoB_matplotlib_notes/title.jpg) 
																											![[Git 筆記] merge、squash、rebase 三種方式的比較](https://img.alexleo.click/Team-BoB_git_merge_squash_rebase/cover.jpg) 
																											![[JavaScript] 手把手一起入門(二) – 變數 & 基本操作](;https://img.alexleo.click/teambob/WHATWG_JavaScript_logo.png) 
																											![[Linux] 如何安裝 Eclipse 在 Ubuntu 14.04](;https://img.alexleo.click/teambob/eclipse.png) 
																											![[Linux] 如何在 Ubuntu 14.04 中安裝 Oracle/Open JDK](;https://img.alexleo.click/teambob/java-coffee.png) 
																											![[C/C++] Linklist 的架構與使用](;https://img.alexleo.click/teambob/2405613966_c68110ca76_o.jpg)