Re: [RFC] fix VMX TSC synchronicity

Avi Kivity
2008-05-04T15:40:42Z

[Resurrecting post from the dead]

Marcelo Tosatti wrote:
> Forcing clustered APIC mode works only on SMP, and there were high CPU
> consumption on Windows SMP guests due to C3 state being reported (fixed
> in kvm-30 something).
>
> So perhaps:
> - Faking clustered APIC on SMP
> - Faking C3 on UP
>
> And turning of the TSC bit (for 32-bit guests).
>
> Is the way to go?
>
> Avi, do you understand why C3 was causing the Windows SMP problems ?
>
>

It's probably inb()ing on the port in a loop. It's not SMP causing the
problems, but the ACPI HAL. I'll check this.

> /* Common C-state entry for C2, C3, .. */
> static void acpi_cstate_enter(struct acpi_processor_cx *cstate)
> {
> if (cstate->space_id == ACPI_CSTATE_FFH) {
> /* Call into architectural FFH based C-state */
> acpi_processor_ffh_cstate_enter(cstate);
> } else {
> int unused;
> /* IO port based C-state */
> inb(cstate->address);
> /* Dummy wait op - must do something useless after P_LVL2 read
> because chipsets cannot guarantee that STPCLK# signal
> gets asserted in time to freeze execution properly. */
> unused = inl(acpi_gbl_FADT.xpm_timer_block.address);
> }
> }
>
> Clearly that inb() won't actually idle under QEMU. So the question is,
> if C3 stated is reported, that port read should be emulated... But how?
>

We can add now use the KVM_SET_MPSTATE ioctl to halt the vcpu if we see
the port read. Since not all hosts support setting mpstate, the bios
should only report C3 if the host supports it.

--
error compiling committee.c: too many arguments to function

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.