Una patch miracolosa, a dir poco: poco più di duecento linee di codice (244 per l’esattezza)
scritte da Mike Gallbraith e apprezzate esplicitamente anche dallo stesso Linus Torvalds rivoluzioneranno completamente l’esperienza degli utenti del pinguino. Vi basterà sapere che la
compilazione di un kernel attraverso 64 jobs paralleli, la
visualizzazione di un video e qualche altra
operazioncina mangia-memoria non sono bastate per bloccare un sistema patchato. Non scenderò nei dettagli tecnici, ma cercherò di spiegarvi un poche e semplici parole
cosa combina questa patch.
Da premettere che la patch va ad agire in
kernel-context e non in
user-context, cosa che in teoria dovrebbe essere una bella mazzata per la
sicurezza del kernel. Il gioco, però, vale la candela: c’è da dire che il “pericolo”, se così possiamo definirlo, riguarda un algoritmo di accesso al kernel che esiste praticamente da sempre. In parole povere applicare la patch non comprometterà la sicurezza del vostro sistema,
bensì andrà a toccare qualcosa che – attenzione, in linea squisitamente teorica – non dovrebbe essere toccata.
La patch in questione va ad agire sul raggruppamento dei task relativi a ciascun TTY ( la “bash text-only”, visualizzabile premendo i tasti CTRL+ALT+<F1> o <F2>…. fino a <F8>).
Anche il server X viene eseguito su un TTY (solitamente il TTY numero sette – o quello numero otto), di conseguenza
un visibilissimo miglioramento sarà tangibile anche a livello grafico. Tornando a noi, attraverso questa patch il kernel riesce a raggruppare i processi relativi a ciascun TTY, andando ad aiutare il lavoro dello scheduler di sistema,
riducendo quindi sensibilmente il tempo di latenza massima (che viene
ridotta a circa 1/10 di quella attuale) e
riducendo drasticamente quello di latenza media (che può arrivare ad essere
ridotto addirittura ad 1/60 di quella attuale). Riducendo così tanto il tempo di latenza, quindi, il sistema riesce a reagire in maniera
assolutamente più scorrevole anche in situazioni di sovraccarico consistente della memoria. Roba da far rabbrividire, davvero.
E ve ne darò prova mostrandovi
due video di un test eseguito da Phoronix http://www.phoronix.com/scan.php?page=article&item=linux_2637_video&num=2: il primo con il sistema “senza patch” (raggruppamento disabilitato) e l’altro con il sistema “patchato” (a cui è stato abilitato il raggruppamento automatico). Il sistema è nelle condizioni che vi ho descritto sopra:
ricompilazione del kernel con 64 jobs concorrenti, visualizzazione di un video, test Open-GL e qualche altra cosetta.
nel primo caso in cui la patch non è applicata, il refresh dello schermo è lento e lascia in giro molte finestre che non fanno in tempo ad aggiornarsi[youtube]
[/youtube]
nel secondo in cui la patch è attiva, il refresh è quasi normale[youtube]
[/youtube]
Proprio niente male, eh? Avete notato che, nel secondo video, il file riprodotto scatta poco o niente? Ed avete notato come, trascinando la finestra, le interferenze grafiche sono pressochè impercettibili?
Bene, questo è il miracolo!
Ora però la brutta notizia: la patch non è presente nei kernel della serie 2.6.36, nè nei kernel della serie 2.6.37-rc1 o rc2. Ragion per cui vi toccherà patcharlo a mano, ma noi non lo vogliamo, siamo un po pigri e certe cose le facciamo fare ai Neo di turno.
Per fortuna un altro super genio dell’informatica ci viene in soccorso e ci dà un metodo facile facile che ci semplifica la vita, come descritto in questa
guida http://giornaledisistema.blogspot.com/2010/11/linux-far-volare-il-kernel-senza-patch.html, con pochi semplici passaggi, ovviamente, mi raccomando, bisogna avere un po di cognizione di causa altrimenti facilmente si possono fare disastri e io non vi voglio sulla coscienza, quindi se non capite bene i passaggi, ovviamente, non potete tornare indietro in caso di problemi.
Bene dopo le raccomandazioni del caso veniamo ai passaggi da compiere:
>>> Modifiche solo per Ubuntu<<<Aprite il terminale da Applicazioni → Accessori → Terminale e date il comando:
sudo gedit /etc/rc.localPrima di exit 0 in fondo aggiungete le righe:
mkdir -p /dev/cgroup/cpu
mount -t cgroup cgroup /dev/cgroup/cpu -o cpu
mkdir -m 0777 /dev/cgroup/cpu/user
echo “/usr/local/sbin/cgroup_clean” > /dev/cgroup/cpu/release_agentSalvate e chiudete.
Rendere eseguibile il file rc.local appena modificato con il comando:
sudo chmod +x /etc/rc.localOra aggiornate il file bash.rc della vostra home con:
gedit ~/.bashrced in fondo al file aggiungete, inseritele anche se il file è vuoto, potrebbe capitare nel caso si usasse Linux Mint:
if [ "$PS1" ] ; then
mkdir -m 0700 /dev/cgroup/cpu/user/$$
echo $$ > /dev/cgroup/cpu/user/$$/tasksecho "1" > /dev/cgroup/cpu/user/$$/notify_on_release
fiSalvate e chiudete.
Per assicurarsi che i cgroups (è una questione tecnica, tranquilli se non è chiaro) vengono cancellati ogni volta dopo l’ultimo task:
sudo gedit /usr/local/sbin/cgroup_cleane (il file dovrebbe essere vuoto) aggiungete le righe
#!/bin/sh
rmdir /dev/cgroup/cpu/$*poi salvate, uscite, e rendetelo eseguibile con
sudo chmod +x /usr/local/sbin/cgroup_cleanRiavviate per applicare le modifiche. Avete finito.
>>> Modifiche per tutte le distribuzioni TRANNE Ubuntu<<<Aprite il terminale da Applicazioni → Accessori → Terminale e date il comando:
gedit ~/.bashrcIn fondo al file aggiungete le righe:
if [ "$PS1" ] ; then
mkdir -m 0700 /dev/cgroup/cpu/user/$$
echo $$ > /dev/cgroup/cpu/user/$$/tasks
echo "1" > /dev/cgroup/cpu/user/$$/notify_on_release
fiSalvate ed uscite.
Ora diventate amministratore con il comando
sue date i comandi:
mount -t cgroup cgroup /sys/fs/cgroup/cpu -o cpu
mkdir -m 0777 /sys/fs/cgroup/cpu/userInfine riavviate. Avete finito.
da "linuxdifficile.wordpress.com"http://linuxdifficile.wordpress.com/2010/11/20/rendiamo-linux-piu-performante/da "chimerarevo.com"http://www.chimerarevo.com/2010/11/18/kernel-2-6-38-arriva-una-patch-che-dara-nuova-vita-al-vostro-sistema/da "giornaledisistema.blogspot.com/"http://giornaledisistema.blogspot.com/2010/11/linux-far-volare-il-kernel-senza-patch.html