4

Есть ли разница между временем поиска для чтения и записи?

Я попытался протестировать время поиска, измерив, сколько времени потребуется для двух запросов, одного в начале и одного в конце диска (поэтому они должны находиться в разных цилиндрах). Для записи последовательность запросов заканчивается намного дольше, чем для чтения. Это из-за того, что время поиска для записи больше? Или это из-за другого фактора, например, времени передачи?

Здесь я прикрепляю время записи на чтение к размеру данных. Как можно видеть, при небольшом размере запроса (время передачи которого должно быть небольшим, а время поиска диска будет влиять больше на время ввода-вывода), задержка записи почти в 300 раз превышает задержку чтения.

запись за чтение для сравнения размеров

Спасибо

2 ответа2

1

ИМХО там всего один раз искать

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

Когда что-либо читается или записывается на дисковод, головка для чтения / записи диска должна перемещаться в правильное положение. Фактическое физическое расположение головки диска для чтения / записи называется поиском. Время, в течение которого головке чтения / записи диска приходится перемещаться от одной части диска к другой, называется временем поиска.

1

Вопрос немного широк и неясен.  Я не знаком с этим инструментом «fio», о котором вы упомянули, и быстрый взгляд на его веб-страницу не выявил каких-либо подробностей относительно того, как он работает (то есть, что он измеряет).

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

Но, как я сказал в первом абзаце, я не знаю, что измеряет «fio».  Я не знаю, как программа могла бы измерить фактическое время поиска без использования зондов ядра.  Это может быть измерение времени для операции ввода-вывода на уровне API.

  • Даже на аппаратном уровне операция записи может автоматически сопровождаться чтением тех же данных для проверки правильности.
  • На аппаратном уровне, если у вас есть избыточное хранилище (например, RAID), где одни и те же данные хранятся на двух или более независимых дисках, обычно головка ввода-вывода на одном диске будет склонна задерживаться на цилиндре с низким номером (например, 0,25 × MAXCYL), в то время как головка ввода / вывода на другом диске будет склонна задерживаться на цилиндре с большим номером (например, 0,75 × MAXCYL).  Операция чтения перейдет к диску, головка которого находится ближе к целевому цилиндру, поэтому максимум, что ему нужно будет найти, будет 0,25 × MAXCYL, тогда как операция записи перейдет к обоим дискам, поэтому может потребоваться поиск до 0,75. × MAXCYL.
  • На уровне операционной системы / файловой системы,

    • Чтение может обновлять или не обновлять время доступа к файлу.  Некоторые системы отключают это вообще.  Другие могут только установить флаг (например, в соответствующем inode резидентной памяти или эквивалентный), что файл был прочитан; дисковый инод может обновляться только через некоторое время (асинхронно).
    • Написать

      • вполне вероятно, потребуется обновить время модификации файла.
      • Если расширение файла (а не просто перезаписывать данные , ближе к концу), его
        • потребует изменения размера файла (т.е. в inode), и
        • может потребовать выделения блока (ов) из свободного списка (или эквивалентного),

      и, вероятно, будет невозможно отложить эти действия.

  • Если вы используете старый файл для тестирования и дефрагментируете диск с момента его создания, но вы расширили файл с тех пор (даже если вы не расширяете файл в этих тестах), возможно, что начало файла хранится в смежной области, а конец файла - нет.  Но единственное следствие, которое я вижу, состоит в том, что доступ к передней части файла может быть быстрее, чем доступ к концу.  Я не понимаю, как это может вызвать разницу между чтением и записью.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .