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