On Wed, 2014-11-26 at 11:10 -0800, Jordan Justen wrote: > On 2014-11-13 17:34:59, Chen, Fan wrote: > > On Thu, 2014-11-13 at 10:42 -0800, Jordan Justen wrote: > > > On 2014-11-06 17:23:01, Fan, Jeff wrote: > > > > Chen, > > > > > > > > Thanks your contribution. I will check-in your patch if there is no > > > > further comments from other guys. > > > > > > > > Reviewed-by: Jeff Fan <jeff....@intel.com> > > > > > > Chen, > > > > > > I committed your series (r16345-r16371) for Jeff (to preserve the > > > separate patches). > > > > > > Thanks for all your work on this! > > > > > > Let me know if you are interested in working on some follow up MP > > > tasks. (I have 2 ideas. :) > > Of course, I hope to help improve the MP. > > One idea I have is to initialize the interrupt vector table on the > APs, and then allow the APs to run the CpuSleep function. > > Like IdleLoopEventCallback does for the BSP, this should put the APs > into a lower power state while they are not working. > > Then the BSP can send the APs an 'interrupt IPI' when needed to wake > the APs to do work. (I think SendFixedIpiAllExcludingSelf?) > > I think the DXE Core installs the IVT (Interrupt Vector Table) by > calling InitializeCpuExceptionHandlers, and CpuDxe modifies the > interrupt handler entries. > > But for the simpler situation of the APs, this might be more than > needed. Instead maybe just setting up the IVT and calling AsmWriteIdtr > would be all that is needed. > > One easy way to see if this is working is to run 'top' while using > qemu with smp. In the current state the APs will cause a few threads > to use 100% of the cpu while they busy-wait for something to do. (This > only applies to OVMF boot, and the UEFI Shell, since once the OS > manages the APs, they will be handled more efficiently.)
Yes, as Laszlo have mentioned in another mail, there introduced a performance regression in setup MP. Then I vote to do this job for myself. ;), but first I will task some time to investigate this feather. also thanks for all of you to provide much related information about it. Thank, Chen > > I think this task would be fairly challenging depending on your > background experience with x86 processor interrupts. > > If anyone else on the list thinks we should take a different approach, > please speak up! > > -Jordan > > > > > -----Original Message----- > > > > From: Chen, Fan [mailto:chen.fan.f...@cn.fujitsu.com] > > > > Sent: Thursday, November 06, 2014 5:13 PM > > > > To: Fan, Jeff > > > > Cc: Izumi, Taku; edk2-devel@lists.sourceforge.net; Jordan Justen > > > > Subject: Re: [RFC PATCH V7 00/27] Introduce Mp Service protocol to > > > > UefiCpuPkg > > > > > > > > On Thu, 2014-11-06 at 06:11 +0000, Fan, Jeff wrote: > > > > > Chen, > > > > > > > > > > Thanks your updating. I attached one addition updating based on > > > > > you're the latest patches. Please evaluate and sync it into your > > > > > patches. > > > > > > > > > > BTW, please delete ApStartup.asm from CpuDxe, it seems to be one > > > > > dummy file. > > > > Thanks for you review. > > > > I had merged the changes to my patches as you attachment said. see at: > > > > https://github.com/ChenFanFnst/edk2/tree/cpu-mp-service > > > > > > > > and as for file ApStartup.asm, I moved the asm code to ApStartup.c as > > > > comments for guiding to create startup code, then deleted ApStartup.asm. > > > > > > > > > > > > Thanks, > > > > Chen > > > > > > > > > > > > > > > > > > Thanks! > > > > > Jeff > > > > > -----Original Message----- > > > > > From: Chen Fan [mailto:chen.fan.f...@cn.fujitsu.com] > > > > > Sent: Tuesday, November 04, 2014 5:59 PM > > > > > To: edk2-devel@lists.sourceforge.net > > > > > Cc: Jordan Justen; Fan, Jeff; izumi.t...@jp.fujitsu.com > > > > > Subject: [RFC PATCH V7 00/27] Introduce Mp Service protocol to > > > > > UefiCpuPkg > > > > > > > > > > This series patchsets try to implement Mp Service protocol in > > > > > UefiCpuPkg, Jordan had implemented the startup APs code, and I try to > > > > > add more initialization code to let all APs work up, this Mp Service > > > > > protocol's implementation used EmulatorPkg/MpService for reference. > > > > > this patches works on my github: > > > > > https://github.com/ChenFanFnst/edk2/tree/cpu-mp-service > > > > > > > > > > and made StartCorePkg app for testing Mp Service Protocol on: > > > > > https://github.com/ChenFanFnst/edk2/tree/startcore > > > > > > > > > > I had tested the Mp protocol with the test code, and all cases passed. > > > > > > > > > > v6-v7: > > > > > 1. fix some trivial bugs pointed out by Jeff. > > > > > 2. free unused cpu buffer data. > > > > > > > > > > v5-v6: > > > > > 1. using only one timer to check all APs status instead of timers > > > > > for each AP. > > > > > 2. cancel timer each time avoid timer handler reentrancy. > > > > > 3. some bug fix. > > > > > > > > > > v4-v5: > > > > > 1. introduce PcdCpuMaxLogicalProcessorNumber to pre-allocate > > > > > stack buffer before starting the APs. > > > > > 2. implement the function that if procedure routine timeout, > > > > > reset AP by sending init ipi. > > > > > 3. some bug fix. > > > > > > > > > > v3-v4: > > > > > 1. change the order of the patches. > > > > > 2. update some minor format suggested by Jeff. > > > > > 3. add a PCD value to configure StackSize. > > > > > 4. the last patch add assembly code for MSFT, but didn't > > > > > test. > > > > > > > > > > V3-V3.1: > > > > > 1. use AcquireSpinLockOrFail() intead of AcquireSpinLock() > > > > > to avoid ASSERT sugguested by Jeff. > > > > > > > > > > V2-V3: > > > > > 1. rebase codes due to Jordan'tree updated: > > > > > https://github.com/jljusten/edk2/tree/ap-startup-example > > > > > 2. add supported on Ia32 arch > > > > > 3. add a new Lock to replace present SpinLock mechanisms in mutilple > > > > > processors, maybe the SpinLock mechanisms is not MP safe. > > > > > 4. add function header > > > > > 5. add StartupAllAPs() supported > > > > > 6. add SwitchBSP() function, which is unsupported. > > > > > > > > > > V1-V2: > > > > > 1. do not call anything EFI API from APs. > > > > > 2. add AP busy-wait for task assignment from BSP and get rid of > > > > > IPI sent mechanism. > > > > > > > > > > Chen Fan (22): > > > > > UefiCpuPkg/CpuDxe: introduce two PCD value > > > > > UefiCpuPkg/CpuDxe: Switch Ap Stack to NewStack > > > > > UefiCpuPkg/CpuDxe: introduce EFI_MP_SERVICES_PROTOCOL > > > > > UefiCpuPkg/CpuDxe: introduce MP_SYSTEM_DATA for Mp Service Protocol > > > > > UefiCpuPkg/CpuDxe: implement Mp Protocol: WhoAmI() > > > > > UefiCpuPkg/CpuDxe: implement Mp Protocol:GetNumberOfProcessors() > > > > > UefiCpuPkg/CpuDxe: implement Mp Services:GetProcessorInfo() > > > > > UefiCpuPkg/CpuDxe: implement Mp Protocol:EnableDisableAP() > > > > > UefiCpuPkg/CpuDxe: implement Mp Protocol:StartupThisAP() > > > > > UefiCpuPkg/CpuDxe: implement Mp Services:StartupAllAPs() > > > > > UefiCpuPkg/CpuDxe: implement Mp Services:SwitchBSP() > > > > > UefiCpuPkg/CpuDxe: Ap do loop routine to execute procedure > > > > > UefiCpuPkg/MpService: move settimer out to InitMpSystemData > > > > > UefiCpuPkg/MpService: Simply Lock usage > > > > > UefiCpuPkg/MpService: avoid next timer getting into > > > > > CheckAllAPsStatus() > > > > > UefiCpuPkg/CpuDxe: split out StartupCode from StartApsStackless() > > > > > UefiCpuPkg/CpuDxe: introduce ResetApStackless() > > > > > UefiCpuPkg/MpService: free the unused cpu data buffer > > > > > UefiCpuPkg/MpService: avoid reset AP still hold a lock > > > > > UefiCpuPkg/MpService: avoid dead lock caused by CheckAllAPsStatus > > > > > UefiCpuPkg/CpuDxe: Startup APs > > > > > UefiCpuPkg/CpuDxe: install Mp Service protocol > > > > > > > > > > Jordan Justen (5): > > > > > UefiCpuPkg/CpuDxe: Add no-op InitializeMpSupport > > > > > UefiCpuPkg/CpuDxe: Add ApEntryPointInC > > > > > UefiCpuPkg/CpuDxe: Add stackless assembly AP entry points > > > > > UefiCpuPkg/CpuDxe: Move GDT structures into CpuGdt.h > > > > > UefiCpuPkg/CpuDxe: Add StartApsStackless routine > > > > > > > > > > UefiCpuPkg/CpuDxe/ApStartup.asm | 111 +++ > > > > > UefiCpuPkg/CpuDxe/ApStartup.c | 252 ++++++ > > > > > UefiCpuPkg/CpuDxe/CpuDxe.c | 3 + > > > > > UefiCpuPkg/CpuDxe/CpuDxe.h | 1 + > > > > > UefiCpuPkg/CpuDxe/CpuDxe.inf | 17 + > > > > > UefiCpuPkg/CpuDxe/CpuGdt.c | 52 +- > > > > > UefiCpuPkg/CpuDxe/CpuGdt.h | 72 ++ > > > > > UefiCpuPkg/CpuDxe/CpuMp.c | 1534 > > > > > +++++++++++++++++++++++++++++++++++++ > > > > > UefiCpuPkg/CpuDxe/CpuMp.h | 642 ++++++++++++++++ > > > > > UefiCpuPkg/CpuDxe/Ia32/MpAsm.asm | 75 ++ > > > > > UefiCpuPkg/CpuDxe/Ia32/MpAsm.nasm | 68 ++ > > > > > UefiCpuPkg/CpuDxe/X64/MpAsm.asm | 76 ++ > > > > > UefiCpuPkg/CpuDxe/X64/MpAsm.nasm | 70 ++ > > > > > UefiCpuPkg/UefiCpuPkg.dec | 7 + > > > > > UefiCpuPkg/UefiCpuPkg.dsc | 1 + > > > > > 15 files changed, 2930 insertions(+), 51 deletions(-) create mode > > > > > 100644 UefiCpuPkg/CpuDxe/ApStartup.asm create mode 100644 > > > > > UefiCpuPkg/CpuDxe/ApStartup.c create mode 100644 > > > > > UefiCpuPkg/CpuDxe/CpuGdt.h create mode 100644 > > > > > UefiCpuPkg/CpuDxe/CpuMp.c create mode 100644 > > > > > UefiCpuPkg/CpuDxe/CpuMp.h create mode 100644 > > > > > UefiCpuPkg/CpuDxe/Ia32/MpAsm.asm create mode 100644 > > > > > UefiCpuPkg/CpuDxe/Ia32/MpAsm.nasm create mode 100644 > > > > > UefiCpuPkg/CpuDxe/X64/MpAsm.asm create mode 100644 > > > > > UefiCpuPkg/CpuDxe/X64/MpAsm.nasm > > > > > > > > > > -- > > > > > 1.9.3 > > > > > > > > > > > > > ------------------------------------------------------------------------------ > > > > _______________________________________________ > > > > edk2-devel mailing list > > > > edk2-devel@lists.sourceforge.net > > > > https://lists.sourceforge.net/lists/listinfo/edk2-devel > > ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel