On 6.1.2011, at 0.27, Attila Nagy wrote:

> With this, 10 syncs would happen in every second from Dovecot LDA processes, 
> meaning if a client connects in t=0 it will immediately got the response 250, 
> if a client connects in t=0.05, it will get the response in 50 ms (in an 
> ideal world, where syncing does not take time), and the committed blocks 
> could accumulate for a maximum of 100 ms.
> In a busy system (where this setting would make sense), it means it would be 
> possible to write more data with less IOPS needed.

I guess this could work. Although earlier I thought about delaying fsyncs so 
that when saving/copying multiple mails in a single transaction with maildir it 
would delay about 10 or so close()s and then fsync() them all at the same time 
at the end. This ended up being slower (but I only tested it with a single user 
- maybe in real world setups it might have worked better).

> I can see two problems:
> 1. there is no call for committing a lot of file descriptors in one 
> transaction, so instead of fsync() for each of the modified FDs, a sync() 
> would be needed. sync() writes all buffers to stable storage, which is bad if 
> you have a mixed workload, where there are a lot of non-fsynced data, or 
> other heavy fsync users. But modern file systems, like ZFS will write those 
> back too, so there an fsync(fd) is -AFAIK- mostly equivalent with a sync(pool 
> on which fd is). sync() of course is system wide, so if you have other file 
> systems, those will be synced as well. (this setting isn't for everybody)
> 2. in a multiprocess environment this would need coordination, so instead of 
> doing fsyncs in distinct processes, there would be one process needed, which 
> does the sync and returns OK for the others, so they can notify the client 
> about the commit to the stable storage.

It's possible for you to send the fds to another process via UNIX socket that 
does fsync() on them. I was also hoping for using lib-fs for at least some 
mailbox formats at some point (either some modified dbox, or a new one), and 
for that it would be even easier to add an fsync plugin that does this kind of 
fsync-transfer to another process.

Reply via email to