Patch Con Kolivas: incrementare le prestazioni desktop: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (→‎Introduzione: nota su -cks)
Riga 1: Riga 1:
__NOTOC__
== Introduzione ==
{|style="-moz-border-radius: 0.5em; width:100%; margin-top:+.7em; background-color:#F9F9FF; border: 1px solid #ccc"
Le patch ''Con Kolivas'' (<tt>-ck</tt>) per il [[kernel]] di Linux sono una serie di patch che incrementano notevolmente le prestazioni desktop implementando uno scheduler innovativo (''staircase''), ottimizzando l'uso dello swap (''swap-prefetching'') e del sotto-sistema disco, e aggiungendo dei nuovi livelli di priorità al di fuori di quelli tradizionalmente impostabili con <code>nice</code>.
|style="width:50%;color:#000"|
{| style="width:280px;border:solid 0px;background:none"
|-
| style="width:280px;text-align:center; white-space: nowrap; color:#000" |
<h1 style="font-size: 162%; border: none; margin: 0; padding:.1em; color:#000">
Indice delle Guide
</h1>
<div style="top: +0.2em; font-size: 100%">
Di seguito troverete l''''indice completo''' delle guide contenute su [[Guide@Debianizzati.Org:About|Wiki]].


Potete anche navigare tra le guide scegliendo tra le '''[[Lista Categorie|categorie]]''' qua a destra.
Con queste patch si ottiene un sistema desktop estremamente responsivo ed ottimizzato per l'uso interattivo.
</div>
|-
|}
<!-- ----------Portals Follow----------------------------- -->
|style="width:11%;font-size:95%;color:#000"|
* [[:Categoria:Apt|Apt]]
* [[:Categoria:Desktop|Desktop]]
* [[:Categoria:Hardware|Hardware]]
* [[:Categoria:Kernel|Kernel]]
|style="width:11%;font-size:95%;color:#000"|
* [[:Categoria:Laptop|Laptop]]
* [[:Categoria:Networking|Networking]]
* [[:Categoria:Shell|Shell]]
* [[:Categoria:Server|Server]]
|style="width:13%;font-size:95%;color:#000"|
* [[:Categoria:Sicurezza|Sicurezza]]
* [[:Categoria:Sistema|Sistema]]
* [[:Categoria:Tips&Tricks|Tips&Tricks]]
* '''[[Lista Categorie]]'''
|}


Se vi siete chiesti come mai Gentoo o Archlinux sono così veloci su desktop la risposta sta principalmente nell'inclusione delle patch <tt>-ck</tt> nei loro kernel di default.


Con Kolivas mantiene anche un altro insieme di patch, chiamate <tt>-cks</tt>, che sono specificatamente pensate per ottimizzare le prestazioni dei server.


Questo Wiki - '''[[Guide@Debianizzati.Org:About|Guide@Debianizzati.Org]]''' - vuole essere prima di tutto un punto di raccolta ideale per le conoscenze acquisite dai singoli durante l'uso di '''Debian GNU/Linux''' in ambito casalingo e/o lavorativo, in modo che il sapere di uno diventi quello di tutti.
== Descrizione della patch ==


Le guide ritenute meglio scritte e pi� approfondite, dopo un processo di controllo e revisione a cui tutti siete liberi di partecipare, vengono classificate [[:Categoria:Debianized|Debianized]] e contrassegnate dalla [[Debian Swirl]]: http://guide.debianizzati.org/images/swirl.png. Per ulteriori informazioni sul processo di revisione vedere: [[Aiuto:Contents#Evoluzione_delle_guide|Evoluzione delle guide]].
=== Staircase Scheduler ===


Potete trovare un elenco completo delle guide '''Debianized''' in [[:Categoria:Debianized|questa pagina]].
Le patch <tt>-ck</tt> includono l'innovativo ''staircase scheduler''. Questo è uno schedule con una logica e una implementazione più semplice di quello usato attualmente nel kernel Linux (''ingo scheduler'') che si presta ottimamente all'uso interattivo, senza penalizzare le prestazioni server. Attualmente è in discussione la possibile sostituzione dello scheduler di Linux con lo staircase.
 
Segue la lista completa delle guide attualmente presenti:
Le uniche perplessità sembrano essere sul fatto se lo ''staircase scheduler'' abbia prestazioni uguali al ''ingo scheduler'' su sistemi multiprocessori (sui quali lo scheduler attuale è altamente ottimizzato). Test prestazionali sono attualmente in corso.
__TOC__
 
Ecco come Con Kolivas descrive lo ''staircase scheduler'':
 
''This is a complete rewrite of the scheduler policy for normal tasks built on top of the O(1) scheduler. The aim was to make a very lean simple but effective design scheduler that is intrinsically interactive and responsive instead of modifying an existing design with tweaks to make it interactive.''


== Mondo Debian ==
=== Swap prefetching ===
=== Introduzione a Debian ===
Altra patch inclusa è la così detta ''swap prefetching''. In pratica questa patch ottimizza l'uso dello swap precaricando delle pagine non appena della ram risulta disponibile (non quando le pagine sono richieste come sul [[kernel vanilla]]), e questo velocizza notevolmente il passaggio tra le grosse applicazioni se ad esempio se ne chiude una. Inoltre vengono tenute in swap anche pagine caricate in ram in modo da rendere immediato un successivo ''swap-out''.
* [[L' Universo Debian]]
* [[La struttura della Distribuzione]]


=== Installazione ===
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare di prestazioni.
* http://guide.debianizzati.org/images/swirl.png [[Guida a Grub]]
* [[Jigdo | '''Jigdo''': Scaricare e Aggiornare le iso di Debian]]
* [[Note sull'installazione di Debian]]


=== Gestione dei Pacchetti ===
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===
* [[Introduzione all' Apt System]]
Normalmente i processi in Linux hanno priorità SCHED_NORMAL. I processi di questa classe possono avere un [[nice]] da 19 a -20 che indica la loro priorità all'interno della classe SCHED_NORMAL. Su Linux sono presenti altre due classi di priorità:
* [[I repository ed il loro utilizzo]]
* http://guide.debianizzati.org/images/swirl.png [[Pulire Debian]]
* [[Apt-cdrom | '''Apt-cdrom''': aggiunta di cd/dvd nella lista dei repository]]
* [[Apt-file: ricerca all'interno dei pacchetti | '''Apt-file''': ricerca all'interno dei pacchetti]]
* [[Apt-listbugs: come monitorare i bug | '''Apt-listbugs''': come monitorare i bug]]
* [[Apt-zip: aggiornamenti senza una connessione veloce | '''Apt-zip''': aggiornamenti senza una connessione veloce]]
* [[Apt-spy: trovare i mirror pi� veloci | '''Apt-spy''': trovare i mirror pi� veloci]]
* [[APT uso avanzato: mixare releases diverse]]
* http://guide.debianizzati.org/images/swirl.png [[Impedire l' aggiornamento di un pacchetto]]
* [[Aptitude | '''Aptitude''': come amministrare i pacchetti]]


=== Creazione e modifica dei pacchetti ===
; SCHED_NORMAL: questa è, se non diversamente specificato, priorità dei processi in Linux. I processi di questa classe possono avere un [[nice]] da 99 (''minima'') a -20 (''massima'') che indica la loro priorità all'interno della classe SCHED_NORMAL
* http://guide.debianizzati.org/images/swirl.png [[Make-jpkg: Pacchettiziamo Java Sun| '''Make-jpkg''': Pacchettiziamo Java Sun]]
* [[Pacchetti binari e sorgenti]]
* [[Applicare una patch ad un pacchetto Debian]]
* [[Apt-build: ottimizzazione dei pacchetti | '''Apt-build''': ottimizzazione dei pacchetti]]
* [[Dpkg-sig: Firma dei packages .deb |  '''Dpkg-sig''': Firma dei packages .deb]]
* [[Pacchetizzare un tema per Bootsplash]]
* [[Backport da unstable in testing]]
* [[Pbuilder: compilazione in ambienti puliti]]


=== Gestione dei pacchetti Lato Server ===
; SCHED_BATCH : questa priorità viene usata per processi non interattivi (batch). I processi di questa classe avranno priorità inferiore a qualsiasi processo SCHED_NORMAL.
* [[Apt-Proxy: un proxy per i pacchetti Debian| '''Apt-Proxy''': un proxy per i pacchetti Debian]]
* [[Debmirror: creiamo un mirror Debian |'''Debmirror''': creiamo un mirror Debian]]
* [[Creare un Repository Debian]]
* [[Gestione di un repository con debarchiver]]
* [[Usare apt-cacher per creare una cache dei pacchetti usabile in una LAN]]
* [[Dupload per l'upload dei pacchetti Debian]]


==Configurazione Sistema==
; SCHED_FIFO: usata per processi realtime. Un processo SCHED_FIFO avrà priorità superiore ad ogni altro processo (anche SCHED_NORMAL con nice -20). Normalmente processi con tali privilegi possono essere lanciati solo da root a meno di non usare [[Low-latency_2.6_kernel_per_applicazioni_audio_realtime#Modalit.C3.A0_realtime_e_realtime_scheduling|particolari tecniche]] per permettere anche a normali utenti di eseguire applicazioni realtime. I processi all'interno di questa classe possono avere una priorità da 0 (''minima'') a 99 (''massima'').
===Kernel===
* [[Un kernel UNIX libero: Linux]] ''(stub)''
* http://guide.debianizzati.org/images/swirl.png [[Debian Kernel Howto]]
* [[Esempio configurazione kernel]]
* [[Kernel2.6.10 - Framebuffer - Gensplash Patch]]
* [[Kernel 2.6 su Debian Woody]]
* [[Compilazione Kernel 2.6.11 con Bootsplash]]
* [[Pagina di manuale di module-assistant|Pagina di manuale di '''<tt>module-assistant</tt>''']]
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]
* [[Script: Confronto Configurazioni Kernel]]
* [[Patch Con Kolivas: incrementare le prestazioni desktop|Patch '''Con Kolivas''': incrementare le prestazioni '''desktop''']]


===Sistema===
Le patch <tt>-ck</tt> introducono due ulteriori livelli:
* [[SysV | Il sistema SysV per la gestione dei Runlevel]]
* [[Udev e Debian]]
* [[Configurare il server X in Debian GNU/Linux]]
* [[Linux Admin Quick Reference]]
* [[Debian: accelerare GTK con Cairo e Glitz]]
* [[Software Raid 1: configurazione e verifiche|'''Software Raid 1''': configurazione e verifiche]]


===Applicazioni Esterne===
; SCHED_ISO : questa è la priorità chiamata ''soft realtime''. Infatti i processi di questa classe avranno priorità superiore ai processi SCHED_NORMAL ma non sono necessari i privilegi di root per eseguire programmi con questa priorità. Potremmo impostare ad esempio il nostro player audio preferito su SCHED_ISO, e non importa quanto sia carico il sistema non avremo mai salti nell'audio.
* [[Pacchettizzare ed installare Xorg su Debian Sid]]
* [[Installazione Qemu con supporto accelerazione Kqemu]]
* [[ePSXe Emulatore Playstation]]
* [[Installare OpenOffice2 su Debian Etch]]
* [[DVD Backup: xDVDShrink per Debian]]


===Altro===
; SCHED_IDLEPRIO: questa classe di processi viene eseguita solo quando il processore è in IDLE. Potremo lanciare compilazioni di kernel, aggiornamenti di sistema, pesanti cron jobs usando questa priorità e non noteremo il benché minimo degrado delle prestazioni durante il nostro utilizzo interattivo.
* [[Dual Boot Debian-Altra distribuzione Linux]]
* [[Dual Boot Linux-Windows|Dual Boot Linux-Windows: usare il bootloader di windows]]
* [[Logging su MySQL]]
* [[Password sicure: la base della sicurezza informatica]]
* [[Script Bash per Avvio e Visualizzazione dati Seti@home]]


===Tips and Tricks===
Quando lanciamo un processo in Linux questo sarà automaticamente SCHED_NORMAL. Per lanciare processi con altre classi di priorità bisogna usare gli <tt>schedtool</tt>. E' presente il seguente repository per debian:
====Bash====
* [[Bash tips]]: un elenco di trucchetti sull'uso interattivo e sullo scripting Bash
* [[Colorare bash]]
* [[Come abilitare il completamento automatico 'avanzato']]
* [[Un logout con schermo pulito]]
* [[Bash Script: Cambiare i permessi ricorsivamente]]
* [[Due simpatici login: welcome2l e linuxlogo]]


====Firefox====
deb http://users.tpg.com.au/sigm/debian sid main
* [[Firefox: Disattivare la ricerca con il tasto centrale]]
* [[Velocizzare Firefox per la banda larga]]
* [[Il vostro motore di ricerca da Firefox]]
* [[Aggiungere un motore di ricerca al quicksearch di Firefox]]


====Altro====
''(è indicato per <tt>sid</tt> ma va benissimo anche per <tt>etch</tt>)''
* [[Convertire immagini .nrg in immagini .iso]]
* [[Nautilus: navigare con una sola finestra]]
* [[Associare a Thunderbird il browser preferito]]
* [[Antispam in Evolution con Bogofilter]]
* [[Impostare la lingua italiana nel sistema]]
* [[Impostare  e modificare data e ora]]
* [[Impostare e modificare il layout della tastiera]]
* [[Abilitare_Xinerama | Multi monitor con Xinerama]]
* [[Abilitare ESound con ALSA in Gnome]]
* [[Cambiare il Tema dei Cursori per il Mouse]]
* [[Xfce e shutdown da utente]]
* [[Personalizzare il comportamento delle finestre con Devil's Pie]]
* [[Gimp: rendere un logo trasparente|'''Gimp''': rendere un logo trasparente]]
* [[Eseguire comandi con gli shortcuts di Gnome]]


==Networking==
Ecco alcuni esempi:
===Debian Server===
====Condivisione risorse====
* [[Directory shared tra macchine linux (nfs)]]
* [[Condivisione risorse con Samba]]
* [[sshfs | Montare una directory remota con sshfs]]
* [[Unison e la sincronizzazione di directory]]


====Mailing====
schedtool -D -e apt-get dist-upgrade # aggiornare in modalità SCHED_IDLEPRIO
* [[Mail Server Sicuro con Postfix]]


====Http====
schedtool -I -e xmms                # xmms in modalità SCHED_ISO
* [[Server Web Casalingo]]
* [[LAMP: Linux, Apache, MySQL e PHP]]
* [[XAMPP: Linux, Apache, MySQL e PHP facili]]
* [[Debian MapServer/MapScript]]


===Amministrazione===
schedtool -I $$                      # trasforma la shell corrente in SCHED_ISO
====Gestione Remota/Locale====
* [[Wake On Lan | '''Wake On Lan''' per accendere i propri PC a distanza tramite la LAN]]
* [[Debian e il controllo di servizi e demoni]]
* [[Gestione della banda in Apache]]
* [[Ssh e autenticazione tramite chiavi]]
* [[Inetd e i servizi di rete]]


====Connettivita'====
Per ulteriori informazioni rimando alla semplice e chiara pagina: <tt>man schedtool</tt>
* [[Condividere la connessione a internet]]


===Sicurezza===
== Installazione ==
====Firewalling====
* [[Debian e iptables]]
* [[Firewall Builder]]
* [[Parametri a run-time per Netfilter]]


====Monitoraggio & Scanning====
Le patch <tt>-ck</tt> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:
* [[Monitoriamo il Sistema]]
* [[Mrtg: monitoriamo la banda]]
* [[Cacti | Cacti: monitor di rete, per pi� computer]]
* [[Munin]]


====Proxy====
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/
* [[Privoxy: navigazione sicura a prova di spam]]


====Tunneling====
e si applicano al primo kernel vanilla stabile di ogni serie. Ad esempio l'ultimo kernel stabile è attualmente il 2.6.16.4 ma le patch <tt>-ck</tt> si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.6.16.4.
* [[Openvpn]]


== Hardware ==
Attualmente l'ultimo patch set <tt>-ck</tt> è il [http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/2.6.16/2.6.16-ck5/ 2.6.16-ck5], ed il file da scaricare e porre in <tt>/usr/src/</tt> è il seguente:
=== Fotocamere digitali e dispositivi di memorizzazione di massa removibili ===
* [[Usare Fotocamere Digitali|Usare Fotocamere Digitali (libgphoto2)]]
* [[Usare Fotocamere Digitali (usb-storage)]]
* [[UsbMount: Gestione automatizzata delle periferiche usb di memorizzazione]]
* [[Debian e iPod]]


=== Modem e periferiche di rete ===
* [http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/2.6.16/2.6.16-ck5/patch-2.6.16-ck5.bz2 patch-2.6.16-ck5.bz2]


* [[Debian e i Modem ADSL]]
''Nel seguito si userà, come esempio, il kernel 2.6.16 e le patch <tt>-ck5</tt> per tale kernel.''


==== Modem USB ADSL ====
Una volta scompattati i sorgenti del kernel vanilla in <tt>/usr/src/</tt> si possono patchare con:
* [[Installare i driver conexant accessrunner]]
* [[Installare i driver eagle-adsl]]
* [[Installare i driver eci-adsl]] ''(stub)''
* [[Installare i driver unicorn (BeWAN)]] ''(stub)''
* [[Modem adsl Telindus ND220]]
* [[Modem adsl Aethra Starmodem]]
* [[Modem adsl Fastrate 100 USB]]


==== Modem Ethernet ====
$ cd /usr/src/linux-2.6.16/
* ''Inserire qui eventuali guide su modem ethernet''
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1


==== Modem dial-up 56K ====
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:
* ''Inserire qui eventuali guide su modem a 56K''
$ cd /usr/src
$ mv linux-2.6.16 linux-2.6.16-ck5


==== Schede di rete Wireless ====
E' consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:
* [[Wireless Support | Informazioni sul supporto alle periferiche Wireless]]
* [[Script Bash abilitazione scheda wireless]]
* [[Intel PRO/Wireless 2200BG]]
* [[NdisWrapper | NdisWrapper: Usiamo i driver di Windows per il WLan con GNU/Linux]]
* [[Madwifi | Installazione Driver Madwifi]]


=== Schede Video ===
$ cd linux-2.6.16-ck5
* [[Installazione Driver ATI per schede ATI RADEON MOBILITY 9700 SE]]
$ cp /boot/config-2.6.16-vanilla .
$ make oldconfig


=== Stampanti ===
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.
==== Stampanti USB ====
* ''Inserire eventuali guide su come far funzionare stampanti con porta USB''


==== Stampanti con porta parallela ====
A questo punto è possibile compilare il kernel, ovviamente [[Debian Kernel Howto|alla debian-way]]. Se abbiamo già in esecuzione un kernel <tt>-ck</tt> possiamo lanciare la compilazione in modalità SCHED_IDLEPRIO:
* [[Introduzione all'installazione di stampanti con porta parallela]]


==== Stampanti bluetooth ====
$ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop \
* [[Introduzione all'installazione di stampanti bluetooth]]
  --revision 0.1 kernel_image


=== Scanner ===
In questo modo non ci accorgeremo nemmeno della compilazione durante il normale utilizzo interattivo del computer, infatti la compilazione avverrà '''solo''' quando la cpu sarà in idle. Il tempo di compilazione aumenta in maniera impercettibile. Verrà anche stampata la durata della compilazione grazie al comando <code>time</code>.
* [[Epson Perfection 2480 photo - usb scanner]]
* ''Inserire qui eventuali altre guide su come far funzionare scanner con Debian''
Se non abbiamo un kernel <tt>-ck</tt>, ma un [[kernel]] abbastanza recente (penso dal 2.6.15 in su, ma non sono sicuro) potremo usare la modalità SCHED_BATCH, cambiando semplicemente l'opzione <tt>-D</tt> con <tt>-B</tt>. In questo modo la compilazione avrà priorità minore di tutti i processi SCHED_NORMAL. Durante la compilazione il sistema sarà abbastanza responsivo anche se non come nel caso precedente.


=== Palmari e cellulari ===
Ultima possibilità, nel caso abbiate un kernel vecchio o non abbiate installato gli <tt>schedtool</tt> è quella di lanciare la compilazione con nice 19 (la più bassa priorità di un processo SCHED_NORMAL):
* [[Debian e Nokia 7210: uso di gnokii e gestione degli sms]]
* [[UMTS/GPRS PCMCIA card (3g)]]
* [[Usare lcd4linux con un Palm]]


=== Altro hardware ===
$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop \
* [[I2c e lm-sensors|'''I2c e lm-sensors''': usare i sensori della scheda madre]]
  --revision 0.1 kernel_image
* [[Gestire gli HD: stato di salute, badblocks e ripristino dati|'''Gestire gli HD:''' stato di salute, badblocks e ripristino dati]]


==Portatili==
Ovviamente non è necessario compilare ''a bassa priorità'', ma i casi precedenti sono stati riportati come esempio pratico di utilizzo degli <tt>schedtool</tt> e delle funzionalità delle patch <tt>-ck</tt>.
===Laptop Debianizzati===
Troverete di seguito i resoconti d'installazione di Debian su dei portatili:


* [[Debian on an HP nx8220 | Debian on an HP nx8220]]
Per saperne di più sulla compilazione del kernel e la ''debian way'': [[Debian Kernel Howto]].
* [[Debian on a presario 2141EU | Compaq Presario 2100 (2141EU)]]
* [[Debian on a compaq Presario 2154EA | Compaq Presario 2100 (2154EA)]]
* [[Debian on a Toshiba Satellite M30X-113| Toshiba M30x-113]] ''(stub)''
* [[Debian on a HP Compaq NX6110| HP Compaq NX6110]]
* [[Debian on an HP pavilion zv5422EA| HP pavilion zv5000 (zv5422EA)]]


===Altro===
== Links ==
* [[Powernowd: CpuScaling per AMD]]
'''''Con Kolivas''''':
* [[Cpufreqd: Cpuscaling per Intel Pentium M]]
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]
* [[ACPI e DSDT]]
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]
* [[Synaptics touchpad]]
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]
* Inserire qui anche link a risorse in italiano sui portatili


==Debian Live==
'''''Kernel''''':
* [[Rimasterizzare una knoppix]]
* [[Debian Kernel Howto]]
* [[Damn Small Linux su chiavetta usb]]
* [[Esempio configurazione kernel]]
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]


==Crittografia==
----
* [[Crittografia e Steganografia - L'Arte di nascondere le informazioni]]
: [[Utente:TheNoise|~ The Noise]] 03:26, 14 Apr 2006 (EDT)
* [[Chiavi simmetriche e chiavi pubbliche]]


==Varie==
[[Categoria:Kernel]][[Categoria:Desktop]]
* [[Debian Fun]]

Versione delle 21:45, 18 apr 2006

Introduzione

Le patch Con Kolivas (-ck) per il kernel di Linux sono una serie di patch che incrementano notevolmente le prestazioni desktop implementando uno scheduler innovativo (staircase), ottimizzando l'uso dello swap (swap-prefetching) e del sotto-sistema disco, e aggiungendo dei nuovi livelli di priorità al di fuori di quelli tradizionalmente impostabili con nice.

Con queste patch si ottiene un sistema desktop estremamente responsivo ed ottimizzato per l'uso interattivo.

Se vi siete chiesti come mai Gentoo o Archlinux sono così veloci su desktop la risposta sta principalmente nell'inclusione delle patch -ck nei loro kernel di default.

Con Kolivas mantiene anche un altro insieme di patch, chiamate -cks, che sono specificatamente pensate per ottimizzare le prestazioni dei server.

Descrizione della patch

Staircase Scheduler

Le patch -ck includono l'innovativo staircase scheduler. Questo è uno schedule con una logica e una implementazione più semplice di quello usato attualmente nel kernel Linux (ingo scheduler) che si presta ottimamente all'uso interattivo, senza penalizzare le prestazioni server. Attualmente è in discussione la possibile sostituzione dello scheduler di Linux con lo staircase.

Le uniche perplessità sembrano essere sul fatto se lo staircase scheduler abbia prestazioni uguali al ingo scheduler su sistemi multiprocessori (sui quali lo scheduler attuale è altamente ottimizzato). Test prestazionali sono attualmente in corso.

Ecco come Con Kolivas descrive lo staircase scheduler:

This is a complete rewrite of the scheduler policy for normal tasks built on top of the O(1) scheduler. The aim was to make a very lean simple but effective design scheduler that is intrinsically interactive and responsive instead of modifying an existing design with tweaks to make it interactive.

Swap prefetching

Altra patch inclusa è la così detta swap prefetching. In pratica questa patch ottimizza l'uso dello swap precaricando delle pagine non appena della ram risulta disponibile (non quando le pagine sono richieste come sul kernel vanilla), e questo velocizza notevolmente il passaggio tra le grosse applicazioni se ad esempio se ne chiude una. Inoltre vengono tenute in swap anche pagine caricate in ram in modo da rendere immediato un successivo swap-out.

Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare di prestazioni.

Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO

Normalmente i processi in Linux hanno priorità SCHED_NORMAL. I processi di questa classe possono avere un nice da 19 a -20 che indica la loro priorità all'interno della classe SCHED_NORMAL. Su Linux sono presenti altre due classi di priorità:

SCHED_NORMAL
questa è, se non diversamente specificato, priorità dei processi in Linux. I processi di questa classe possono avere un nice da 99 (minima) a -20 (massima) che indica la loro priorità all'interno della classe SCHED_NORMAL
SCHED_BATCH
questa priorità viene usata per processi non interattivi (batch). I processi di questa classe avranno priorità inferiore a qualsiasi processo SCHED_NORMAL.
SCHED_FIFO
usata per processi realtime. Un processo SCHED_FIFO avrà priorità superiore ad ogni altro processo (anche SCHED_NORMAL con nice -20). Normalmente processi con tali privilegi possono essere lanciati solo da root a meno di non usare particolari tecniche per permettere anche a normali utenti di eseguire applicazioni realtime. I processi all'interno di questa classe possono avere una priorità da 0 (minima) a 99 (massima).

Le patch -ck introducono due ulteriori livelli:

SCHED_ISO
questa è la priorità chiamata soft realtime. Infatti i processi di questa classe avranno priorità superiore ai processi SCHED_NORMAL ma non sono necessari i privilegi di root per eseguire programmi con questa priorità. Potremmo impostare ad esempio il nostro player audio preferito su SCHED_ISO, e non importa quanto sia carico il sistema non avremo mai salti nell'audio.
SCHED_IDLEPRIO
questa classe di processi viene eseguita solo quando il processore è in IDLE. Potremo lanciare compilazioni di kernel, aggiornamenti di sistema, pesanti cron jobs usando questa priorità e non noteremo il benché minimo degrado delle prestazioni durante il nostro utilizzo interattivo.

Quando lanciamo un processo in Linux questo sarà automaticamente SCHED_NORMAL. Per lanciare processi con altre classi di priorità bisogna usare gli schedtool. E' presente il seguente repository per debian:

deb http://users.tpg.com.au/sigm/debian sid main

(è indicato per sid ma va benissimo anche per etch)

Ecco alcuni esempi:

schedtool -D -e apt-get dist-upgrade # aggiornare in modalità SCHED_IDLEPRIO
schedtool -I -e xmms                 # xmms in modalità SCHED_ISO
schedtool -I $$                      # trasforma la shell corrente in SCHED_ISO

Per ulteriori informazioni rimando alla semplice e chiara pagina: man schedtool

Installazione

Le patch -ck possono essere scaricate da http://www.kernel.org, al seguente indirizzo:

e si applicano al primo kernel vanilla stabile di ogni serie. Ad esempio l'ultimo kernel stabile è attualmente il 2.6.16.4 ma le patch -ck si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.6.16.4.

Attualmente l'ultimo patch set -ck è il 2.6.16-ck5, ed il file da scaricare e porre in /usr/src/ è il seguente:

Nel seguito si userà, come esempio, il kernel 2.6.16 e le patch -ck5 per tale kernel.

Una volta scompattati i sorgenti del kernel vanilla in /usr/src/ si possono patchare con:

$ cd /usr/src/linux-2.6.16/
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1

Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:

$ cd /usr/src
$ mv linux-2.6.16 linux-2.6.16-ck5

E' consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:

$ cd linux-2.6.16-ck5
$ cp /boot/config-2.6.16-vanilla .
$ make oldconfig

A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.

A questo punto è possibile compilare il kernel, ovviamente alla debian-way. Se abbiamo già in esecuzione un kernel -ck possiamo lanciare la compilazione in modalità SCHED_IDLEPRIO:

$ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop \
  --revision 0.1 kernel_image

In questo modo non ci accorgeremo nemmeno della compilazione durante il normale utilizzo interattivo del computer, infatti la compilazione avverrà solo quando la cpu sarà in idle. Il tempo di compilazione aumenta in maniera impercettibile. Verrà anche stampata la durata della compilazione grazie al comando time.

Se non abbiamo un kernel -ck, ma un kernel abbastanza recente (penso dal 2.6.15 in su, ma non sono sicuro) potremo usare la modalità SCHED_BATCH, cambiando semplicemente l'opzione -D con -B. In questo modo la compilazione avrà priorità minore di tutti i processi SCHED_NORMAL. Durante la compilazione il sistema sarà abbastanza responsivo anche se non come nel caso precedente.

Ultima possibilità, nel caso abbiate un kernel vecchio o non abbiate installato gli schedtool è quella di lanciare la compilazione con nice 19 (la più bassa priorità di un processo SCHED_NORMAL):

$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop \
  --revision 0.1 kernel_image

Ovviamente non è necessario compilare a bassa priorità, ma i casi precedenti sono stati riportati come esempio pratico di utilizzo degli schedtool e delle funzionalità delle patch -ck.

Per saperne di più sulla compilazione del kernel e la debian way: Debian Kernel Howto.

Links

Con Kolivas:

Kernel:


~ The Noise 03:26, 14 Apr 2006 (EDT)