All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] KVM: SVM: Pass through the host kernel's IO delay port
@ 2009-06-19 10:15 Paolo Bonzini
  2009-06-22  9:31 ` Avi Kivity
  2009-06-22 17:35 ` Marcelo Tosatti
  0 siblings, 2 replies; 9+ messages in thread
From: Paolo Bonzini @ 2009-06-19 10:15 UTC (permalink / raw)
  To: kvm

From: Paolo Bonzini <pbonzini@redhat.com>

KVM's optimization of guest port 80 accesses was removed last May 11
in commit 99f85a.  However, this probably has speed penalties.  I don't
have a machine to test but the equivalent VMX patch (fdef3ad) reported
a speedup of 3-5%, and on the Xen mailing list it was mentioned that on
Xen passing port 80 through had positive effects on startup speed.

We can enable passthrough to the same port the host kernel uses instead.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 arch/x86/kernel/io_delay.c |    1 +
 arch/x86/kvm/svm.c         |    5 +++++
 2 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kernel/io_delay.c b/arch/x86/kernel/io_delay.c
index a979b5b..a478cb2 100644
--- a/arch/x86/kernel/io_delay.c
+++ b/arch/x86/kernel/io_delay.c
@@ -129,3 +129,4 @@ static int __init io_delay_param(char *s)
 }
 
 early_param("io_delay", io_delay_param);
+EXPORT_SYMBOL_GPL(io_delay_type);
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 1f8510c..c49f4db 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -26,6 +26,7 @@
 #include <linux/highmem.h>
 #include <linux/sched.h>
 
+#include <asm/io.h>
 #include <asm/desc.h>
 
 #include <asm/virtext.h>
@@ -411,6 +412,10 @@ static __init int svm_hardware_setup(void)
 
 	iopm_va = page_address(iopm_pages);
 	memset(iopm_va, 0xff, PAGE_SIZE * (1 << IOPM_ALLOC_ORDER));
+	if (io_delay_type == CONFIG_IO_DELAY_TYPE_0X80)
+		clear_bit(0x80, iopm_va);
+	else if (io_delay_type == CONFIG_IO_DELAY_TYPE_0XED)
+		clear_bit(0xED, iopm_va);
 	iopm_base = page_to_pfn(iopm_pages) << PAGE_SHIFT;
 
 	if (boot_cpu_has(X86_FEATURE_NX))
-- 
1.6.0.3


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] KVM: SVM: Pass through the host kernel's IO delay port
  2009-06-19 10:15 [PATCH] KVM: SVM: Pass through the host kernel's IO delay port Paolo Bonzini
@ 2009-06-22  9:31 ` Avi Kivity
  2009-06-22 10:11   ` Paolo Bonzini
  2009-06-22 17:35 ` Marcelo Tosatti
  1 sibling, 1 reply; 9+ messages in thread
From: Avi Kivity @ 2009-06-22  9:31 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kvm

On 06/19/2009 01:15 PM, Paolo Bonzini wrote:
> From: Paolo Bonzini<pbonzini@redhat.com>
>
> KVM's optimization of guest port 80 accesses was removed last May 11
> in commit 99f85a.  However, this probably has speed penalties.  I don't
> have a machine to test but the equivalent VMX patch (fdef3ad) reported
> a speedup of 3-5%, and on the Xen mailing list it was mentioned that on
> Xen passing port 80 through had positive effects on startup speed.
>
> We can enable passthrough to the same port the host kernel uses instead.
>    

Since we don't tell the guest to use 0xed, this won't help.  If we can 
tell the guest, we can just tell it not to use any port at all, since 
this is a virtualized environment and there's no buggy hardware to please.

We could speed it up by trapping and emulating the port write in the 
kernel instead of letting userspace handle it (should be faster than 
passthrough on newer hosts).  I'd like to make is configurable from 
userspace though, the kernel has no business trapping random ports.

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


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] KVM: SVM: Pass through the host kernel's IO delay port
  2009-06-22  9:31 ` Avi Kivity
