qemu-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Recording and replaying HPET timer values


From: Pavel Dovgalyuk
Subject: Re: Recording and replaying HPET timer values
Date: Mon, 17 May 2021 10:35:33 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1

On 14.05.2021 06:30, Arnabjyoti Kalita wrote:
Hello all,

I am recording and replaying HPET timer values for my guest.

I am running QEMU version 5.0.1. The guest kernel is a
4.4.0-21-generic Ubuntu flavor. The host and target architecture is
both x86-64.

To record, I start QEMU in KVM mode as follows -

sudo ./qemu-system-x86_64 -m 1024 --machine pc-i440fx-2.5 -cpu
qemu64,-kvmclock -enable-kvm -clock_replay
mode=record,file=clock_record9.txt -netdev
tap,id=tap1,ifname=tap0,script=no,downscript=no -device
virtio-net-pci,netdev=tap1,mac=00:00:00:00:00:00 -drive
file=~/os_images_for_qemu/ubuntu-16.04-desktop-amd64.qcow2,format=qcow2,if=none,id=img-direct
-device virtio-blk-pci,drive=img-direct

After this, I force the guest to switch to the "hpet" clocksource.

The clock_record9.txt file records the values of the HPET counter. To
perform the recording, I have changed the hpet_ram_read function in
the "hw/timer/hpet.c" file.

static uint64_t hpet_ram_read() {
.....
     case HPET_COUNTER:
         if (hpet_enabled(s)) {
             cur_tick = hpet_get_ticks(s);
         } else {
             cur_tick = s->hpet_counter;
         }
         record_hpet_counter((int64_t)cur_tick);  <-----  record here
         return cur_tick;
}

In replay mode, I start the guest in TCG mode as below-

sudo ./qemu-system-x86_64 -m 1024 -clock_replay
mode=replay,file=clock_record9.txt -machine pc-i440fx-2.5 -cpu qemu64
-netdev tap,id=tap1,ifname=tap0,script=no,downscript=no -device
virtio-net-pci,netdev=tap1,mac=00:00:00:00:00:00 -drive
file=~/os_images_for_qemu/ubuntu-16.04-desktop-amd64.qcow2,format=qcow2,if=none,id=img-direct
-device virtio-blk-pci,drive=img-direct -loadvm snapshot1

This is supposed to replay and mimic the HPET counter values. The
snapshot is there to ensure that both record and replay start from the
same guest state.

Is the guest replay going to be deterministic, with respect to the
HPET clock? Are there other factors about the HPET clock that need to
be taken into account while replaying it ?

I don't sure that this is enough.
There is qemu_timer in hpet.c, which is used for injecting the interrupts.
And interrupt handler code may read HPET clock. I mean that there may be different frequency or timer reads in different runs.


I am not worried about other I/O events right now and I just want to
ensure that HPET timer values are being replayed correctly.

Best Regards,
Arnabjyoti Kalita





reply via email to

[Prev in Thread] Current Thread [Next in Thread]