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
next prev parent 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.