Patch Con Kolivas: incrementare le prestazioni desktop

Da Guide@Debianizzati.Org.
Versione del 13 apr 2006 alle 18:14 di TheNoise (discussione | contributi) (scritta prima parte)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca
Document-page-setup.png Attenzione: questo articolo è ancora incompleto e in fase di scrittura da parte del suo autore.

Sentitevi liberi di contribuire, proponendo modifiche alla guida tramite l'apposita pagina di discussione, in modo da non interferire con il lavoro portato avanti sulla voce. Per altre informazioni si rimanda al template.


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 resposivo ed ottimizzato per l'uso interattivo.

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

Descrizione della patch

Staicase 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 allo scheduler attuale su sistemi multiprocessori (sui quali lo scheduler attuale è altamente ottimizzato).

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 pagie 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_IDLE

Normalmente i processi in linux hanno priorità SCHED_NORMAL. I processi di questa classe possono avere un nice da 99 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 privileggi 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 privileggi 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 sitema non avremo mai salti nell'audio.
SCHED_IDLE
questa classe di processi viene eseguita solo quando il processore è in IDLE. Potremo lanciare compilazioni di kernel, aggiornamenti di sitema, pesanti cron jobs usando questa priorità e non noterermo 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 schedtools. E' presente il seguente repository per debian:

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

(anche se indicato per sid anche su etch funziona senza problemi)

Ecco alcuni esempi:

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

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

Installazione

Le patch ck possono essere scaricate da http://www.kernel.org:

e si applicano al primo kernel vanilla stabile di ogni serie. Ad esmpio 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.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:

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

$ cd /usr/src/linux-2.6.XX/
$ bzcat ../patch-2.6.XX-ckY.bz2 | patch -p1

Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da ripecchiare 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 kenrnel, ovviamente alla debian-way. Usiamo la priorità più bassa possibile, se siamo già su un kernel ck:

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

In questo modo la compilazione non interferirà con il normale utlizzo interattivo del computer e avremo anche stampata la durata della compilazione con time.

Links