Timo Sirainen put forth on 3/10/2010 3:19 PM:
> On 10.8.2009, at 20.01, Timo Sirainen wrote:
> 
>> (3.5. Implement async I/O filesystem backend.)
> 
> You know what I found out today? Linux doesn't support async IO for regular 
> buffered files. I had heard there were issues, but I thought it was mainly 
> about some annoying APIs and such. Anyone know if some project has 
> successfully figured out some usable way to do async disk IO? The 
> possibilities seem to be:
> 
> a) Use Linux's native AIO, which requires direct-io for files. This *might* 
> not be horribly bad for mail files. After all, same mail is rarely read 
> multiple times. Except when parsing its headers first and then its body. 
> Maybe the process could do some internal buffering?..
> 
> I guess no one ever tried my posix_fadvise() patch? The idea was that it 
> would tell the kernel after closing a mail file that it's no longer needed in 
> memory, so kernel could remove it from page cache. I never heard any positive 
> or negative comments about how it affected performance.. 
> http://dovecot.org/patches/1.1/fadvise.diff
> 
> b) Use threads, either via some library or implement yourself. Each thread of 
> course uses some extra memory. Also enabling threads causes glibc to start 
> using a thread-safe version of malloc() (I think?), which slows things down 
> (unless that can be avoided, maybe by using clone() directly instead of 
> pthreads?).
> 
> c) I read someone's idea about using posix_fadvise() and fincore() functions 
> to somehow make it "kind of work, usually, maybe". I'm not sure if there's a 
> practical way to make them work though. And of course I don't think fincore() 
> has even been accepted by Linus yet.
> 

Considering the extent to which Linus hates O_DIRECT, I would think if he
was a fan of Async I/O at all, he'd have pushed its use via the buffer
cache.  Given that Async I/O is implemented via O_DIRECT I'd say Linus isn't
a fan of Async I/O either.  I've not read anything Linus has written on
Async I/O, if he even has, I'm merely making an educated guess based on the
current implementation of Async I/O in Linux.

-- 
Stan

Reply via email to