DUICUO

Fio を使用して Linux でハードドライブのパフォーマンスを評価する方法

[[239822]]

Fio (Flexible I/O Tester) は、評価およびストレス/ハードウェア検証用に Jens Axboe によって開発された無料のオープンソース ソフトウェアです。

19種類のI/Oエンジン(sync、mmap、libaio、posixaio、SG v3、splice、null、network、syslet、guasi、solariisaioなど)、I/O優先度(新しいLinuxカーネル向け)、I/O速度、フォークタスクまたはスレッドタスクなどをサポートしています。ブロックデバイスとファイルの両方で動作します。

Fioは、非常にシンプルで分かりやすいテキスト形式でタスクの説明を受け付けます。ソフトウェアには、デフォルトで複数のサンプルタスクファイルが付属しています。Fioは、完全なI/Oレイテンシやパーセンテージなど、あらゆるタイプのI/Oのパフォーマンス情報を表示します。

テスト、品質保証、検証など、様々な場面で広く利用されています。Linux、FreeBSD、NetBSD、OpenBSD、OS X、OpenSolaris、AIX、HP-UX、Android、Windowsをサポートしています。

このチュートリアルではUbuntu 16を使用します。このコンピューターではsudoまたはroot権限が必要です。Fioのインストールと使い方を詳しく説明します。

Fioをソースコードからインストールする

GitHubからリポジトリをクローンします。必要な依存関係をインストールし、ソースからアプリケーションをビルドします。まず、Gitがインストールされていることを確認しましょう。

  1. sudo apt-get install git

CentOS ユーザーは次のコマンドを実行できます。

  1. sudo yum install git

ここで、 /optディレクトリに切り替えて、GitHub からリポジトリをクローンします。

  1. cd / opt
  2. git clone https : //github.com/axboe/fio

次のような出力が表示されます。

  1. Cloning into 'fio' ...
  2. remote : Counting objects : 24819 , done .
  3. remote : Compressing objects : 100 % ( 44 / 44 ), done .
  4. remote : Total 24819 ( delta 39 ), reused 62 ( delta 32 ), pack - reused 24743
  5. Receiving objects : 100 % ( 24819 / 24819 ), 16.07 MiB | 0 bytes / s , done .
  6. Resolving deltas : 100 % ( 16251 / 16251 ), done .
  7. Checking connectivity ... done .

ここで、 /optディレクトリで次のコマンドを入力して、Fio のコード ディレクトリに切り替えます。

  1. cd fio

makeを使用してソース コードからソフトウェアをビルドするには、次のコマンドを使用します。

  1. # ./ configure
  2. # make
  3. # make install

UbuntuにFioをインストールする

UbuntuとDebianの場合、Fioはすでにメインリポジトリに含まれています。yumやapt-getなどyum標準的なパッケージマネージャーを使って簡単にFioをインストールできます。

Ubuntu および Debian の場合は、次のコマンドを実行するだけです。

  1. sudo apt-get install fio

CentOS/Redhat の場合は、次のコマンドを実行するだけです。

CentOSでは、Fioをインストールする前に、システムにEPELリポジトリをインストールする必要がある場合があります。以下のコマンドを実行してインストールできます。

  1. sudo yum install epel - release - y

次のコマンドを実行して Fio をインストールできます。

  1. sudo yum install fio - y

Fioを使用したディスクパフォ​​ーマンステスト

Fio がシステムにインストールされました。Fio の使い方の例をいくつか見ていきましょう。ランダム書き込み、読み取り、読み書きテストを実行します。

ランダム書き込みテストを実行する

