10 modifiche del kernel per un sistema al Top

Non sapevo cosa mettere di titolo..forse manca un "secondo me", che comunque verrebbe tagliato nei feed. Ultimamente mi sono dedicato piu' all'aspetto kernel che non a Kubuntu o kde in generale (ve ne sarete accorti) e voglio riassumere in questo articolo quelle che sono le modifiche interessanti e per le quali possiamo poi verificare effettivamente le ripercussioni sul funzionamento del nostro sistema.
In poche parole mi sono domandato quali fossero le impostazioni base da selezionare dopo l'installazione del sistema operativo. Non si tratta di argomenti complicati, e non e' nemmeno necessario ricompilare il kernel per rendere effettive le modifiche perche', se abbiamo il kernel ufficiale Ubuntu, ci basta scaricare i relativi sorgenti.
Gli screenshoots sono indicativi..sappiate che non c'e' una regola precisa per la selezione dei driver modulari o statici. I driver compilati staticamente entrano a far parte del codice del kernel, mentre i moduli possono essere caricati / scaricati all'occorrenza. Nell'interfaccia di configurazione xconfig il simbolo "V" corrisponde alla compilazione statica, e il simbolo "." a quella modulare.
Come dicevamo prima, se ci dimenticassimo una opzione o se non avessimo le nozioni necessarie alla compilazione e installazione del kernel, bisogna procurarsi i sorgenti relativi alla nostra versione (tramite repository ad esempio) e scompattarli in /usr/src.
Una volta eseguite le modifiche installiamo tutti i moduli aprendo un terminale nei sorgenti del kernel e digitando:
sudo make modules modules_install
La necessita' di scrivere un articolo del genere e' dettata dal fatto che non e' sempre facile trovare in giro argomenti che riguardino la configurazione del kernel, piuttosto che la compilazione.
- Riferimenti -
kernel 2.6.23 Processore Intel core / duo MainBoard Intel Corporation Mobile 945GM/PM/GMS
Andando in ordine sparso, ecco quali sono queste impostazioni:
- Sezione Processori e features -
- Dual core SMP

Selezioniamo Core duo / Xeon se abbiamo un bi-processore dual core (duo) Intel o Intel Xeon. Per AMD selezioniamo i moduli MK7 o MK8 a seconda della nostra architettura. Se abbiamo un altro modello di processore, in questa sezione possiamo trovare la categoria alla quale appartiene.
- Numero massimo di processori

Il valore 8 aumenta di ben 64Kb l'immagine finale del nostro kernel, che su un totale di circa 4MB sono un po' troppi. In questo caso lo scopo e' soltanto quello di ridurre il kernel. E' un esempio che puo' essere applicato anche ad altri moduli che ne permettono la modifica cliccando 2 volte sull'opzione (interfaccia xconfig) e confermando con "enter". Se abbiamo un processore dual core selezioniamo il valore 2. Questo ci permette di risparmiare 48Kb:
- Timer frequency

