Bug 1138691
Summary: | Allow qemu-img to bypass the host cache (check, compare, convert, rebase, amend) | |||
---|---|---|---|---|
Product: | Red Hat Enterprise Linux 7 | Reporter: | Ademar Reis <areis> | |
Component: | qemu-kvm | Assignee: | Hanna Czenczek <hreitz> | |
Status: | CLOSED ERRATA | QA Contact: | Virtualization Bugs <virt-bugs> | |
Severity: | high | Docs Contact: | ||
Priority: | unspecified | |||
Version: | 7.0 | CC: | amureini, bazulay, bsarathy, bugs, chayang, fsimonce, gklein, hhuang, hreitz, iheim, juzhang, lmiksik, mgoldboi, michen, mkenneth, mst, qzhang, rbalakri, s.kieske, sluo, stefanha, tlavigne, virt-bugs, virt-maint, wquan, xigao, yeylon | |
Target Milestone: | rc | Keywords: | Rebase | |
Target Release: | --- | |||
Hardware: | Unspecified | |||
OS: | Unspecified | |||
Whiteboard: | storage | |||
Fixed In Version: | qemu-kvm-1.5.3-79.el7 | Doc Type: | Rebase: Bug Fixes and Enhancements | |
Doc Text: | Story Points: | --- | ||
Clone Of: | 1116558 | |||
: | 1166481 (view as bug list) | Environment: | ||
Last Closed: | 2015-03-05 08:11:45 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: | 1116558 | |||
Bug Blocks: | 1138690, 1166481 |
Comment 7
Miroslav Rezanina
2014-11-12 11:26:38 UTC
Verify this issue with the same steps as Chao Yang. #######qemu-kvm-1.5.3-79.el7.x86_64: host info: # uname -r && rpm -q qemu-kvm 3.10.0-205.el7.x86_64 qemu-kvm-1.5.3-79.el7.x86_64 Scenario 1: ----------- # sync; echo 3 > /proc/sys/vm/drop_caches # free -m;qemu-img convert -t none -f raw -O qcow2 image-1.raw image-test.qcow2; free -m total used free shared buff/cache available Mem: 7781 290 7367 8 ***124*** 7318 Swap: 8063 73 7990 total used free shared buff/cache available Mem: 7781 290 2509 8 ***4981*** 7253 Swap: 8063 73 7990 # sync; echo 3 > /proc/sys/vm/drop_caches # free -m;qemu-img convert -t none -f raw -O qcow2 image-1.raw image-test.qcow2 -T none; free -m total used free shared buff/cache available Mem: 7781 290 7367 8 ***124*** 7318 Swap: 8063 73 7990 total used free shared buff/cache available Mem: 7781 291 7362 8 ***128*** 7316 Swap: 8063 73 7990 As we can see above, cached column differs a lot from without '-T none' and with '-T none'. Scenario 2: ----------- If you call "strace -e trace=open qemu-img xxx -T none source.img destination.img", the last time each file (source.img and destination.img) is opened with the ***O_DIRECT*** flag. 2.1 qemu-img convert. # git diff convert-without-T.log convert-with-T.log diff --git a/convert-without-T.log b/convert-with-T.log index 5475bc7..dc75a8b 100644 --- a/convert-without-T.log +++ b/convert-with-T.log @@ -19,7 +19,7 @@ open("/lib64/libcrypto.so.10", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libgpg-error.so.0", O_RDONLY|O_CLOEXEC) = 3 open("image-1.raw", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 6 open("image-1.raw", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 6 -open("image-1.raw", O_RDONLY|O_CLOEXEC) = 6 +open("image-1.raw", O_RDONLY|***O_DIRECT***|O_CLOEXEC) = 6 open("image-1.qcow2", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 7 open("image-1.qcow2", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 7 open("image-1.qcow2", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 7 2.2 qemu-img check. # git diff check-without-T.log check-with-T.log diff --git a/check-without-T.log b/check-with-T.log index d9a737a..b1e5f18 100644 --- a/check-without-T.log +++ b/check-with-T.log @@ -19,5 +19,5 @@ open("/lib64/libcrypto.so.10", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libgpg-error.so.0", O_RDONLY|O_CLOEXEC) = 3 open("image-1.qcow2", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 6 open("image-1.qcow2", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 6 -open("image-1.qcow2", O_RDONLY|O_CLOEXEC) = 6 +open("image-1.qcow2", O_RDONLY|***O_DIRECT***|O_CLOEXEC) = 6 +++ exited with 0 +++ 2.3 qemu-img compare. # git diff compare-without-T.log compare-with-T.log diff --git a/compare-without-T.log b/compare-with-T.log index 646175e..afc45cc 100644 --- a/compare-without-T.log +++ b/compare-with-T.log @@ -19,8 +19,8 @@ open("/lib64/libcrypto.so.10", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libgpg-error.so.0", O_RDONLY|O_CLOEXEC) = 3 open("image-1.raw", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 6 open("image-1.raw", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 6 -open("image-1.raw", O_RDONLY|O_CLOEXEC) = 6 +open("image-1.raw", O_RDONLY|***O_DIRECT***|O_CLOEXEC) = 6 open("image-1.qcow2", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 7 open("image-1.qcow2", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 7 -open("image-1.qcow2", O_RDONLY|O_CLOEXEC) = 7 +open("image-1.qcow2", O_RDONLY|***O_DIRECT***|O_CLOEXEC) = 7 +++ exited with 0 +++ 2.4 qemu-img rebase. # git diff rebase-without-T.log rebase-with-T.log diff --git a/rebase-without-T.log b/rebase-with-T.log index 451ae2c..0fbd0ec 100644 --- a/rebase-without-T.log +++ b/rebase-with-T.log @@ -25,8 +25,8 @@ open("image-1.qcow2", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 8 open("image-1.qcow2", O_RDONLY|O_DIRECT|O_CLOEXEC) = 8 open("image-1.qcow2", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 9 open("image-1.qcow2", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 9 -open("image-1.qcow2", O_RDONLY|O_CLOEXEC) = 9 +open("image-1.qcow2", O_RDONLY|***O_DIRECT***|O_CLOEXEC) = 9 open("image-1.qcow2", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 10 open("image-1.qcow2", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 10 -open("image-1.qcow2", O_RDONLY|O_CLOEXEC) = 10 +open("image-1.qcow2", O_RDONLY|***O_DIRECT***|O_CLOEXEC) = 10 +++ exited with 0 +++ 2.5 qemu-img amend. qemu-img amend fail to specify the cache mode to bypass the host cache in qemu-kvm-1.5.3-x verison(separated it to new bug 1166476 to trace it). #######qemu-kvm-rhev-2.1.2-8.el7.x86_64: host info: # uname -r && rpm -q qemu-kvm-rhev 3.10.0-205.el7.x86_64 qemu-kvm-rhev-2.1.2-8.el7.x86_64 Scenario 1: ----------- # sync; echo 3 > /proc/sys/vm/drop_caches # free -m;qemu-img convert -t none -f raw -O qcow2 image-1.raw image-test.qcow2; free -m # sync; echo 3 > /proc/sys/vm/drop_caches # free -m;qemu-img convert -t none -f raw -O qcow2 image-1.raw image-test.qcow2 -T none; free -m Scenario 2: ----------- 2.1 qemu-img convert. 2.2 qemu-img check. 2.3 qemu-img compare. 2.4 qemu-img rebase. 2.5 qemu-img amend. It fail to work with qemu-kvm-rhev-2.1.2-X version which i have separated it to new bug 1166481 to trace it. Bug 1166481 - Allow qemu-img to bypass the host cache (check, compare, convert, rebase, amend) Base on above, this issue has been fixed, new issues have been separated to new bug to trace it. Move this issue to VERIFIED status first, thanks. Best Regards, sluo 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, 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://rhn.redhat.com/errata/RHSA-2015-0349.html |