為什麼「hdparm -t」需要這麼長時間才能在我的 EC2 執行個體上產生準確的結果?

為什麼「hdparm -t」需要這麼長時間才能在我的 EC2 執行個體上產生準確的結果?

我正在分析我編寫的資料處理程序,我想了解我所在機器的理論吞吐量。具體來說,我想測量我的 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

大約需要運行 20 次才能穩定在 330MB/秒左右。

請注意,我使用的 AMI 具有正確的 NVMe 驅動程式。

答案1

事實證明,預設情況下某些 EC2 執行個體上可用的本機 nvme 磁碟機尚未準備好使用,而「可供使用」的 nvme 裝置實際上是作為 nvme 磁碟機安裝的 EBS 磁碟區。這解釋了吞吐量低(300MB/s)和預熱時間慢(20 次運行)的原因。

hdparm作為將來的參考,當我格式化並安裝我的電腦時,我從第一次運行時獲得了 1.7GB/s 的順序讀取速度。真實的nvme 驅動器。它們將從 可見lsblk

相關內容