Linux
 Computer >> コンピューター >  >> システム >> Linux

Linuxでディスクパフォーマンス(IOPSとレイテンシー)を確認する方法

本記事では、Linux環境でディスクやストレージアレイのパフォーマンスを確認する方法を解説します。IOPS(Input/Output Operations Per Second:秒間入出力操作数)とは、ストレージシステムが1秒間に実行できる入出力操作の回数を指す指標です。対象は単一のディスクでも、RAIDアレイでも、外部ストレージデバイス上のLUNでも構いません。一般的にIOPSは、メディアに対して読み書き可能なブロック数として捉えられています。

多くのディスクメーカーは公称IOPS値をカタログに掲載していますが、あくまで参考値であり保証ではありません。プロジェクトを始める前にストレージサブシステムの実力を把握しておくためにも、実際にどこまでのIOPSが出るのか最大値を計測しておくことをおすすめします。

fio(Flexible I/O)ツールでストレージのベンチマークを行う

LinuxでディスクのIOPS性能を測定するには、fioというツールを使用します(CentOS/RHELの場合はEPELリポジトリから入手可能です)。RHELやCentOSにfioをインストールするには、yum(dnf)パッケージマネージャーを使います。

# yum install epel-release -y
# yum install fio -y

DebianやUbuntuの場合はapt-getを使用します。

# apt-get install fio

続いて、テスト対象となるディスクを特定します。テストは、ディスクまたはLUNがマウントされているディレクトリに対して読み書き操作を実行することで行われます。

ここでは、さまざまなディスク負荷シナリオごとに複数種類のIOPS性能テストを実施してみましょう。テストモードは、ホストするアプリケーションの特性やプロジェクト全体のインフラ構成に応じて選択してください。

ランダム読み書きテスト

このテストを実行すると、まず8GBのファイルが作成されます。その後、fioが4KBブロック(標準的なブロックサイズ)を読み書きし、読み込みと書き込みの比率を75/25%として性能を測定します。実行コマンドは以下の通りです。

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randrw --rwmixread=75

筆者がSSD2台で構成されたアレイで最初のテストを実行したところ、良好な結果が得られました。

  • 読み込み: 3280MiB/s、平均IOPS 83000
  • 書き込み: 110MiB/s、平均IOPS 28000

今回は読み書き混合テストのため、個別に測定すればさらに高い値が期待できます。

比較として、SATAドライブでも同じテストを実施しました。

  • 読み込み: IOPS=430、BW=1.7MiB/s
  • 書き込み: IOPS=143、BW=0.6MiB/s

当然ながら、HDDの結果はSSDに比べて大きく劣ります。

ランダム読み込みテスト

ランダム読み込みのみの性能を測定するには、以下のコマンドを実行します。

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randread

コマンドの末尾部分が --readwrite=randread に変わっている点に注目してください。

先述の通り、読み込みと書き込みを個別に測定すると性能値は向上します。

READ: IOPS=150k, BW=584MiB/s (612MB/s)

ランダム書き込みテスト

ランダム書き込みの性能を測定するには、次のコマンドを実行します。

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=fiotest --bs=4k --iodepth=64 --size=8G --readwrite=randwrite

WRITE: IOPS=84.7k, BW=331MiB/s (347MB/s)

高性能なSSDであれば、書き込み性能も非常に高い水準になります。読み込みテストと同様に、混合テストとの差は200〜250MiB/s、約50000IOPSに達しました。

メーカーの公式ドキュメント(今回使用したのはIntel製SSDです)と照らし合わせても、これらの測定値は妥当だと言えます。

fio設定ファイルを使ったテスト方法

fioは、対話型コマンドだけでなく、事前に用意した設定ファイルを使ってディスク性能をテストすることもできます。この方法を利用する場合は、まずファイルを作成します。

# nano read.fio

そして、以下の内容を記述してください。

[global]
rw=randread
size=8G
filename=/tmp/testfio
ioengine=libaio
iodepth=4
invalidate=1
direct=1
[bgread]
rw=randread
iodepth=64