@ 2009-06-22 10:11   ` Paolo Bonzini
  2009-06-22 10:24     ` Gleb Natapov
  2009-06-22 11:11     ` Avi Kivity
  0 siblings, 2 replies; 9+ messages in thread
From: Paolo Bonzini @ 2009-06-22 10:11 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm

Avi Kivity wrote:
> On 06/19/2009 01:15 PM, Paolo Bonzini wrote:
>> From: Paolo Bonzini<pbonzini@redhat.com>
>>
>> KVM's optimization of guest port 80 accesses was removed last May 11
>> in commit 99f85a.  However, this probably has speed penalties.  I don't
>> have a machine to test but the equivalent VMX patch (fdef3ad) reported
>> a speedup of 3-5%, and on the Xen mailing list it was mentioned that on
>> Xen passing port 80 through had positive effects on startup speed.
>>
>> We can enable passthrough to the same port the host kernel uses instead.
> 
> Since we don't tell the guest to use 0xed, this won't help.

Won't the guest do that automatically through DMI?

I think we have four cases:

1) non-buggy chipset, host uses 0x80 and guest cannot crash the machine; 
this is okay.

2) buggy chipset, both host and guest use 0xed thanks to DMI detection; 
and (since 0x80 is not passthrough) the guest cannot crash the machine, 
so this is okay.

3) host is given explicit io_delay=0xed, but the guest isn't.  However, 
0x80 is not passthrough so the guest can use port 0x80 safely even on 
buggy hardware.

4) a buggy chipset is not detected, so io_delay=0x80 and 0x80 is made 
passthrough.  In principle the guest could crash the machine; however 
the host will have written to 0x80 at startup, most likely causing a 
crash way before a guest is started.  So this should not be a problem 
either.

Paolo

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] KVM: SVM: Pass through the host kernel's IO delay port
  2009-06-22 10:11   ` Paolo Bonzini
@ 2009-06-22 10:24     ` Gleb Natapov
  2009-06-22 11:11     ` Avi Kivity
  1 sibling, 0 replies; 9+ messages in thread
From: Gleb Natapov @ 2009-06-22 10:24 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Avi Kivity, kvm

On Mon, Jun 22, 2009 at 12:11:59PM +0200, Paolo Bonzini wrote:
> Avi Kivity wrote:
>> On 06/19/2009 01:15 PM, Paolo Bonzini wrote:
>>> From: Paolo Bonzini<pbonzini@redhat.com>
>>>
>>> KVM's optimization of guest port 80 accesses was removed last May 11
>>> in commit 99f85a.  However, this probably has speed penalties.  I don't
>>> have a machine to test but the equivalent VMX patch (fdef3ad) reported
>>> a speedup of 3-5%, and on the Xen mailing list it was mentioned that on
>>> Xen passing port 80 through had positive effects on startup speed.
>>>
>>> We can enable passthrough to the same port the host kernel uses instead.
>>
>> Since we don't tell the guest to use 0xed, this won't help.
>
> Won't the guest do that automatically through DMI?
>
DMI that guest sees is very different from DMI of the host.
What table is used to tell which port to use for io delay?

--
			Gleb.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] KVM: SVM: Pass through the host kernel's IO delay port
  2009-06-22 10:11   ` Paolo Bonzini
  2009-06-22 10:24     ` Gleb Natapov
@ 2009-06-22 11:11     ` Avi Kivity
  1 sibling, 0 replies; 9+ messages in thread
From: Avi Kivity @ 2009-06-22 11:11 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kvm

On 06/22/2009 01:11 PM, Paolo Bonzini wrote:
> Avi Kivity wrote:
>> On 06/19/2009 01:15 PM, Paolo Bonzini wrote:
>>> From: Paolo Bonzini<pbonzini@redhat.com>
>>>
>>> KVM's optimization of guest port 80 accesses was removed last May 11
>>> in commit 99f85a.  However, this probably has speed penalties.  I don't
>>> have a machine to test but the equivalent VMX patch (fdef3ad) reported
>>> a speedup of 3-5%, and on the Xen mailing list it was mentioned that on
>>> Xen passing port 80 through had positive effects on startup speed.
>>>
>>> We can enable passthrough to the same port the host kernel uses 
>>> instead.
>>
>> Since we don't tell the guest to use 0xed, this won't help.
>
> Won't the guest do that automatically through DMI?

As Gleb said, the guest has a virtual DMI table.

>
> I think we have four cases:
>
> 1) non-buggy chipset, host uses 0x80 and guest cannot crash the 
> machine; this is okay.
>
> 2) buggy chipset, both host and guest use 0xed thanks to DMI 
> detection; and (since 0x80 is not passthrough) the guest cannot crash 
> the machine, so this is okay.
>
> 3) host is given explicit io_delay=0xed, but the guest isn't.  
> However, 0x80 is not passthrough so the guest can use port 0x80 safely 
> even on buggy hardware.
>
> 4) a buggy chipset is not detected, so io_delay=0x80 and 0x80 is made 
> passthrough.  In principle the guest could crash the machine; however 
> the host will have written to 0x80 at startup, most likely causing a 
> crash way before a guest is started.  So this should not be a problem 
> either.

This is all true, but pass through is slower (at least on some chipsets) 
than in-kernel emulation, so I'd rather stay away from it.

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


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] KVM: SVM: Pass through the host kernel's IO delay port
  2009-06-19 10:15 [PATCH] KVM: SVM: Pass through the host kernel's IO delay port Paolo Bonzini
  2009-06-22  9:31 ` Avi Kivity
@ 2009-06-22 17:35 ` Marcelo Tosatti
  2009-06-22 17:57   ` Paolo Bonzini
  1 sibling, 1 reply; 9+ messages in thread
From: Marcelo Tosatti @ 2009-06-22 17:35 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kvm


Paolo,

As said in private email you can change the port 80 passthrough to
disabled only on those hosts that have broken port 80 (you can find the
blacklist at arch/x86/kernel/io_delay.c).c

On Fri, Jun 19, 2009 at 12:15:53PM +0200, Paolo Bonzini wrote:
> From: Paolo Bonzini <pbonzini@redhat.com>
> 
> KVM's optimization of guest port 80 accesses was removed last May 11
> in commit 99f85a.  However, this probably has speed penalties.  I don't
> have a machine to test but the equivalent VMX patch (fdef3ad) reported
> a speedup of 3-5%, and on the Xen mailing list it was mentioned that on
> Xen passing port 80 through had positive effects on startup speed.
> 
> We can enable passthrough to the same port the host kernel uses instead.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  arch/x86/kernel/io_delay.c |    1 +
>  arch/x86/kvm/svm.c         |    5 +++++
>  2 files changed, 6 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/x86/kernel/io_delay.c b/arch/x86/kernel/io_delay.c
> index a979b5b..a478cb2 100644
> --- a/arch/x86/kernel/io_delay.c
> +++ b/arch/x86/kernel/io_delay.c
> @@ -129,3 +129,4 @@ static int __init io_delay_param(char *s)
>  }
>  
>  early_param("io_delay", io_delay_param);
> +EXPORT_SYMBOL_GPL(io_delay_type);
> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
> index 1f8510c..c49f4db 100644
> --- a/arch/x86/kvm/svm.c
> +++ b/arch/x86/kvm/svm.c
> @@ -26,6 +26,7 @@
>  #include <linux/highmem.h>
>  #include <linux/sched.h>
>  
> +#include <asm/io.h>
>  #include <asm/desc.h>
>  
>  #include <asm/virtext.h>
> @@ -411,6 +412,10 @@ static __init int svm_hardware_setup(void)
>  
>  	iopm_va = page_address(iopm_pages);
>  	memset(iopm_va, 0xff, PAGE_SIZE * (1 << IOPM_ALLOC_ORDER));
> +	if (io_delay_type == CONFIG_IO_DELAY_TYPE_0X80)
> +		clear_bit(0x80, iopm_va);
> +	else if (io_delay_type == CONFIG_IO_DELAY_TYPE_0XED)
> +		clear_bit(0xED, iopm_va);
>  	iopm_base = page_to_pfn(iopm_pages) << PAGE_SHIFT;
>  
>  	if (boot_cpu_has(X86_FEATURE_NX))
> -- 
> 1.6.0.3
> 
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] KVM: SVM: Pass through the host kernel's IO delay port
  2009-06-22 17:35 ` Marcelo Tosatti
@ 2009-06-22 17:57   ` Paolo Bonzini
  2009-06-22 18:30     ` Marcelo Tosatti
  0 siblings, 1 reply; 9+ messages in thread
From: Paolo Bonzini @ 2009-06-22 17:57 UTC (permalink / raw)
  To: Marcelo Tosatti; +Cc: kvm

Marcelo Tosatti wrote:
> Paolo,
> 
> As said in private email you can change the port 80 passthrough to
> disabled only on those hosts that have broken port 80 (you can find the
> blacklist at arch/x86/kernel/io_delay.c).c

Actually I read the code more and, since pv_ops is actually disabling 
outs to port 80 if the guest is sufficiently new, it may even make more 
sense for easier maintenance to remove the port 80 passthrough on Intel 
processors as well...

Paolo

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] KVM: SVM: Pass through the host kernel's IO delay port
  2009-06-22 17:57   ` Paolo Bonzini
@ 2009-06-22 18:30     ` Marcelo Tosatti
  2009-06-23  6:59       ` Paolo Bonzini
  0 siblings, 1 reply; 9+ messages in thread
From: Marcelo Tosatti @ 2009-06-22 18:30 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kvm

On Mon, Jun 22, 2009 at 07:57:22PM +0200, Paolo Bonzini wrote:
> Marcelo Tosatti wrote:
>> Paolo,
>>
>> As said in private email you can change the port 80 passthrough to
>> disabled only on those hosts that have broken port 80 (you can find the
>> blacklist at arch/x86/kernel/io_delay.c).c
>
> Actually I read the code more and, since pv_ops is actually disabling  
> outs to port 80 if the guest is sufficiently new, it may even make more  
> sense for easier maintenance to remove the port 80 passthrough on Intel  
> processors as well...

But what about Windows guests?


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] KVM: SVM: Pass through the host kernel's IO delay port
  2009-06-22 18:30     ` Marcelo Tosatti
@ 2009-06-23  6:59       ` Paolo Bonzini
  0 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2009-06-23  6:59 UTC (permalink / raw)
  To: Marcelo Tosatti; +Cc: kvm

Marcelo Tosatti wrote:
> On Mon, Jun 22, 2009 at 07:57:22PM +0200, Paolo Bonzini wrote:
>> Marcelo Tosatti wrote:
>>> Paolo,
>>>
>>> As said in private email you can change the port 80 passthrough to
>>> disabled only on those hosts that have broken port 80 (you can find the
>>> blacklist at arch/x86/kernel/io_delay.c).c
>> Actually I read the code more and, since pv_ops is actually disabling  
>> outs to port 80 if the guest is sufficiently new, it may even make more  
>> sense for easier maintenance to remove the port 80 passthrough on Intel  
>> processors as well...
> 
> But what about Windows guests?

I don't think they are using port 80 to delay ISA access, are they?

Paolo

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2009-06-23  6:59 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-06-19 10:15 [PATCH] KVM: SVM: Pass through the host kernel's IO delay port Paolo Bonzini
2009-06-22  9:31 ` Avi Kivity
2009-06-22 10:11   ` Paolo Bonzini
2009-06-22 10:24     ` Gleb Natapov
2009-06-22 11:11     ` Avi Kivity
2009-06-22 17:35 ` Marcelo Tosatti
2009-06-22 17:57   ` Paolo Bonzini
2009-06-22 18:30     ` Marcelo Tosatti
2009-06-23  6:59       ` Paolo Bonzini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.