Bootprozess eines OpenPOWER Servers

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche

OpenPOWER Server sind mit einer Open Source Firmware ausgestattet, die aus mehreren Komponenten (z.B. Hostboot, SkiBoot, Petitboot, ...) besteht. In diesem Wiki Artikel zeigen wir, wie der Bootprozess eines OpenPOWER Servers abläuft. Der Quellcode aller hier erwähnten Komponenten ist auf GitHub zu finden.[1]

OpenPOWER Server bei Thomas-Krenn

Ablauf des Bootprozesses

Der Bootprozess eines OpenPOWER Servers läuft in den folgenden Schritten ab:[2]

  1. Self Boot Engine (SBE)
  2. HostBoot (github-Link)
  3. OCC (On Chip Controller) (github-Link)
  4. SkiBoot (OPAL) (github-Link)
  5. Linux / Petitboot (github-Link)
  6. Betriebssystem

Beispiel 2HE OpenPOWER Single-CPU RP2112 Server

Die folgenden Ausgaben stammen von einem Thomas-Krenn 2HE OpenPOWER Single-CPU RP2112 Server. Dieser basiert auf dem TYAN TN71-BP012 OpenPOWER System (Codename Habanero).

Verbindung via Serieller Konsole

Alle Ausgaben erfolgen auf der seriellen Konsole des Servers. Anstelle einer Verbindung des Servers über ein serielles Kabel mit einem anderen Rechner mit beispielsweise PuTTY, kann die serielle Schnittstelle auch bequem über IPMI mit der SOL (Serial-Over-LAN) Funktion von ipmitool verbunden werden:

$ sudo ipmitool -H 10.1.102.242 -I lanplus -U root -P superuser sol activate
[SOL Session operational.  Use ~? for help]
  2.27425|ERRL|Dumping errors reported prior to registration
  4.04949|Ignoring boot flags, incorrect version 0x0

Hostboot

Die Hostboot Firmware initialisiert alle Prozessoren, Bus-Systeme und Speicher-Kopmponenten eines OpenPOWER Systems. Der laufende Fortschritt ist anhand der ISTEP (Initial program load step) Nummer ersichtlich. Die Bedeutung der einzelnen Nummern ist im Hostbook IPL Flow Dokument ersichtlich.[3][4]

Das folgende Beispiel zeigt die Ausgabe während die Hostboot Firmware startet (vollständige Ausgabe siehe Hostboot.txt):

  4.41091|ISTEP  6. 3
  5.04767|ISTEP  6. 4
  5.18871|ISTEP  6. 5
 10.40495|HWAS|PRESENT> DIMM[03]=A0A00000A0A00000
 10.40497|HWAS|PRESENT> Membuf[04]=CC00000000000000
 10.40498|HWAS|PRESENT> Proc[05]=8000000000000000
 20.00800|ISTEP  6. 6
 20.39293|ISTEP  6. 7
 20.90817|ISTEP  6. 8
[...]
 56.72319|ISTEP 21. 1
 63.04461|htmgt|OCCs are now running in ACTIVE state
 70.65864|ISTEP 21. 2
 70.79438|ISTEP 21. 3

Skiboot

Am Ende lädt Hostboot ein Image (Payload) aus dem PNOR (Prozessor NOR). Dieses Payload ist der zweite Teil der Firmware (second stage firmware) und bekannt als Skiboot. Skiboot synchronisiert die Zeit zwischen allen CPU Threads, initialisiert den PCI Bus, kommuniziert mit dem BMC (Management Controller) und bietet die OPAL (Open Power Abstraction Layer) Schnittstelle für das Betriebssystem. Skiboot lädt am Ende dann ein weiteres Image (Skiroot).[5][6][7]

Das folgende Beispiel zeigt die Ausgabe während skiboot startet (vollständige Ausgabe siehe SkiBoot.txt):

