[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 2/12] VTPM mini-os: posix IO layer for blkfront in mini-os



Matthew Fioravante, le Mon 14 Mar 2011 15:07:30 -0400, a écrit :
> On 03/11/2011 08:05 PM, Samuel Thibault wrote:
> >Matthew Fioravante, le Fri 11 Mar 2011 17:34:26 -0500, a écrit :
> >>+      /*Make sure we have write permission */
> >>+      if(dev->info.info&  VDISK_READONLY || dev->info.mode != O_RDWR) {
> >O_WRONLY too.
> Good catch, actually testing a bitfield with != is a bad idea to begin 
> with anyway.

Err, it's not a bitfield, in mini-os it's a {0,1,2} enum.

> >Could you perhaps optimize when buf is actually aligned?  That would
> >save a copy.
> >
> This can be done but only if in the current iteration of the loop an 
> entire block is being read.

Sure.

> Since aiocb only operates on sectors it'll 
> read at minimum a whole sector into buf. If buf isnt big enough to hold 
> the data a secondary buffer with a copy operation will have to be done.

Sure.

But I expect people using that interface to tend to allocate big aligned
buffers.

> >>+      /* Write operation */
> >>+      else {
> >>+    /* If we're writing a partial block, we need to read the current 
> >>contents first
> >>+     * so we don't overwrite the extra bits with garbage */
> >>+    if(blkoff != 0 || bytes<  blocksize) {
> >>+       aiocb.aio_cb = NULL;
> >Maybe blkfront_aio_cb should do it itself?  It looks odd to have to do
> >it when reusing an aiocb structure.
> >
> It could, but then that changes the design of aiocb. Was it supposed to 
> be a very low level interface for just reading and writing blocks onto 
> the disk?

Well, I'd say the whole blkfront itself is a low-level interrface, and
your patch actually provides a higher one :)

This particular change in the design shouldn't break anything, since
aio_cb is actually filled by blkfront itself, so it makes sense that it
cleans it since it expects it to be cleaned.

> Right now you have to set aio_nbytes and aio_offset to a multiple of 
> sector size. This could be changed to allow variable sizes. 
> Alternatively 2 new fields could be added to specify which portion 
> inside a block to operate on.
> 
> Can you send a partial block through the xen block frontend and backend 
> interface?

No.

> If not we would have to queue up a read and then a write 
> internally when the user requests a write. Its possible some users may 
> not want this forced behavior of 2 operations.

That's why I wouldn't recommend aio_nbytes/offset to be allowed to
be non-multiples of the sector size. That interface is meant to be
an efficient sector-transfer interface. Your posix layer can handle
flexibility for the user.

Samuel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.