diff options
Diffstat (limited to 'results/classifier/118/none/2634')
| -rw-r--r-- | results/classifier/118/none/2634 | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/results/classifier/118/none/2634 b/results/classifier/118/none/2634 new file mode 100644 index 00000000..1f137115 --- /dev/null +++ b/results/classifier/118/none/2634 @@ -0,0 +1,207 @@ +user-level: 0.747 +graphic: 0.737 +device: 0.717 +risc-v: 0.713 +semantic: 0.712 +TCG: 0.703 +mistranslation: 0.702 +ppc: 0.700 +debug: 0.697 +virtual: 0.669 +permissions: 0.668 +arm: 0.657 +vnc: 0.655 +assembly: 0.649 +PID: 0.644 +register: 0.644 +x86: 0.635 +KVM: 0.624 +kernel: 0.619 +hypervisor: 0.613 +peripherals: 0.609 +network: 0.607 +performance: 0.596 +architecture: 0.594 +boot: 0.586 +VMM: 0.561 +i386: 0.559 +files: 0.540 +socket: 0.529 + +Replay/record does not work with `rrsnapshot`/`loadvm` +Description of problem: +Qemu's record/replay feature does not properly work when using snapshots (like rrsnapshot). + +Record/replay without snapshotting works just fine, but when using `rrsnapshot=...` the replay is stuck at boot. `loadvm` monitor command also gets qemu stuck. + +Record command: + +``` +$ qemu-system-x86_64 \ + -cpu SandyBridge -smp 1 \ + -serial stdio -display none \ + -m 4096 \ + -drive file=./empty.qcow2,id=rr \ + -kernel ./boot/vmlinuz-lts \ + -initrd ./boot/initramfs-lts . + -monitor telnet::12345,server,nowait \ + -append "console=ttyS0 root=/dev/ram0 alpine_dev=cdrom:iso9660 modules=loop,squashfs,sd-mod,usb-storage quiet" \ + -icount shift=auto,rrfile=rr,rr=record,rrsnapshot=init +``` + +Broken replay command, which gets qemu stuck: + +``` +$ qemu-system-x86_64 \ + -cpu SandyBridge -smp 1 \ + -serial stdio -display none \ + -m 4096 \ + -drive file=./empty.qcow2,id=rr \ + -kernel ./boot/vmlinuz-lts \ + -initrd ./boot/initramfs-lts . + -monitor telnet::12345,server,nowait \ + -append "console=ttyS0 root=/dev/ram0 alpine_dev=cdrom:iso9660 modules=loop,squashfs,sd-mod,usb-storage quiet" \ + -icount shift=auto,rrfile=rr,rr=replay,rrsnapshot=init + +qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.tsc-deadline [bit 24] +``` + +Record/replay without `rrsnapshot`/`loadvm`/etc works as expected. +Steps to reproduce: +To reproduce i've used alpine linux kernel as the guest: + +``` +wget https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/x86_64/alpine-standard-3.20.3-x86_64.iso +7z x alpine-standard-3.20.3-x86_64.iso +``` + +Prerequisites - an empty qcow2 file for snapshots: + +``` +qemu-img create -f qcow2 empty.qcow2 1G +``` + +Running an alpine linux kernel with `rr=record` - works just fine, kernel boots, accepts input. + +``` +$ qemu-system-x86_64 \ + -cpu SandyBridge -smp 1 \ + -serial stdio -display none \ + -m 4096 \ + -drive file=./empty.qcow2,id=rr \ + -kernel ./boot/vmlinuz-lts \ + -initrd ./boot/initramfs-lts . + -monitor telnet::12345,server,nowait \ + -append "console=ttyS0 root=/dev/ram0 alpine_dev=cdrom:iso9660 modules=loop,squashfs,sd-mod,usb-storage quiet" \ + -icount shift=auto,rrfile=rr,rr=record,rrsnapshot=init + +qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.tsc-deadline [bit 24] +mount: mounting /dev/ram0 on /sysroot failed: Invalid argument +Mounting root failed. +initramfs emergency recovery shell launched. Type 'exit' to continue boot +sh: can't access tty; job control turned off +~ # ls -alh +total 32K +drwx------ 18 root root 0 Oct 21 13:02 . +drwx------ 18 root root 0 Oct 21 13:02 .. +-rw------- 1 root root 8 Oct 21 13:02 .ash_history +drwxr-xr-x 2 root root 0 Jun 18 12:44 .modloop +drwxr-xr-x 2 root root 0 Oct 21 13:02 bin +drwxr-xr-x 9 root root 2.5K Oct 21 13:02 dev +drwxr-xr-x 4 root root 0 Oct 21 13:02 etc +-rwxr-xr-x 1 root root 25.9K Jun 18 12:44 init +drwxr-xr-x 5 root root 0 Jun 18 12:44 lib +drwxr-xr-x 5 root root 0 Jun 18 12:44 media +drwxr-xr-x 2 root root 0 Jun 18 12:44 newroot +dr-xr-xr-x 114 root root 0 Oct 21 13:02 proc +drwx------ 2 root root 0 Sep 4 12:53 root +drwxr-xr-x 3 root root 0 Oct 21 13:02 run +drwxr-xr-x 2 root root 0 Oct 21 13:02 sbin +dr-xr-xr-x 13 root root 0 Oct 21 13:02 sys +drwxr-xr-x 2 root root 0 Oct 21 13:02 sysroot +drwxr-xr-x 2 root root 0 Oct 21 13:02 tmp +drwxr-xr-x 5 root root 0 Oct 21 13:02 usr +drwxr-xr-x 3 root root 0 Jun 18 12:44 var +~ # echo "AAAAAAAA?" +AAAAAAAA? +~ # +``` + +`rr`-file is produced, which can be used for replaying **without** `rrsnapshot`-option: + +``` +$ qemu-system-x86_64 \ + -cpu SandyBridge -smp 1 \ + -serial stdio -display none \ + -m 4096 \ + -drive file=./empty.qcow2,id=rr \ + -kernel ./boot/vmlinuz-lts \ + -initrd ./boot/initramfs-lts . + -monitor telnet::12345,server,nowait \ + -append "console=ttyS0 root=/dev/ram0 alpine_dev=cdrom:iso9660 modules=loop,squashfs,sd-mod,usb-storage quiet" \ + -icount shift=auto,rrfile=rr,rr=replay + +qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.tsc-deadline [bit 24] +mount: mounting /dev/ram0 on /sysroot failed: Invalid argument +Mounting root failed. +initramfs emergency recovery shell launched. Type 'exit' to continue boot +sh: can't access tty; job control turned off +~ # ls -alh +total 32K +drwx------ 18 root root 0 Oct 21 13:02 . +drwx------ 18 root root 0 Oct 21 13:02 .. +-rw------- 1 root root 8 Oct 21 13:02 .ash_history +drwxr-xr-x 2 root root 0 Jun 18 12:44 .modloop +drwxr-xr-x 2 root root 0 Oct 21 13:02 bin +drwxr-xr-x 9 root root 2.5K Oct 21 13:02 dev +drwxr-xr-x 4 root root 0 Oct 21 13:02 etc +-rwxr-xr-x 1 root root 25.9K Jun 18 12:44 init +drwxr-xr-x 5 root root 0 Jun 18 12:44 lib +drwxr-xr-x 5 root root 0 Jun 18 12:44 media +drwxr-xr-x 2 root root 0 Jun 18 12:44 newroot +dr-xr-xr-x 114 root root 0 Oct 21 13:02 proc +drwx------ 2 root root 0 Sep 4 12:53 root +drwxr-xr-x 3 root root 0 Oct 21 13:02 run +drwxr-xr-x 2 root root 0 Oct 21 13:02 sbin +dr-xr-xr-x 13 root root 0 Oct 21 13:02 sys +drwxr-xr-x 2 root root 0 Oct 21 13:02 sysroot +drwxr-xr-x 2 root root 0 Oct 21 13:02 tmp +drwxr-xr-x 5 root root 0 Oct 21 13:02 usr +drwxr-xr-x 3 root root 0 Jun 18 12:44 var +~ # echo "AAAAAAAA?" +AAAAAAAA? +~ # +``` + +As you can see, replaying emulation session works as expected. How ever, if I add the `rrsnapshot`-option, it gets stuck: + +``` +$ qemu-system-x86_64 \ + -cpu SandyBridge -smp 1 \ + -serial stdio -display none \ + -m 4096 \ + -drive file=./empty.qcow2,id=rr \ + -kernel ./boot/vmlinuz-lts \ + -initrd ./boot/initramfs-lts . + -monitor telnet::12345,server,nowait \ + -append "console=ttyS0 root=/dev/ram0 alpine_dev=cdrom:iso9660 modules=loop,squashfs,sd-mod,usb-storage quiet" \ + -icount shift=auto,rrfile=rr,rr=replay,rrsnapshot=init + +qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.tsc-deadline [bit 24] +``` + +This also can be reproduced without `rrsnapshot` option, by issuing `loadvm init` from qemu monitor: + +``` +$ telnet localhost 12345 +qemu> loadvm init +... +``` + +Or, by using `gdb` and issuing reverse-commands that require `loadvm` to load previous state, like `reverse-stepi` or `reverse-continue`. + +Attaching a debugger & using debug-prints shows some thread being stuck in the [`rcu.c`](https://gitlab.com/qemu-project/qemu/-/blob/master/util/rcu.c), near the `qemu_event_wait(&rcu_call_ready_event);`. I've tried to wait for quite some time (about an hour) and there was no result. +Additional information: +**Qemu build.** Qemu binary built from sources of 9.1.0 with `--target-list=x86_64-softmmu`. + +**Host machine.** An almost clean Ubuntu 20.04 with necessary packages for building qemu from the latest release sources. |