[37559728088,5] SkiBoot skiboot-5.1.5-2f88f6b starting...
[37559733441,5] initial console log level: memory 7, driver 5
[37559736244,6] CPU: P8 generation processor(max 8 threads/core)
[37559738872,7] CPU: Boot CPU PIR is 0x0068 PVR is 0x004d0200
[37559741837,7] CPU: Initial max PIR set to 0x1fff
[37560111084,5] OPAL table: 0x3009f840 .. 0x3009fca0, branch table: 0x30002000
[...]
[5453441264,5] IPMI: Resetting boot count on successful boot
[5453927948,5] INIT: Waiting for kernel...
[5480974677,3] BT seq 0x05 netfn 0x18 cmd 0x2e: Retry sending message
[7412353962,5] INIT: Kernel loaded, size: 15728640 bytes (0 = unknown preload)
[7413858024,3] FLASH: No ROOTFS partition
[7496943997,5] INIT: 64-bit LE kernel discovered
[7517992637,5] INIT: 64-bit kernel entry at 0x20010000
[7519715223,5] OCC: All Chip Rdy after 0 ms
[7545890751,5] Free space in HEAP memory regions:
[7545991463,5] Region ibm,firmware-heap free: 10709976
[7548887696,5] Region ibm,firmware-allocs-memory@0 free: 1109392
[7550504523,5] Total free: 11819368
[7551914988,5] INIT: Starting kernel at 0x20010000, fdt at 0x3054e5f0 (size 0x11309)
[7671453338,3] OPAL: Trying a CPU re-init with flags: 0x2

Skiroot

Das folgende Beispiel zeigt die Ausgabe während das skiroot Image gestartet wird (vollständige Ausgabe siehe SkiRoot.txt):

[    0.000000] opal: OPAL V3 detected !
[    0.000000] Using PowerNV machine description
[    0.000000] Page sizes from device-tree:
[    0.000000] base_shift=12: shift=12, sllp=0x0000, avpnm=0x00000000, tlbiel=1, penc=0
[...]
[    0.000000] Using 1TB segments
[    0.000000] OPAL: Power8 LPC bus found, chip ID 0
[    0.000000] bootconsole [udbg0] enabled
[    0.000000] CPU maps initialized for 8 threads per core
 -> smp_release_cpus()
spinning_secondaries = 63
 <- smp_release_cpus()
[    0.000000] Starting Linux ppc64le #2 SMP Tue Mar 8 14:28:12 CST 2016
[...]
[    0.000000] Linux version 4.2.1-openpower2 (cyril@cyril-server) (gcc version 4.9.2 (Buildroot 2015.05-g40ff8b4) ) #2 SMP Tue Mar 8 14:28:12 CST 2016
[...]
[   51.396187] device-mapper: ioctl: 4.33.0-ioctl (2015-8-18) initialised: dm-devel@redhat.com
[   51.396351] device-mapper: multipath: version 1.9.0 loaded
[   51.396384] device-mapper: multipath round-robin: version 1.0.0 loaded
[   51.396552] powernv-cpufreq: cpufreq pstate min -54 nominal -16 max 0
[   51.397045] usbcore: registered new interface driver usbhid
[   51.397081] usbhid: USB HID core driver
[   51.397201] ipip: IPv4 over IPv4 tunneling driver
[   51.397327] NET: Registered protocol family 17
[   51.397439] Key type dns_resolver registered

Petitboot

 TYAN TN71-BP012 PNOR V1.01
 ──────────────────────────────────────────────────────────────────────────────
  [Disk: sda2 / 3a71c024-b5ea-4031-98df-1c99beabbe1c]
    Ubuntu, with Linux 4.4.0-31-generic (recovery mode)
    Ubuntu, with Linux 4.4.0-31-generic
    Ubuntu, with Linux 4.4.0-36-generic (recovery mode)
    Ubuntu, with Linux 4.4.0-36-generic
    Ubuntu
  [Disk: sdb2 / 538e8e0d-84cb-4522-86c3-f2d7431923f6]
    Red Hat Enterprise Linux Server (0-rescue-ab029427b3fb4b87b79d81fba04c510c)
    Red Hat Enterprise Linux Server (3.10.0-327.el7.ppc64) 7.2 (Maipo)

  System information
  System configuration
  Rescan devices
  Retrieve config from URL
 *Exit to shell                                                                




 ──────────────────────────────────────────────────────────────────────────────
 Enter=accept, e=edit, n=new, x=exit, h=help

