Назад | Перейти на главную страницу

Скорость записи на диск намного ниже скорости чтения

У меня есть VPS-сервер (WiredTree) под управлением CentOS.

Испытав некоторые проблемы с производительностью, я создал простой тест скорости чтения / записи диска, используя следующий скрипт:

echo Write to disk
dd if=/dev/zero of=test1 bs=1048576 count=2048
echo Read from disk
dd if=test1 of=/dev/null bs=1048576

Вот пример вывода:

[bizwayz@host perf]./benchmark
Write to disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 11.2601 seconds, 191 MB/s
Read from disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 0.789302 seconds, 2.7 GB/s
[bizwayz@host perf]./benchmark
Write to disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 3.69129 seconds, 582 MB/s
Read from disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 0.789897 seconds, 2.7 GB/s
[bizwayz@host perf]./benchmark
Write to disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 9.56615 seconds, 224 MB/s
Read from disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 0.882664 seconds, 2.4 GB/s
[bizwayz@host perf]./benchmark
Write to disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 3.52512 seconds, 609 MB/s
Read from disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 0.784007 seconds, 2.7 GB/s

У меня вопрос, нормально ли, что скорость записи намного ниже скорости чтения.

Вы используете VPS-сервер. Это означает, что на вашем физическом компьютере есть другие клиенты, и то, как они используют диски, влияет на то, как вы увидите производительность чтения и записи.

Обычно на RAID10 у вас будет примерно 1/2 скорости записи как скорость чтения. Но, поскольку существует много неизвестных переменных, может быть другой клиент, выполняющий много записей на диск, и поэтому вы видите худшую скорость записи.

Не помешает открыть билет с ними, но с VPS вы обычно видите именно это. VPS предназначены для удобства и ценности, а не для производительности.

Изменить: Безусловно, кеширование здесь является проблемой, но моя точка зрения все еще применима.

Обязательно запустите команду dd с командой fdatasync, чтобы убедиться, что она действительно сбрасывает данные файла на диск, а не только в память, что ядро ​​делает по умолчанию. то есть:

dd bs=1M count=512 if=/dev/zero of=test conv=fdatasync

Да нормально. Ваш файл составляет всего около 2 ГБ и полностью помещается в кеш. На самом деле он никогда не читается с диска, только из кеша. Увеличьте размер файла как минимум в 10 раз, чтобы получить какие-либо значимые результаты, или даже больше, в зависимости от размера вашей оперативной памяти (2x объем оперативной памяти - хорошая отправная точка).

Очень хотелось бы иметь диск со скоростью чтения 2,7 ГБ / с :)

Одна из проблем в вашей методике тестирования - это внутренняя системная буферизация в Linux, которая используется, что сильно искажает ваши результаты.

В общем, запись на диск, конечно, медленнее, чем чтение с диска. На уровне логических файлов запись может быть намного медленнее, так как есть (1) процессы выделения диска, (2) обновление информации каталога ... и т. Д. Таким образом, при записи на уровне файлов выполняется больше операций, это не простая атомарная операция, которую легко сравнить с операциями чтения на уровне файлов.

В тесте вам нужно очищать буферный кеш между каждым dd вашего тестирования .... или перезагружать вашу машину между каждым шагом :-). Кстати, я считаю, что есть простой способ сделать это, написав что-нибудь в применимой области / proc.

РЕДАКТИРОВАТЬ: процесс очистки кеша:

 sync && echo 3 > /proc/sys/vm/drop_caches

Вы должны делать это ПЕРЕД каждой командой dd.