qemu/block/qcow2.c:1942: possible performance problem ?

Bug #1321464 reported by dcb
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Won't Fix
Undecided
Unassigned

Bug Description

I just ran static analyser cppcheck over today (20140520) qemu source code.

It said many things, including

[qemu/block/qcow2.c:1942] -> [qemu/block/qcow2.c:1943]: (performance) Buffer 'pad_buf' is being writ
ten before its old content has been used.

Source code is

            memset(pad_buf, 0, s->cluster_size);
            memcpy(pad_buf, buf, nb_sectors * BDRV_SECTOR_SIZE);

Worth tuning ?

Similar problem here

[qemu/block/qcow.c:815] -> [qemu/block/qcow.c:816]: (performance) Buffer 'pad_buf' is being written
before its old content has been used.

and

[qemu/hw/i386/acpi-build.c:1265] -> [qemu/hw/i386/acpi-build.c:1267]: (performance) Buffer 'dsdt' is
 being written before its old content has been used.

Revision history for this message
Max Reitz (xanclic-u) wrote :

I can only speak for qcow2 and qcow, but for those places, I don't think it is worth fixing. First of all, both are image formats, so the bottleneck is generally the disk on which the images are stored and not main memory, so an overeager memset should not cause any problems.

For both, the relevant piece of code is in qcow2/qcow_write_compressed() which are rarely used anyway (as far as I know) and even if used, they have additional overhead due to having to compress data first, so “fixing” the memset() won't make them noticibly faster.

I don't know about the ACPI thing, but to me it seems that it's copying data to a temporary buffer and then overwriting its beginning with zeroes. From my very limited ACPI knowledge I'd guess this function is called at some point during qemu startup, so it doesn't seem worth optimizing either.

Revision history for this message
Stefan Hajnoczi (stefanha) wrote : Re: [Qemu-devel] [Bug 1321464] Re: qemu/block/qcow2.c:1942: possible performance problem ?

On Tue, May 20, 2014 at 11:21:05PM -0000, Max Reitz wrote:
> I can only speak for qcow2 and qcow, but for those places, I don't think
> it is worth fixing. First of all, both are image formats, so the
> bottleneck is generally the disk on which the images are stored and not
> main memory, so an overeager memset should not cause any problems.
>
> For both, the relevant piece of code is in qcow2/qcow_write_compressed()
> which are rarely used anyway (as far as I know) and even if used, they
> have additional overhead due to having to compress data first, so
> “fixing” the memset() won't make them noticibly faster.

I agree. It won't make a noticable difference and the compressed writes
are only done in qemu-img convert, not for running guests.

But patches to change this wouldn't hurt either.

Stefan

Revision history for this message
Thomas Huth (th-huth) wrote :

Thanks for reporting this, but it looks like the related code has been removed a while ago (there is no more "pad_buf" in qcow.c or qcow2.c), so closing this ticket. If you still can reproduce the (same or similar) problem with the latest version of QEMU, please open a new ticket instead.

Changed in qemu:
status: New → Won't Fix
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.