Ricavare il tempo speso nella fase di boot è di estrema importanza, anche se questo dipende molto dall’applicazione in gioco.
Nelle specifiche tecniche, spesso, si stabilisce la sua durata e questa fase comprende anche il test preliminare di scheda.
In relazione alle singole applicazioni, questo tempo può arrivare anche fino a 30 secondi.
Con una scheda custom, con moduli software o firmware, progettata da noi diventa relativamente facile stabilire il tempo di boot.
Utilizzando un sistema operativo diverso, magari Linux, diventa necessario stabilire la quota a carico del sistema stesso e a volte può non essere trascurabile.
Esistono diversi modi per determinare questo tempo, in questo lavoro introduciamo una modalità che utilizza routine software sfruttando delle prerogative hardware.
Su qualsiasi piattaforma, che sia da 32 o 64 bit, il processo di boot con Linux è compreso tra il powerup dell’hardware e la prima istruzione dell’applicazione residente su scheda che deve essere eseguita.
Tra questi due punti estremi esistono, però, delle fasi operative che incidono in maniera determinante nella misura della prestazione.
Le varie fasi possono essere così riassunte:
- Fase di Power Up. Alla partenza, o accensione, della board si attiva una piccola porzione di codice che si occupa di inizializzare il processore, per esempio lo stack pointer e il program counter.
- Fase di test. Al termine della fase precedente occorre eseguire una serie di test preliminari, incluso anche la definizione di eventuali opzioni di CPU e di dispositivi hardware. Al termine, in ambito Linux, occorre caricare un bootloader dal Master Boot Record.
- Fase di bootloader. Questa fase sovrintende al caricamento del sistema operativo e di dati in RAM ( initrd o initramfs)
- Fase di inizializzazione del kernel. In questa fase occorre inizializzare la struttura dati del kernel, periferiche e CPU (per esempio la gestione della cache o dell’eventuale MMU). Occorre anche definire, l’eventuale, macchina multi-core.
- Entry point all’applicazione utente.
Dallo schema possiamo notare che, per definire il tempo speso, occorre considerare tutti gli aspetti: dai meccanismi hardware che possono incidere ad una migliore prestazione a quelli software.
Nel prossimo articolo vedremo, in mancanza di una strumentazione esterna, cosa possiamo fare per calcolare questo tempo di boot.