Re: [PATCH 0/6][RFC] virtio-blk: Change I/O path from request toBIO

From: Dor Laor
Date: Mon Jan 02 2012 - 02:49:38 EST


On 01/01/2012 06:45 PM, Stefan Hajnoczi wrote:
On Thu, Dec 22, 2011 at 11:41 PM, Minchan Kim<minchan@xxxxxxxxxx> wrote:
On Thu, Dec 22, 2011 at 12:57:40PM +0000, Stefan Hajnoczi wrote:
On Wed, Dec 21, 2011 at 1:00 AM, Minchan Kim<minchan@xxxxxxxxxx> wrote:
If you're stumped by the performance perhaps compare blktraces of the
request approach vs the bio approach. We're probably performing I/O
more CPU-efficiently but the I/O pattern itself is worse.

You mean I/O scheduler have many techniques to do well in I/O pattern?
That's what I want to discuss in this RFC.

I guess request layer have many techniques proved during long time
to do well I/O but BIO-based drvier ignores them for just reducing locking
overhead. Of course, we can add such techniques to BIO-batch driver like
custom-batch in this series. But it needs lots of work, is really duplication,
and will have a problem on maintenance.

I would like to listen opinions whether this direction is good or bad.

This series is a good platform for performance analysis but not
something that should be merged IMO. As you said it duplicates work
that I/O schedulers and the request-based block layer do. If other
drivers start taking this approach too then the duplication will be
proliferated.

The value of this series is that you have a prototype to benchmark and
understand the bottlenecks in virtio-blk and the block layer better.
The results do not should that bypassing the I/O scheduler is always a
win. The fact that you added batching suggests there is some benefit
to what the request-based code path does. So find out what's good
about the request-based code path and how to get the best of both
worlds.

By the way, drivers for solid-state devices can set QUEUE_FLAG_NONROT
to hint that seek time optimizations may be sub-optimal. NBD and
other virtual/pseudo device drivers set this flag. Should virtio-blk
set it and how does it affect performance?

Seems logical to me. If the underlying backing storage of the host is SSD or some remote fast SAN server we need such a flag. Even in the case of standard local storage, the host will still do the seek time optimization so no need to do them twice.


Stefan
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/