まず、以下のコマンドを実行してください。このコマンドは2つのプロセスを同時に実行し、合計4GB(4つのタスク×512MB=2GB)のファイルを書き込みます。

  1. sudo fio -- name = randwrite -- ioengine = libaio -- iodepth = 1 -- rw = randwrite -- bs = 4k -- direct = 0 -- size = 512M -- numjobs = 2 -- runtime = 240 -- group_reporting
  1. ...
  2. fio - 2.2 . 10
  3. Starting 2 processes
  4. randwrite : ( groupid = 0 , jobs = 2 ): err = 0 : pid = 7271 : Sat Aug 5 13 : 28 : 44 2017
  5. write : io = 1024.0MB , bw = 2485.5MB / s , iops = 636271 , runt = 412msec
  6. slat ( usec ): min = 1 , max = 268 , avg = 1.79 , stdev = 1.01
  7. clat ( usec ): min = 0 , max = 13 , avg = 0.20 , stdev = 0.40
  8. lat ( usec ): min = 1 , max = 268 , avg = 2.03 , stdev = 1.01
  9. clat percentiles ( usec ):
  10. | 1.00th =[ 0 ], 5.00th =[ 0 ], 10.00th =[ 0 ], 20.00th =[ 0 ],
  11. | 30.00th =[ 0 ], 40.00th =[ 0 ], 50.00th =[ 0 ], 60.00th =[ 0 ],
  12. | 70.00th =[ 0 ], 80.00th =[ 1 ], 90.00th =[ 1 ], 95.00th =[ 1 ],
  13. | 99.00th =[ 1 ], 99.50th =[ 1 ], 99.90th =[ 1 ], 99.95th =[ 1 ],
  14. | 99.99th =[ 1 ]
  15. lat ( usec ) : 2 = 99.99 %, 4 = 0.01 %, 10 = 0.01 %, 20 = 0.01 %
  16. cpu : usr = 15.14 %, sys = 84.00 %, ctx = 8 , majf = 0 , minf = 26
  17. IO depths : 1 = 100.0 %, 2 = 0.0 %, 4 = 0.0 %, 8 = 0.0 %, 16 = 0.0 %, 32 = 0.0 %, >= 64 = 0.0 %
  18. submit : 0 = 0.0 %, 4 = 100.0 %, 8 = 0.0 %, 16 = 0.0 %, 32 = 0.0 %, 64 = 0.0 %, >= 64 = 0.0 %
  19. complete : 0 = 0.0 %, 4 = 100.0 %, 8 = 0.0 %, 16 = 0.0 %, 32 = 0.0 %, 64 = 0.0 %, >= 64 = 0.0 %
  20. issued : total = r = 0 / w = 262144 / d = 0 , short = r = 0 / w = 0 / d = 0 , drop = r = 0 / w = 0 / d = 0
  21. latency : target = 0 , window = 0 , percentile = 100.00 %, depth = 1
  22. Run status group 0 ( all jobs ):
  23. WRITE : io = 1024.0MB , aggrb = 2485.5MB / s , minb = 2485.5MB / s , maxb = 2485.5MB / s , mint = 412msec , maxt = 412msec
  24. Disk stats ( read / write ):
  25. sda : ios = 0 / 0 , merge = 0 / 0 , ticks = 0 / 0 , in_queue = 0 , util = 0.00 %

ランダム読み取りテストを実行する

ランダム読み取りテストを実行し、ランダムに 2GB のファイルを読み取ってみます。

  1. sudo fio -- name = randread -- ioengine = libaio -- iodepth = 16 -- rw = randread -- bs = 4k -- direct = 0 -- size = 512M -- numjobs = 4 -- runtime = 240 -- group_reporting

次のような出力が表示されます。

  1. ...
  2. fio - 2.2 . 10
  3. Starting 4 processes
  4. randread : Laying out IO file ( s ) ( 1 file ( s ) / 512MB )
  5. randread : Laying out IO file ( s ) ( 1 file ( s ) / 512MB )
  6. randread : Laying out IO file ( s ) ( 1 file ( s ) / 512MB )
  7. randread : Laying out IO file ( s ) ( 1 file ( s ) / 512MB )
  8. Jobs : 4 ( f = 4 ): [ r ( 4 )] [ 100.0 % done ] [ 71800KB / 0KB / 0KB / s ] [ 17.1K / 0 / 0 iops ] [ eta 00m : 00s ]
  9. randread : ( groupid = 0 , jobs = 4 ): err = 0 : pid = 7586 : Sat Aug 5 13 : 30 : 52 2017
  10. read : io = 2048.0MB , bw = 80719KB / s , iops = 20179 , runt = 25981msec
  11. slat ( usec ): min = 72 , max = 10008 , avg = 195.79 , stdev = 94.72
  12. clat ( usec ): min = 2 , max = 28811 , avg = 2971.96 , stdev = 760.33
  13. lat ( usec ): min = 185 , max = 29080 , avg = 3167.96 , stdev = 798.91
  14. clat percentiles ( usec ):
  15. | 1.00th =[ 2192 ], 5.00th =[ 2448 ], 10.00th =[ 2576 ], 20.00th =[ 2736 ],
  16. | 30.00th =[ 2800 ], 40.00th =[ 2832 ], 50.00th =[ 2928 ], 60.00th =[ 3024 ],
  17. | 70.00th =[ 3120 ], 80.00th =[ 3184 ], 90.00th =[ 3248 ], 95.00th =[ 3312 ],
  18. | 99.00th =[ 3536 ], 99.50th =[ 6304 ], 99.90th =[ 15168 ], 99.95th =[ 18816 ],
  19. | 99.99th =[ 22912 ]
  20. bw ( KB / s ): min = 17360 , max = 25144 , per = 25.05 %, avg = 20216.90 , stdev = 1605.65
  21. lat ( usec ) : 4 = 0.01 %, 10 = 0.01 %, 250 = 0.01 %, 500 = 0.01 %, 750 = 0.01 %
  22. lat ( usec ) : 1000 = 0.01 %
  23. lat ( msec ) : 2 = 0.01 %, 4 = 99.27 %, 10 = 0.44 %, 20 = 0.24 %, 50 = 0.04 %
  24. cpu : usr = 1.35 %, sys = 5.18 %, ctx = 524309 , majf = 0 , minf = 98
  25. IO depths : 1 = 0.1 %, 2 = 0.1 %, 4 = 0.1 %, 8 = 0.1 %, 16 = 100.0 %, 32 = 0.0 %, >= 64 = 0.0 %
  26. submit : 0 = 0.0 %, 4 = 100.0 %, 8 = 0.0 %, 16 = 0.0 %, 32 = 0.0 %, 64 = 0.0 %, >= 64 = 0.0 %
  27. complete : 0 = 0.0 %, 4 = 100.0 %, 8 = 0.0 %, 16 = 0.1 %, 32 = 0.0 %, 64 = 0.0 %, >= 64 = 0.0 %
  28. issued : total = r = 524288 / w = 0 / d = 0 , short = r = 0 / w = 0 / d = 0 , drop = r = 0 / w = 0 / d = 0
  29. latency : target = 0 , window = 0 , percentile = 100.00 %, depth = 16
  30. Run status group 0 ( all jobs ):
  31. READ : io = 2048.0MB , aggrb = 80718KB / s , minb = 80718KB / s , maxb = 80718KB / s , mint = 25981msec , maxt = 25981msec
  32. Disk stats ( read / write ):
  33. sda : ios = 521587 / 871 , merge = 0 / 1142 , ticks = 96664 / 612 , in_queue = 97284 , util = 99.85 %

***、Fio がどのようなタイプの出力を返すかを確認するために、単純なランダム読み取り/書き込みテストをデモンストレーションします。

読み取り/書き込みパフォーマンステスト

次のコマンドは、USB ペンドライブ ( /dev/sdc1 ) のランダム読み取りおよび書き込みパフォーマンスをテストします。

  1. sudo fio -- randrepeat = 1 -- ioengine = libaio -- direct = 1 -- gtod_reduce = 1 -- name = test -- filename = random_read_write . fio -- bs = 4k -- iodepth = 64 -- size = 4G -- readwrite = randrw -- rwmixread = 75

上記のコマンドから得られた出力は次のとおりです。

  1. fio - 2.2 . 10
  2. Starting 1 process
  3. Jobs : 1 ( f = 1 ): [ m ( 1 )] [ 100.0 % done ] [ 217.8MB / 74452KB / 0KB / s ] [ 55.8K / 18.7K / 0 iops ] [ eta 00m : 00s ]
  4. test : ( groupid = 0 , jobs = 1 ): err = 0 : pid = 8475 : Sat Aug 5 13 : 36 : 04 2017
  5. read : io = 3071.7MB , bw = 219374KB / s , iops = 54843 , runt = 14338msec
  6. write : io = 1024.4MB , bw = 73156KB / s , iops = 18289 , runt = 14338msec
  7. cpu : usr = 6.78 %, sys = 20.81 %, ctx = 1007218 , majf = 0 , minf = 9
  8. IO depths : 1 = 0.1 %, 2 = 0.1 %, 4 = 0.1 %, 8 = 0.1 %, 16 = 0.1 %, 32 = 0.1 %, >= 64 = 100.0 %
  9. submit : 0 = 0.0 %, 4 = 100.0 %, 8 = 0.0 %, 16 = 0.0 %, 32 = 0.0 %, 64 = 0.0 %, >= 64 = 0.0 %
  10. complete : 0 = 0.0 %, 4 = 100.0 %, 8 = 0.0 %, 16 = 0.0 %, 32 = 0.0 %, 64 = 0.1 %, >= 64 = 0.0 %
  11. issued : total = r = 786347 / w = 262229 / d = 0 , short = r = 0 / w = 0 / d = 0 , drop = r = 0 / w = 0 / d = 0
  12. latency : target = 0 , window = 0 , percentile = 100.00 %, depth = 64
  13. Run status group 0 ( all jobs ):
  14. READ : io = 3071.7MB , aggrb = 219374KB / s , minb = 219374KB / s , maxb = 219374KB / s , mint = 14338msec , maxt = 14338msec
  15. WRITE : io = 1024.4MB , aggrb = 73156KB / s , minb = 73156KB / s , maxb = 73156KB / s , mint = 14338msec , maxt = 14338msec
  16. Disk stats ( read / write ):
  17. sda : ios = 774141 / 258944 , merge = 1463 / 899 , ticks = 748800 / 150316 , in_queue = 900720 , util = 99.35 %

このチュートリアルをお楽しみいただけたでしょうか?また、以下の内容がお役に立てば幸いです。Fioは非常に便利なツールですので、次回のデバッグセッションでぜひご活用ください。この記事がお役に立てましたら、ぜひコメントやご質問をお寄せください。