Почему `hdparm -t` так долго выдает точные результаты на моем экземпляре EC2?

Почему `hdparm -t` так долго выдает точные результаты на моем экземпляре EC2?

Я профилирую программу обработки данных, которую я написал, и хочу понять теоретическую пропускную способность машины, на которой я работаю. В частности, я хочу измерить, какую скорость чтения диска мой экземпляр g4dn EC2 обеспечивает моему приложению. Этот конкретный экземпляр имеет временный диск NVMe, который я и хочу протестировать.

Я заметил, что требуется довольно много запусков, hdparmпрежде чем пропускная способность, о которой он сообщает, перестанет расти. Мой вопрос: почему требуется hdparmнесколько запусков, чтобы получить полную пропускную способность чтения? Что в ядре Linux / драйвере диска / контроллере привода / реальном оборудовании требует нескольких запусков hdparmдля получения точных результатов?

Я знаю, что на страницах руководства рекомендуется запускать его несколько раз, но по моему опыту, для достижения максимальной производительности требуется гораздо больше, чем три рекомендуемых раза.

-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 запусков, прежде чем скорость стабилизируется на уровне 330 МБ/с.

Обратите внимание, что я использую AMI с правильными драйверами NVMe.

решение1

Оказывается, локальные диски nvme, доступные на некоторых экземплярах EC2 по умолчанию, не готовы к использованию, а «готовое к использованию» устройство nvme на самом деле представляет собой том EBS, смонтированный как диск nvme. Это объясняет низкую пропускную способность (300 МБ/с) и медленное время прогрева (20 запусков).

Для справки на будущее, я получил скорость последовательного чтения 1,7 ГБ/с с первого запуска, hdparmкогда я отформатировал и смонтировал свойнастоящийДиски nvme. Они будут видны из lsblk.

Связанный контент