Назад | Перейти на главную страницу

Принудительное блочное устройство (NBD) обходить буферный кеш

Я хотел бы знать, есть ли способ заставить блочное устройство обходить буферный кеш 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.