On Tue, 2004-07-20 at 08:19, Jens Axboe wrote:
On Tue, Jul 20 2004, Ingo Molnar wrote:
How much
I/O do you allow to be in flight at once? It seems like by
decreasing the maximum size of I/O that you handle in one interrupt
you could improve this quite a bit. Disk throughput is good enough,
anyone in the real world who would feel a 10% hit would just throw
hardware at the problem.
i'm not sure whether this particular value (max # of sg-entries per IO
op) is runtime tunable. Jens? Might make sense to enable elvtune-alike
tunability of this value.
elvtune is long dead :-)
it's not tweakable right now, but if you wish to experiment you just
need to add a line to ide-disk.c:idedisk_setup() - pseudo patch:
+ blk_queue_max_sectors(drive->queue, 32);
+
printk("%s: max request size: %dKiB\n", drive->name,
drive->queue->max_sectors / 2);
/* Extract geometry if we did not already have one for the drive */
above will limit max request to 16kb, experiment as you see fit.
I tested this and the improvement is drastic. With the default value of
1024KB, running 'bonnie' produced XRUNS of 10+ ms. When this is changed
to 16KB, running bonnie only produces latency spikes of up to about 90
usecs, I did not see a single one hit 100usecs.
According to hdparm, the throughput is still quite good (42MB/sec on a
sub-$100 IDE drive).
This should definitely be made tunable, I would imagine this would be
easy to put in /proc. The default could stay at 1024KB, and users with
low latency requirements could lower it.
I am currently testing the effect on throughput and will have some
better numbers soon.
Lee