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

Почему мой синхронизированный ввод-вывод настолько плох по сравнению с прямым?

У меня есть два диска по 3 ТБ в программной настройке RAID 1, а в качестве ОС хоста используется 64-битный Debian wheezy.

Выдача:

dd if=/dev/zero of=test bs=64k count=3k oflag=direct && rm test

Урожайность:

201326592 bytes (201 MB) copied, 1.423 s, 141 MB/s

Если я изменю команду dd для использования синхронизированных вызовов ввода-вывода (путем изменения переключателя oflag с «прямого» на «синхронизацию»), производительность записи падает через пол:

201326592 bytes (201 MB) copied, 76.0286 s, 2.6 MB/s

Очевидно, что синхронизированный ввод-вывод приводит к снижению производительности, но я ожидал, что пропускная способность записи упадет до половины или трети (в худшем случае) от прямого эквивалента. 2,6 МБ / с кажутся чрезмерными и заставляют меня думать, что где-то есть проблема.

Синхронизированный ввод-вывод останавливается до тех пор, пока блок не будет записан на диск и не будет подтвержден контроллером, поэтому вы в конечном итоге ждете хотя бы одного времени поиска между блоками. Вы получаете около 40 блоков по 64 КБ в секунду или по одному каждые 25 миллисекунд. Это согласуется с потрачением одного времени поиска 10 мс на запись данных и одного обновления метаданных в индексном дескрипторе плюс небольшие накладные расходы ОС.

Вот почему вы не хотите использовать синхронизированный ввод-вывод, если вам действительно не нужна строгая согласованность.