私は通常 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
詳細h3> -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 の使用
-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
を使用しました このタイプのテストにも。上記のコマンドに加える変更の 1 つは、コマンドの最後にこのビット ; rm ddfile
を追加することです。 .
$ time sh -c "dd if=/dev/zero of=ddfile bs=8k count=250000 && sync"; rm ddfile
これにより、 ddfile
が削除されます コマンドが完了した後。 注: ddfile
保持する必要のない一時ファイルです。dd
(of=ddfile
に書き込んでいます )、HDD に負荷がかかっているとき。
その先へ
HDD のより厳密なテストが必要な場合は、Bonnie++ を使用できます。
参考文献
- ディスクまたは CPU のベンチマークに「dd」を使用する方法
- DD と Bonnie++ によるディスク IO のベンチマーク
(これは非常によくある質問です - https://stackoverflow.com/q/1198691 、 https://serverfault.com/q/219739/203726 、および https://askubuntu.com/q でそのバリエーションを見ることができます/87035/740413)
<ブロック引用>[ディスクをベンチマークする] [dd] よりも優れた方法はありますか?
はい。ただし、実行に時間がかかり、結果を解釈する方法についての知識が必要です。実行する必要があるテストの種類には次のような影響があるため、すべてを一度に説明できる単一の数字はありません:
- ランダム、シーケンシャル、またはその両方の I/O のパフォーマンスに関心がありますか?
- ディスクの読み取りまたは書き込みを行っていますか (またはその両方が混在していますか)?
- 待ち時間、スループット、またはその両方について懸念がありますか?
- 同じハードディスクのさまざまな部分がどのように機能するかを理解しようとしていますか?
- ディスクの使用時に特定のファイル システムがどのように動作するかに関心がありますか?それとも、ブロック デバイスに直接 I/O を実行することで、ディスクの生のパフォーマンスに近い結果が必要ですか?
- 特定のサイズの I/O のパフォーマンスに関心がありますか?
- I/O を同期または非同期で送信していますか?
- 送信する I/O の量はどれくらいですか (送信する方法が少なすぎると、すべての I/O がキャッシュされて、ディスクの速度ではなく RAM の速度をテストすることになります)?
- 書き込んでいるデータのコンテンツはどの程度圧縮できますか?
などなど。
以下は、最も実行しやすいツールを一番上に、難しい/より徹底した/より良いツールを一番下に並べた短いリストです:
<オール>Greg - Jens の FIO コードを入手してください。ディスクが何らかの「重複排除」(別名「ベンチマークの最適化」) を行っているかどうかを示す、実際の疑似ランダム コンテンツの書き込みなど、適切に処理します。
[ https://github.com/axboe/fio/ ]
それ以外は疑いがあります - bonnie やその他の従来のツールは忘れてください。
ソース: Linus Torvalds が Google Plus に Greg Kroah-Hartman に残したコメント
IOPS ツールを使用
これをすべて読むのが面倒なら、IOPS ツールをお勧めします。ブロックサイズに応じて実際の速度がわかります。
それ以外の場合 - IO ベンチマークを実行するときは、次のことを確認します:
- ブロックサイズ / キャッシュ / IOPS / 直接 vs バッファ / 非同期 vs 同期
- 読み書き
- スレッド
- 待ち時間
-
CPU 使用率
-
どのブロックサイズを使用しますか :ディスクとの間で 1 GB の読み取り/書き込みを行う場合、I/O 操作を 1 回行うと高速になります。しかし、アプリケーションがハード ディスク全体に 512 バイトのチャンクを非シーケンシャルに書き込む必要がある場合 (ランダムではありませんが、ランダム I/O と呼ばれます)、これは見た目が異なります。現在、データベースはその性質上、データ ボリュームに対してランダム I/O を実行し、ログ ボリュームに対してシーケンシャル I/O を実行します。そのため、まず何を測定したいのかを明確にする必要があります。 Linux をインストールする場合とは異なる大きなビデオ ファイルをコピーする場合。
このブロックサイズは、実行する I/O 操作の数に影響します。あなたがそうするなら、例えば。 OSのI / Oスケジューラーがそれらをマージする8つの順次読み取り(または書き込み、混合ではない)操作。そうでない場合は、コントローラーのキャッシュがマージを行います。 512 バイトの 8 つの連続ブロックまたは 1 つの 4096 バイト チャンクを読み取る場合、実際には違いはありません。 1 つの例外 - 直接同期 IO を実行し、次の 512 バイトを要求する前に 512 バイトを待機する場合。この場合、ブロック サイズを増やすことは、キャッシュを追加するようなものです。
また、同期 IO と非同期 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 使用率を概算できます。