[PATCH] conf: add realtime parameter for rtc

gongwei gongwei at smartx.com
Tue Feb 2 14:20:46 UTC 2021


    Pass the parameter clock rt to qemu to ensure that the
    virtual machine is not synchronized with the host time

Signed-off-by: gongwei <gongwei at smartx.com>
---
 docs/formatdomain.rst                       |  2 +-
 docs/schemas/domaincommon.rng               |  1 +
 src/conf/domain_conf.c                      |  1 +
 src/conf/domain_conf.h                      |  1 +
 src/qemu/qemu_command.c                     |  3 +++
 src/qemu/qemu_validate.c                    |  1 +
 tests/qemuxml2argvdata/clock-realtime.args  | 30 +++++++++++++++++++++++
 tests/qemuxml2argvdata/clock-realtime.xml   | 31 +++++++++++++++++++++++
 tests/qemuxml2xmloutdata/clock-realtime.xml | 38 +++++++++++++++++++++++++++++
 9 files changed, 107 insertions(+), 1 deletion(-)
 create mode 100644 tests/qemuxml2argvdata/clock-realtime.args
 create mode 100644 tests/qemuxml2argvdata/clock-realtime.xml
 create mode 100644 tests/qemuxml2xmloutdata/clock-realtime.xml

diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index c738078..75cc60b 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -2059,7 +2059,7 @@ Windows, however, expects it to be in so called 'localtime'.
       feature for guests running the Microsoft Windows operating system.
    ``track``
       The ``track`` attribute specifies what the timer tracks, and can be
-      "boot", "guest", or "wall". Only valid for ``name="rtc"`` or
+      "boot", "guest", or "wall", or "realtime". Only valid for ``name="rtc"`` or
       ``name="platform"``.
    ``tickpolicy``
       The ``tickpolicy`` attribute determines what happens when QEMU misses a
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index a4bddcf..d882f90 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -1209,6 +1209,7 @@
                 <value>boot</value>
                 <value>guest</value>
                 <value>wall</value>
+                <value>realtime</value>
               </choice>
             </attribute>
           </optional>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index dab4f10..c19124d 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1106,6 +1106,7 @@ VIR_ENUM_IMPL(virDomainTimerTrack,
               "boot",
               "guest",
               "wall",
+              "realtime",
 );
 
 VIR_ENUM_IMPL(virDomainTimerTickpolicy,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 95ad052..e73b69c 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2160,6 +2160,7 @@ typedef enum {
     VIR_DOMAIN_TIMER_TRACK_BOOT = 0,
     VIR_DOMAIN_TIMER_TRACK_GUEST,
     VIR_DOMAIN_TIMER_TRACK_WALL,
+    VIR_DOMAIN_TIMER_TRACK_REALTIME,
 
     VIR_DOMAIN_TIMER_TRACK_LAST
 } virDomainTimerTrackType;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 1ec302d..5e09aa0 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5947,6 +5947,9 @@ qemuBuildClockArgStr(virDomainClockDefPtr def)
             case VIR_DOMAIN_TIMER_TRACK_WALL:
                 virBufferAddLit(&buf, ",clock=host");
                 break;
+            case VIR_DOMAIN_TIMER_TRACK_REALTIME:
+                virBufferAddLit(&buf, ",clock=rt");
+                break;
             }
 
             switch (def->timers[i]->tickpolicy) {
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index a060bd9..d4fe40f 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -444,6 +444,7 @@ qemuValidateDomainDefClockTimers(const virDomainDef *def,
             case -1: /* unspecified - use hypervisor default */
             case VIR_DOMAIN_TIMER_TRACK_GUEST:
             case VIR_DOMAIN_TIMER_TRACK_WALL:
+            case VIR_DOMAIN_TIMER_TRACK_REALTIME:
                 break;
             case VIR_DOMAIN_TIMER_TRACK_BOOT:
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
diff --git a/tests/qemuxml2argvdata/clock-realtime.args b/tests/qemuxml2argvdata/clock-realtime.args
new file mode 100644
index 0000000..7965696
--- /dev/null
+++ b/tests/qemuxml2argvdata/clock-realtime.args
@@ -0,0 +1,30 @@
+LC_ALL=C \
+PATH=/bin \
+HOME=/tmp/lib/domain--1-QEMUGuest1 \
+USER=test \
+LOGNAME=test \
+XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
+XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
+XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+QEMU_AUDIO_DRV=none \
+/usr/bin/qemu-system-i386 \
+-name QEMUGuest1 \
+-S \
+-machine pc,accel=tcg,usb=off,dump-guest-core=off \
+-m 214 \
+-realtime mlock=off \
+-smp 1,sockets=1,cores=1,threads=1 \
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+-display none \
+-no-user-config \
+-nodefaults \
+-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
+server,nowait \
+-mon chardev=charmonitor,id=monitor,mode=control \
+-rtc base=utc,driftfix=slew,clock=rt \
+-no-shutdown \
+-no-acpi \
+-usb \
+-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/clock-realtime.xml b/tests/qemuxml2argvdata/clock-realtime.xml
new file mode 100644
index 0000000..71bdc5a
--- /dev/null
+++ b/tests/qemuxml2argvdata/clock-realtime.xml
@@ -0,0 +1,31 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>219100</memory>
+  <currentMemory unit='KiB'>219100</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <os>
+    <type arch='i686' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <clock offset='utc'>
+    <timer name='rtc' track='realtime'/>
+  </clock>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu-system-i386</emulator>
+    <disk type='block' device='disk'>
+      <source dev='/dev/HostVG/QEMUGuest1'/>
+      <target dev='hda' bus='ide'/>
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+    </disk>
+    <controller type='usb' index='0'/>
+    <controller type='ide' index='0'/>
+    <controller type='pci' index='0' model='pci-root'/>
+    <input type='mouse' bus='ps2'/>
+    <input type='keyboard' bus='ps2'/>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
diff --git a/tests/qemuxml2xmloutdata/clock-realtime.xml b/tests/qemuxml2xmloutdata/clock-realtime.xml
new file mode 100644
index 0000000..3ba6b4c
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/clock-realtime.xml
@@ -0,0 +1,38 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>219100</memory>
+  <currentMemory unit='KiB'>219100</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <os>
+    <type arch='i686' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <clock offset='utc'>
+    <timer name='rtc' track='realtime'/>
+  </clock>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu-system-i386</emulator>
+    <disk type='block' device='disk'>
+      <driver name='qemu' type='raw'/>
+      <source dev='/dev/HostVG/QEMUGuest1'/>
+      <target dev='hda' bus='ide'/>
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+    </disk>
+    <controller type='usb' index='0'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+    </controller>
+    <controller type='ide' index='0'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
+    </controller>
+    <controller type='pci' index='0' model='pci-root'/>
+    <input type='mouse' bus='ps2'/>
+    <input type='keyboard' bus='ps2'/>
+    <memballoon model='virtio'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+    </memballoon>
+  </devices>
+</domain>
-- 
1.8.3.1




More information about the libvir-list mailing list