Pagina 1 di 1
ricompilare il kernel.. perchè?
Inviato: dom 18 feb 2007, 21:06
da Ermes1
Salve a tutti! ho una curiosità: quali sono i motivi fondamentali per cui può o deve essere ricompilato il kernel? prestazioni? supporto periferiche?
....chiedo troppo se vi chiedo di argomentare un minimo le risposte..

Inviato: dom 18 feb 2007, 21:13
da targzeta
La prima che mi viene in mente è che il compilatore gcc ha delle opzioni per ottimizzare il codice su determinate architetture. Questo vuol dire che se compili il kernel hai del codice ottimizzato per la tua architettura, e questo codice è il kernel!!!!!!
Spina
Inviato: dom 18 feb 2007, 21:27
da Bart
spina ha scritto:La prima che mi viene in mente è che il compilatore gcc ha delle opzioni per ottimizzare il codice su determinate architetture. Questo vuol dire che se compili il kernel hai del codice ottimizzato per la tua architettura, e questo codice è il kernel!!!!!!
Spina
Questo è sicuramente un motivo valido ma prima ne considerei un altro più rilevante: supporto hardware. Sicuramente il primo motivo per ricompilare il kernel è per abilitare il supporto all'hardware: hai appena comprato una scheda wireless e non hai il supporto nel kernel? RICOMPILA!

In secondo luogo inserirei quello riportato da spina. In terzo luogo permette di applicare patch. Esempio: ho un server e sono paranoico?! Lo ricompilo con grsecurity! Oppure ho un kernel modulare e lo voglio monolitico: lo ricompilo senza utilizzare i moduli. In quarto luogo ricompilare il kernel permette di avere un sistema più leggero e pulito eliminando il supporto a tutte quelle periferiche che non abbiamo o che non useremo mai.
Ah giusto, a volte capita anche che si scoprano dei bug. Questo è sicuramente un motivo fondamentale per aggiornare il kernel, lo metterei al punto 1 insieme al supporto hardware.

