HDDのベンチマークを行うにはどうすればよいですか?


回答:


62

私は通常hdparm、HDDのベンチマークに使用します。直接読み取りとキャッシュ読み取りの両方をベンチマークできます。平均値を確立するには、コマンドを数回実行する必要があります。

これが直接読み取りです。

$ sudo hdparm -t /dev/sda2

/dev/sda2:
 Timing buffered disk reads: 302 MB in  3.00 seconds = 100.58 MB/sec

そして、ここにキャッシュされた読み取りがあります。

$ sudo hdparm -T /dev/sda2

/dev/sda2:
 Timing cached reads:   4636 MB in  2.00 seconds = 2318.89 MB/sec

詳細

-t     Perform  timings  of  device reads for benchmark and comparison 
       purposes.  For meaningful results, this operation should be repeated
       2-3 times on an otherwise inactive system (no other active processes) 
       with at least a couple of megabytes of free memory.  This displays  
       the  speed of reading through the buffer cache to the disk without 
       any prior caching of data.  This measurement is an indication of how 
       fast the drive can sustain sequential data reads under Linux, without 
       any filesystem overhead.  To ensure accurate  measurements, the 
       buffer cache is flushed during the processing of -t using the 
       BLKFLSBUF ioctl.

-T     Perform timings of cache reads for benchmark and comparison purposes.
       For meaningful results, this operation should be repeated 2-3
       times on an otherwise inactive system (no other active processes) 
       with at least a couple of megabytes of free memory.  This displays
       the speed of reading directly from the Linux buffer cache without 
       disk access.  This measurement is essentially an indication of the
       throughput of the processor, cache, and memory of the system under 
       test.

ddを使用する

私もddこの種のテストに使用しました。上記のコマンドに対して行う1つの変更は、コマンドの最後にこのビットを追加することです; rm ddfile

$ time sh -c "dd if=/dev/zero of=ddfile bs=8k count=250000 && sync"; rm ddfile

これによりddfile、コマンドの完了後にが削除されます。注: ddfileは一時的なファイルであり、保存する必要はありません。HDDに負荷がかかっているときddに(of=ddfile)に書き込むファイルです。

を超えて

HDDのより厳密なテストが必要な場合は、Bonnie ++を使用できます。

参照資料


1
hdparm簡単なベンチマークのためにも、私は好きです。唯一の欠点は、読み取り帯域幅のベンチマークのみであり、多くのタイプのブロックデバイス(RAID、iSCSIなど)のパフォーマンスが非常に非対称になる可能性があることです。同じボックスで「前」と「後」のパフォーマンスを比較する場合ddも、うまく機能します。
Alexios 14年

@Alexios-はい、言及してくれてありがとう。はい、あなたは、典型的には、少なくとも使用する必要がhdparm+ ddまたはちょうどbonnie++または全て3
SLM

疑わしい同期の代わりに、想定される場合はiflag = direct oflag = directを使用します(たとえば、直接IOをサポートするファイルシステムを使用するLinux)。

22

