自分で作成したデータ処理プログラムをプロファイリングしており、使用しているマシンの理論上のスループットを把握したいと考えています。具体的には、g4dn EC2 インスタンスがアプリケーションに提供しているディスク読み取り速度を測定したいと考えています。この特定のインスタンスには一時的な NVMe ドライブがあり、これをベンチマークしたいと考えています。
報告されるスループットの増加が止まるまで、 を数回実行する必要があることに気付きましたhdparm
。質問ですが、hdparm
完全な読み取りスループットを得るにはなぜ複数回実行する必要があるのでしょうか。Linux カーネル、ディスク ドライバー、ドライブ コントローラー、実際のハードウェアの何が、hdparm
正確な結果を得るために を複数回実行する必要があるのでしょうか。
マニュアルページには数回実行するように書いてありますが、私の経験では、スループットが最大になるまでに推奨されている 3 回よりもはるかに多くの時間がかかります。
-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.
読み取り速度を収集するには、以下を実行します。
#!/usr/bin/env bash
while true; do
sudo hdparm -t /dev/nvme0n1p1;
sleep 1;
done
次のような出力が得られます。
$ while true; do sudo hdparm -t /dev/nvme0n1p1; sleep 1; done
/dev/nvme0n1p1:
Timing buffered disk reads: 470 MB in 3.09 seconds = 152.30 MB/sec
/dev/nvme0n1p1:
Timing buffered disk reads: 490 MB in 3.10 seconds = 158.21 MB/sec
/dev/nvme0n1p1:
Timing buffered disk reads: 526 MB in 3.02 seconds = 174.43 MB/sec
330MB/秒程度に落ち着くまでには、おそらく 20 回の実行が必要です。
正しい NVMe ドライバーを備えた AMI を使用していることに注意してください。
答え1
一部の EC2 インスタンスでデフォルトで使用できるローカル nvme ドライブはすぐに使用できる状態ではなく、「すぐに使用できる」nvme デバイスは実際には nvme ドライブとしてマウントされた EBS ボリュームであることが判明しました。これにより、スループットが低く (300 MB/秒)、ウォームアップ時間が長くなります (20 回実行)。
参考までに、私が初めてhdparm
ドライブをフォーマットしてマウントしたとき、 1.7GB/秒のシーケンシャル読み取り速度が得られました。本物nvme ドライブ。 から表示されますlsblk
。