All of lore.kernel.org
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>, Eric Blake <eblake@redhat.com>
Cc: qemu-trivial <qemu-trivial@nongnu.org>,
	Zhang Haoyu <zhanghy@sangfor.com>,
	qemu-devel <qemu-devel@nongnu.org>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-trivial] [Qemu-devel] [PATCH] snapshot: use local variable to bdrv_pwrite_sync L1 table
Date: Thu, 23 Oct 2014 09:12:53 +0200	[thread overview]
Message-ID: <5448AA75.4000902@redhat.com> (raw)
In-Reply-To: <20141023070325.GA3522@noname.redhat.com>

On 2014-10-23 at 09:03, Kevin Wolf wrote:
> Am 23.10.2014 um 00:18 hat Eric Blake geschrieben:
>> On 10/21/2014 03:24 AM, Max Reitz wrote:
>>> On 2014-10-21 at 10:04, Zhang Haoyu wrote:
>>>> Use local variable to bdrv_pwrite_sync L1 table,
>>>> needless to make conversion of cached L1 table between
>>>> big-endian and host style.
>>>>
>>>> Signed-off-by: Zhang Haoyu <zhanghy@sangfor.com>
>>>> ---
>>>>    block/qcow2-refcount.c | 22 +++++++---------------
>>>>    1 file changed, 7 insertions(+), 15 deletions(-)
>>>>
>> I know we're up to v5 and that Max already took it into his branch, but...
>>
>>
>>>>        l1_size2 = l1_size * sizeof(uint64_t);
>>>> +    l1_table = g_try_malloc0(align_offset(l1_size2, 512));
>>> I wanted to propose using qemu_try_blockalign(), but since it'd require
>>> a memset() afterwards, it gets rather ugly.
>> Not after this recent patch:
>>
>> https://lists.gnu.org/archive/html/qemu-devel/2014-10/msg02499.html
> We can switch to qemu_try_blockalign0() in a follow-up patch.
>
> But this is far from being a fast path, so there is very little to gain
> anyway.

We don't need the 0 variant anyway. In v5, the one I applied, it's just 
qemu_try_blockalign(). The size does not have to be aligned to 
BDRV_SECTOR_SIZE, since any access index is below l1_size and only 
bdrv_pread() and bdrv_pwrite() are used, so we can first omit the 
align_offset(). Second, all the rest (0 .. l1_size - 1) is overwritten 
either by memcpy() or bdrv_pread(). Therefore, no 0-ing required and 
qemu_try_blockalign() was fine.

There are things we can do in follow-up patches to optimize v5 (getting 
read of the memcpy()s), but as Kevin said (and myself before that in 
reply to v5), this function is not performance-critical, so there's no 
real point in doing so (other than "Clearly unoptimized code makes my 
fingers twitch").

Max


WARNING: multiple messages have this Message-ID (diff)
From: Max Reitz <mreitz@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>, Eric Blake <eblake@redhat.com>
Cc: qemu-trivial <qemu-trivial@nongnu.org>,
	Zhang Haoyu <zhanghy@sangfor.com>,
	qemu-devel <qemu-devel@nongnu.org>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] snapshot: use local variable to bdrv_pwrite_sync L1 table
Date: Thu, 23 Oct 2014 09:12:53 +0200	[thread overview]
Message-ID: <5448AA75.4000902@redhat.com> (raw)
In-Reply-To: <20141023070325.GA3522@noname.redhat.com>

On 2014-10-23 at 09:03, Kevin Wolf wrote:
> Am 23.10.2014 um 00:18 hat Eric Blake geschrieben:
>> On 10/21/2014 03:24 AM, Max Reitz wrote:
>>> On 2014-10-21 at 10:04, Zhang Haoyu wrote:
>>>> Use local variable to bdrv_pwrite_sync L1 table,
>>>> needless to make conversion of cached L1 table between
>>>> big-endian and host style.
>>>>
>>>> Signed-off-by: Zhang Haoyu <zhanghy@sangfor.com>
>>>> ---
>>>>    block/qcow2-refcount.c | 22 +++++++---------------
>>>>    1 file changed, 7 insertions(+), 15 deletions(-)
>>>>
>> I know we're up to v5 and that Max already took it into his branch, but...
>>
>>
>>>>        l1_size2 = l1_size * sizeof(uint64_t);
>>>> +    l1_table = g_try_malloc0(align_offset(l1_size2, 512));
>>> I wanted to propose using qemu_try_blockalign(), but since it'd require
>>> a memset() afterwards, it gets rather ugly.
>> Not after this recent patch:
>>
>> https://lists.gnu.org/archive/html/qemu-devel/2014-10/msg02499.html
> We can switch to qemu_try_blockalign0() in a follow-up patch.
>
> But this is far from being a fast path, so there is very little to gain
> anyway.

We don't need the 0 variant anyway. In v5, the one I applied, it's just 
qemu_try_blockalign(). The size does not have to be aligned to 
BDRV_SECTOR_SIZE, since any access index is below l1_size and only 
bdrv_pread() and bdrv_pwrite() are used, so we can first omit the 
align_offset(). Second, all the rest (0 .. l1_size - 1) is overwritten 
either by memcpy() or bdrv_pread(). Therefore, no 0-ing required and 
qemu_try_blockalign() was fine.

There are things we can do in follow-up patches to optimize v5 (getting 
read of the memcpy()s), but as Kevin said (and myself before that in 
reply to v5), this function is not performance-critical, so there's no 
real point in doing so (other than "Clearly unoptimized code makes my 
fingers twitch").

Max

  reply	other threads:[~2014-10-23  7:13 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-21  8:04 [Qemu-trivial] [PATCH] snapshot: use local variable to bdrv_pwrite_sync L1 table Zhang Haoyu
2014-10-21  8:04 ` [Qemu-devel] " Zhang Haoyu
2014-10-21  9:24 ` [Qemu-trivial] " Max Reitz
2014-10-21  9:24   ` Max Reitz
2014-10-21 10:49   ` [Qemu-trivial] [Qemu-devel] [PATCH] snapshot: use local variable to bdrv_pwrite_syncL1 table Zhang Haoyu
2014-10-21 10:49     ` Zhang Haoyu
2014-10-21 10:53     ` [Qemu-trivial] " Max Reitz
2014-10-21 10:53       ` Max Reitz
2014-10-22 22:18   ` [Qemu-trivial] [Qemu-devel] [PATCH] snapshot: use local variable to bdrv_pwrite_sync L1 table Eric Blake
2014-10-22 22:18     ` Eric Blake
2014-10-23  1:02     ` [Qemu-trivial] " Gonglei
2014-10-23  1:02       ` Gonglei
2014-10-23  7:03     ` [Qemu-trivial] " Kevin Wolf
2014-10-23  7:03       ` Kevin Wolf
2014-10-23  7:12       ` Max Reitz [this message]
2014-10-23  7:12         ` Max Reitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5448AA75.4000902@redhat.com \
    --to=mreitz@redhat.com \
    --cc=eblake@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-trivial@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=zhanghy@sangfor.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.