Betriebssystem

Nach dem Bootloader Petitboot wird ein Betriebssystem gestartet. In diesem Beispiel ist dies Ubuntu 16.04. Ganz unten ist dabei der Login-Promt zu sehen:

The system is going down NOW!t            
Sent SIGTERM to all processes
Sent SIGKILL to all processes
[175563882815,3] OPAL: Trying a CPU re-init with flags: 0x1
[175626684725,3] OPAL: Trying a CPU re-init with flags: 0x2
 -> smp_release_cpus()
spinning_secondaries = 63
 <- smp_release_cpus()
 <- setup_system()
  lvmetad is not active yet, using direct activation during sysinit
  lvmetad is not active yet, using direct activation during sysinit
/dev/mapper/ubuntu--vg-root: clean, 56471/234274816 files, 15032794/937092096 blocks
[FAILED] Failed to start Set console keymap.
See 'systemctl status keyboard-setup.service' for details.
[  OK  ] Started udev Kernel Device Manager.
         Starting Remount Root and Kernel File Systems...
[  OK  ] Started Remount Root and Kernel File Systems.
         Starting Load/Save Random Seed...
         Starting udev Coldplug all Devices...
         Starting Flush Journal to Persistent Storage...
[  OK  ] Started Flush Journal to Persistent Storage.
[  OK  ] Started Load/Save Random Seed.
[  OK  ] Started udev Coldplug all Devices.
         Starting Show Plymouth Boot Screen...
[  OK  ] Found device /dev/hvc0.
[  OK  ] Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch.
Ubuntu 16.04.1 LTS ubuntu hvc0

ubuntu login: 

Weitere Informationen

Einzelnachweise

  1. open-power (github.com)
  2. OpenPower Firmware Dev, Test, Community and Compliance (openpowerfoundation.org, 05.04.2016) Vortrag (Video und PDF) von Stewart Smith beim OpenPOWER Summit 2016
  3. Hostboot POWER Systems Initialization Firmware (github.com/open-power/docs)
  4. Boot Flow for P8 (github.com/open-power/docs)
  5. skiboot - OPAL boot and runtime firmware for POWER (github.com/open-power/skiboot) Here, the OPAL image is three parts:
    1. skiboot (includes OPAL runtime services)
    2. skiroot - the bootloader environment
      • kernel
      • initramfs (containing petitboot bootloader)
  6. OpenPower Firmware Stack (blog.jms.id.au, 08.07.2015)
  7. Tell Me About Petitboot (sthbrx.github.io, 13.05.2016)


Foto Werner Fischer.jpg

Autor: Werner Fischer

Werner Fischer, tätig im Bereich Communications / Knowledge Transfer bei Thomas-Krenn, hat sein Studium zu Computer- und Mediensicherheit an der FH Hagenberg abgeschlossen. Er ist regelmäßig Autor in Fachzeitschriften und Speaker bei Konferenzen wie LinuxCon, OSDC, OSMC, LinuxTag u.v.m. Seine Freizeit gestaltet er sehr abwechslungsreich. In einem Moment absolviert er seinen Abschluss im Klavierspielen, im anderen läuft er beim Linzmarathon in der Staffel mit oder interessiert sich für OpenStreetMap.


Das könnte Sie auch interessieren

POWER8
Ubuntu auf OpenPOWER
Virsh - Kommandozeilenwerkzeug zur Verwaltung virtueller Maschinen