Bug 1373604
Summary: | Enhance live migration post-copy to support file-backed memory (e.g. 2M hugepages) | |||
---|---|---|---|---|
Product: | Red Hat Enterprise Linux 7 | Reporter: | Hai Huang <hhuang> | |
Component: | qemu-kvm-rhev | Assignee: | Dr. David Alan Gilbert <dgilbert> | |
Status: | CLOSED ERRATA | QA Contact: | xianwang <xianwang> | |
Severity: | unspecified | Docs Contact: | ||
Priority: | unspecified | |||
Version: | 7.4 | CC: | amit.shah, chayang, dgilbert, hannsj_uhl, hhuang, huding, juzhang, michen, mrezanin, pezhang, quintela, qzhang, virt-maint, xfu, xianwang, xiywang | |
Target Milestone: | rc | Keywords: | FutureFeature | |
Target Release: | 7.4 | |||
Hardware: | Unspecified | |||
OS: | Linux | |||
Whiteboard: | ||||
Fixed In Version: | qemu-kvm-rhev-2.9.0-1.el7 | Doc Type: | If docs needed, set a value | |
Doc Text: | Story Points: | --- | ||
Clone Of: | ||||
: | 1373606 (view as bug list) | Environment: | ||
Last Closed: | 2017-08-01 23:34:44 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: | 1373606, 1430172, 1430174 | |||
Bug Blocks: | 1359843, 1385707, 1411879 |
Description
Hai Huang
2016-09-06 17:15:01 UTC
Hai: Do we know much about what lives in the big 1G huge pages? Are they mostly static or are they changing reasonably frequently? First version of qemu posted to qemu-devel; note this supports 2MB hugepages but not 1GB. 1GB support is not currently reasonable with the technique we're using in the kernel. Fixed in 2.9 Merged as part of 251501a3714096f807778f6d3f03711dcdb9ce29 postcopy: Add extra check for COPY function postcopy: Add doc about hugepages and postcopy postcopy: Check for userfault+hugepage feature postcopy: Update userfaultfd.h header postcopy: Allow hugepages postcopy: Send whole huge pages postcopy: Mask fault addresses to huge page boundary postcopy: Load huge pages in one go postcopy: Use temporary for placing zero huge pages postcopy: Plumb pagesize down into place helpers postcopy: Record largest page size postcopy: enhance ram_block_discard_range for hugepages exec: ram_block_discard_range postcopy: Chunk discards for hugepages postcopy: Transmit and compare individual page sizes postcopy: Transmit ram size summary word This bug is fixed for qemu-kvm-rhev-2.9.0-1.el7 Bug verify: Version: 3.10.0-657.el7.x86_64 qemu-kvm-rhev-2.9.0-1.el7.x86_64 seabios-bin-1.10.2-2.el7.noarch Steps: 1)Configure hugepage in src host and dst host # echo 2048 > /proc/sys/vm/nr_hugepages # cat /proc/meminfo | grep -i hugepage AnonHugePages: 14336 kB HugePages_Total: 2048 HugePages_Free: 2048 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB 2)Boot a guest on src host with qemu cli: /usr/libexec/qemu-kvm \ -name 'vm1' \ -sandbox off \ -machine pc-i440fx-rhel7.4.0 \ -nodefaults \ -device virtio-serial-pci,id=virtio_serial_pci0,bus=pci.0,addr=04 \ -device usb-ehci,id=usb1,bus=pci.0,addr=06 \ -device virtio-scsi-pci,id=virtio_scsi_pci0,bus=pci.0,addr=09 \ -drive id=drive_image1,if=none,snapshot=off,aio=threads,cache=unsafe,format=qcow2,file=/root/rhel74-64-virtio.qcow2 \ -device virtio-blk-pci,id=image1,drive=drive_image1,bus=pci.0,bootindex=0 \ -device virtio-net-pci,mac=9a:4f:50:51:52:53,id=id9HRc5V,vectors=4,netdev=idjlQN53,bus=pci.0 \ -netdev tap,id=idjlQN53,vhost=off,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown \ -mem-path /dev/hugepages \ -mem-prealloc \ -m 4096 \ -smp 4 \ -device usb-tablet,id=usb-tablet1,bus=usb1.0,port=1 \ -device usb-mouse,id=input1,bus=usb1.0,port=2 \ -device usb-kbd,id=input2,bus=usb1.0,port=3 \ -vnc :1 \ -qmp tcp:0:8881,server,nowait \ -vga std \ -monitor stdio \ -rtc base=localtime \ -boot order=cdn,once=n,menu=on,strict=off \ -enable-kvm \ -watchdog i6300esb \ -watchdog-action reset \ -device virtio-balloon-pci,id=balloon0,bus=pci.0 3)Launch a guest in dst host for listening mode with "-incoming tcp:0:5801" 4)In guest, execute program to generate dirty page # cat test.c #include <stdlib.h> #include <stdio.h> #include <signal.h> int main() { void wakeup(); signal(SIGALRM,wakeup); alarm(120); char *buf = (char *) calloc(40960, 4096); while (1) { int i; for (i = 0; i < 40960 * 4; i++) { buf[i * 4096 / 4]++; } printf("."); } } void wakeup() { exit(0); } # gcc test.c -o test # ./test 5)In src host, do migration and enable postcopy, after generating dirty page, switch to postcopy mode (qemu) migrate_set_capability postcopy-ram on (qemu) migrate -d tcp:10.16.184.92:5801 (qemu) info migrate capabilities: xbzrle: off rdma-pin-all: off auto-converge: off zero-blocks: off compress: off events: off postcopy-ram: on x-colo: off release-ram: off Migration status: active dirty sync count: 3 dirty pages rate: 6889 pages (qemu) migrate_start_postcopy Actual result: Postcopy migration completed and vm works well. Src host: (qemu) info migrate capabilities: xbzrle: off rdma-pin-all: off auto-converge: off zero-blocks: off compress: off events: off postcopy-ram: on x-colo: off release-ram: off Migration status: completed dirty sync count: 6 postcopy request count: 268 Dst host: (qemu) info status VM status: running So, this bug is fixed. 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://access.redhat.com/errata/RHSA-2017:2392 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://access.redhat.com/errata/RHSA-2017:2392 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://access.redhat.com/errata/RHSA-2017:2392 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://access.redhat.com/errata/RHSA-2017:2392 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://access.redhat.com/errata/RHSA-2017:2392 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://access.redhat.com/errata/RHSA-2017:2392 |