КРАТКОЕ ОПИСАНИЕ: я не могу найти способ mmap
открыть O_WRONLY
файл.
LONG: Я ищу способ записать DMA (режим s/g) предоставленные данные на раздел диска (!) как можно быстрее, избегая буферизации ядра. O_DIRECT
не работает и Линус запрещает его использовать.
Для этого я mmap
устанавливаю каждый DMA буфер с MAP_FIXED и соответствующим смещением в файле. Но если файл открывается как O_RDWR
, это заставляет ядро конкурировать с DMA при заполнении входной RAM данными файла. В большинстве случаев выигрывает ядро...:)
Итак, мне нужно объяснить ядру, что оно не должно трогать мои страницы, а просто записывать их в маппируемый файл, когда я вызываю msync()
. Как?