Hi, I want to emulate mmx/sse for hvm guests when applications inside hvm guests are compiled for mmx/sse but the underlying hardware doesn''t support mmx/sse. What is the best place to do this? i''m looking at x86_emulate but i dunno if that is the best place to put the emulation layer. any suggestions?? also, currently movq emulation is present in x86_emulate for handling mmio. however, i realized that get_fpu fails if the hardware doesn''t have mmx capability. is it true or am i missing something here? Thanks, Ashish _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On 5/11/08 00:34, "Ashish Bijlani" <ashish.bijlani@gmail.com> wrote:> > I want to emulate mmx/sse for hvm guests when applications inside hvm > guests are compiled for mmx/sse but the underlying hardware doesn''t > support mmx/sse. What is the best place to do this? i''m looking at > x86_emulate but i dunno if that is the best place to put the emulation > layer. any suggestions?? also, currently movq emulation is present in > x86_emulate for handling mmio. however, i realized that get_fpu fails > if the hardware doesn''t have mmx capability. is it true or am i > missing something here?x86_emulate() does its work by using the actual underlying processor instructions (really it is a system emulator rather than an instruction emulator). This wouldn''t necessarily stop you adding full emulation for certain instructions like SSE/MMX though, and it''s probably the right place to put that sort of thing. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Hi Keir, Thanks for the help. I''ve one more doubt though. Calling x86_emulate from do_device_not_available after validating the EM flag would work? Of course provided MMX/SS emulation code reside in x86_emulate. Please lemme know. Thanks, Ashish On Wed, Nov 5, 2008 at 2:34 AM, Keir Fraser <keir.fraser@eu.citrix.com> wrote:> On 5/11/08 00:34, "Ashish Bijlani" <ashish.bijlani@gmail.com> wrote: > >> >> I want to emulate mmx/sse for hvm guests when applications inside hvm >> guests are compiled for mmx/sse but the underlying hardware doesn''t >> support mmx/sse. What is the best place to do this? i''m looking at >> x86_emulate but i dunno if that is the best place to put the emulation >> layer. any suggestions?? also, currently movq emulation is present in >> x86_emulate for handling mmio. however, i realized that get_fpu fails >> if the hardware doesn''t have mmx capability. is it true or am i >> missing something here? > > x86_emulate() does its work by using the actual underlying processor > instructions (really it is a system emulator rather than an instruction > emulator). This wouldn''t necessarily stop you adding full emulation for > certain instructions like SSE/MMX though, and it''s probably the right place > to put that sort of thing. > > -- Keir > > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On 5/11/08 07:52, "Ashish Bijlani" <ashish.bijlani@gmail.com> wrote:> Hi Keir, > > Thanks for the help. I''ve one more doubt though. > > Calling x86_emulate from do_device_not_available after validating the > EM flag would work? Of course provided MMX/SS emulation code reside in > x86_emulate. Please lemme know.Sounds about right to me. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ashish Bijlani wrote:> Hi, > > I want to emulate mmx/sse for hvm guests when applications inside hvm > guests are compiled for mmx/sse but the underlying hardware doesn''t > support mmx/sse.First: HVM guests require a virtualization capable processor. AFAIK all these processors support at least SSE2 (if not SSE3). So why do you want to emulate these instructions? Second: Applications should check the CPUID bit before using instruction set extension. So, if the host processor does not support MMX/SSE, the guest shouldn''t see this bit, too. And I doubt that you are faster with emulating SSE compared to legacy x87-FPU executed natively. So, what is the use-case of your proposal? Or am I missing something here? Regards, Andre. > What is the best place to do this? i''m looking at> x86_emulate but i dunno if that is the best place to put the emulation > layer. any suggestions?? also, currently movq emulation is present in > x86_emulate for handling mmio. however, i realized that get_fpu fails > if the hardware doesn''t have mmx capability. is it true or am i > missing something here? > > Thanks, > Ashish-- Andre Przywara AMD-OSRC (Dresden) Tel: x84917 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Hi Andre, You are absolutely right. All hardware virtualization capable machines have recent simd technology built-in. However, I''m just trying to evaluate a case when HVM guests rely on the virtual hardware platform and not on the actual hardware platform. Precisely, what would be the performance gain/loss if hypervisor has to emulate the functionality. -Ashish On Wed, Nov 5, 2008 at 4:59 AM, Andre Przywara <andre.przywara@amd.com> wrote:> Ashish Bijlani wrote: >> >> Hi, >> >> I want to emulate mmx/sse for hvm guests when applications inside hvm >> guests are compiled for mmx/sse but the underlying hardware doesn''t >> support mmx/sse. > > First: HVM guests require a virtualization capable processor. AFAIK all > these processors support at least SSE2 (if not SSE3). So why do you want to > emulate these instructions? > Second: Applications should check the CPUID bit before using instruction set > extension. So, if the host processor does not support MMX/SSE, the guest > shouldn''t see this bit, too. And I doubt that you are faster with emulating > SSE compared to legacy x87-FPU executed natively. > > So, what is the use-case of your proposal? Or am I missing something here? > > Regards, > Andre. > >> What is the best place to do this? i''m looking at >> >> x86_emulate but i dunno if that is the best place to put the emulation >> layer. any suggestions?? also, currently movq emulation is present in >> x86_emulate for handling mmio. however, i realized that get_fpu fails >> if the hardware doesn''t have mmx capability. is it true or am i >> missing something here? >> >> Thanks, >> Ashish > > -- > Andre Przywara > AMD-OSRC (Dresden) > Tel: x84917 > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
If I''m not wrong, Bochs emulates SSE/MMX instructions and qemu uses dynamic translation. Does this mean that I use SSE/MMX emulation code from Bochs to put under x86_emulate? or am I missing something? Thanks. On Wed, Nov 5, 2008 at 5:34 AM, Ashish Bijlani <ashish.bijlani@gmail.com> wrote:> Hi Andre, > > You are absolutely right. All hardware virtualization capable machines > have recent simd technology built-in. However, I''m just trying to > evaluate a case when HVM guests rely on the virtual hardware platform > and not on the actual hardware platform. Precisely, what would be the > performance gain/loss if hypervisor has to emulate the functionality. > > -Ashish > > On Wed, Nov 5, 2008 at 4:59 AM, Andre Przywara <andre.przywara@amd.com> wrote: >> Ashish Bijlani wrote: >>> >>> Hi, >>> >>> I want to emulate mmx/sse for hvm guests when applications inside hvm >>> guests are compiled for mmx/sse but the underlying hardware doesn''t >>> support mmx/sse. >> >> First: HVM guests require a virtualization capable processor. AFAIK all >> these processors support at least SSE2 (if not SSE3). So why do you want to >> emulate these instructions? >> Second: Applications should check the CPUID bit before using instruction set >> extension. So, if the host processor does not support MMX/SSE, the guest >> shouldn''t see this bit, too. And I doubt that you are faster with emulating >> SSE compared to legacy x87-FPU executed natively. >> >> So, what is the use-case of your proposal? Or am I missing something here? >> >> Regards, >> Andre. >> >>> What is the best place to do this? i''m looking at >>> >>> x86_emulate but i dunno if that is the best place to put the emulation >>> layer. any suggestions?? also, currently movq emulation is present in >>> x86_emulate for handling mmio. however, i realized that get_fpu fails >>> if the hardware doesn''t have mmx capability. is it true or am i >>> missing something here? >>> >>> Thanks, >>> Ashish >> >> -- >> Andre Przywara >> AMD-OSRC (Dresden) >> Tel: x84917 >> >> >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
in an attempt to emulate mmx/sse instructions from within xen, i tried setting EM and NE bit in CR0 to have mmx/sse instructions fault into xen. however, the hvm guest doesn''t boot after that. also, i don''t get any "device_not_available_fault" any ideas what could be wrong? am i missing something? this is what i''ve done :- int hvm_set_cr0(unsigned long value) { ... value &= ~HVM_CR0_GUEST_RESERVED_BITS; value |= (X86_CR0_EM | X86_CR0_NE); // EMULATE FPU /* ET is reserved and should be always be 1. */ value |= X86_CR0_ET; ... } I run system with dom0 4 vcpus on 0-2 cpu cores and hvm 1 vcpu on the 3rd cpu core -Ashish On Wed, Nov 5, 2008 at 10:10 AM, mats petersson <mats@planetcatfish.com> wrote:> 2008/11/5 Ashish Bijlani <ashish.bijlani@gmail.com> >> >> If I''m not wrong, Bochs emulates SSE/MMX instructions and qemu uses >> dynamic translation. Does this mean that I use SSE/MMX emulation code >> from Bochs to put under x86_emulate? or am I missing something? >> Thanks. >> >> On Wed, Nov 5, 2008 at 5:34 AM, Ashish Bijlani <ashish.bijlani@gmail.com> >> wrote: >> > Hi Andre, >> > >> > You are absolutely right. All hardware virtualization capable machines >> > have recent simd technology built-in. However, I''m just trying to >> > evaluate a case when HVM guests rely on the virtual hardware platform >> > and not on the actual hardware platform. Precisely, what would be the >> > performance gain/loss if hypervisor has to emulate the functionality. > > The performance loss would be HUGE. First of all, you''d fall into the > hypervisor and get back out again, which takes a fair few cycles (like more > than 100x or more that of a single instruction). Then you have to emulate > the actual instruction itself, which will be the small part of the ovehead. > > Many SSE/MMX/3DNow! instructions execute in 1-2 clockcycles. My guess would > be that it would reduce any SSE optimized code to a crawl (like in the order > of 100-1000x slower). Such an application would be much better off running > in x87 mode. > > I was looking at doing SSE/MMX emulation in x86_emulate a long time ago, but > the purpose of that wasn''t to emulate SSE/MMX as such, but rather allow > SSE/MMX to access emulated hardware (such as video memory). > > -- > Mats >> >> -Ashish >> >> On Wed, Nov 5, 2008 at 4:59 AM, Andre Przywara <andre.przywara@amd.com> >> wrote: >>> Ashish Bijlani wrote: >>>> >>>> Hi, >>>> >>>> I want to emulate mmx/sse for hvm guests when applications inside hvm >>>> guests are compiled for mmx/sse but the underlying hardware doesn''t >>>> support mmx/sse. >>> >>> First: HVM guests require a virtualization capable processor. AFAIK all >>> these processors support at least SSE2 (if not SSE3). So why do you want >>> to >>> emulate these instructions? >>> Second: Applications should check the CPUID bit before using instruction >>> set >>> extension. So, if the host processor does not support MMX/SSE, the guest >>> shouldn''t see this bit, too. And I doubt that you are faster with >>> emulating >>> SSE compared to legacy x87-FPU executed natively. >>> >>> So, what is the use-case of your proposal? Or am I missing something >>> here? >>> >>> Regards, >>> Andre. >>> >>>> What is the best place to do this? i''m looking at >>>> >>>> x86_emulate but i dunno if that is the best place to put the emulation >>>> layer. any suggestions?? also, currently movq emulation is present in >>>> x86_emulate for handling mmio. however, i realized that get_fpu fails >>>> if the hardware doesn''t have mmx capability. is it true or am i >>>> missing something here? >>>> >>>> Thanks, >>>> Ashish >>> >>> -- >>> Andre Przywara >>> AMD-OSRC (Dresden) >>> Tel: x84917 >>> >>> >> > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel