LINUX.ORG.RU

Насколько безопасно писать на замапленный в память блочный девайс в режиме O_DIRECT?

 , , , ,


0

2

Вобщем есть блочный девайс (диск) который полностью замаплен в память в режиме READ_ONLY. Соответствующий дескриптор открыт в режими O_DIRECT. Запись выполняется на диск через write(). Чтение и запись паралельны и независимы в разных тредах одного процесса.

Вопрос: будет ли перечитыватся сектор если он был записан через write() ?

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

★★★★★

Если тебя интересует прозрачность изменений, то это зависит от флагов mmap(): MAP_SHARED или MAP_PRIVATE. В первом случае изменения, сделанные write(), будут немедленно (при первом обращении) видны и в отображении. Во втором — поведение не определено.

Если вопрос про нахождение страницы в page cache после записи, то на новых ядрах в page cache может как ничего не остаться, так и записываемые страницы прокешироваться.

ttnl ★★★★★
()
Последнее исправление: ttnl (всего исправлений: 1)
Ответ на: комментарий от ttnl

Вы описываете поведение системы без O_DIRECT. Это хорошо известная вещь. С O_DIRECT страницы никогда не кеширутся, но это все что мне понятно на сегодня.

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

С O_DIRECT страницы никогда не кеширутся

Когда кэшируются, когда не кэшируются. См. blkdev_write_iter()->__generic_file_write_iter(). Сначала пытаются запустить честный direct IO, но если не получается, пишут обычным способом, используя page cache.

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

Ух-ты какая новость ...

См. blkdev_write_iter()->__generic_file_write_iter()

Благодарю, этого мне наверное хватит чтобы разобратся.

cvv ★★★★★
() автор топика
Ответ на: комментарий от x905

хм, а если добавить флаг O_SYNC ?

Данные наверняка окажутся на устройстве, но при этом может сохраниться и их копия в страничном кэше.

ttnl ★★★★★
()

Кстати использование такого режима приводит к случайным SIGBUS, и возможно SIGSEGV.

cvv ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.