From: Alberto Garcia <berto@igalia.com>
To: Brian Foster <bfoster@redhat.com>, Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org,
Max Reitz <mreitz@redhat.com>,
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
linux-xfs@vger.kernel.org
Subject: Re: [PATCH 0/1] qcow2: Skip copy-on-write when allocating a zero cluster
Date: Thu, 20 Aug 2020 22:03:10 +0200 [thread overview]
Message-ID: <w51v9hdultt.fsf@maestria.local.igalia.com> (raw)
In-Reply-To: <20200819175300.GA141399@bfoster>
Cc: linux-xfs
On Wed 19 Aug 2020 07:53:00 PM CEST, Brian Foster wrote:
> In any event, if you're seeing unclear or unexpected performance
> deltas between certain XFS configurations or other fs', I think the
> best thing to do is post a more complete description of the workload,
> filesystem/storage setup, and test results to the linux-xfs mailing
> list (feel free to cc me as well). As it is, aside from the questions
> above, it's not really clear to me what the storage stack looks like
> for this test, if/how qcow2 is involved, what the various
> 'preallocation=' modes actually mean, etc.
(see [1] for a bit of context)
I repeated the tests with a larger (125GB) filesystem. Things are a bit
faster but not radically different, here are the new numbers:
|----------------------+-------+-------|
| preallocation mode | xfs | ext4 |
|----------------------+-------+-------|
| off | 8139 | 11688 |
| off (w/o ZERO_RANGE) | 2965 | 2780 |
| metadata | 7768 | 9132 |
| falloc | 7742 | 13108 |
| full | 41389 | 16351 |
|----------------------+-------+-------|
The numbers are I/O operations per second as reported by fio, running
inside a VM.
The VM is running Debian 9.7 with Linux 4.9.130 and the fio version is
2.16-1. I'm using QEMU 5.1.0.
fio is sending random 4KB write requests to a 25GB virtual drive, this
is the full command line:
fio --filename=/dev/vdb --direct=1 --randrepeat=1 --eta=always
--ioengine=libaio --iodepth=32 --numjobs=1 --name=test --size=25G
--io_limit=25G --ramp_time=5 --rw=randwrite --bs=4k --runtime=60
The virtual drive (/dev/vdb) is a freshly created qcow2 file stored on
the host (on an xfs or ext4 filesystem as the table above shows), and
it is attached to QEMU using a virtio-blk-pci device:
-drive if=virtio,file=image.qcow2,cache=none,l2-cache-size=200M
cache=none means that the image is opened with O_DIRECT and
l2-cache-size is large enough so QEMU is able to cache all the
relevant qcow2 metadata in memory.
The host is running Linux 4.19.132 and has an SSD drive.
About the preallocation modes: a qcow2 file is divided into clusters
of the same size (64KB in this case). That is the minimum unit of
allocation, so when writing 4KB to an unallocated cluster QEMU needs
to fill the other 60KB with zeroes. So here's what happens with the
different modes:
1) off: for every write request QEMU initializes the cluster (64KB)
with fallocate(ZERO_RANGE) and then writes the 4KB of data.
2) off w/o ZERO_RANGE: QEMU writes the 4KB of data and fills the rest
of the cluster with zeroes.
3) metadata: all clusters were allocated when the image was created
but they are sparse, QEMU only writes the 4KB of data.
4) falloc: all clusters were allocated with fallocate() when the image
was created, QEMU only writes 4KB of data.
5) full: all clusters were allocated by writing zeroes to all of them
when the image was created, QEMU only writes 4KB of data.
As I said in a previous message I'm not familiar with xfs, but the
parts that I don't understand are
- Why is (4) slower than (1)?
- Why is (5) so much faster than everything else?
I hope I didn't forget anything, tell me if you have questions.
Berto
[1] https://lists.gnu.org/archive/html/qemu-block/2020-08/msg00481.html
next parent reply other threads:[~2020-08-20 20:37 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1597416317.git.berto@igalia.com>
[not found] ` <20200817101019.GD11402@linux.fritz.box>
[not found] ` <w518sedz3td.fsf@maestria.local.igalia.com>
[not found] ` <20200817155307.GS11402@linux.fritz.box>
[not found] ` <w51pn7memr7.fsf@maestria.local.igalia.com>
[not found] ` <20200819150711.GE10272@linux.fritz.box>
[not found] ` <20200819175300.GA141399@bfoster>
2020-08-20 20:03 ` Alberto Garcia [this message]
2020-08-20 21:58 ` [PATCH 0/1] qcow2: Skip copy-on-write when allocating a zero cluster Dave Chinner
2020-08-21 11:05 ` Brian Foster
2020-08-21 11:42 ` Alberto Garcia
2020-08-21 12:12 ` Alberto Garcia
2020-08-21 17:02 ` Brian Foster
2020-08-25 12:24 ` Alberto Garcia
2020-08-25 16:54 ` Brian Foster
2020-08-25 17:18 ` Alberto Garcia
2020-08-25 19:47 ` Brian Foster
2020-08-26 18:34 ` Alberto Garcia
2020-08-27 16:47 ` Brian Foster
2020-08-23 21:59 ` Dave Chinner
2020-08-24 20:14 ` Alberto Garcia
2020-08-21 12:59 ` Brian Foster
2020-08-21 15:51 ` Alberto Garcia
2020-08-23 22:16 ` Dave Chinner
2020-08-21 16:09 ` Alberto Garcia
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=w51v9hdultt.fsf@maestria.local.igalia.com \
--to=berto@igalia.com \
--cc=bfoster@redhat.com \
--cc=kwolf@redhat.com \
--cc=linux-xfs@vger.kernel.org \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=vsementsov@virtuozzo.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox