How about some sane approach to "balace_dirty()", like in -pre6.
The sane approach to balance_dirty() is to
- when we're over the threshold of dirty, but not over the hard limit, we
start IO. We don't wait for it (except in the sense that if we overflow
the request queue we will _always_ wait for it, of course. No way to
avoid that).
- if we're over the hard limit, we wait for the oldest buffer on the
locked list.
The only question is "when should we wake up bdflush?" I currently wake it
up any time we're over the soft limit, but I have this feeling that we
really should wait until we're over the hard limit - oherwise we might end
up dribbling again. I haven't tried it, but I will. Others please do too -
its trivially moving the wakeup around in fs/buffer.c: balance_dirty().
At least here it gives quite good results, and was rather usable even
under X when writing a 8GB file. I haven't seen this disk push 20MB/s
sustained before, and it did now (except when I was doing other things at
the time).
Will it keep the IO queues full as hell and make interactive programs
suffer? Yes, of course it will. No way to avoid the fact that reads are
going to be slower if there's a lot of writes going on. But I didn't see
vmstat hickups or anything like that.
Of course, this will depend on machine and on disk controller etc. Which
is why it would be good to test..
Linus
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/