Bug 2029751
| Summary: | nbdkit-cow-filter does not allow cow-block-size=4096 | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 9 | Reporter: | Richard W.M. Jones <rjones> |
| Component: | nbdkit | Assignee: | Virtualization Maintenance <virt-maint> |
| Status: | CLOSED ERRATA | QA Contact: | mxie <mxie> |
| Severity: | unspecified | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | 9.0 | CC: | eblake, lersek, mxie, rjones, tyan, tzheng, virt-maint, vwu, xiaodwan |
| Target Milestone: | rc | Keywords: | Triaged |
| Target Release: | --- | Flags: | pm-rhel:
mirror+
|
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | nbdkit-1.28.3-1.el9 | Doc Type: | If docs needed, set a value |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2022-05-17 12:50:41 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Bug Depends On: | 2011709 | ||
| Bug Blocks: | 2011713 | ||
| Deadline: | 2022-02-14 | ||
|
Description
Richard W.M. Jones
2021-12-07 08:40:22 UTC
Add bug 2011709 because we'll probably pick this fix up in a rebase. Test the bug with nbdkit-1.28.3-2.el9.x86_64
Steps:
1.Check the man page of nbdkit-cow-filter
# man nbdkit-cow-filter |grep cow-block-size -A 3
[cow-block-size=N]
[cow-on-cache=false|true]
[cow-on-read=false|true|/PATH]
--
cow-block-size=N
Set the block size used by the filter. This has to be a power of two and the minimum block size is 4K.
The maximum block size depends on the plugin, but a block size larger than a few megabytes is not
usually a good idea.
2. # time nbdkit -rfv -U - --exportname --filter=retry vddk server=10.73.198.169 user=root password=+/home/passwd vm=moref=vm-6300 file='[esx7.0-matrix] esx7.0-win11-x86_64/esx7.0-win11-x86_64.vmdk' libdir=/home/vddk7.0.2 thumbprint='B5:52:1F:B4:21:09:45:24:51:32:56:F6:63:6A:93:5D:54:08:2D:78' transports=nbdssl compression=skipz --run 'qemu-img convert $nbd /home/esx7.0-win11-x86_64' --filter=cacheextents --filter=delay rdelay=20ms --filter=cow cow-on-read=true cow-block-size=0
....
nbdkit: error: cow-block-size is out of range (4096..2G) or not a power of 2
....
3.Convert a guest from VMware with nbdkit and add cow-block-size=4096/4k to command line
3.1 # time nbdkit -rfv -U - --exportname --filter=retry vddk server=10.73.198.169 user=root password=+/home/passwd vm=moref=vm-6300 file='[esx7.0-matrix] esx7.0-win11-x86_64/esx7.0-win11-x86_64.vmdk' libdir=/home/vddk7.0.2 thumbprint='B5:52:1F:B4:21:09:45:24:51:32:56:F6:63:6A:93:5D:54:08:2D:78' transports=nbdssl compression=skipz --run 'qemu-img convert $nbd /home/esx7.0-win11-x86_64' --filter=cacheextents --filter=delay rdelay=20ms --filter=cow cow-on-read=true cow-block-size=4096
.....
real 6m53.898s
user 0m12.463s
sys 1m40.819s
3.2 # time nbdkit -rfv -U - --exportname --filter=retry vddk server=10.73.198.169 user=root password=+/home/passwd vm=moref=vm-6300 file='[esx7.0-matrix] esx7.0-win11-x86_64/esx7.0-win11-x86_64.vmdk' libdir=/home/vddk7.0.2 thumbprint='B5:52:1F:B4:21:09:45:24:51:32:56:F6:63:6A:93:5D:54:08:2D:78' transports=nbdssl compression=skipz --run 'qemu-img convert $nbd /home/esx7.0-win11-x86_64' --filter=cacheextents --filter=delay rdelay=20ms --filter=cow cow-on-read=true cow-block-size=4k
....
real 7m34.770s
user 0m10.748s
sys 1m26.901s
4.Convert a guest from VMware with nbdkit and add cow-block-size=8196/8K to command line
4.1 # time nbdkit -rfv -U - --exportname --filter=retry vddk server=10.73.198.169 user=root password=+/home/passwd vm=moref=vm-6300 file='[esx7.0-matrix] esx7.0-win11-x86_64/esx7.0-win11-x86_64.vmdk' libdir=/home/vddk7.0.2 thumbprint='B5:52:1F:B4:21:09:45:24:51:32:56:F6:63:6A:93:5D:54:08:2D:78' transports=nbdssl compression=skipz --run 'qemu-img convert $nbd /home/esx7.0-win11-x86_64' --filter=cacheextents --filter=delay rdelay=20ms --filter=cow cow-on-read=true cow-block-size=8192
.....
real 7m37.623s
user 0m11.539s
sys 1m32.833s
# time nbdkit -rfv -U - --exportname --filter=retry vddk server=10.73.198.169 user=root password=+/home/passwd vm=moref=vm-6300 file='[esx7.0-matrix] esx7.0-win11-x86_64/esx7.0-win11-x86_64.vmdk' libdir=/home/vddk7.0.2 thumbprint='B5:52:1F:B4:21:09:45:24:51:32:56:F6:63:6A:93:5D:54:08:2D:78' transports=nbdssl compression=skipz --run 'qemu-img convert $nbd /home/esx7.0-win11-x86_64' --filter=cacheextents --filter=delay rdelay=20ms --filter=cow cow-on-read=true cow-block-size=8K
....
real 7m20.561s
user 0m10.992s
sys 1m28.543s
Hi rjones,
It's strange that setting cow-block-size=4k takes slightly longer to convert than setting cow-block-size=4096, I get same result after trying many times, is it normal?
It's pretty strange and I don't understand it. However the block size is definitely set to 4096 in both cases. In the logs you can see the cow filter getting a 512 byte request from the client, and making a 4096 byte request to the underlying plugin (in both logs): nbdkit: vddk.2: debug: cow: pread count=512 offset=0 nbdkit: vddk.2: debug: vddk: pread count=4096 offset=0 If this is consistently reproducible, I can take a closer look when I get back from holiday. Verify the bug with nbdkit-1.28.4-2.el9.x86_64
Steps:
1.Check the man page of nbdkit-cow-filter
# man nbdkit-cow-filter |grep cow-block-size -A 3
[cow-block-size=N]
[cow-on-cache=false|true]
[cow-on-read=false|true|/PATH]
--
cow-block-size=N
Set the block size used by the filter. This has to be a power of two and the minimum block size is 4K.
The maximum block size depends on the plugin, but a block size larger than a few megabytes is not
usually a good idea.
2. # time nbdkit -rfv -U - --exportname --filter=retry vddk server=10.73.198.169 user=root password=+/home/passwd vm=moref=vm-6300 file='[esx7.0-matrix] esx7.0-win11-x86_64/esx7.0-win11-x86_64.vmdk' libdir=/home/vddk7.0.2 thumbprint='B5:52:1F:B4:21:09:45:24:51:32:56:F6:63:6A:93:5D:54:08:2D:78' transports=nbdssl compression=skipz --run 'qemu-img convert $nbd /home/esx7.0-win11-x86_64' --filter=cacheextents --filter=delay rdelay=20ms --filter=cow cow-on-read=true cow-block-size=0
....
nbdkit: error: cow-block-size is out of range (4096..2G) or not a power of 2
....
3.Convert a guest from VMware with nbdkit and add cow-block-size=4096/4K/4k to command line
3.1 # time nbdkit -rfv -U - --exportname --filter=retry vddk server=10.73.198.169 user=root password=+/home/passwd vm=moref=vm-6300 file='[esx7.0-matrix] esx7.0-win11-x86_64/esx7.0-win11-x86_64.vmdk' libdir=/home/vddk7.0.2 thumbprint='B5:52:1F:B4:21:09:45:24:51:32:56:F6:63:6A:93:5D:54:08:2D:78' transports=nbdssl compression=skipz --run 'qemu-img convert $nbd /home/esx7.0-win11-x86_64' --filter=cacheextents --filter=delay rdelay=20ms --filter=cow cow-on-read=true cow-block-size=4096
.....
real 6m44.493s
user 0m12.028s
sys 1m33.559s
3.2 # time nbdkit -rfv -U - --exportname --filter=retry vddk server=10.73.198.169 user=root password=+/home/passwd vm=moref=vm-6300 file='[esx7.0-matrix] esx7.0-win11-x86_64/esx7.0-win11-x86_64.vmdk' libdir=/home/vddk7.0.2 thumbprint='B5:52:1F:B4:21:09:45:24:51:32:56:F6:63:6A:93:5D:54:08:2D:78' transports=nbdssl compression=skipz --run 'qemu-img convert $nbd /home/esx7.0-win11-x86_64' --filter=cacheextents --filter=delay rdelay=20ms --filter=cow cow-on-read=true cow-block-size=4K
....
real 7m19.641s
user 0m12.294s
sys 1m33.509s
3.3 # time nbdkit -rfv -U - --exportname --filter=retry vddk server=10.73.198.169 user=root password=+/home/passwd vm=moref=vm-6300 file='[esx7.0-matrix] esx7.0-win11-x86_64/esx7.0-win11-x86_64.vmdk' libdir=/home/vddk7.0.2 thumbprint='B5:52:1F:B4:21:09:45:24:51:32:56:F6:63:6A:93:5D:54:08:2D:78' transports=nbdssl compression=skipz --run 'qemu-img convert $nbd /home/esx7.0-win11-x86_64' --filter=cacheextents --filter=delay rdelay=20ms --filter=cow cow-on-read=true cow-block-size=4k
....
real 7m21.094s
user 0m12.076s
sys 1m32.004s
4.Convert a guest from VMware with nbdkit and add cow-block-size=8196/8K to command line
4.1 # time nbdkit -rfv -U - --exportname --filter=retry vddk server=10.73.198.169 user=root password=+/home/passwd vm=moref=vm-6300 file='[esx7.0-matrix] esx7.0-win11-x86_64/esx7.0-win11-x86_64.vmdk' libdir=/home/vddk7.0.2 thumbprint='B5:52:1F:B4:21:09:45:24:51:32:56:F6:63:6A:93:5D:54:08:2D:78' transports=nbdssl compression=skipz --run 'qemu-img convert $nbd /home/esx7.0-win11-x86_64' --filter=cacheextents --filter=delay rdelay=20ms --filter=cow cow-on-read=true cow-block-size=8192
.....
real 7m37.161s
user 0m11.950s
sys 1m32.963s
# time nbdkit -rfv -U - --exportname --filter=retry vddk server=10.73.198.169 user=root password=+/home/passwd vm=moref=vm-6300 file='[esx7.0-matrix] esx7.0-win11-x86_64/esx7.0-win11-x86_64.vmdk' libdir=/home/vddk7.0.2 thumbprint='B5:52:1F:B4:21:09:45:24:51:32:56:F6:63:6A:93:5D:54:08:2D:78' transports=nbdssl compression=skipz --run 'qemu-img convert $nbd /home/esx7.0-win11-x86_64' --filter=cacheextents --filter=delay rdelay=20ms --filter=cow cow-on-read=true cow-block-size=8K
....
real 7m38.320s
user 0m11.771s
sys 1m33.122s
Hi rjones,
I still can reproduce the problem 'cow-block-size=4k/4K takes slightly longer to convert than setting cow-block-size=4096, do you think this problem deserves our attention?
I think just to verify this bug on its own, all that is needed is: $ nbdkit --filter=cow null cow-block-size=4096 --run true (which should exit with no error). Previously trying to set this gave an error. The performance benefits of cow-block-size=4096 are difficult to measure in the way you're doing for a few reasons: - The actual performance benefit was with fstrim (not copying). It's very difficult to test fstrim on its own, it can only really be measured as part of the whole virt-v2v process. See the commit message for more details: https://github.com/libguestfs/virt-v2v/commit/351d61f768c51287917a04b9fbedf24d79f5deb4 - Virt-v2v now uses nbdcopy, not qemu-img convert. I would leave performance testing in the bug / email thread that we already have and not try to do it here. # nbdkit --filter=cow null cow-block-size=4096 --run true Result:exit with no error Move the bug from ON_QA to VERIFIED according to comment9 and comment10 Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (new packages: nbdkit), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHEA-2022:2408 |