Символьные устройства для дисков в Linux

Символьные устройства для дисков в Linux

Почему другим системам UNIX требуются символьные устройства для хранения данных, а Linux — нет?

Другие ОС UNIX (AIX, HPUX, Solaris и macOS) используют для устройств хранения данных что-то вроде «/dev/rdisk#» и «/dev/disk#».

решение1

Я думаю, что эта статья в Википедииhttps://en.wikipedia.org/wiki/Raw_deviceобъясняет это очень хорошо:

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

В FreeBSD все файлы устройств на самом деле являются raw-устройствами. Поддержка не-raw-устройств была удалена в FreeBSD 4.0 для упрощения управления буферами и повышения масштабируемости и производительности.1

В ядре Linux необработанные устройства были объявлены устаревшими и в какой-то момент были запланированы к удалению, поскольку вместо них можно было использовать флаг O_DIRECT.

решение2

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

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

Другая причина использовать интерфейс raw-устройства при обработке очень больших потоковых файлов на магнитных носителях заключается в том, что raw-интерфейс может поддерживать очень большие размеры блоков, что позволяет достигать очень высоких скоростей передачи данных. Когда к устройству обращаются с помощью интерфейса блочного устройства, все операции чтения и записи должны проходить через системные буферы и, следовательно, ограничены размером блока файловой системы (обычно 1 КБ или 2 КБ). При использовании raw-устройства могут использоваться размеры блоков 32 КБ или больше. --Джон Дж. Вэлли,Справочник программиста UNIX; Изд. 1991 г.

Помимо повышения производительности, было (есть?) требование, чтобы файловые системы, доступные через интерфейс блока, были размонтированы по причинам согласованности кэша. Блоки, кэшированные системой, могут затирать изменения, сделанные через блочное устройство, когда они записываются обратно на диск. Размонтирование до fschk — небольшое неудобство; если приложение, требующее прямого доступа, является основным использованием системы, это гораздо хуже.

В ответ на ваш первоначальный вопрос, многие из проблем в значительной степени исторические. В современных системах редко бывает так, чтобы буферы устройств были больше системных буферов. (Когда вы в последний раз использовали рабочую станцию, подключенную к высокоскоростному принтеру с буфером, большим, чем память рабочей станции?)

Связанный контент