Вопрос или проблема
У меня есть три VPS на трёх разных провайдерах. Чтобы определить, у какой из них самые быстрые диски, я провёл тесты на каждом сервере. Однако каждый тест даёт разные результаты.
тест1: hdparm -Tt /dev/vda1
тест2: sync ; time sh -c “dd if=/dev/zero of=testfile bs=100k count=1k && sync” ; rm testfile
тест3: fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=fiotest –filename=testfio –bs=4k –iodepth=64 –size=8G –readwrite=randrw –rwmixread=75
Результаты:
Сервер 1:
Время кеширования чтения: 14758 MB за 1.99 секунд = 7405.12 MB/sec
Время буферизованного чтения: 772 MB за 3.01 секунд = 256.77 MB/sec
104857600 байт (105 MB, 100 MiB) скопировано, 0.147896 с, 709 MB/s
ЧТЕНИЕ: bw=5944KiB/s (6087kB/s), 5944KiB/s-5944KiB/s (6087kB/s-6087kB/s), io=6141MiB (6440MB), run=1057925-1057925msec
ЗАПИСЬ: bw=1985KiB/s (2033kB/s), 1985KiB/s-1985KiB/s (2033kB/s-2033kB/s), io=2051MiB (2150MB), run=1057925-1057925msec
Статистика диска (чтение/запись):
vdb: ios=1587863/527842, merge=7417/3463, ticks=67461318/929833, in_queue=68431983, util=94.01%
Сервер 2:
Время кеширования чтения: 11974 MB за 2.00 секунд = 5993.83 MB/sec
Время буферизованного чтения: 1410 MB за 3.00 секунд = 469.76 MB/sec
104857600 байт (105 MB, 100 MiB) скопировано, 0.215332 с, 487 MB/s
ЧТЕНИЕ: bw=239MiB/s (251MB/s), 239MiB/s-239MiB/s (251MB/s-251MB/s), io=6141MiB (6440MB), run=25649-25649msec
ЗАПИСЬ: bw=80.0MiB/s (83.8MB/s), 80.0MiB/s-80.0MiB/s (83.8MB/s-83.8MB/s), io=2051MiB (2150MB), run=25649-25649msec
Статистика диска (чтение/запись):
vda: ios=1571185/524820, sectors=12569480/4199096, merge=0/60, ticks=734962/208800, in_queue=943762, util=63.11%
Сервер 3:
Время кеширования чтения: 13268 MB за 1.98 секунд = 6686.54 MB/sec
Время буферизованного чтения: 2120 MB за 3.00 секунд = 706.58 MB/sec
104857600 байт (105 MB, 100 MiB) скопировано, 0.123248 с, 851 MB/s
ЧТЕНИЕ: bw=164MiB/s (172MB/s), 164MiB/s-164MiB/s (172MB/s-172MB/s), io=6141MiB (6440MB), run=37548-37548msec
ЗАПИСЬ: bw=54.6MiB/s (57.3MB/s), 54.6MiB/s-54.6MiB/s (57.3MB/s-57.3MB/s), io=2051MiB (2150MB), run=37548-37548msec
Статистика диска (чтение/запись):
dm-0: ios=1565148/523014, merge=0/0, ticks=807208/276596, in_queue=1083804, util=99.90%, aggrios=786075/262693, aggrmerge=11/31, aggrticks=394789/136290, aggrin_queue=531633, aggrutil=99.69%
sdb: ios=1572145/525255, merge=0/2, ticks=789576/272526, in_queue=1063198, util=99.69%
sda: ios=5/132, merge=22/60, ticks=2/54, in_queue=69, util=0.83%
Как видите, результаты довольно разные. Особенно последний тест (fio), где сервер 1 занял около 18 минут, тогда как серверы 2 и 3 заняли всего около минуты.
Я взял 3 теста из интернета и немного изменил их, чтобы они подходили для моих серверов, но я не уверен, что они тестируют одно и то же.
Кто может объяснить, у какого сервера самый быстрый диск (и почему ;-)?
Ответ или решение
Для оценки производительности дисков NVMe на виртуальных серверах (VPS) важно понимать, какие аспекты дисковой подсистемы тестируются различными инструментами. В представленных вами тестах использовались три инструмента: hdparm, dd и fio. В каждом из этих тестов измеряются разные метрики, и для корректной интерпретации результатов необходимо разобраться, что именно они показывают.
Теория
1. hdparm:
Это утилита в первую очередь применяется для измерения скорости кэшированных и буферизированных операций чтения.
- Cached reads (кэшированные чтения): показывают скорость чтения данных из оперативной памяти. Это больше показатель производительности CPU и скорости RAM, чем характеристика скорости дисков напрямую.
- Buffered disk reads (буферизированные чтения): это скорость чтения данных с диска, и этот тест дает более реалистичное представление о скорости накопителей.
2. dd:
Команда dd с опцией sync измеряет производительность записи данных на диск. Этот тест может быть не точным для измерения пиковой производительности, так как во многом зависит от кеширования.
3. fio:
fio — гораздо более сложный и мощный инструмент, который позволяет тестировать различные аспекты производительности хранения, такие как последовательное и рандомное чтение/запись, глубину очереди и т.д. В данном конкретном тесте проводятся измерения случайных чтений/записей с определенной долей чтений и записи данных.
Примеры результатов
-
Сервер 1:
- Cached reads: 7405.12 MB/sec
- Buffered reads: 256.77 MB/sec
- dd: 709 MB/sec
- fio: 5944 KiB/s (чтение), 1985 KiB/s (запись)
-
Сервер 2:
- Cached reads: 5993.83 MB/sec
- Buffered reads: 469.76 MB/sec
- dd: 487 MB/sec
- fio: 239 MB/s (чтение), 80 MB/s (запись)
-
Сервер 3:
- Cached reads: 6686.54 MB/sec
- Buffered reads: 706.58 MB/sec
- dd: 851 MB/sec
- fio: 164 MB/s (чтение), 54.6 MB/s (запись)
Подходя к результатам этих тестов, стоит обратить внимание, что наилучшую производительность по показателям буферизованного чтения и fio показал сервер 3 по сравнению с другими.
Применение
На основе данных, предоставленных инструментами тестирования:
-
Скорость кэшированных чтений (Cached): Сервер 1 показал наилучшие результаты в этом тесте. Однако эта метрика скорее отражает работу с кэшом, нежели реальную скорость дисков, поэтому при выборе сервера только этот показатель учитывать не следует.
-
Скорость буферизованных чтений (Buffered): Сервер 3 обеспечивает наивысшую производительность, достигая 706.58 МБ/сек, что указывает на возможность обработки больших объемов данных быстрее, чем на других серверах.
-
Команда dd: Сервер 3 также имеет лучшую производительность по этому тесту (851 MB/sec). Тем не менее, dd не всегда отображает точную картину работы дисков, так как данные могут довольно эффективно кешироваться.
-
fio-тест: Здесь сервер 2 является лидером с наиболее сбалансированной производительностью чтения и записи в тесте fio, что делает его наиболее привлекательным для сценариев, требующих интенсивного чтения и случайной записи.
Таким образом, если вашим приоритетом является работа с большими объемами данных, а также потребности высокой скорости последовательного чтения и записи, оптимальным выбором может стать сервер 3. Тем не менее, сервер 2 может быть перспективнее для приложений, требующих высокой случайной производительности ввода-вывода, как видно из результатов fio.
Подводя итоги, необходимо учитывать, что выбор сервера не должен основываться только на одном тесте. Волатильность дисковых тестов может зависеть от множества факторов, включая текущее состояние сети, нагрузку на сервер и реализацию виртуализации у поставщиков VPS. Поэтому всегда анализируйте несколько аспектов и ожидаемую нагрузку на сервер при выборе оптимального решения.