Когда мы должны использовать разброс/сбор (векторный) IO?

Файловая система Windows поддерживает разброс/сбор IO (конечно, другая платформа) Но я не знаю, когда я использую механизм ввода-вывода.

Не могли бы вы объяснить мне правильный случай?

И какую выгоду мы можем получить от использования механизма ввода-вывода? (Только небольшой запрос ввода-вывода?)

4 ответа

Вы используете Scatter/Gather IO, когда вы делаете много случайных (то есть непоследовательных) операций чтения/записи, и вы хотите сохранить контекстные переключатели /syscalls. Scatter/Gather - это форма пакетной обработки в этом смысле. Однако, если у вас нет очень быстрого диска (или, скорее всего, большого массива дисков), стоимость syscall незначительна.

Если вы пишете сервер базы данных, вам может быть интересно, но что-то меньшее, чем машина с большим железом, обрабатывающая тысячи или миллионы запросов в секунду, не увидит никакой пользы.


Paul - еще одно замечание: еще одно преимущество заключается в том, что одновременно вы передаете несколько запросов на драйвер диска. Затем драйвер может сортировать запросы и выдавать их в оптимальном порядке. В то время как время syscall мало, время поиска (много миллисекунд) может быть карательным (это меньше 1000 операций ввода/вывода/сек).

Комментарий Криса о демонстрации эффективности прагматичен. Материнская природа никогда не лжет. Ну, почти никогда.


Я бы предположил, что вы использовали бы разброс gatehr IO, когда вы (а) предположили, что ваше приложение имеет узкое место в производительности, и (б) вы создали структуру анализа производительности, которая могла бы показать значительное улучшение с ее помощью.

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

Или - иначе говоря, не основывайте основные архитектурные решения на основе утверждений "какого-то парня на интернет-форуме". Создайте тест и узнайте.


в posix, readv и writev считывает или записывает в прерывистую память, но для чтения и записи прерывистых диапазонов файлов из прерывистой памяти за один раз вы хотите readx и writex, которые были одним из предложенных дополнений posix

делать readx быстрее, чем делать много чтений, так как это только один системный вызов, и он позволяет планировщику дисков больше всего перезаписывать iо, я помню, что кто-то говорит, что для программы ext2/3/.. fsck они хотел этого, поскольку он знает, какие диапазоны он хочет

licensed under cc by-sa 3.0 with attribution.