|
[[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がインストールされていることを確認しましょう。 -
sudo apt-get install git
CentOS ユーザーは次のコマンドを実行できます。 -
sudo yum install git
ここで、 /optディレクトリに切り替えて、GitHub からリポジトリをクローンします。 -
cd / opt -
git clone https : //github.com/axboe/fio
次のような出力が表示されます。 -
Cloning into 'fio' ... -
remote : Counting objects : 24819 , done . -
remote : Compressing objects : 100 % ( 44 / 44 ), done . -
remote : Total 24819 ( delta 39 ), reused 62 ( delta 32 ), pack - reused 24743 -
Receiving objects : 100 % ( 24819 / 24819 ), 16.07 MiB | 0 bytes / s , done . -
Resolving deltas : 100 % ( 16251 / 16251 ), done . -
Checking connectivity ... done .
ここで、 /optディレクトリで次のコマンドを入力して、Fio のコード ディレクトリに切り替えます。 -
cd fio
makeを使用してソース コードからソフトウェアをビルドするには、次のコマンドを使用します。 -
# ./ configure -
# make -
# make install
UbuntuにFioをインストールするUbuntuとDebianの場合、Fioはすでにメインリポジトリに含まれています。yumやapt-getなどyum標準的なパッケージマネージャーを使って簡単にFioをインストールできます。 Ubuntu および Debian の場合は、次のコマンドを実行するだけです。 -
sudo apt-get install fio
CentOS/Redhat の場合は、次のコマンドを実行するだけです。 CentOSでは、Fioをインストールする前に、システムにEPELリポジトリをインストールする必要がある場合があります。以下のコマンドを実行してインストールできます。 -
sudo yum install epel - release - y
次のコマンドを実行して Fio をインストールできます。 -
sudo yum install fio - y
Fioを使用したディスクパフォーマンステストFio がシステムにインストールされました。Fio の使い方の例をいくつか見ていきましょう。ランダム書き込み、読み取り、読み書きテストを実行します。 ランダム書き込みテストを実行するまず、以下のコマンドを実行してください。このコマンドは2つのプロセスを同時に実行し、合計4GB(4つのタスク×512MB=2GB)のファイルを書き込みます。 -
sudo fio -- name = randwrite -- ioengine = libaio -- iodepth = 1 -- rw = randwrite -- bs = 4k -- direct = 0 -- size = 512M -- numjobs = 2 -- runtime = 240 -- group_reporting
...-
fio - 2.2 . 10 -
Starting 2 processes -
randwrite : ( groupid = 0 , jobs = 2 ): err = 0 : pid = 7271 : Sat Aug 5 13 : 28 : 44 2017 write : io = 1024.0MB , bw = 2485.5MB / s , iops = 636271 , runt = 412msec slat ( usec ): min = 1 , max = 268 , avg = 1.79 , stdev = 1.01 clat ( usec ): min = 0 , max = 13 , avg = 0.20 , stdev = 0.40 lat ( usec ): min = 1 , max = 268 , avg = 2.03 , stdev = 1.01 clat percentiles ( usec ): | 1.00th =[ 0 ], 5.00th =[ 0 ], 10.00th =[ 0 ], 20.00th =[ 0 ], | 30.00th =[ 0 ], 40.00th =[ 0 ], 50.00th =[ 0 ], 60.00th =[ 0 ], | 70.00th =[ 0 ], 80.00th =[ 1 ], 90.00th =[ 1 ], 95.00th =[ 1 ], | 99.00th =[ 1 ], 99.50th =[ 1 ], 99.90th =[ 1 ], 99.95th =[ 1 ], | 99.99th =[ 1 ] lat ( usec ) : 2 = 99.99 %, 4 = 0.01 %, 10 = 0.01 %, 20 = 0.01 % cpu : usr = 15.14 %, sys = 84.00 %, ctx = 8 , majf = 0 , minf = 26 IO depths : 1 = 100.0 %, 2 = 0.0 %, 4 = 0.0 %, 8 = 0.0 %, 16 = 0.0 %, 32 = 0.0 %, >= 64 = 0.0 % submit : 0 = 0.0 %, 4 = 100.0 %, 8 = 0.0 %, 16 = 0.0 %, 32 = 0.0 %, 64 = 0.0 %, >= 64 = 0.0 % complete : 0 = 0.0 %, 4 = 100.0 %, 8 = 0.0 %, 16 = 0.0 %, 32 = 0.0 %, 64 = 0.0 %, >= 64 = 0.0 % issued : total = r = 0 / w = 262144 / d = 0 , short = r = 0 / w = 0 / d = 0 , drop = r = 0 / w = 0 / d = 0 latency : target = 0 , window = 0 , percentile = 100.00 %, depth = 1-
Run status group 0 ( all jobs ): WRITE : io = 1024.0MB , aggrb = 2485.5MB / s , minb = 2485.5MB / s , maxb = 2485.5MB / s , mint = 412msec , maxt = 412msec-
Disk stats ( read / write ): sda : ios = 0 / 0 , merge = 0 / 0 , ticks = 0 / 0 , in_queue = 0 , util = 0.00 %
ランダム読み取りテストを実行するランダム読み取りテストを実行し、ランダムに 2GB のファイルを読み取ってみます。 -
sudo fio -- name = randread -- ioengine = libaio -- iodepth = 16 -- rw = randread -- bs = 4k -- direct = 0 -- size = 512M -- numjobs = 4 -- runtime = 240 -- group_reporting
次のような出力が表示されます。 -
... -
fio - 2.2 . 10 -
Starting 4 processes -
randread : Laying out IO file ( s ) ( 1 file ( s ) / 512MB ) -
randread : Laying out IO file ( s ) ( 1 file ( s ) / 512MB ) -
randread : Laying out IO file ( s ) ( 1 file ( s ) / 512MB ) -
randread : Laying out IO file ( s ) ( 1 file ( s ) / 512MB ) -
Jobs : 4 ( f = 4 ): [ r ( 4 )] [ 100.0 % done ] [ 71800KB / 0KB / 0KB / s ] [ 17.1K / 0 / 0 iops ] [ eta 00m : 00s ] -
randread : ( groupid = 0 , jobs = 4 ): err = 0 : pid = 7586 : Sat Aug 5 13 : 30 : 52 2017 read : io = 2048.0MB , bw = 80719KB / s , iops = 20179 , runt = 25981msec slat ( usec ): min = 72 , max = 10008 , avg = 195.79 , stdev = 94.72 clat ( usec ): min = 2 , max = 28811 , avg = 2971.96 , stdev = 760.33 lat ( usec ): min = 185 , max = 29080 , avg = 3167.96 , stdev = 798.91 clat percentiles ( usec ): | 1.00th =[ 2192 ], 5.00th =[ 2448 ], 10.00th =[ 2576 ], 20.00th =[ 2736 ], | 30.00th =[ 2800 ], 40.00th =[ 2832 ], 50.00th =[ 2928 ], 60.00th =[ 3024 ], | 70.00th =[ 3120 ], 80.00th =[ 3184 ], 90.00th =[ 3248 ], 95.00th =[ 3312 ], | 99.00th =[ 3536 ], 99.50th =[ 6304 ], 99.90th =[ 15168 ], 99.95th =[ 18816 ], | 99.99th =[ 22912 ] bw ( KB / s ): min = 17360 , max = 25144 , per = 25.05 %, avg = 20216.90 , stdev = 1605.65 lat ( usec ) : 4 = 0.01 %, 10 = 0.01 %, 250 = 0.01 %, 500 = 0.01 %, 750 = 0.01 % lat ( usec ) : 1000 = 0.01 % lat ( msec ) : 2 = 0.01 %, 4 = 99.27 %, 10 = 0.44 %, 20 = 0.24 %, 50 = 0.04 % cpu : usr = 1.35 %, sys = 5.18 %, ctx = 524309 , majf = 0 , minf = 98 IO depths : 1 = 0.1 %, 2 = 0.1 %, 4 = 0.1 %, 8 = 0.1 %, 16 = 100.0 %, 32 = 0.0 %, >= 64 = 0.0 % submit : 0 = 0.0 %, 4 = 100.0 %, 8 = 0.0 %, 16 = 0.0 %, 32 = 0.0 %, 64 = 0.0 %, >= 64 = 0.0 % complete : 0 = 0.0 %, 4 = 100.0 %, 8 = 0.0 %, 16 = 0.1 %, 32 = 0.0 %, 64 = 0.0 %, >= 64 = 0.0 % issued : total = r = 524288 / w = 0 / d = 0 , short = r = 0 / w = 0 / d = 0 , drop = r = 0 / w = 0 / d = 0 latency : target = 0 , window = 0 , percentile = 100.00 %, depth = 16-
Run status group 0 ( all jobs ): READ : io = 2048.0MB , aggrb = 80718KB / s , minb = 80718KB / s , maxb = 80718KB / s , mint = 25981msec , maxt = 25981msec-
Disk stats ( read / write ): sda : ios = 521587 / 871 , merge = 0 / 1142 , ticks = 96664 / 612 , in_queue = 97284 , util = 99.85 %
***、Fio がどのようなタイプの出力を返すかを確認するために、単純なランダム読み取り/書き込みテストをデモンストレーションします。 読み取り/書き込みパフォーマンステスト次のコマンドは、USB ペンドライブ ( /dev/sdc1 ) のランダム読み取りおよび書き込みパフォーマンスをテストします。 -
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
上記のコマンドから得られた出力は次のとおりです。 -
fio - 2.2 . 10 -
Starting 1 process -
Jobs : 1 ( f = 1 ): [ m ( 1 )] [ 100.0 % done ] [ 217.8MB / 74452KB / 0KB / s ] [ 55.8K / 18.7K / 0 iops ] [ eta 00m : 00s ] -
test : ( groupid = 0 , jobs = 1 ): err = 0 : pid = 8475 : Sat Aug 5 13 : 36 : 04 2017 read : io = 3071.7MB , bw = 219374KB / s , iops = 54843 , runt = 14338msec write : io = 1024.4MB , bw = 73156KB / s , iops = 18289 , runt = 14338msec cpu : usr = 6.78 %, sys = 20.81 %, ctx = 1007218 , majf = 0 , minf = 9 IO depths : 1 = 0.1 %, 2 = 0.1 %, 4 = 0.1 %, 8 = 0.1 %, 16 = 0.1 %, 32 = 0.1 %, >= 64 = 100.0 % submit : 0 = 0.0 %, 4 = 100.0 %, 8 = 0.0 %, 16 = 0.0 %, 32 = 0.0 %, 64 = 0.0 %, >= 64 = 0.0 % complete : 0 = 0.0 %, 4 = 100.0 %, 8 = 0.0 %, 16 = 0.0 %, 32 = 0.0 %, 64 = 0.1 %, >= 64 = 0.0 % issued : total = r = 786347 / w = 262229 / d = 0 , short = r = 0 / w = 0 / d = 0 , drop = r = 0 / w = 0 / d = 0 latency : target = 0 , window = 0 , percentile = 100.00 %, depth = 64-
Run status group 0 ( all jobs ): READ : io = 3071.7MB , aggrb = 219374KB / s , minb = 219374KB / s , maxb = 219374KB / s , mint = 14338msec , maxt = 14338msec WRITE : io = 1024.4MB , aggrb = 73156KB / s , minb = 73156KB / s , maxb = 73156KB / s , mint = 14338msec , maxt = 14338msec-
Disk stats ( read / write ): sda : ios = 774141 / 258944 , merge = 1463 / 899 , ticks = 748800 / 150316 , in_queue = 900720 , util = 99.35 %
このチュートリアルをお楽しみいただけたでしょうか?また、以下の内容がお役に立てば幸いです。Fioは非常に便利なツールですので、次回のデバッグセッションでぜひご活用ください。この記事がお役に立てましたら、ぜひコメントやご質問をお寄せください。 |