Thomas Gleixner di Linutronix, acquisito da Intel lo scorso anno, e il suo team stanno lavorando per ripulire il processo di avvio di Linux x86/x86_64. Una serie di 17 patch che toccano il primo codice di inizializzazione del kernel Linux e altre modifiche a tutto l’albero sono state ora pubblicate per la discussione.

Gli sviluppatori del kernel Linux stanno lavorando per ripulire il processo di avvio x86 e ripulire il codice. Thomas Gleixner ha spiegato l’attuale codice di avvio di Linux x86 e l’obiettivo di questa nuova serie di patch:

“Io e il mio team stiamo lavorando per disinfettare il processo di avvio x86, in particolare lo spettacolo horror completo di CPUID valutazione, che è costruita con circuiti di filo di paglia, nastro adesivo e supercolla.

Un obiettivo correlato è spostare l’inizializzazione dell’infrastruttura che non è richiesta durante l’avvio iniziale a una fase successiva del processo di avvio. L’avvio iniziale è fragile e già abbastanza contorto, quindi tutto ciò che può passare a una fase successiva è una vittoria.

L’inizializzazione dell’FPU X86 è una delle parti ovvie che non ha alcuna giustificazione per essere eseguita in anticipo. L’unico requisito è che avvenga prima delle patch alternative. Farlo presto richiede anche l’analisi della riga di comando personalizzata che può essere ovviamente evitata quando l’inizializzazione avviene in un secondo momento.

L’applicazione di patch alternative avviene da check_bugs() che viene richiamato in ritardo in start_kernel(). Spostare l’inizializzazione della FPU in questo è troppo tardi perché check_bugs() viene richiamato dopo fork_init(), ma fork_init() richiede che la FPU sia inizializzata su X86 poiché su X86 la dimensione di task_struct dipende dalla dimensione del buffer del registro FPU.

Per evitare un’altra funzione magica, abbiamo deciso di spostare check_bugs() prima e abbiamo ispezionato tutte le incarnazioni se c’è qualche motivo per farlo così tardi. Si è scoperto che non ce n’è nessuno (le ultime parole famose), ma ha anche rivelato che check_bugs() è un termine improprio grossolano.

check_bugs() è diventato una discarica per finalizzare l’inizializzazione della CPU prima di eseguire il resto del codice di inizializzazione.”

Questa serie di patch inizialmente con 17 patch mira a ripulire il codice di avvio di Linux x86. È un bel tentativo e segue il recente lavoro di Gleixner sulla CPU parallela supporto per l’attivazione previsto per Linux 6.5 come un altro miglioramento dell’avvio.

Categories: IT Info