From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46750) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YK3XK-0001Kx-7Z for qemu-devel@nongnu.org; Sat, 07 Feb 2015 06:26:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YK3XG-0003Aj-6l for qemu-devel@nongnu.org; Sat, 07 Feb 2015 06:26:54 -0500 Received: from szxga01-in.huawei.com ([119.145.14.64]:22180) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YK3XF-00039c-JO for qemu-devel@nongnu.org; Sat, 07 Feb 2015 06:26:50 -0500 Message-ID: <54D5F660.7030801@huawei.com> Date: Sat, 7 Feb 2015 19:26:24 +0800 From: "Wangting (Kathy)" MIME-Version: 1.0 References: <54D032FB.404@huawei.com> <54D038EB.9020508@huawei.com> <54D08BB2.1070400@redhat.com> In-Reply-To: <54D08BB2.1070400@redhat.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [question] the patch which affect performance of virtio-scsi List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: qemu-devel OK, Thank you very much for your detailed explanation. But I have another question about the big change from qemu-1.5.3 to qemu-1.6.0-rc0. When I use ramdisk for IO performance testing, the result is as follows. [fio-test] rw bs iodepth jobs bw iops ------------------------------------------------------------------------------------ qemu-1.5.3 read 4k 32 1 285MB/s 73208 qemu-1.6.0-rc0 read 4k 32 1 253MB/s 64967 And virtio-blk is the same. I know there are so many differences between qemu-1.5 and qemu-1.6, but I am confused about what new features impact the performance so much. Do you know it? On 2015-2-3 16:49, Paolo Bonzini wrote: > On 03/02/2015 03:56, Wangting (Kathy) wrote: >> Sorry, I find that the patch of "virtio-scsi: Optimize virtio_scsi_init_req" can slove this problem. > > Great that you could confirm that. :) > >> By the way, can you tell me the reason of the change about cdb and sense? > > cdb and sense are variable-size items. ANY_LAYOUT support changed > VirtIOSCSIReq: instead of having a pointer to the request, it copies the > request from guest memory into VirtIOSCSIReq. This is required because > the request might not be contiguous in guest memory. And because the > request and response headers (e.g. VirtIOSCSICmdReq and > VirtIOSCSICmdResp) are included by value in VirtIOSCSIReq, the > variable-sized fields have to be treated specially. > > Only one of them can remain in VirtIOSCSIReq, because you cannot have a > flexible array member (e.g. "uint_8 sense[];") in the middle of a struct. > > cdb is always used, so it is chosen for the variable-sized part of > VirtIOSCSIReq: cdb was simply moved from VirtIOSCSICmdReq to VirtIOSCSIReq. > > Instead, requests that complete with sense data are not a fast path. > Hence sense is retrieved from the SCSIRequest, and > virtio_scsi_command_complete copies it into the guest buffer via > scsi_req_get_sense + qemu_iovec_from_buf. > > Paolo > >