その後、次のコマンドでテストを開始します。

# fio read.fio

このテストではディスクの読み込み性能が測定されます。書き込み性能をテストしたい場合は、以下の設定ファイルを使用します。

[global]
rw=randwrite
size=8G
filename=/tmp/testfio
ioengine=libaio
iodepth=4
invalidate=1
direct=1
[bgwrite]
rw=randwrite
iodepth=64

iopingでディスクのレイテンシーを測定する

IOPS以外にも、ストレージの品質を示す重要な指標があります。それがレイテンシーです。レイテンシーとは、入出力要求の遅延時間、つまりストレージへのアクセスにかかる時間のことであり、ミリ秒単位で測定されます。レイテンシーが高いほど、アプリケーションはディスクからデータを受け取るまで長く待たされることになります。一般的なストレージシステムでは、20msを超えるレイテンシーは劣悪と判断されます。

Linuxでディスクのレイテンシーを確認するには、iopingツールを使用します。

# yum install ioping -y

# apt-get install ioping

ディスクのレイテンシーテストを実行します(20件のリクエストを送信)。

# ioping -c 20 /tmp/

4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=1 time=1.55 ms (warmup)
......................
4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=19 time=176.3 us (fast)
4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=20 time=356.9 us
--- /tmp/ (ext4 /dev/md126p5) ioping statistics ---
19 requests completed in 5.67 ms, 76 KiB read, 3.35 k iops, 13.1 MiB/s
generated 20 requests in 19.0 s, 80 KiB, 1 iops, 4.21 KiB/s
min/avg/max/mdev = 176.3 us / 298.7 us / 368.9 us / 45.7 us

平均値は298.7us(マイクロ秒)なので、この場合の平均レイテンシーは0.3msとなり、非常に優れた結果と言えます。

なお、レイテンシーの値はus(マイクロ秒)またはms(ミリ秒)で表示されます。usの値をmsに変換するには、1,000で割ればOKです。

まとめ

以上のように、プロジェクトの立ち上げ前にサーバーでストレージ負荷テストを実施すれば、そのストレージが発揮しうる最高性能を把握できます。ただし、テスト結果が常に同じ性能を保証するわけではない点には留意が必要です。それでも、プロジェクトの初期段階で一度テストしておく価値は十分にあります。Windows環境でIOPSをテストする方法については、別記事で詳しく解説していますので、併せてご参照ください。

  1. Linuxでディスク容量を確認・管理する方法|df/duコマンドと便利ツール徹底解説

    システム管理者に不可欠なスキルのひとつが、オンライン・オフライン双方のシステムの健全性を維持することです。特に本番サーバーでは、ダウンタイムやトラブルがデータ損失につながる可能性があるため、その重要性は一段と高まります。よくある問題のひとつが、ディスク容量不足によってアップデートが失敗するケースです。しかし、エラーメッセージが表示された際にいくつかの簡単なチェックを行うことで、重要なシステムをスムーズに稼働させ続けることができます。主に使用するのは、次の2つのコマンドです。df – システム全体のディスク容量状況を報告するdu – 特定のファイルやディレクトリが使用している容量を表示するそれぞ

  2. Linuxでディスク容量を確認・管理する方法|df・duコマンドの使い方を徹底解説

    ディスク容量の管理は、使用するプラットフォームに関わらず、すべてのコンピューターユーザーにとって重要な課題です。特にシステム管理者の方は、オンライン・オフライン問わずシステムの健全性を常に監視する必要があります。Linuxではディスク容量が不足するとアップデートが妨げられ、深刻なエラーにつながる可能性もあるからです。 そこで、ディスク全体の空き容量や特定のファイルが使用している容量を把握するためには、「df」コマンドと「du」コマンドを使いこなせるようになることが不可欠です。 本記事では、dfコマンドとduコマンドを使ってLinux上のディスク容量を確認・管理する方法を詳しく解説します。 df