http://kerneltrap.org/node/7563
So Linus really hates O_DIRECT on files and can see no good use for it.
In the referenced white paper Andrea suggests the use of O_DIRECT to
eliminate CPU and memory bandwidth consumption during the process of
copying to/from user space.
Indeed, lets say I have an embedded system (CPU bandwidth is not
abundant). I have a device which is providing an almost never-ending
stream of data. This data is DMA'ed into a large physically contiguous
buffer which is mapped into a process's address space.
I want to write the data in this buffer out to a file without the CPU
actually having to copy the data. O_DIRECT seems like the perfect
mechanism -- the buffer will ultimately get DMA'ed straight out of my
user-space buffer and out to disk (assuming I meet alignment
requirements, etc...).
If O_DIRECT is frowned upon, what is the prescribed method for
accomplishing a zero-copy data movement from kernel->user->kernel?
I looked at the madvise() and posix_fadvise() calls but they only seem
to alter the cache behavior -- not eliminate it. And if I don't
eliminate it, a copy is still taking place (unless there paging magic at
play).
This question may have already been asked a whole bunch and I apologize
in advance if it has (there is a lot of noise surrounding a search of
"O_DIRECT").
Thanks!
-Miles
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