On Thu, Oct 24, 2013 at 11:36 AM, Yaodong Yang <yaodong.ya...@icloud.com>wrote:

> Hi all,
>
> I read the slides "An Update Overview of the QEMU Storage Stack", which
> indicate that if caching mode=none, the host page cache is off and guest
> disk write cache is on. My question is where the implementation is inside
> the qemu. How to control the io to a virtual disk image( a raw disk on top
> of the ext4 in the host filesysytem)
>
> My understanding is the ios from qemu are sent to the host linux system
> call, the virtual disk is basically a normal file in the host filesystem,
> how the qemu can perform the ios to this file bypassing the host page cache.
>
>From the file block/raw-posix.c
static void raw_parse_flags(int bdrv_flags, int *open_flags)
{
    /* Use O_DSYNC for write-through caching, no flags for write-back
caching,
     * and O_DIRECT for no caching. */
    if ((bdrv_flags & BDRV_O_NOCACHE)) {
        *open_flags |= O_DIRECT;
    }
}
You can take a look at manpage for open, which says:
O_DIRECT (Since Linux 2.4.10)
         Try to minimize cache effects of the I/O to and from this file.
 In general this will degrade performance, but it is useful in special
situations,  such  as
         when  applications  do  their  own  caching.  File I/O is done
directly to/from user space buffers.  The I/O is synchronous, that is, at
the completion of a
         read(2) or write(2), data is guaranteed to have been transferred.
 See NOTES below for further discussion.

         A semantically similar (but deprecated) interface for block
devices is described in raw(8).


> Thanks a lot!
>
> Yaodong
>



-- 
Best Regards,

Dunrong Huang

Homepage: http://mathslinux.org

Reply via email to