qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] QEMU 9pfs intentionally returning short reads ?


From: Venkateswararao Jujjuri
Subject: Re: [Qemu-devel] QEMU 9pfs intentionally returning short reads ?
Date: Fri, 10 Jun 2011 08:29:14 -0700
User-agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.2.17) Gecko/20110414 Thunderbird/3.1.10

On 06/10/2011 05:20 AM, Daniel P. Berrange wrote:
On Fri, Jun 10, 2011 at 05:36:13PM +0530, Aneesh Kumar K.V wrote:
On Fri, 10 Jun 2011 11:33:05 +0100, "Daniel P. Berrange"<address@hidden>  wrote:
I've been doing some work trying to run QEMU guests with a root filesystem
exported from the host using virtio 9pfs. One of the issues that I have
discovered is that the 9p FS running on QEMU appears to cap all reads at
4096 bytes[1]. Any larger read will return only partial data for plain
files.

But we should loop in kernel, requesting for multiple 9p request.

kernel does

        size = fid->iounit ? fid->iounit : fid->clnt->msize - P9_IOHDRSZ;
        if (count>  size)
                ret = v9fs_file_readn(filp, NULL, udata, count, *offset);
        else
                ret = p9_client_read(fid, NULL, udata, *offset, count);

and v9fs_file_readn() does..

        do {
                n = p9_client_read(fid, data, udata, offset, count);
                if (n<= 0)
                        break;

                if (data)
                        data += n;
                if (udata)
                        udata += n;

                offset += n;
                count -= n;
                total += n;
        } while (count>  0&&  n == size);


I also did an strace of simple test and i see

open("test", O_RDONLY)                  = 3
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 
8192) = 8192
In my test I did

#  strace -e trace=read,open perl -e 'open FOO, "/usr/share/X11/XKeysymDB"; 
sysread FOO, $foo, 8192'
open("/usr/share/X11/XKeysymDB", O_RDONLY) = 3
read(3, "! Copyright 1993 Massachusetts I"..., 8192) = 4096

Perhaps there is a guest kernel driver difference ? I'm using

   2.6.35.13-91.fc14.x86_64
The default msize is 8k; Because of iounit the net layer need to send the IO in the chunks of 4k 8k - header size faults into 4k; But never the less the fs layer should loop.

There was an issue with read; and that bug is fixed by
commit 97e8442b0971ea6be9a495b3d03402985cfe5d6a
Author: M. Mohan Kumar <address@hidden>
Date:   Fri Jun 4 11:59:07 2010 +0000

    9p: Make use of iounit for read/write

    Change the v9fs_file_readn function to limit the maximum transfer size
    based on the iounit or msize.

    Also remove the redundant check for limiting the transfer size in
    v9fs_file_write. This check is done by p9_client_write.

    Signed-off-by: M. Mohan Kumar <address@hidden>
    Signed-off-by: Eric Van Hensbergen <address@hidden>



Thanks,
JV
Regards,
Daniel




reply via email to

[Prev in Thread] Current Thread [Next in Thread]