On 05/06/14 15:27, Ján Tomko wrote: > Not yet merged in upstream QEMU: > https://lists.gnu.org/archive/html/qemu-devel/2014-04/msg05024.html > > Add support for invariant TSC timer running at constant rate in > all ACPI P-, C- and T-states. > > It can be enabled by specifying: > <clock> > <timer name='invtsc' present='yes'/> > </clock> > in the domain XML. > > Migration and saving the domain does not work with this timer. > > The support for this timer is indicated by bit 8 of EDX after calling > CPUID with 0x80000007. It does not show up in /proc/cpuinfo [1] > and since we're calling qemu without 'enforce', it doesn't error > out if the host doesn't support this. > > Alternatively, we could expose it in libvirt as a cpu flag: > <cpu mode='custom' match='exact'> > <model fallback='forbid'>qemu64</model> > <feature policy='require' name='invtsc'/> > </cpu> > or maybe add +invtsc to qemu args when the 'nonstop_tsc' flag is > requested? > > [1]: > https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/x86/kernel/cpu/powerflags.c?id=30321c7b#n18 > --- > docs/formatdomain.html.in | 9 ++++++-- > docs/schemas/domaincommon.rng | 1 + > src/conf/domain_conf.c | 6 +++-- > src/conf/domain_conf.h | 1 + > src/qemu/qemu_command.c | 6 +++++ > src/qemu/qemu_migration.c | 14 ++++++++++++ > .../qemuxml2argv-clock-timer-inv-tsc.args | 5 +++++ > .../qemuxml2argv-clock-timer-inv-tsc.xml | 26 > ++++++++++++++++++++++ > tests/qemuxml2argvtest.c | 1 + > tests/qemuxml2xmltest.c | 1 + > 10 files changed, 66 insertions(+), 4 deletions(-) > create mode 100644 > tests/qemuxml2argvdata/qemuxml2argv-clock-timer-inv-tsc.args > create mode 100644 > tests/qemuxml2argvdata/qemuxml2argv-clock-timer-inv-tsc.xml
...
> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> index 4249ed5..5154826 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -918,6 +918,7 @@
> <choice>
> <value>kvmclock</value>
> <value>hypervclock</value>
> + <value>invtsc</value>
I'd prefer to change the name of the feature to "invarianttsc" in
libvirt's representation, but that's just bikeshedding.
> </choice>
> </attribute>
> </group>
...
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index a9f7fea..c1ffc0f 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -1513,6 +1513,20 @@ qemuMigrationIsAllowed(virQEMUDriverPtr driver,
> virDomainObjPtr vm,
> return false;
> }
>
> + for (i = 0; i < def->clock.ntimers; i++) {
> + virDomainTimerDefPtr timer = def->clock.timers[i];
> +
> + if (timer->present != 1)
> + continue;
> +
> + if (timer->name == VIR_DOMAIN_TIMER_NAME_INVTSC) {
> + virReportError(VIR_ERR_OPERATION_INVALID,
> + _("domain has '%s' timer"),
> + virDomainTimerNameTypeToString(timer->name));
> + return false;
> + }
> + }
> +
> return true;
> }
>
It's a shame that this doesn't work across migration in a way HyperV has
designed it.
ACK once the qemu functionality will be released
Peter
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