Imposta la latenza di comunicazione tra interrupts e BUS di periferiche
NB:Il numero di timer interrupts per secondo e' dato dalla moltiplicazione del numero di CPU per la frequenza che impostiamo (NR_CPUS * HZ )
Da qui e' facile capire come un sistema server o NUMA da 8 CPU necessiti di un timer frequency di 100Hz..massimo 200Hz, mentre un sistema Desktop si puo' portare a 1000Hz (se abbiamo un dual core meglio 300 perche' dobbiamo moltiplicare per 2).
Molto importante e' anche la selezione del modulo preemptible kernel, ormai di default nel kernel di Ubuntu:

- Paravirtualizzazione -

Deselezioniamo il modulo perche' potrebbe interferire con l'installazione dei driver Nvidia o dei driver proprietari in generale. Questo problema non sussiste con i driver forniti dai repository, perche' il kernel viene patchato.
- Power Management -

Suspend e Hibernate sono due moduli che troviamo in pianta stabile a partire dal kernel 2.6.23. La selezione e' necessaria, in alcuni casi, se vogliamo usufruire del pm-suspend o pm-hibernate senza ricevere l'errore "kernel could not suspend the system".
- Cpu Scaling -

Il kernel di Ubuntu dovrebbe adottare di default tutte le politiche di governor, e di default l'opzione "on demand". Questo secondo me e' sbagliato, perche' non consente di intervenire direttamente sui files che utilizza il kernel per comunicare in userspace:
/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
Cosi' e' necessario installare un programma che ci consente di variare la frequenza. Selezionando "userspace" abbiamo sempre una possibilita' in piu' di intervenire manualmente qualora il programma che utilizziamo decida di abbandonarci (e purtroppo accade spesso..vedi cpufreqd o powernowd).
- Networking -

Il subsystem ieee80211 sta andando verso il deprecated in favore del nuovo mac80211, ancora poco utilizzato dai vari wireless drivers. I possessori di schede intel ipw3945 sanno bene che il subsystem del kernel va sovrascritto con uno piu' nuovo altrimenti i driver ipw non si riescono a compilare. Il consiglio e' quello di lasciarlo selezionato, tenendo presente che una volta sovrascritto non e' piu' possibile tornare al modulo originale del kernel (i driver che ne richiedono la compilazione non si potranno compilare. ES. ath5k)
- Ata / Sata -

Non voglio tornare nuovamente sull'argomento, ma il subsystem ATA/ATAPI va deselezionato mentre Serial ATA / Parallel ATA va selezionato.
All'interno della configurazione e' poi possibile scegliere i moduli corretti (o il piu' corretti possibile) per il nostro disco SATA. Se non abbiamo un Hard disk SATA facciamo esattamente lo stesso, per dar modo a LIBATA di gestirli come dispositivi SCSI qualsiasi (cdrom, floppy, usb-pen, SD, etc..)
- Bus Option -

Su sistemi con BUS PCI/express, solitamente e' il BIOS che determina la configurazione dei dispositivi PCI. Purtroppo alcune vecchie MainBoard possono avere parecchi bios-bug e di conseguenza anche diversi crash. Linux e' in grado di rilevare l'hardware sia utilizzando il BIOS sia bypassandolo raggiungendo direttamente l'hardware.
- BIOS = verra' utilizzato il BIOS per la configurazione delle periferiche
- DIRECT = Linux utilizzera' l'accesso diretto ai devices bypassando il BIOS
- MMConfig = PCI Express MMCONFIG*
- ANY = Il kernel tentera' di eseguire in successione tutte le operazioni precedenti fino a quando non ne trovera' una funzionante.
Questo non e' sempre vero:
* Il mio Asus presenta un bios-bug all'avvio (nulla di compromettente ma rallenta un po' la fase di boot) che riguarda proprio l' MMConfig se l'opzione del kernel e' selezionata su ANY. Per correggere questo bug bisogna selezionare necessariamente MMConfig.
I bios-bug sono tanti e di diverso tipo, se all'avvio notiamo (solitamente dura pochi secondi) un avviso del genere, e' bene provare le diverse combinazioni che ci offrono questi moduli.
- Sensori -

Per terminare questa breve introduzione alla configurazione del kernel, parliamo di questa sezione molto importante. Tutti i programmi in userspace di cui disponiamo, prendono le informazioni tramite le due interfacce principali del kernel:
/proc --> vecchio
/sys --> nuovo
Anche se il primo pseudo-filesystem viene oramai marcato come deprecated (sconsigliato) e' bene lasciare selezionati tutti quei moduli che ne fanno uso, altrimenti avremo problemi nel rilevare temperature, velocita' ventole, scaling etc..etc.. Fatta questa premessa torniamo ai driver per i sensori montati sulla nostra MainBoard o addirittura embedded nei moderni processori dual core AMD o Intel.
Nel dubbio, e' bene selezionarli tutti, a meno che non vogliamo provarne uno per uno per determinare quello corretto. Nello screen si fa riferimento al nuovo modulo coretemp, che in alcuni casi puo' essere l'unica soluzione possibile per rilevare la temperatura (non del case ma della cpu).
LM-SENSORS ci puo' aiutare in questa minuziona procedura di identificazione modulo. In base alle specifiche fornite da questo programma siamo in grado di capire quali sensori sono effettivamente in uso o quali sono invece mancanti e necessari.
- Blog di divilinux
- 1564 letture
Versione stampabile


















Commenti
Bell'articolo, soprattutto i
Bell'articolo, soprattutto i punti reltivi a Sata e Bus option.
Io come CPU Scaling tengo ondemand, sul portatile è un buon compromesso tra prestazioni e risparmio energetico. Mentre come timer frequency 864.
ma pre chi possiede un intel
ma pre chi possiede un intel core duo t 2300, il tipo di processore da scegliere è sempre core duo /xeon?
@pierissimo certo
@pierissimo
certo
ciao, una domanda... per
ciao,
una domanda... per kernel "compilati in casa" qual'è il metodo per creare l'immagine di initrd sotto Ubuntu? Io sto ancora "risolvendo" mettendo come monolitici quei driver che altrimenti potrei mettere come moduli, ovvero quelli del filesystem e dell'ata/sata (per poter quindi fare il boot).
Ciao, io ho il
Ciao, io ho il 2.6.22-14-generic. e un processore mono core, che valore devo impostare in - Numero massimo di processori? attualmente c'è 8
e il preemptible kernel mi consigliate di selezionarlo? io ho impostato a voluntary.
Ps.:ho un portatile
ciao grazie
qual’è il metodo per
qual’è il metodo per creare l’immagine di initrd sotto Ubuntu?
basta aggiungere l'opzione
--initrd alla stringa di compilazioneGrazie, articolo veramente
Grazie, articolo veramente interessante Divilinux!!
@iakopo per il numero di
@iakopo
per il numero di processori: a meno che non si tratti di un p4 con HT, puoi anche togliere le voci riguardanti NUMA e SMP, cosi' scompare proprio quell'opzione.
Il preemptible kernel abbassa la latenza rispetto agli altri due, ed e' una buona opzione per un computer desktop..quindi e' consigliabile averlo selezionato per motivi di logica..a meno che tu non usi il portatile come server fisso di rete.
;)
Domanda molto
Domanda molto importante...mettiamo che io faccia le modifiche consigliate al kernel...non è che dopo mi tocca reinstallare a manina tutti i driver, vero? :) Fintanto che non ricevo risposta me ne sto bello fermo ;)
non è che dopo mi tocca
non è che dopo mi tocca reinstallare a manina tutti i driver, vero?
No vai tranquillo, con make modules modules_install reinstalli solo i moduli del kernel, quelli compilati esternamente non vengono toccati.
;)
>basta aggiungere
>basta aggiungere l’opzione --initrd alla stringa di
>compilazione
spe... stringa di compilazione?
definizione di stringa: sequenza di caratteri alfanumerici.
Io per compilare eseguo una serie di comandi... make clean && make bzImage && make modules && make modules_install
poi procedo a copiare il bzImage e aggiornarmi il lilo.conf (o il file di grub, che è lo stesso)... c'è qualcosa che mi sfugge nella tua risposta :D
non ho ben capito la parte
non ho ben capito la parte sugli ATA (pur avendo letto anche il post linkato). In pratica ho tutti device IDE, che, a quanto leggo sono considerati "experimental". E' una scelta sana quella di passare al nuovo subsystem? E in questo caso, cosa cambierebbe? Illuminami maestro ;-)
@zanac ti sfugge il fatto
@zanac
ti sfugge il fatto che si intende, per compilazione del kernel, la compilazione alla debian-way..diversa da quella che hai esposto (che usavo ad esempio su slack, dove non e' usanza avere l'initrd e dove si crea la bzImage manualmente e non pacchettizzandola)
ecco la stringa:
make-kpkg --initrd --append-to-version -versione kernel_image kernel_headers
@Boyska
ho evitato di approfondire proprio perche' ampiamente discusso in passato.
Su UBuntu convivono i due subsystem..uno deprecabile (ata) e uno piu' nuovo (libata)
Cosa cambia?..cambiano i device..i /dev/hda diventano /dev/sda..i cdrom diventano /dev/scd*..e qualsiasi periferica come floppy, cdrom o hdd viene gestita come un dispositivo SCSI
In /etc/fstab non va quindi piu' aggiunto nulla..a meno che non si tratti di filesystem statici (hdd interni) o NTFS (per via dei permessi)
ok divi ho messo preemptible
ok divi ho messo preemptible kernel, però non riesco a trovare le due altre voci che mi hai detto: NUMA e SMP dove sono?
Ps:ho un athlon64
@iakopo Numa e SMP sono due
@iakopo
Numa e SMP sono due termini per indicare i sistemi con piu' processori..
Ci sono diversi moduli che interessano i sistemi SMP e i sistemi NUMA..non posso elencarli tutti qua..li cerchi nella configurazione e li disabiliti
;)
in effetti... su questo
in effetti... su questo aspetto sono rimasto un "rozzo" e non ho mai cambiato le vecchie abitudini (quest'anno sono 9 anni di Linux, figurati! ;))
ok, proverò a convertirmi alla "debian way" (è più per pigrizia che continuo ad usare la "slack way", non per altro... sai com'è... anni e anni di "make" sono difficili da cancellare :D
cmq pensa che ormai sono sei mesi che mi stavo abituando a non compilare più kernel a mano, grazie ad ubuntu 7.04, tuttavia con l'ultima 7.10 ha un kernel "ciocco" e per qualche motivo quando carica il modulo per la scheda di rete resta due minuti freezato durante il boot... e prima che me lo dici, no, non è ipv6 :D
ecco perchè quindi dopo sei mesi di felicità con il kernel standard di ubuntu temo tornerò ad un kernel "fatto in casa" :D
p.s. continua così: molti dei "vecchi" come me ti segue, anche se spesso lurkiamo e basta! :D
@divilinu: grazie, mi sa che
@divilinu: grazie, mi sa che mi tocca spulciarmi per benino il web (anche perche' io sono su Debian Sid, non su ubuntu)
@Zanac lo so che questo blog
@Zanac
lo so che questo blog e' piu' seguito da "lurkatori" che da "commentatori"..e alla fine e' un po' quello che ho sempre voluto.
Poi c'e' lo spazio per l'approfondimento qui nei commenti..
;)
Il kernel della 7.10 va davvero male, ed e' strano perche' il 2.6.22 tutto sommato e' un buon kernel..decisamente meglio del 2.6.20 e con molte novita' in piu'.
hai fatto un'immagine del
hai fatto un'immagine del kernel di 4 mega????
sul mio 2.6.23.1 se non ricordo male (sono al lavoro) sono arrivato a 2 mega scarsi, tenendo conto che metto una cifra di robe in built-in, per ottimizzare il tutto
@pix 4MB sono la
@pix
4MB sono la media..l'ultima immagine del kernel che ho fatto stamattina e' di 1,6MB
come la media? il kernel di
come la media? il kernel di ubuntu è decisamente piccolo se non ricordo male, poi vabbè, ha un initrd immenso...
@pix hai ragione..4MB sono
@pix
hai ragione..4MB sono le dimensioni limite..ho scaricato per prova l'immagine del generic e' di 1,7MB..comunque gia' "tirarla" a 1,6MB vuol dire molto
Sono un po off-topic, ma ti
Sono un po off-topic, ma ti vorrei chiedere una cosa.
Appena uscito il kernel 2.6.23.1 l'ho compilato sul mio ubuntu amd64 partendo dal config di un altro kernel ricompilato da me prelevando il sorgente dal repo di feisty (2.6.20.3)
Ebbene, solo dopo 15 giorni di utilizzo del nuovo kernel 2.6.23.1 ho avuto motivo di inserire un cd-rom nel lettore e ho notato che non lo monta.
Se avvio col kernel 2.6.20.3 il cd-rom viene montato regolarmente.
Quale può essere il parametro di configurazione del 2.6.23.1 che ha prodotto il problema?
Grazie
@Maurizio sinceramente non
@Maurizio
sinceramente non lo so quale possa essere la differenza, tieni presente anche che dal 2.6.20 a 23 cambiano parecchie cose...e nel montaggio ci sono in gioco hal, udev, dbus..
Potresti comunque confrontare il file di configurazione di un kernel vanilla 2.6.23.1 e quello che ti sei portato dietro, spulciando sopratutto nella sezione dei cdrom / scsi /ata /serial ata.
Bell'articolo come sempre.
Bell'articolo come sempre. Complimenti!
@Maurizio se hai problemi
@Maurizio
se hai problemi posso postarti il file di configurazione del mio 2.6.23.1, dovresti cambiare giusto qualcosina per adattarlo alla tua macchina, come processore, controller sata, filesystem supportati, scheda audio e poca roba ancora...
@divilinu
l'immagine del mio kernel è di 1,8 mega, perchè come ti ho detto preferisco mettere built-in tutto quello che non è dinamico, come i moduli di mouse, controller, scheda ethernet, ecc
bei tempi del kernel 2.4.2x in cui arrivavo a immagini di 800KB :D
Ieri sera per la prima volta
Ieri sera per la prima volta ho compilato il kernel. Non l'ho ancora installato, ma ora con le tue dritte posso fare di meglio! :-D
divi in networking metto le
divi in networking metto le impostazioni come da screenshot?
@algol per cosa?
@algol
per cosa?
per i moduli della
per i moduli della wireless... sempre la mia croce..
come lo screenshot che hai postato sopra...
poi un'altra domanda.
io importo il .config della mia configurazione ubuntu funzionante
faccio sudo make oldconfig e poi vado di xconfig
una volta finito posso fare una copia del .config ottenuto e usarlo eventualmente se devo ripartire da zero col kernel che sto cercando di compilare?
@Algol ma non serve
@Algol
ma non serve importare il .config..basta lanciare make oldconfig (e' gia' questo comando che importa il file di conf precedente)
Dato che gli ipw richiedono il loro stack..l'ieee80211 che lo selezioni o meno non fa alcuna differenza
Nel 2.6.24-rc4 ci sono gli iwl3945..che rimpiazzano gli ipw..e quindi non va installato proprio nulla..sei contento?
:D
:D si... (corre a piangere
:D si... (corre a piangere per la commozione)
faccio un esempio:
compilo il 2.6.23 ho i miei 3 bravi pacchetti (compreso quello degli nvidia), gli installo funziona tutto.
sposto la cartella ieee80211 in src e sostituisco lo stack.
compilo gli ipw3945 ma mi da un errore...
a questo punto tanto per provare rimodifico il .config cambinado i moduli nella sezione wireless, rimuovo il kernel installato, ricompilo, ma si blocca. non ci sono santi
devo rimuovere i sorgenti e rispondere di nuovo alle domande, riseguire le mie 1000 guide. salvare il .config era un modo per non rifare tutto ciò
ma io non mi arrendo... devo riuscirci!!!!
Niente mi arrendo!!! non so
Niente mi arrendo!!!
non so più che pesci prendere... tutto dovrebbe essere al suo posto ma non ne vuole sapere.
Ciao, ho un dubbio e un
Ciao,
ho un dubbio e un problema :)
###Dubbio:
per un Intel Centrino 1GB Ram va bene un low-latency kernel? In processor type devo mettere Pentium M vero?
###Problema:
Quando do sudo make modules modules_install ricevo un errore come questo
Scusami se ti mando su un altro link ma non volevo zozzare il tuo bel blog con quelle righe di errore
@gismondo per quanto
@gismondo
per quanto riguarda la prima domanda va bene il pentium M e 1GB per il low latency..
La seconda domanda..se stai reinstallando dei moduli di un kernel gia' precedentemente ricompilato, deve funzionare per forza di cose..a meno che stradafacendo tu non abbia installato dei moduli che sono andati a sovrascrivere quelli del kernel
Faccio il solito esempio della ipw3945..che richiede un subsystem ieee80211 piu' aggiornato..quando vai a reinstallare i moduli perche' ne avevi dimenticato uno..il processo si ferma proprio sul subsystem..perche' evidentemente ha altri files implicati che non si possono piu' compilare..
ciao, grazie per l'immediata
ciao,
grazie per l'immediata risposta, questo è un kernel che non è mai stato toccato, perchè ho da poco installato il sistema...
Mi trovo su Linux Mint 4.0 kernel 2.6.22-14-generic
Non so cosa fare, su google non ho trovato soluzioni...
Ciao
@gismondo se lanci la
@gismondo
se lanci la compilazione normale cosa succede?
Parlavo di moduli..ma ci sono anche dei programmi in userspace che una volta installati aggiungono moduli al kernel
prova, se non l'hai fatto, a lanciare
sudo make mrproper
Ciao, scusami se ti faccio
Ciao, scusami se ti faccio perdere tempo...
Allora, se provo la classica compilazione quando arrivo a make bzImage ottengo lo stesso identico errore, stessa cosa se prova la compilazione debian-way...
make mrproper fa pulizia e quindi cancella anche il .config appena creato, ragionevolmente quando do make modules modules_install il sistema mi risponde "Kernel not yet configured", alchè io vado a configurarlo con menuconfig e successivamente do di nuovo make modules modules_install : stesso identico errore...
Credo ci sia qualcosa che mi manca ma non so proprio cosa, è strano
Grazie per il tuo aiuto
Finalmente ho
Finalmente ho risolto...grazie comuque dell'aiuto che mi hai dato : il problema era che,per sbaglio, ero entrato in linux-headers e non in linux-source, per questo mi restituiva l'errore...
Ora tutto OK, scusami, ti ho fatto perdere tempo per una mia disattenzione...
Ciao ;)
@gismondo lol..non ci sarei
@gismondo
lol..non ci sarei mai arrivato
:D
pero' e' vero..disattenzione mia che guardo subito l'errore e non tutto il resto
root@gismondo-laptop:/usr/src/linux-headers-2.6.22-14# make modules modules_install
Ho letto solo in questi
Ho letto solo in questi giorni l'ottimo how-to.Proprio quello che stavo cercando per settare al meglio il kernel per il mio laptop.
Spero che in futuro ci sia un continuo di questo articolo su come configurare il resto dei vari componenti hardware dei laptop.
Ciao e complimenti ancora!
Nic
@Nicola Grazie, sicuramente
@Nicola
Grazie, sicuramente ci sara' un seguito..magari con meno indicazioni generiche e piu' specifiche per vari modelli di notebook
;)
I use
I use http://ubuntuforums.org/showthread.php?t=311158
And kernel 2.6.23 source not have the on demand option???
You can help please???
Thnaks Hqx
@hqxriven hi Yes..it has.
@hqxriven
hi
Yes..it has. Maybe you didn't check for "show all options" in your interface menu (gconfig or xconfig)
But is not important..you can choose "userspace" option to manage frequency without any userspace program..
;)
Thanks divilinu!!! You know
Thanks divilinu!!!
You know with integrate restricted-modules on the kernel 2.6.23???
This is my big problem???
In the modules restricteds say something kernel blablabla modules dont exist....
Greath blog is perfect!!!
@hqxriven Yes, because on
@hqxriven
Yes, because on vanilla kernel doesn't exits restricted-modules. The restricted-module it's only a distro-package that can be released by repository, and contains just few proprietary-licence drivers.
But all this drivers can be found stand-alone..like ATI drivers or Nvidia.
Ubuntu supplies even source-modules..so you can use module-assistant tool to install them
;)
[...] in due blog amici
[...] in due blog amici (Divilinux e Morf3us) come fare, inoltre, nel blog di Divilinux ho trovato alcuni consigli sulla configurazione del kernel davvero [...]
[...] Durante questa fase è
[...] Durante questa fase è possibile selezionare il proprio tipo di processore, power management, cpu scaling ed altro (10 modifiche del kernel per un sistema al top) [...]
ciao avevo all' avvio il
ciao
avevo all' avvio il problema degli mmconfig ma col kernel 2.6.25.8 (almeno ora cio' fatto caso)
o c'è Support mmconfig PCI config space access (PCI_MMCONFIG) che ti pinza tutte e quattro ( come avevo ) o se togli la spunta la leva da MMCONFIG ed ANY....
gli avvisi MMCONFIG sono spariti in compenso sono arrivati quelli ACPI
giocherellone.....
@ricohet che problemi di
@ricohet
che problemi di acpi?
Invia nuovo commento