|
|
(24 versioni intermedie di 6 utenti non mostrate) |
Riga 1: |
Riga 1: |
| == Introduzione == | | {{Versioni compatibili|Jessie|Stretch|Buster}} |
| 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>.
| | __TOC__ |
| | ==Preparazione: installazione dei programmi== |
|
| |
|
| Con queste patch si ottiene un sistema desktop estremamente responsivo ed ottimizzato per l'uso interattivo.
| | Per configurare i tasti multimediali da Linux servono essenzialmente due programmi: '''<code>xev</code>''' e '''<code>xmodmap</code>'''. Prima di tutto, quindi, dobbiamo installare i pacchetti con [[privilegi di amministrazione]]: |
| | <pre># apt install x11-utils x11-xserver-utils</pre> |
| | il primo (<code>x11-utils</code>) conterà il programma <code>xev</code>, il secondo conterrà invece il programma <code>xmodmap</code>. |
|
| |
|
| 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.
| | ==Configurazione layout tasti== |
| | Dopo aver installato questi programmi la prima cosa da fare è scoprire i keycode relativi ai tasti che ci interessano e questo verrà fatto con <code>xev</code>. Apriamo una console e scriviamo <code>xev</code>, a programma lanciato premiamo il tasto che ci interessa configurare e dovremmo avere un output del genere: |
| | <pre> |
| | KeyRelease event, serial 29, synthetic NO, window 0x1c00001, |
| | root 0x75, subw 0x0, time 1436703, (287,442), root:(292,515), |
| | state 0x0, keycode 236 (keysym 0x0, NoSymbol), same_screen YES, |
| | XLookupString gives 0 bytes: |
| | </pre> |
| | da queste righe otteniamo il keycode (nell'esempio 236) e notiamo anche che non gli è associato nessun nome (<code> ..., NoSymbol</code>). Adesso dobbiamo associare un nome al tasto riferito da quel keycode. Quest'operazione deve essere fatta modificando il file <code>~/.xmodmaprc</code> che se non esiste va creato. |
|
| |
|
| Con Kolivas mantiene anche un altro insieme di patch, chiamate <tt>-cks</tt>, che sono specificatamente pensate per ottimizzare le prestazioni dei server.
| | In questo file vanno inserite righe del tipo: |
| | <pre> |
| | keycode num = nome |
| | </pre> |
| | dove <code>num</code> è il keycode ottenuto con <code>xev</code> e la stringa ''nome'' dovrà essere del tipo <code>FXX</code> dove al posto di <code>XX</code> dobbiamo inserire un numero maggiore di dodici. |
|
| |
|
| == Descrizione della patch ==
| | Adesso lanciando da shell <code>xmodmap ~/.xmodmaprc</code> e rilanciando <code>xev</code> dovremmo ottenere: |
| | <pre> |
| | KeyPress event, serial 26, synthetic NO, window 0x2400001, |
| | root 0x75, subw 0x0, time 267243, (597,651), root:(603,723), |
| | state 0x0, keycode 236 (keysym 0xffca, F13), same_screen YES, |
| | XLookupString gives 0 bytes: |
| | </pre> |
|
| |
|
| === Staircase Scheduler ===
| | Abbiamo abbinato al tasto un nome (nell'esempio F13). |
|
| |
|
| 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.
| | ==Associazione programmi== |
| | Ora potremmo voler far eseguire un'azione al tasto configurato, questa cosa la si può fare in svariati modi: se si ha Gnome dal menu ''Desktop -> Preferenze -> Scorciatoie da tastiera'' associando al tasto un'azione predefinita, e abbiamo finito. Similmente per altri ambienti desktop. |
|
| |
|
| 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.
| | ===In ambienti grafici minimali=== |
| | Invece, se usiamo un ambiente grafico minimale, ci potrebbe servire un programma che permette di associare a dei tasti o ad una combinazione di tasti una determinata azione. Di questi ultimi ne esistono vari: in questo tutorial useremo <code>xbindkeys</code>, la cui configurazione è molto semplice. |
|
| |
|
| Ecco come Con Kolivas descrive lo ''staircase scheduler'':
| | Anzitutto bisogna installarlo: |
| | <pre> |
| | # apt install xbindkeys |
| | </pre> |
|
| |
|
| ''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.''
| | Fatto ciò bisogna modificare il file <code>~/.xbindkeysrc</code>, che è formato da righe del tipo: |
| | <pre> |
| | "comando o programma da eseguire" |
| | tasto o combinazione di tasti associata |
| | </pre> |
| | per esempio: |
| | <pre> |
| | "firefox" |
| | Control+F13 // si potevano usare anche Shift o Alt |
| | </pre> |
| | Modificato il file bisogna lanciare da shell <code>xbindkeys -f ~/.xbindkeysrc</code> e tutto dovrebbe funzionare. |
|
| |
|
| === Swap prefetching ===
| | Ora però dobbiamo fare in modo che il mapping dei tasti multimediali e l'associazione del programma tramite <code>xbindkeys</code> avvenga ogni volta che facciamo il login. La procedura esatta varia a seconda dell'ambiente utilizzato. |
| 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.
| | {{Autori |
| | | |Autore = [[Utente:Itbhp|itbhp]] 11:07, 21 Apr 2006 (EDT) |
| === 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�:
| | [[Categoria:Tastiere]][[Categoria:Ottimizzazione del sistema]] |
| | |
| ; 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 [[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'').
| |
| | |
| Le patch <tt>-ck</tt> 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 <tt>schedtool</tt>. E' presente il seguente repository per debian:
| |
| | |
| deb http://users.tpg.com.au/sigm/debian sid main
| |
| | |
| ''(� indicato per <tt>sid</tt> ma va benissimo anche per <tt>etch</tt>)''
| |
| | |
| 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: <tt>man schedtool</tt>
| |
| | |
| == Installazione ==
| |
| | |
| Le patch <tt>-ck</tt> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:
| |
| | |
| * http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/
| |
| | |
| 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.16.4.
| |
| | |
| 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:
| |
| | |
| * [http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/2.6.16/2.6.16-ck5/patch-2.6.16-cks5.bz2 patch-2.6.16-cks5.bz2]
| |
| | |
| ''Nel seguito si user�, come esempio, il kernel 2.6.16 e le patch <tt>-ck5</tt> per tale kernel.''
| |
| | |
| Una volta scompattati i sorgenti del kernel vanilla in <tt>/usr/src/</tt> 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 [[Debian Kernel Howto|alla debian-way]]. Se abbiamo gi� in esecuzione un kernel <tt>-ck</tt> 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 <code>time</code>.
| |
|
| |
| 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.
| |
| | |
| 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):
| |
| | |
| $ 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 <tt>schedtool</tt> e delle funzionalit� delle patch <tt>-ck</tt>.
| |
| | |
| Per saperne di pi� sulla compilazione del kernel e la ''debian way'': [[Debian Kernel Howto]].
| |
| | |
| == Links ==
| |
| '''''Con Kolivas''''':
| |
| * [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]
| |
| * [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]
| |
| * [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]
| |
| | |
| '''''Kernel''''':
| |
| * [[Debian Kernel Howto]]
| |
| * [[Esempio configurazione kernel]]
| |
| * [[Low-latency 2.6 kernel per applicazioni audio realtime]]
| |
| | |
| ----
| |
| : [[Utente:TheNoise|~ The Noise]] 03:26, 14 Apr 2006 (EDT)
| |
| | |
| [[Categoria:Kernel]][[Categoria:Desktop]] | |
Versioni Compatibili Debian 8 "jessie" Debian 9 "stretch" Debian 10 "buster"
|
Preparazione: installazione dei programmi
Per configurare i tasti multimediali da Linux servono essenzialmente due programmi: xev
e xmodmap
. Prima di tutto, quindi, dobbiamo installare i pacchetti con privilegi di amministrazione:
# apt install x11-utils x11-xserver-utils
il primo (x11-utils
) conterà il programma xev
, il secondo conterrà invece il programma xmodmap
.
Configurazione layout tasti
Dopo aver installato questi programmi la prima cosa da fare è scoprire i keycode relativi ai tasti che ci interessano e questo verrà fatto con xev
. Apriamo una console e scriviamo xev
, a programma lanciato premiamo il tasto che ci interessa configurare e dovremmo avere un output del genere:
KeyRelease event, serial 29, synthetic NO, window 0x1c00001,
root 0x75, subw 0x0, time 1436703, (287,442), root:(292,515),
state 0x0, keycode 236 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
da queste righe otteniamo il keycode (nell'esempio 236) e notiamo anche che non gli è associato nessun nome ( ..., NoSymbol
). Adesso dobbiamo associare un nome al tasto riferito da quel keycode. Quest'operazione deve essere fatta modificando il file ~/.xmodmaprc
che se non esiste va creato.
In questo file vanno inserite righe del tipo:
keycode num = nome
dove num
è il keycode ottenuto con xev
e la stringa nome dovrà essere del tipo FXX
dove al posto di XX
dobbiamo inserire un numero maggiore di dodici.
Adesso lanciando da shell xmodmap ~/.xmodmaprc
e rilanciando xev
dovremmo ottenere:
KeyPress event, serial 26, synthetic NO, window 0x2400001,
root 0x75, subw 0x0, time 267243, (597,651), root:(603,723),
state 0x0, keycode 236 (keysym 0xffca, F13), same_screen YES,
XLookupString gives 0 bytes:
Abbiamo abbinato al tasto un nome (nell'esempio F13).
Associazione programmi
Ora potremmo voler far eseguire un'azione al tasto configurato, questa cosa la si può fare in svariati modi: se si ha Gnome dal menu Desktop -> Preferenze -> Scorciatoie da tastiera associando al tasto un'azione predefinita, e abbiamo finito. Similmente per altri ambienti desktop.
In ambienti grafici minimali
Invece, se usiamo un ambiente grafico minimale, ci potrebbe servire un programma che permette di associare a dei tasti o ad una combinazione di tasti una determinata azione. Di questi ultimi ne esistono vari: in questo tutorial useremo xbindkeys
, la cui configurazione è molto semplice.
Anzitutto bisogna installarlo:
# apt install xbindkeys
Fatto ciò bisogna modificare il file ~/.xbindkeysrc
, che è formato da righe del tipo:
"comando o programma da eseguire"
tasto o combinazione di tasti associata
per esempio:
"firefox"
Control+F13 // si potevano usare anche Shift o Alt
Modificato il file bisogna lanciare da shell xbindkeys -f ~/.xbindkeysrc
e tutto dovrebbe funzionare.
Ora però dobbiamo fare in modo che il mapping dei tasti multimediali e l'associazione del programma tramite xbindkeys
avvenga ogni volta che facciamo il login. La procedura esatta varia a seconda dell'ambiente utilizzato.