qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] qcow2: avoid lseek on block_status if possible


From: Vladimir Sementsov-Ogievskiy
Subject: Re: [Qemu-devel] [PATCH] qcow2: avoid lseek on block_status if possible
Date: Fri, 25 Jan 2019 14:36:54 +0000

25.01.2019 17:21, Vladimir Sementsov-Ogievskiy wrote:
> drv_co_block_status digs bs->file for additional, more accurate search
> for hole inside region, reported as DATA by bs since 5daa74a6ebc.
> 
> This accuracy is not free: assume we have qcow2 disk. Actually, qcow2
> knows, where are holes and where is data. But every block_status
> request calls lseek additionally. Assume a big disk, full of
> data, in any iterative copying block job (or img convert) we'll call
> lseek(HOLE) on every iteration, and each of these lseeks will have to
> iterate through all metadata up to the end of file. It's obviously
> ineffective behavior. And for many scenarios we don't need this lseek
> at all.
> 
> However, lseek is needed when we have metadata-preallocated image.
> 
> So, let's detect metadata-preallocation case and don't dig qcow2's
> protocol file in other cases.
> 
> The idea is to compare allocation size in POV of filesystem with
> allocations size in POV of Qcow2 (by refcounts). If allocation in fs is
> significantly lower, consider it as metadata-preallocation case.
> 
> Suggested-by: Denis V. Lunev <address@hidden>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
> ---
> 
> Hi!
> 
> So, to continue talk about lseek/no lseek when qcow2 block_status reports
> DATA.
> 
> Results on tmpfs:
> cached is lseek cache by Kevin
> detect is this patch
> no lseek is just remove block_status query on bs->file->bs in
>           bdrv_co_block_status
> 
>      +---------------------+--------+--------+--------+----------+
>      |                     | master | cached | detect | no lseek |
>      +---------------------+--------+--------+--------+----------+
>      | test.qcow2          | 80     | 40     | 0.169  | 0.162    |
>      +---------------------+--------+--------+--------+----------+
>      | test_forward.qcow2  | 79     | 0.171  | 0.169  | 0.163    |
>      +---------------------+--------+--------+--------+----------+
>      | test_prealloc.qcow2 | 0.054  | 0.053  | 0.055  | 0.263    |
>      +---------------------+--------+--------+--------+----------+

Forgot to say, tests by Kevin from branch
https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg05463.html

Hmm. Don't we have something like tests/qemu-iotests, but for performance?
So, all these small pretty tests we have in mailing list may go as git patches?



-- 
Best regards,
Vladimir

reply via email to

[Prev in Thread] Current Thread [Next in Thread]