1: PIO (запрограммированный ввод-вывод) перебивает кэши ЦП. Данные, считанные с диска, в большинстве случаев не будут обрабатываться сразу после этого. Данные часто читаются приложением большими порциями, но PIO выполняется небольшими блоками (обычно 64K IIRC). Таким образом, приложение для чтения данных будет ждать, пока большой кусок не будет передан, и не получит выгоду от меньших блоков, находящихся в кэше, сразу после того, как они были извлечены из контроллера. Между тем другие приложения будут страдать от значительных частей кэша, высвобождаемых при передаче. Этого, вероятно, можно избежать, используя специальные инструкции, которые инструктируют ЦП не кэшировать данные, а записывать их «напрямую» в основную память, однако я уверен, что это замедлит цикл копирования. И тем самым причиняет боль даже больше, чем кеша.
2: PIO, поскольку он реализован в системах x86 и, возможно, в большинстве других систем, работает очень медленно по сравнению с DMA. Проблема не в том, что процессор не будет достаточно быстрым. Проблема связана с тем, как спроектированы шина и режимы PIO контроллера диска. Если я не ошибаюсь, CPU должен считывать каждый байт (или каждый DWORD при использовании 32-битных режимов PIO) с так называемого порта IO. Это означает, что для каждого DWORD данных адрес порта должен быть помещен на шину, и контроллер должен ответить, поместив DWORD данных на шину. Тогда как при использовании DMA контроллер может передавать пакеты данных, используя полную полосу пропускания шины и / или контроллера памяти. Конечно, есть много возможностей для оптимизации этого устаревшего дизайна PIO. DMA переводы - это такая оптимизация. Другие решения, которые все еще будут рассматриваться как PIO, также могут быть возможны, но с другой стороны, они по-прежнему будут страдать от других проблем (например, перегрузка кэша, упомянутая выше).
3: Ширина полосы памяти и / или шины не является ограничивающим фактором для большинства приложений, поэтому передача DMA ничего не остановит. Это может немного замедлить работу некоторых приложений, но обычно это должно быть едва заметно. Ведь все диски довольно медленные по сравнению с пропускной способностью шины и / или контроллера памяти. «Диск» (SSD, RAID-массив), обеспечивающий скорость> 500 МБ / с, действительно быстрый. Шина или подсистема памяти, которая не может по крайней мере доставить в 10 раз больше числа, должна быть из каменных веков. OTOH PIO действительно полностью останавливает процессор, пока он передает блок данных.