Linux パフォーマンス監視の紹介記事で説明したように、IO サブシステムのパフォーマンスを測定することは非常に重要です。
あるサーバー (特定のファイルシステムまたは RAID 構成) で実行されているデータベース (または任意のアプリケーション) が、別のサーバーで実行されている同じデータベースまたはアプリケーションよりも高速に実行されていると誰かが不満を言っている場合は、ディスクレベルは両方のサーバーで同じです。この状況では iozone を使用できます。
データベース (または任意のアプリケーション) を特定の SAN または NAS 環境で実行していて、それを別の SAN または NAS 環境に移行したい場合は、以下を実行する必要があります。両方のシステムでファイルシステムのベンチマークを行い、比較します。この状況では、iozone を使用できます。
iozone の使い方を知っていれば、さまざまなファイルシステムのベンチマーク目的で使用できます。
IOZone をダウンロードしてインストール
Iozone は、オープン ソースのファイル システム ベンチマーク ユーティリティです。
以下の手順に従って、システムに iozone をダウンロードしてインストールしてください。
wget http://www.iozone.org/src/current/iozone3_394.tar tar xvf iozone3_394.tar cd iozone3_394/src/current make make linux
IOzoneユーティリティは何を測定しますか?
IOzoneは以下の13種類のテストを行います。データベース サーバーで iozone テストを実行している場合は、データベースのパフォーマンスに直接影響する最初の 6 つのテストに集中できます。
<オール>10 の IOZone の例
1.デフォルト値を使用してすべての IOZone テストを実行します
-a オプションは自動モードを表します。これにより、パフォーマンス テスト用にサイズ 64k から 512MB の一時テスト ファイルが作成されます。このモードでは、読み取りと書き込み (これについては後で詳しく説明します) のテストに 4k から 16M のレコード サイズも使用します。
-a オプションは、13 種類のテストすべてを実行します。
$ ./iozone -a
iozone 出力の最初のセットには、以下に示すように、iozone ユーティリティに関する情報と、このレポートの生成に使用されるすべての izone オプションを表示するヘッダー情報が含まれています。
Iozone: Performance Test of File I/O Version $Revision: 3.394 $ Compiled for 32 bit mode. Build: linux Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins Al Slater, Scott Rhine, Mike Wisner, Ken Goss Run began: Sat Apr 23 12:25:34 2011 Auto Mode Command line used: ./iozone -a Output is in Kbytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 Kbytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size.
出力の 2 番目のセクションには、さまざまなテストの出力値 (1 秒あたり) が含まれています。
- 1 列目の KB:テストに使用されたファイル サイズを示します。
- 2 列目 reclen:テストに使用されたレコード長を示します。
- 3 列目から最後の列まで:実行されるさまざまなテストとその出力値を 1 秒あたりで示します。
random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 64 4 495678 152376 1824993 2065601 2204215 875739 582008 971435 667351 383106 363588 566583 889465 64 8 507650 528611 1051124 1563289 2071399 1084570 1332702 1143842 2138827 1066172 1141145 1303442 2004783 64 16 587283 1526887 2560897 2778775 2366545 1122734 1254016 593214 1776132 463919 1783085 3214531 3057782 64 32 552203 402223 1121909 1388380 1162129 415722 666360 1163351 1637488 1876728 1685359 673798 2466145 64 64 551580 1122912 2895401 4911206 2782966 1734491 1825933 1206983 2901728 1207235 1781889 2133506 2780559 128 4 587259 1525366 1801559 3366950 1600898 1391307 1348096 547193 666360 458907 1486461 1831301 1998737 128 8 292218 1175381 1966197 3451829 2165599 1601619 1232122 1291619 3273329 1827104 1162858 1663987 1937151 128 16 650008 510099 4120180 4003449 2508627 1727493 1560181 1307583 2203579 1229980 603804 1911004 2669183 128 32 703200 1802599 2842966 2974289 2777020 1331977 3279734 1347551 1152291 684197 722704 907518 2466350 128 64 848280 1294308 2288112 1377038 1345725 659686 1997031 1439349 2903100 1267322 1968355 2560063 1506623 128 128 902120 551579 1305206 4727881 3046261 1405509 1802090 1085124 3649539 2066688 1423514 2609286 3039423 ...
2. izone -b を使用して出力をスプレッドシートに保存します
iozone の出力をスプレッドシートに保存するには、以下に示すように -b オプションを使用します。 -b はバイナリを表し、テスト出力をバイナリ形式でスプレッドシートに書き込むように iozone に指示します。
$ ./iozone -a -b output.xls
注:-b オプションは、以下に示す例のいずれでも使用できます。
スプレッドシートに保存されたデータから、スプレッドシート ツールのグラフ機能を使用してきれいなグラフを作成できます。以下は、iozone の出力から作成されたサンプル グラフです。
図 :IOZoneグラフ
3. iozone -i を使用して特定のタイプのテストのみを実行します
特定のタイプのテストのみを実行することに関心がある場合は、-i オプションを使用してください。
構文:
iozone -i [test-type]
test-type は数値です。以下は、利用可能なさまざまなテストの種類とその数値です。
- 0=書き込み/書き換え
- 1=既読/再読
- 2=ランダム読み取り/書き込み
- 3=逆読み
- 4=記録を書き直す
- 5=ストライド リード
- 6=fwrite/re-fwrite
- 7=fread/re-fread,
- 8=ランダムミックス
- 9=pwrite/re-pwrite
- 10=既読/再読
- 11=pwritev/Re-pwritev
- 12=preadv/re-preadv
次の例では、書き込みテストのみを実行します (つまり、書き込みと書き換えの両方)。出力からわかるように、他の列は空です。
$ ./iozone -a -i 0 random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 64 4 353666 680969 64 8 477269 744768 64 16 429574 326442 64 32 557029 942148 64 64 680844 633214 128 4 187138 524591
複数のイオゾン テスト タイプを組み合わせる
コマンド ラインで複数の -i を指定して、複数のテスト タイプを組み合わせることもできます。
たとえば、次の例では、読み取りと書き込みの両方のテスト タイプをテストします。
$ ./iozone -a -i 0 -i 1 random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 64 4 372112 407456 1520085 889086 64 8 385574 743960 3364024 2553333 64 16 496011 397459 3748273 1330586 64 32 499600 876631 2459558 4270078
4. iozone -s を使用してファイル サイズを指定します
デフォルトでは、iozone はさまざまなテストを実行するために、64k から 512M のサイズの一時ファイルを自動的に作成します。
iozone 出力の 1 列目 (列ヘッダーは KB) は、ファイル サイズを示します。前の出力からわかるように、64KB のファイルから始まり、512M まで増加し続けます (毎回ファイル サイズを 2 倍にすることによって)。
すべてのファイル サイズのテストを実行する代わりに、オプション -s を使用してファイル サイズを指定できます。
次の例では、ファイル サイズ 1MB (つまり 1024KB) に対してのみ書き込みテストを実行します。
$ ./iozone -a -i 0 -s 1024 random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 1024 4 469710 785882 1024 8 593621 1055581 1024 16 745286 1110539 1024 32 610585 1030184 1024 64 929225 1590130 1024 128 1009859 1672930 1024 256 1042711 2039603 1024 512 941942 1931895 1024 1024 1039504 706167
5. iozone -r を使用してテスト用のレコード サイズを指定します
テストを実行すると、特定のファイル サイズに対して、4k から 16M までのさまざまなレコード サイズでテストされます。
Oracle データベースをホストする I/O サブシステムの I/O パフォーマンス テストを行う場合は、iozone のレコード サイズを DB ブロック サイズと同じ値に設定することをお勧めします。データベースは、DB ブロック サイズに基づいて読み取りと書き込みを行います。
reclen はレコード長を表します。前の例では、2 番目の列 (列ヘッダー「reclen」を含む) は、IOzone のテストに使用する必要があるレコード長を示しています。前の出力例では、ファイル サイズが 1024KB の場合、iozone テストでは 4k から 16M までのさまざまなレコード サイズを使用して書き込みテストを実行しました。
これらすべてのデフォルトのレコード長サイズを使用する代わりに、テストするレコード サイズを指定することもできます。
以下の例では、レコード長が 32k の場合にのみ書き込みテストを実行します。出力では、2 列目に 32 のみが表示されます。
$ ./iozone -a -i 0 -r 32 random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 64 32 566551 820553 128 32 574098 1000000 256 32 826044 948043 512 32 801282 1560624 1024 32 859116 528901 2048 32 881206 1423096
6.ファイルサイズとレコードサイズを組み合わせる
-s オプションと -r オプションの両方を使用して、正確な一時ファイル サイズと、テストが必要な正確なレコード長を指定することもできます。
たとえば、次の例では、レコード長が 1M の 2M ファイルを使用して書き込みテストを実行します。
$ ./iozone -a -i 0 -s 2048 -r 1024 random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 2048 1024 1065570 1871841
7. iozone -t を使用したスループット テスト
スループット モードで iozone を実行するには、-t オプションを使用します。このテスト中にアクティブにする必要があるスレッドの数も指定する必要があります。
次の例では、2 つのスレッドを使用して書き込みの iozone スループット テストを実行します。 -a オプションと -t オプションを組み合わせることはできないことに注意してください。
$ ./iozone -i 0 -t 2 Children see throughput for 2 initial writers 1= 433194.53 KB/sec Parent sees throughput for 2 initial writers = 7372.12 KB/sec Min throughput per process = 0.00 KB/sec Max throughput per process = 433194.53 KB/sec Avg throughput per process = 216597.27 KB/sec Min xfer = 0.00 KB Children see throughput for 2 rewriters = 459924.70 KB/sec Parent sees throughput for 2 rewriters = 13049.40 KB/sec Min throughput per process = 225610.86 KB/sec Max throughput per process = 234313.84 KB/sec Avg throughput per process = 229962.35 KB/sec Min xfer = 488.00 KB
すべてのテスト タイプのスループットを実行するには、以下に示すように、上記の例から「-i 0」を削除します。
$ ./iozone -t 2
8. iozone -+u を使用して CPU 使用率を含める
iozone テストの実行中に、-+u オプションを使用して CPU 使用率を収集するように iozone に指示することもできます。
オプションの前の -+ は少し奇妙に見えるかもしれません。ただし、これを正しく機能させるには、-+u 全体 (-u や +u だけでなく) を指定する必要があります。
次の例では、すべてのテストを実行し、生成される Excel スプレッドシート出力の一部として CPU 使用率レポートを含めます。
$ ./iozone -a -+u -b output.xls
注:これにより、実行される各テストごとに個別の CPU 使用率が表示されます。
9. iozone -g を使用してファイル サイズを増やします
これは重要。システムに 512MB を超える RAM がある場合は、iozone がテストに使用する一時ファイルのサイズを増やす必要があります。そうしないと、システム バッファ キャッシュが関与するため、正確な結果が得られない可能性があります。
正確なディスク パフォーマンスを得るには、一時ファイルのサイズをシステム バッファ キャッシュのサイズの 3 倍にすることをお勧めします。
次の例では、最大ファイル サイズを 2GB に増やして iozone を実行し、書き込みテストの自動 iozone テストを実行します。
$ ./iozone -a -g 2G -i 0 random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 64 4 556674 1230677 64 8 278340 441320 64 16 608990 1454053 64 32 504125 1085411 64 64 571418 1279331 128 4 526602 961764 128 8 714730 518219 ...
10. iozone -F を使用して複数のマウント ポイントをまとめてテストする
いくつかの iozone オプションを組み合わせることで、以下に示すように、複数のマウント ポイントでディスク I/O テストを実行できます。
マウント ポイントが 2 つある場合は、2 つの異なる iozone スレッドを開始して、以下に示すように、テスト用にこれらの両方のマウント ポイントに一時ファイルを作成できます。
$ ./iozone -l 2 -u 2 -r 16k -s 512M -F /u01/tmp1 /u02/tmp2
- -l は、開始する必要がある iozone プロセスの最小数を示します
- -u は、開始する必要がある iozone プロセスの最大数を示します
- -F には複数の値を含める必要があります。つまり、-l と -u の両方で 2 を指定すると、ここに 2 つのファイル名が必要になります。マウント ポイントのみが存在する必要があることに注意してください。 -F オプションで指定されたファイルは、テスト中に izone がこの一時ファイルを作成するため、存在する必要はありません。上記の例では、マウント ポイントは /u01 と /u02 です。ファイル tmp1 と tmp2 は、テスト目的で iozone によって自動的に作成されます。
Linux パフォーマンスの監視とチューニング シリーズの以前の記事:
- Linux パフォーマンスの監視とチューニングの概要
- 15 の実用的な Linux トップ コマンドの例
- プロセス監視のための 7 つの実用的な PS コマンドの例
- UNIX / Linux のパフォーマンス監視に役立つ Sar (Sysstat) の 10 の例