Я хотел бы знать, есть ли способ заставить блочное устройство обходить буферный кеш Linux (т.е. прямой ввод-вывод) и передавать запросы непосредственно на нижележащий уровень. Я знаю, что для этого можно открыть файл с помощью флага O_DIRECT, но моя программа не является пользователем блочного устройства, а файловая система. И до сих пор мне не удавалось сказать различным FS использовать прямой ввод-вывод.
Таким образом, мне нужна функциональность необработанного устройства без использования сырых устройств (поскольку они устарели в моем дистрибутиве Fedora).
Если это имеет какое-то значение, мое блочное устройство является сетевым блочным устройством. Любая помощь будет оценена.
Я не думаю, что возможен прямой ввод-вывод без использования O_DIRECT или необработанных устройств. Использование опции синхронизации при монтировании также не обходит буферный кеш.
Поскольку вы не можете установить его из файловой системы, вам придется изменить свою программу, чтобы использовать O_DIRECT или mmap () и madvise () для получения аналогичного поведения.
«Я знаю, что для этого можно открыть файл, используя флаг O_DIRECT, но моя программа не является пользователем блочного устройства, это файловая система».
Не беспокойтесь о том, что ваша программа не является пользователем, O_DIRECT работает для open (), который в любом случае основан на файлах.
Вы можете добиться этого, установив с помощью опции синхронизации.
Из mount(8)
-man-страница:
sync All I/O to the filesystem should be done synchronously. In case
of media with limited number of write cycles (e.g. some flash
drives) "sync" may cause life-cycle shortening.