Inviato: dom 18 feb 2007, 22:26
da gioco
Il motivo principale è il supporto hardware. A questo proposito, oltre a quello che è stato scritto, a me è capitato di ricompilare perchè alcuni driver erano stati aggiunti o ne era stato migliorato il codice: nel 2.6.17 è stato aggiunto il driver bcm4xxx per le schede wifi broadcom come quella del mio iBook e nel 2.6.19 è stato migliorato.
Un altro motivo può essere quello di abilitare determinate opzioni necessarie per utilizzare alcuni software (es: fuse per gmailfs) oppure per provare nuove funzionalità.
Infine prima o poi si sente il bisogno (o si vuole provare) di compilare un kernel ottimizzato per la propria macchina, abilitando solo lo stretto indispensabile.
Inviato: dom 18 feb 2007, 23:37
da phobos3576
Esempio pratico: ogni Distribuzione prevede una installazione predefinita che funziona per qualsiasi PC monoprocessore con CPU generica 80486 o superiore; se sul proprio PC è presente una CPU Dual Core (AMD64, Intel Core Duo, etc), ciò significa che, come viene spiegato anche nella documentazione del kernel, verrà sfruttata una sola CPU!
Attraverso un programma come KInfoCenter si può infatti notare che nella sezione "Processore" viene elencata una sola CPU (0); ad esempio, per un AMD64 4200+ viene elencata la sola CPU 0 che funziona a 2200 MHz.
Ricompilando il kernel con il supporto specifico per i sistemi multiprocessore verranno invece sfruttate tutte le CPU presenti sul PC; in tal caso, per un AMD64 4200+ il programma KInfoCenter nella sezione "Processore" elenca le due CPU (0 e 1) ciascuna delle quali marcia a 2200 MHz.
La differenza di prestazioni tra i due casi appena elencati è abissale!
Inviato: lun 19 feb 2007, 10:50
da lamarozzo
i kernel che arrivano di default con la maggior parte delle distribuzioni (compresa la Slack) sono molto modulari e quindi caricando i moduli giusti si adattano ad una grandissima varieta' di hardware. In molti casi quindi, anziche' ricompilarsi il kernel si puo' installare uno dei nuovi kernel gia' compilati (per noi magari huge2.6 o test2.6).
Compilarsi da soli il kernel e' pero' molto didattico, soprattutto quando uno e' alle prime armi (come nel mio caso), combina dei pasticci e poi deve risolverli.
L'argomento secondo cui si dovrebbe avere un incremento di prestazioni ottimizzando la compilazione del kernel non so quanto sia vero fino in fondo. Le prestazioni di un sistema sono condizionate da ben altri colli di bottiglia che la velocita' di esecuzione del codice del kernel. Ma magari mi sbaglio.
Inviato: lun 19 feb 2007, 11:11
da targzeta
lamarozzo ha scritto:...L'argomento secondo cui si dovrebbe avere un incremento di prestazioni ottimizzando la compilazione del kernel non so quanto sia vero fino in fondo. Le prestazioni di un sistema sono condizionate da ben altri colli di bottiglia che la velocita' di esecuzione del codice del kernel. Ma magari mi sbaglio.
Il collo di bottiglia delle prestazioni resta sempre la "lentezza" della memoria di massa (l'hard disk). Quanto tutto è in memoria se si può ottimizzare, perchè non farlo? Io ti parlo di livello assembly. Ci sono processori che implementano un unica istruzione assembly per risolvere problemi che altrimenti li si dovrebbero risolvere con una serie di istruzioni. Se tu sai che il processore può usare quella istruzione, perchè non sfruttarla? Guarda che tutto il problema legato alla compilazione dei sorgenti sta proprio qui. Altrimenti perchè uno si dovrebbe compilare software dai sorgenti invece di utilizzare i binari precompilati? Vedi la distribuzione gentoo, non avrebbe senso.
Spina
Inviato: lun 19 feb 2007, 18:20
da Sari
lamarozzo ha scritto:i kernel che arrivano di default con la maggior parte delle distribuzioni (compresa la Slack) sono molto modulari e quindi caricando i moduli giusti si adattano ad una grandissima varieta' di hardware. In molti casi quindi, anziche' ricompilarsi il kernel si puo' installare uno dei nuovi kernel gia' compilati (per noi magari huge2.6 o test2.6).
Compilarsi da soli il kernel e' pero' molto didattico, soprattutto quando uno e' alle prime armi (come nel mio caso), combina dei pasticci e poi deve risolverli.
L'argomento secondo cui si dovrebbe avere un incremento di prestazioni ottimizzando la compilazione del kernel non so quanto sia vero fino in fondo. Le prestazioni di un sistema sono condizionate da ben altri colli di bottiglia che la velocita' di esecuzione del codice del kernel. Ma magari mi sbaglio.
La CPU esegue un sacco di codice Kernel, se non ricordo male il ContextSwitch in Linux è ogni 10ms... minimo ogni 10 millisecondi entra in gioco il kernel che si prende la briga di salvare tutto e eseguire qualcuno dei suoi algoritmi per poi mandare in esecuzione un altro processo, ovviamente senza contare le miliaia di chiamate di sistema

. Direi che una ottimizzazione del kernel giova non poco sui tempi di esecuzione (oltre che sull'occupazione di memoria).
Inviato: mar 20 feb 2007, 21:08
da Toni
qualcuno mi corregga se sbaglio
puoi decidere quale approccio al multitasking usare, cioè quanto tempo il kernel decide di affidare le risorse hardware ad un processo e in che modo avvenga il rilascio delle risorse, il kernel di default è impostato per ottimizzare le applicazioni server , se usi il pc come desktop puoi variare questa configurazione , io anche; se minimo, posso dirti di avere un desktop piu reattivo, almeno su un vecchio pc