(これは非常に人気の質問です-あなたは上のそれのバリエーションを見ることができますhttps://stackoverflow.com/q/1198691https://serverfault.com/q/219739/203726https://askubuntu.com/q / 87035/740413

[ディスクのベンチマーク]に[dd]より優れた方法はありますか?

はい。ただし、実行に時間がかかり、結果の解釈方法に関する知識が必要になります。実行するテストの種類に次の影響があるため、一度にすべてを伝える単一の数字はありません。

  • ランダム、シーケンシャル、またはこの2つの組み合わせのI / Oのパフォーマンスに興味がありますか?
  • ディスク(またはこの2つの混合)の読み取りまたは書き込みを行っていますか?
  • 遅延、スループット、またはその両方が心配ですか?
  • 同じハードディスクのさまざまな部分がどのように動作するかを理解しようとしていますか?(一般的に、回転するディスクの中心に近づくほど高速になります)
  • ディスクを使用するときに特定のファイルシステムがどのように動作するかに興味がありますか、またはブロックデバイスに対して直接I / Oを実行して、ディスクの生のパフォーマンスにより近い結果が必要ですか?
  • 特定のサイズのI / Oのパフォーマンスに興味がありますか?
  • I / Oを同期的または非同期的に送信していますか?
  • どのくらいのI / Oを送信していますか(間違った方法で少なすぎる値を送信すると、すべてのI / Oがキャッシュされるため、ディスクの速度ではなくRAMの速度をテストすることになります)。
  • 書き込むデータのコンテンツはどの程度圧縮可能ですか(たとえば、ゼロのみのデータは高度に圧縮可能であり、一部のファイルシステム/ディスクには、ゼロのみのデータの特別な高速パスがあり、他のコンテンツでは取得できない数値につながります)?

等々。

以下は、一番上で実行するのが最も簡単で、一番下で難しい/より徹底的/より良いツールの短いリストです:

  1. dd(順次読み取りまたは書き込み、スループットのみを表示、ファイルシステムまたはブロックデバイスを使用するように構成でき、ブロックキャッシュをバイパスするか、I / Oが実際に完了するまで待機するように構成できます)
  2. hdparm(順次読み取りのみ、スループットのみを表示し、ファイルシステムを使用せず、ブロックキャッシュをバイパスするように構成できます。キャッシュテストは、開始2 MBのみを再読み取りします)
  3. GNOME Disk Utilityのベンチマーク(実行しやすく、ファイルシステムを使用せず、グラフィカルですが、完全なGNOMEインストールが必要で、さまざまなタイプのI / Oのレイテンシとスループットの数値を提供しますが、書き込みワークロードは実際にサンプルサイズごとに読み取り/書き込み/ fsyncを実行します)。
  4. fio(ほとんど何でもでき、詳細な結果が得られますが、構成と、その結果の解釈方法の理解が必要です)。Linusがそれについて言っていることは次のとおりです。

    Greg-JensのFIOコードを取得します。実際の擬似ランダムコンテンツの書き込みなど、ディスクが何らかの「重複排除」(「ベンチマーク用に最適化」)を行うかどうかを示すなど、適切に処理されます。

    [ https://github.com/axboe/fio/ ]

    それ以外は疑わしい-ボニーやその他の伝統的なツールを忘れてください。

出典:Linus TorvaldsによるGoogle PlusのGreg Kroah-Hartmanへのコメント


11

IOPSツールを使用

このすべてを読むのが面倒な場合は、IOPSツールをお勧めします。ブロックサイズに応じて実際の速度がわかります。


それ以外の場合-IOベンチマークを行うとき、次のことを確認します。

  • blocksize / cache / IOPS / direct vs buffered / async vs sync
  • 読み書き
  • スレッド
  • 待ち時間
  • CPU使用率

  • どのブロックサイズを使用しますか:1 GBのディスクから1 GBの読み取り/書き込みを行う場合、1つのI / O操作を行うと、これは迅速になります。ただし、アプリケーションがハードディスク上に512バイトのチャンクを非シーケンシャルピース(ランダムではないがランダムI / Oと呼ばれる)で書き込む必要がある場合、これは見た目が異なります。データベースは、その性質上、データボリュームに対してランダムI / Oを実行し、ログボリュームに対してシーケンシャルI / Oを実行します。そのため、まず、何を測定するかを明確にする必要があります。Linuxをインストールする場合とは異なる大きなビデオファイルをコピーする場合。

    このブロックサイズは、実行するI / O操作の数に影響します。たとえば、8つのシーケンシャル読み取り(または、混合ではなく書き込み)操作を実行すると、OSのI / Oスケジューラーがそれらをマージします。そうでない場合、コントローラーのキャッシュがマージを行います。512バイトの8個の連続ブロックまたは4096バイトのチャンクを読み取った場合、実際には違いはありません。1つの例外-直接同期IOを実行し、512バイトを待ってから次の512バイトを要求した場合。この場合、ブロックサイズを増やすことは、キャッシュを追加するようなものです。

    また、同期および非同期IOがあることに注意する必要があります。同期IOを使用すると、現在のIOリクエストが返る前に次のIOリクエストを発行しません。非同期IOを使用すると、たとえば10チャンクのデータを要求し、到着するのを待つことができます。通常、個別のデータベーススレッドは、ログに同期IOを使用し、データに非同期IOを使用します。IOPSツールは、512バイトから始まる関連するすべてのブロックサイズを測定することで、これを処理します。

  • 読み取りまたは書き込みを行います:通常、読み取りは書き込みより高速です。ただし、キャッシュは読み取りと書き込みでまったく異なる方法で機能することに注意してください。

    • 書き込みの場合、データはコントローラーに引き渡され、キャッシュされる場合、キャッシュがいっぱいでない限り、データがディスク上にある前に確認します。iozoneツールを使用すると、キャッシュ効果(CPUキャッシュ効果とバッファーキャッシュ効果)のプラトーの美しいグラフを描画できます。キャッシュは、書き込まれるほど効率が低下します。

    • 読み取りの場合、読み取りデータは最初の読み取り後にキャッシュに保持されます。最初の読み取りに最も時間がかかり、キャッシングが稼働中にますます効果的になります。注目すべきキャッシュは、CPUキャッシュ、OSのファイルシステムキャッシュ、IOコントローラーのキャッシュ、ストレージのキャッシュです。IOPSツールは読み取りのみを測定します。これにより、「場所全体を読み取る」ことができ、読み取りの代わりに書き込むことは望ましくありません。

  • 使用するスレッド数:1つのスレッドを使用する場合(ディスクベンチマークにddを使用する場合)、複数のスレッドを使用する場合よりもパフォーマンスが大幅に低下する可能性があります。IOPSツールはこれを考慮して、いくつかのスレッドを読み取ります。

  • レイテンシーはどれほど重要か:データベースを見ると、IOレイテンシーは非常に重要になります。挿入/更新/削除SQLコマンドは、確認される前にコミット時にデータベースジャーナル(データベース用語では「ログ」)に書き込まれます。これは、完全なデータベースがこのIO操作の完了を待機している可能性があることを意味します。ここでは、iostatツールを使用して平均待機時間(await)を測定する方法を示します

  • あなたにとってCPU使用率はどれほど重要か:あなたのCPUは、アプリケーションのパフォーマンスのボトルネックになりやすいでしょう。この場合、読み取り/書き込みのバイトごとにどれだけのCPUサイクルが消費されるかを知り、その方向に最適化する必要があります。これは、測定結果に応じて、PCIeフラッシュメモリの有無を決定することを意味します。この場合も、iostatツールを使用すると、IO操作によるCPU使用率のおおよその見積もりを得ることができます。


1
iopsスクリプトは素晴らしく、aptでもpipでもないことに本当に混乱しました。それは動作しますが。
-ThorSummoner

iopsツールは廃止されたようです。また、読み取りを測定するだけで、統計値(stddev / quantitativeの数値など)は出力しません。
-maxschlepzig

iopsツールはシンプルで、それが比較可能性を達成するために必要なものです。これは基本的に、ファイル上でランダムに実行される読み取りsyscallのラッパーです(すべてがファイルです)。それを信じるか、ソースを読んでください-それは終了し、コードは更新を必要としません。考えてみてください。それぞれが議論の余地のある数千行のコードを持つIOMeterのような別のツールが本当に必要ですか?そして、あなたは新しいバージョンで何をしますか?すべてのベンチマークをやり直す必要がありますか?
トールステンスターク

8

PostgreSQLをインストールしている場合、優れたpg_test_fsyncベンチマークを使用できます。基本的に、書き込み同期のパフォーマンスをテストします。

Ubuntuでは、次の場所にあります。 /usr/lib/postgresql/9.5/bin/pg_test_fsync

それの素晴らしいところは、このツールがエンタープライズSSDが余分な$に値する理由を示すことです。


2
Debianでは、postgresql-contribパッケージで入手できます。
TranslucentCloud

5

あなたは使用することができますfio- マルチスレッドIO生成ツールを。Fedora 25、Debian、OpenCSWなどのいくつかのディストリビューションでパッケージ化されています。

fioツールは非常に柔軟性が高く、同時実行を含むさまざまなIOシナリオのベンチマークに簡単に使用できます。このパッケージには、いくつかのサンプル設定ファイルが付属しています(egを参照/usr/share/doc/fio/examples)。物事を適切に測定します。つまり、一部の数値の標準偏差と定量統計も印刷します。他の人気のあるベンチマークツールが気にしないもの。

単純な例(一連の単純なシナリオ:順次/ランダムX読み取り/書き込み):

$ cat fio.cfg
[global]
size=1g
filename=/dev/sdz

[randwrite]
rw=randwrite

[randread]
wait_for=randwrite
rw=randread
size=256m

[seqread]
wait_for=randread
rw=read

[seqwrite]
wait_for=seqread
rw=write

呼び出し:

# fio -o fio-seagate-usb-xyz.log fio.cfg
$ cat fio-seagate-usb-xyz.log
[..]
randwrite: (groupid=0, jobs=1): err= 0: pid=11858: Sun Apr  2 21:23:30 2017
  write: io=1024.0MB, bw=16499KB/s, iops=4124, runt= 63552msec
clat (usec): min=1, max=148280, avg=240.21, stdev=2216.91
 lat (usec): min=1, max=148280, avg=240.49, stdev=2216.91
clat percentiles (usec):
 |  1.00th=[    2],  5.00th=[    2], 10.00th=[    2], 20.00th=[    7],
 | 30.00th=[   10], 40.00th=[   11], 50.00th=[   11], 60.00th=[   12],
 | 70.00th=[   14], 80.00th=[   16], 90.00th=[   19], 95.00th=[   25],
 | 99.00th=[ 9408], 99.50th=[10432], 99.90th=[21888], 99.95th=[38144],
 | 99.99th=[92672]
bw (KB  /s): min= 7143, max=371874, per=45.77%, avg=15104.53, stdev=32105.17
lat (usec) : 2=0.20%, 4=15.36%, 10=6.58%, 20=69.35%, 50=6.07%
lat (usec) : 100=0.49%, 250=0.07%, 500=0.01%, 750=0.01%
lat (msec) : 4=0.01%, 10=1.20%, 20=0.54%, 50=0.08%, 100=0.03%
lat (msec) : 250=0.01%
  cpu          : usr=1.04%, sys=4.79%, ctx=4977, majf=0, minf=11
  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
randread: (groupid=0, jobs=1): err= 0: pid=11876: Sun Apr  2 21:23:30 2017
  read : io=262144KB, bw=797863B/s, iops=194, runt=336443msec
[..]
bw (KB  /s): min=  312, max= 4513, per=15.19%, avg=591.51, stdev=222.35
[..]

[global]セクションにはグローバルなデフォルトがあり、他のセクションでオーバーライドできることに注意してください。各セクションはジョブを説明し、セクション名はジョブ名であり、自由に選択できます。デフォルトでは、異なるジョブが並行して開始されるため、上記の例では、wait_forキーを使用してジョブの実行を明示的にシリアル化し ます。また、fioは4 KiBのブロックサイズを使用します-これも変更できます。この例では、読み取りジョブと書き込みジョブにrawデバイスを直接使用するため、適切なデバイスを使用するようにしてください。このツールは、既存のファイルシステムでのファイル/ディレクトリの使用もサポートしています。

その他のツール

このhdparmユーティリティは、次のような非常に単純な読み取りベンチマークを提供します。

# hdparm -t -T /dev/sdz

これは、fioのような最先端のベンチマークツールに代わるものではなく、最初の妥当性チェックにのみ使用する必要があります。たとえば、外部USB 3ドライブがUSB 2デバイスとして誤って認識されているかどうかを確認するには(その場合、〜100 MiB / sの対比〜30 MiB / sレートが表示されます)。


1
この回答は、基本的に、回答の概要unix.stackexchange.com/a/138516/134856の別バージョンです(ただし、fioセクションが拡張されています)。fioの要約を提供するので、私は破れていますが、それは非常に長く、fio.readthedocs.io / en / latest / fio_doc.html#job
Anon

PS:Linuxのページキャッシュをバイパスしてディスクの速度のみを確認できるように、ジョブのグローバルセクションにdirect = 1を追加することをお勧めします(ただし、iodepthは1だけなので... [ディスクI / Oの送信に関する説明を挿入] )。また、ストーンウォール(fio.readthedocs.io/en/latest/…)をグローバルに使用して、すべてのジョブを順番に実行することも簡単です。
アノン

1

ここ指摘したよう、使用できますgnome-disks(Gnomeを使用する場合)。

テストするドライブをクリックし、[追加のパーティションオプション](ホイール)をクリックします。その後Benchmark Partition。平均読み取り/書き込みはMB /秒で、平均アクセス時間はミリ秒で取得します。とても快適だと感じました。


1

それは少し粗雑ですが、これはピンチで動作します:

find <path> -type f -print0 | cpio -0o >/dev/null

この手法を使用する/libと、すべての/usr/binファイルとファイルのキャッシュなど、いくつかの興味深いことができます。ベンチマークの一環としてこれを使用することもできます。

find / -xdev -type f -print0 | 
sort -R --from0-file=- | 
timeout "5m" cpio -0o >/dev/null

ルート上のすべてのファイル名が検出され、ランダムにソートされ、最大1分間キャッシュにコピーされます。cpioからの出力は、コピーされたブロック数を示します。1分あたりの平均ブロック数を取得するには、3回繰り返します。(注:検索/並べ替え操作には時間がかかる場合があります-コピーよりもはるかに長くなります。検索/並べ替えをキャッシュしてsplit、ファイルのサンプルを取得するために使用することをお勧めします。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.