On 2/19/2025 4:12 PM, Fabiano Rosas wrote:
"Chaney, Ben" <bcha...@akamai.com> writes:

Hello Steve,

Thank you for posting the qemu cpr-transfer patches on qemu-devel. I am 
experimenting with them, and I noticed that cpr-transfer is failing on some 
qemu machine types. cpr-transfer is working for me on the microvm machine type 
but failing on q35 and pc-i440fx. When running in those configurations I get 
the following error on the new qemu process:


     qemu-system-x86_64: error while loading state for instance 0x0 of device 
'kvm-tpr-opt'
     2025-02-18T14:46:52.550319Z qemu-system-x86_64: load of migration failed: 
Operation not permitted

The issue occurs when initializing the vapic device in the new qemu process. In 
vapic_map_rom_writable, rom_size is set to zero. This causes the following 
condition to be triggered:

     ram = memory_region_get_ram_ptr(section.mr);
     rom_size = ram[rom_paddr + 2] * ROM_BLOCK_SIZE;
     if (rom_size == 0) {
     return -1;
     }

Good job debugging the most opaque error message the migration code can emit.


This occurs on the qemu master branch (tested on commit 
9736ee382e95ead06a838fe0b0498e0cb3845270) with the following qemu command line 
options:

Terminal 1:

     /opt/qemu-build/bin/qemu-system-x86_64 -nographic -cpu 
host,migratable=yes,-vmx,-svm,invpcid=off -display 
vnc=unix:/opt/bchaney-tmp/vnc.socket -enable-kvm -name 
bchaney_test1,debug-threads=on -smp 4 -object 
memory-backend-file,id=ram0,size=4G,mem-path=/dev/shm/ram0,share=on -m 4G 
-machine aux-ram-share=on -rtc clock=vm -no-user-config -nodefaults -msg 
timestamp=on -bios /opt/linode-seabios/roms/bios.bin -machine q35,accel=kvm 
-cdrom /opt/bchaney-tmp/ubuntu-24.04.1-live-server-amd64.iso -qmp stdio

You're missing an option that tells QEMU to actually make use of the
shared memory backend:

-machine memory-backend=ram0

You might be looking at an older version of the documentation. We've
fixed that and Steve is working on a better error message for it.

Thank-you Fabiano for replying.  I was OOTO last week.

Ben, let me know if -machine memory-backend=ram0 does not fix the problem.

- Steve

Terminal 2:

     /opt/qemu-build/bin/qemu-system-x86_64 -nographic -cpu host,migratable=yes,-vmx,-svm,invpcid=off -display vnc=unix:/opt/bchaney-tmp/vnc.socket -enable-kvm -name bchaney_test1,debug-threads=on -smp 4 -object 
memory-backend-file,id=ram0,size=4G,mem-path=/dev/shm/ram0,share=on -m 4G -machine aux-ram-share=on -rtc clock=vm -no-user-config -nodefaults -msg timestamp=on -bios /opt/linode-seabios/roms/bios.bin -machine q35,accel=kvm -cdrom 
/opt/bchaney-tmp/ubuntu-24.04.1-live-server-amd64.iso -incoming '{"channel-type": "main", "addr": { "transport": "socket", "type": "unix", "path": 
"/opt/bchaney-tmp/main.sock"}}' -incoming '{"channel-type": "cpr", "addr": { "transport": "socket", "type": "unix", "path": "/opt/bchaney-tmp/cpr.sock"}}' 
-monitor stdio

Qmp commands executed (in Terminal 1):

     {"execute":"qmp_capabilities"}
     {"execute": "query-status"}
     {"execute":"migrate-set-parameters",
        "arguments":{"mode":"cpr-transfer"}}
     {"execute": "migrate", "arguments": { "channels": [
         {"channel-type": "main", "addr": { "transport": "socket", "type": 
"unix",
                    "path": "/opt/bchaney-tmp/main.sock"}},
     {"channel-type": "cpr",
          "addr": { "transport": "socket", "type": "unix",
                     "path": "/opt/bchaney-tmp/cpr.sock"}}]}}
     {"execute": "query-status"}

Is this a hardware configuration that is currently intended to be supported? If 
not, will it be supported in the future?

Thank you,
Ben Chaney


Reply via email to