Я профилирую программу обработки данных, которую я написал, и хочу понять теоретическую пропускную способность машины, на которой я работаю. В частности, я хочу измерить, какую скорость чтения диска мой экземпляр 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
.