[Skiboot] [PATCH v2 0/9] Asynchronously preload kernel, initramfs, LIDs

Stewart Smith stewart at linux.vnet.ibm.com
Wed May 6 14:00:45 AEST 2015

Hey all,

This is v2 of my patchset to improve boot time by asynchronously loading
resources/LIDs from BMC/FSP.

In v2, I actually see improvements in boot time on palmetto (have not
tried Habanero).

One of the reasons my previous patchset did not improve performance is that
both the resource preloading and PCI scanning was being done by adding a
cpu_job to the list of a *specific* CPU to execute, when in reality we do
not care which specific processor executes any of this code - just that
*a* processor executes it. So, I've added a global cpu_job queue that
secondary processors will get jobs from.

On FSP platforms while we *should* see an improvement, with some FSP
firmware versions, we're not being asked to reset and then start OCC for
an *amazingly* long time, so what should only take ~4.5seconds *actually*
takes 17seconds because we wait around in a loop doing nothing for 12+
seconds. I've filed a bug - if it wasn't for this, I'd expect FSP systems
to boot quicker.

Also to improve load time, I've reworked CAPP microcode loading so that
we initiate it earlier on too, as well as preloading VPD. This is so
the queue of resources to be loaded from FSP/BMC is in order of when
they'll be needed.

Palmetto boot time is reduced from 23seconds to 19 seconds for an initial
boot where we need to initialize NVRAM. For subsequent boots, we're down to
around 15.5 seconds spent in skiboot. A solid 12 of these seconds are spent
fetching kernel+initramfs over LPC bus from the BMC. Further investigation
is needed as to why fetching 14MB takes this long.

I think this patchset is about ready for inclusion - feedback is welcome

Stewart Smith (9):
  Fix FSP resource/LID loading for preloading LIDs.
  Start preload of kernel and initramfs early in boot
  FSP LID loading: always remove from lid_loaded list
  astbmc: asynchronous preloading of resources
  Track how long we spend spinning waiting for resource to be loaded
  Asynchronously preload CAPP microcode
  Add global CPU job queue
  Don't double preload hservices LIDs
  Preload VPD LID and set up fsp_lid_load() for async queued loading

 core/cpu.c                   |   65 +++++++++++++++---
 core/flash.c                 |  119 ++++++++++++++++++++++++++++++++-
 core/hostservices.c          |    7 +-
 core/init.c                  |   82 ++++++++++++++---------
 core/pci.c                   |   32 ++-------
 core/platform.c              |    4 ++
 core/vpd.c                   |   93 +++++++++++++++++---------
 hw/chiptod.c                 |    9 ++-
 hw/fsp/fsp-codeupdate.c      |   18 ++++-
 hw/fsp/fsp.c                 |   36 ++++++----
 hw/p5ioc2.c                  |    1 +
 hw/p7ioc.c                   |    1 +
 hw/phb3.c                    |  149 +++++++++++++++++++++++++-----------------
 hw/slw.c                     |    3 +-
 include/cpu.h                |    6 +-
 include/fsp.h                |    3 +-
 include/skiboot.h            |    7 +-
 include/vpd.h                |    1 +
 platforms/astbmc/firestone.c |    3 +-
 platforms/astbmc/habanero.c  |    3 +-
 platforms/astbmc/palmetto.c  |    3 +-
 platforms/ibm-fsp/firenze.c  |    4 --
 22 files changed, 458 insertions(+), 191 deletions(-)


More information about the Skiboot mailing list