[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] OVMF very slow on AMD



On 07/15/2016 09:48 AM, Konrad Rzeszutek Wilk wrote:
> On Thu, Jul 14, 2016 at 04:53:07PM +0100, Anthony PERARD wrote:
>> Hi,
>>
>> I've been investigating why OVMF is very slow  in a Xen guest on an AMD
>> host. This, I think, is the current failure that osstest is having.
>>
>> I've only look at a specific part of OVMF where the slowdown is very
>> obvious on AMD vs Intel, the decompression.
>>
>> This is what I get on AMD, via the Xen serial console port:
>>   Invoking OVMF ...
>>   SecCoreStartupWithStack(0xFFFCC000, 0x818000)
>> then, nothing for almost 1 minute, then the rest of the boot process.
>> The same binary on Intel, the output does not stay "stuck" here.
>>
>> I could pin-point which part of the boot process takes a long time, but
>> there is not anything obvious in there, just a loop that decompress the
>> ovmf binary, with plenty of iteration.
>> I tried `xentrace', but the trace does not show anything wrong, there is
>> just an interrupt from time to time. I've tried to had some tracepoint
>> inside this decompresion function in OVMF, but that did not reveal
>> anything either, maybe there where not at the right place.
>>
>> Anyway, the function is: LzmaDec_DecodeReal() from the file
>> IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/Sdk/C/LzmaDec.c
>> you can get the assembly from this object:
>> Build/OvmfX64/DEBUG_GCC49/X64/IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib/OUTPUT/Sdk/C/LzmaDec.obj
>> This is with OVMF upstream (https://github.com/tianocore/edk2).
>> I can send the assembly if needed.
> Pls. The full file if possible. Perhaps there is also an .S file somewhere 
> there?
>
>> So, this loop takes about 1 minute on my AMD machine (AMD Opteron(tm)
>> Processor 4284), and less that 1 second on an Intel machine.
>> If I compile OVMF as a 32bit binary, the loop is faster, but still takes
>> about 30s on AMD. (that's true for both OvmfIa32 and OvmfIa32X64 which
>> is 32bit bootstrap, but can start 64bit OS.)
>> Another thing, I tried the same binary (64bit) with KVM, and OVMF seems
>> fast.
>>
>>
>> So, any idee of what I could investigate?
> I presume we emulating some operation on AMD but not on Intel.
>
> However you say xentrace shows nothing - which would imply we are not
> incurring VMEXITs to deal with this. Hmm.. Could it be what we
> expose to the guest (the CPUID flags?) Somehow we are missing one on AMD
> and it takes a slower route?


I don't know whether it's possible but can you extract this loop somehow
and run it on baremetal? Or run the whole thing on baremetal.

Also a newer compiler might potentially make a difference (if you are
running on something older).

-boris




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.