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)
m (fix broken links)
 
(41 versioni intermedie di 8 utenti non mostrate)
Riga 1: Riga 1:
__NOTOC__
{{Versioni compatibili|Jessie|Testing_2015|Unstable_2015}}
{|style="-moz-border-radius: 0.5em; width:100%; margin-top:+.7em; background-color:#F9F9FF; border: 1px solid #ccc"
== Introduzione ==
|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.
Le patch ''Con Kolivas'' (<code>-ck</code>) per il [[kernel]] di Linux sono una serie di patch pensate per incrementare le prestazioni desktop, principalmente tramite l'implementazione di uno scheduler in grado di offrire latenze molto basse. <br/>
</div>
Il primo patchset ha introdotto l'uso di 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>. <br/>
|-
L'ultima di queste patch è stata sviluppata per il kernel 2.6.22. Dopo questa versione l'amareggiato Con Kolivas ha abbandonato lo sviluppo della patch a causa di dissidi con altri sviluppatori del kernel. <br/>
|}
Parte del design del ck è stato comunque inserito nel kernel mainline con la creazione di un nuovo scheduler, il CFS, che ha rimpiazzato il vecchio. <br/>
<!-- ----------Portals Follow----------------------------- -->
Dopo qualche anno di inattività Con Kolivas, dicendosi insoddisfatto dalle prestazioni offerte dal CFS, ha ripreso lo sviluppo di un nuovo patchset; questo patchset, tutt'ora mantenuto da CK, utilizza un nuovo scheduler a bassa latenza, il BFS, pensato principalmente per un uso desktop. <br/>
|style="width:11%;font-size:95%;color:#000"|
Il primo paragrafo di questa guida è dedicato a una breve descrizione del vecchio patchset, con particolare attenzione alle caratteristiche che non son più incluse nel BFS. Il resto della guida spiega come installare e utilizzare le caratteristiche del nuovo scheduler.
* [[: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]]'''
|}


== Il primo patchset ==


;Staircase Deadline Scheduler


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.
Le patch <code>-ck</code> (per il kernel 2.6.21 o successivi) includevano l'innovativo scheduler '''''S'''taircase '''D'''eadline'' (chiamato semplicemente ''SD''). Questo scheduler è l'evoluzione del secondo scheduler dei processi scritto da zero da Con Kolivas (il primo scheduler chiamato ''Staircase'' è stato anch'esso molto innovativo). Le sue caratteristiche principali erano la sua ''fairness'' garantita (tutti i processi della stessa priorità consumano esattamente la stessa CPU) e la sua spiccata ''interattività''. Con Kolivas ha mostrato al mondo per la prima volta che uno scheduler per Linux completamente ''fair'' e con una interattività molto elevata (superiore al mainline) non era solo teoricamente ma anche praticamente possibile. Il vantaggio di un ''fair'' scheduler è la sua assoluta immunità a ''starvation'' che affiggeva lo scheduler mainline (ingosched) e (in misura minore) il vecchio ''Staircase''.  


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]].
Per maggiori dettagli tecnici su ''SD'':
* Con Kolivas Wiki: SD<sup>[[#Collegamenti esterni | [8]]]</sup>


Potete trovare un elenco completo delle guide '''Debianized''' in [[:Categoria:Debianized|questa pagina]].
Per un po' di storia sulla nascita, l'evoluzione e sulla ''competizione'' con un nuovo scheduler scritto da Ingo Molnar (CFS) inspirato dal successo di ''SD'' potete leggere:
 
Segue la lista completa delle guide attualmente presenti:
* The Rotating Staircase Deadline Scheduler<sup>[[#Collegamenti esterni | [9]]]</sup>
__TOC__
* RSDL hits a snag<sup>[[#Collegamenti esterni | [10]]]</sup>
* Schedulers: the plot thickens<sup>[[#Collegamenti esterni | [11]]]</sup>
 
;Swap prefetching
Altra patch inclusa era 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 le prestazioni.
 
== Lo scheduler BFS ==
 
=== Confronto tra BFS e Mainline===
 
Una delle caratteristiche importanti per uno scheduler di processi è la scalabilità; ad esempio se si aggiungono dei processori ad un sistema si richiede che il throughput aumenti in modo significativo ogni volta che viene aggiunto un nuovo processore, anche quando il loro numero diventa molto elevato. <br/>
Altre due caratteristiche desiderabili sono una buona reattività e la fairness (i processi vengono eseguiti secondo la loro priorità e a quelli con uguale priorità viene assegnata la stessa quota di cpu ). <br/>
L'attuale scheduler mainline (CFS) è stato pensato per ottenere buoni risultati in tutte queste caratteristiche: tuttavia per mantenere una buona scalabilità e garantire la fairness sono necessari complessi algoritmi di bilanciamento che deteriorano la reattività e il throughput.
 
La particolarità del BFS è che è stato progettato con l'unico obbiettivo di ottenere una spiccata reattività e basse latenze nell'uso desktop, senza preoccuparsi minimanente della scalabilità. <br/>
Lo scheduler pesca i processi da una unica coda globale in base alla priorità e alla deadline: questa semplice struttura garantisce la fairness senza bisogno di alcun algoritmo di bilanciamento, tutto a vantaggio della reattività e del throughput.
 
In sostanza il CFS è uno scheduler progettato per essere adatto a diversi utilizzi, dal desktop al server, (e di conseguenza non ottimizzato per nessuno di essi), mentre all'opposto il BFS si caratterizza come uno scheduler pensato e ottimizzato per un solo utilizzo, il desktop.
 
===Limiti e particolarità del BFS===
 
Prima di applicare la patch conviene valutare se questo scheduler è adatto all'hardware che si possiede e all'uso che si intende fare del proprio pc:
 
; Scalabilità
 
Il principale limite del BFS è la scalabilità: secondo alcuni test effettuati questo scheduler comincerà ad avere performance esponenzialmente decrescente sulle CPU con oltre 16 core, mentre al di sotto di questo numero ha una scalabilità anche migliore del CFS.
Notare che ai fini del calcolo del numero di core, contano i core logici e non quelli fisici (quindi una cpu 8 core con HT conterà come 16). <br/>
Un altro caso in cui il BFS potrebbe sotto-performare rispetto al mainline è quello di un pc costantemente sottoposto ad un elevato carico, ad esempio un server che deve eseguire un numero molto elevato di processi che si susseguono tra i loro.
 
; Overhead e jobservers
 
La mancanza di algoritmi per la scalabilità rende il BFS uno scheduler a basso overhead, una caratteristica che può essere molto utile con processori a basso consumo come quelli dei cellulari. <br/>
Un'altra situazione dove il basso overhead del BFS risulta vantaggioso è quando si compila del software usando l'opzione -j di make: di solito si usa -jn con n superiore al numero di core del processore, per esempio -j6 su un quad-core. Tuttavia col BFS usare -j4 su un processore quad-core è la scelta più veloce di qualsiasi altro numero scelto con lo scheduler mainline. <br/>
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.
 
; Cgroups e systemd
 
A causa di alcuni bug che si sono verificati nel periodo iniziale di sviluppo di systemd si è sparsa la leggenda che le patch BFS non sono compatibili col nuovo sistema di init. Questo non è vero, nel senso che è possibile usare un kernel patchato BFS e avviarlo con systemd; quello che è vero è che il BFS non implementa i CGROUPS e dunque non sarà possibile esercitare questo tipo di controllo sui processi utilizzando la apposita funzione di systemd.
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.
 
; Misurazione della performance
 
Se utilizzando la patch BFS notate dei valori di carico di cpu anomali, niente paura, almeno finchè il pc risponde ai comandi: infatti bisogna tenere conto che i due scheduler utilizzano un sistema di misurazione del carico della cpu differente e quindi i risultati non sono comparabili con quelli del mainline.
In particolare il CFS utilizza il <code>timer frequency</code> mentre il BFS utilizza <code>l'orologio TSC</code>, che è più accurato per i singoli processi ma può dare misurazioni del carico complessivo "sballate".
Se si vuole confrontare l'efficienza dei due scheduler nell'eseguire un certo lavoro conviene farlo basandosi sul tempo di esecuzione, ad esempio utilizzando il programma <code>time</code>.
 
=== 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. Ma su Linux sono presenti altre classi di priorità:
 
; SCHED_NORMAL: questa è, se non diversamente specificato, la priorità dei processi in Linux. I processi di questa classe possono avere un [[nice]] da 19 (''minima'') a -20 (''massima'') che indica la loro priorità all'interno della classe SCHED_NORMAL
 
; SCHED_BATCH : questa priorità è stata introdotta dal kernel 2.6.16 e 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.--> non c'è limite di tempo all'impegno della CPU da parte di questi processi che possono rimanere in esecuzione fin quando un processo con priorità più alta non assume il controllo della CPU. In questo caso il processo che perde il controllo si posiziona in cima alla lista dei processi in attesa (FIFO) con la stessa priorità. I processi all'interno di questa classe possono avere una priorità statica da 0 (''minima'') a 99 (''massima''). <br/>Bisogna fare attenzione se si utilizzano processi di questo tipo: infatti, in base al funzionamento appena descritto, lanciando un processo FIFO con massima priorità, può accadere di vedere esclusi tutti gli altri processi (inclusa la propria shell) dall'utilizzo della cpu.
 
; SCHED_RR: usata anch'essa per processi realtime. Questa politica di priorità funziona in maniera simile a SCHED_FIFO ma è di tipo Round Robin anziché FIFO. In pratica ai processi schedulati con questa politica viene assegnato un intervallo di tempo (Time Quantum) durante il quale il processo impegna la CPU. Scaduto il tempo, il processo viene messo in coda alla lista dei processi eseguibili con la sua stessa priorità. Il vantaggio di questa policy rispetto alla precedente è che RR è meno soggetta al problema della ''starvation'', situazione in cui gran parte delle risorse sono dedicate a un solo processo, rallentando o bloccando l'esecuzione di tutti gli altri.
 
Le patch <code>-ck</code> 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. Se si eseguono contemporaneamente più processi SCHED_ISO, questi si alterneranno seguendo una politica di tipo Round-Robin, in modo da evitare il problema della ''starvation''.
 
; SCHED_IDLEPRIO: questa classe di processi viene eseguita solo quando il processore è in IDLE. L'idea è quella di consentire l'esecuzione in background di task a priorità molto bassa, senza alcun impatto sugli altri processi avviati dall'utente. 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. In alcuni casi particolari (sospensione in ram, processo in  attesa di I/O, ecc) lo scheduler è in grado di riassegnare temporaneamente a questi processi la priorità SCHED_NORMAL, in modo da evitare che le risorse di sistema siano utilizzate senza limiti di tempo e in modo indesiderato.
 
== Installazione ==
 
{{Box|Nota|per una migliore comprensione delle procedure che seguono, fate rifermineto la guida sul [[Debian Kernel Howto|kernel alla debian-way]]}}
 
Prima di procedere è necessario installare alcuni pacchetti:
<pre> # apt-get install module-init-tools kernel-package libncurses5-dev fakeroot lrzip schedtool time </pre>
gli ultimi due pacchetti sono opzionali, anche se senza <code>schedtool</code> non potremmo usare gran parte delle potenzialità offerte dalle patch, mentre per quanto riguarda <code>time</code>, è utile solo se si vuole misurare la performance.


== Mondo Debian ==
La patch <code>-ck</code> più recente può essere scaricata dal sito di Con Kolivas sulla pagina<sup>[[#Collegamenti esterni | [2]]]</sup> dedicata alle patch; sulla stessa pagina troverete il link per scaricare i sorgenti del kernel vanilla. <br/> Se la vostra Debian utilizza una versione precedente rispetto all'ultima release, potrete trovare la patch qui<sup>[[#Collegamenti esterni | [3]]]</sup>, mentre i sorgenti da patchare dovrete cercarli tra gli archivi di kernel.org<sup>[[#Collegamenti esterni | [4]]]</sup>.
=== Introduzione a Debian ===
Attualmente l'ultimo patch set <code>-ck</code> è il <code>4.0-ck1</code>, ed il file patch da scaricare è <code>patch-4.0-ck1.lrz </code>. Di seguito si userà, come esempio, il kernel 4.0 e le patch <code>-ck1</code> per tale kernel.
* [[L' Universo Debian]]
* [[La struttura della Distribuzione]]


=== Installazione ===
Spostate i due archivi appena scaricati in una directory nella nostra home, ad esempio in <code>~/src/</code> e scompattate i sorgenti
* 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 ===
<pre>$ cd ~/src/
* [[Introduzione all' Apt System]]
$ tar -xvf linux-4.0.tar.xz</pre>
* [[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 ===
Una volta scompattati i sorgenti possiamo applicare la patch con:
* 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 ===
<pre>$ cd linux-4.0
* [[Apt-Proxy: un proxy per i pacchetti Debian| '''Apt-Proxy''': un proxy per i pacchetti Debian]]
$ lrzcat ../patch-4.0-ck1.lrz | patch -p1</pre>
* [[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==
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:
===Kernel===
* [[Un kernel UNIX libero: Linux]] ''(stub)''
<pre>$ cd ../
* http://guide.debianizzati.org/images/swirl.png [[Debian Kernel Howto]]
$ mv linux-4.0 linux-4.0-ck1</pre>
* [[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===
Per la configurazione, la strada più semplice è quella di copiare la configurazione funzionante di un kernel di versione simile a quello che state per compilare, ad esempio
* [[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===
<pre> $ cd linux-4.0-ck1
* [[Pacchettizzare ed installare Xorg su Debian Sid]]
$ cp /boot/config-3.16.0-4-amd64 .config
* [[Installazione Qemu con supporto accelerazione Kqemu]]
$ make oldconfig </pre>
* [[ePSXe Emulatore Playstation]]
* [[Installare OpenOffice2 su Debian Etch]]
* [[DVD Backup: xDVDShrink per Debian]]


===Altro===
Rispetto ai kernel standard la patch cambia alcune risposte predefinite in modo da ottenere un sistema adatto a un uso Desktop con bassa latenza, quindi, a meno che non abbiate diverse esigenze, potete lasciare tutte le risposte di default e passare alla compilazione.
* [[Dual Boot Debian-Altra distribuzione Linux]]
Se siete interessati qui<sup>[[#Collegamenti esterni | [5]]]</sup> trovate alcuni suggerimenti per configurazioni da abbinare al BFS, a seconda del tipo di computer e dell'uso che si intende farne.
* [[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===
Una volta terminata la configurazione è possibile compilare il kernel, ovviamente [[Debian Kernel Howto|alla debian-way]]. Se abbiamo già in esecuzione un kernel <code>-ck</code> possiamo lanciare la compilazione in modalità SCHED_IDLEPRIO:
====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====
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -bfs --revision 1 --initrd kernel_image</pre>
* [[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====
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>.
* [[Convertire immagini .nrg in immagini .iso]]
   
* [[Nautilus: navigare con una sola finestra]]
Se non abbiamo un kernel <code>-ck</code> potremo comunque usare la modalità SCHED_BATCH, cambiando semplicemente l'opzione <code>-D</code> con <code>-B</code>. 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.
* [[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==
Ultima possibilità, nel caso abbiate un kernel vecchio o non abbiate installato gli <code>schedtool</code> è quella di lanciare la compilazione con nice 19 (la più bassa priorità di un processo SCHED_NORMAL):
===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====
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -bfs --revision 1 --initrd kernel_image</pre>
* [[Mail Server Sicuro con Postfix]]


====Http====
Ovviamente non è necessario compilare ''a bassa priorità'', ma i casi precedenti sono stati riportati come esempio pratico di utilizzo degli <code>schedtool</code> e delle funzionalità delle patch <code>-ck</code>.
* [[Server Web Casalingo]]
* [[LAMP: Linux, Apache, MySQL e PHP]]
* [[XAMPP: Linux, Apache, MySQL e PHP facili]]
* [[Debian MapServer/MapScript]]


===Amministrazione===
Una volta terminanta la compilazione sarà sufficiente acquisire i privilegi di root e installare il nuovo kernel con dpkg:
====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'====
<pre>$ cd ../
* [[Condividere la connessione a internet]]
# dpkg -i linux-image-4.0.0-ck1-bfs_1_amd64.deb</pre>


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


====Monitoraggio & Scanning====
Lo scheduler BFS è stato progettato per esigenze desktop pertanto il numero di impostazioni su cui si può intervenire direttamente è limitato al minimo e nella maggior parte dei casi non è necessario fare cambiamenti per migliorare le prestazioni. <br/>
* [[Monitoriamo il Sistema]]
Quando lanciamo un processo in Linux questo sarà automaticamente SCHED_NORMAL. Per lanciare processi con altre classi di priorità bisogna usare gli <code>schedtool</code>;
* [[Mrtg: monitoriamo la banda]]
* [[Cacti | Cacti: monitor di rete, per pi� computer]]
* [[Munin]]


====Proxy====
per lanciare un programma con priorità Idleprio si utilizza un comando del tipo
* [[Privoxy: navigazione sicura a prova di spam]]


====Tunneling====
<pre># schedtool -D -e apt-get dist-upgrade</pre>
* [[Openvpn]]


== Hardware ==
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. 
=== Fotocamere digitali e dispositivi di memorizzazione di massa removibili ===
Invece il comando che segue trasforma la shell corrente in SCHED_ISO
* [[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 ===
<pre>$ schedtool -I $$  </pre>


* [[Debian e i Modem ADSL]]
in questo modo tutti i programmi avviati con questa shell avranno priorità sched-iso e si alterneranno nell'utilizzo della cpu alla frequenza data dall' ''rr_interval''.<br/>  L'intervallo di Round Robin è impostato di default a 6ms e può essere liberamente modificato scrivendo nel file <code>/proc/sys/kernel/rr_interval</code>; i valori accettati variano da 1 a 1000 millisecondi, ad esempio per impostare il valore a 100ms


==== Modem USB ADSL ====
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre>
* [[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 ====
Con valori bassi migliora la latenza e cala il throughput, e vice versa. Alcune sperimentazioni hanno mostrato che aumentare l'rr_interval può migliorare il throughput fino a 300ms, mentre per valori superiori non ci sono ulteriori benefici. Inoltre bisogna tenere presente che l'accuratezza di questo intervallo è limitata dalla frequenza HZ del kernel, pertanto il valore di rotazione deve essere coerente col timer frequency impostato nella configurazione (in breve per valori dell'rr_interval bassi è necessaria una frequenza elevata).
* ''Inserire qui eventuali guide su modem ethernet''


==== Modem dial-up 56K ====
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un
* ''Inserire qui eventuali guide su modem a 56K''


==== Schede di rete Wireless ====
<pre>$ schedtool -I -e amarok</pre>
* [[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 ===
questo farà partire amarok con priorità SCHED_ISO, in modo che, se necessario, possa interrompere qualsiasi task con priorità NORMAL o inferiore. Tuttavia siccome la priorità ISO è acccessibile ai normali utenti è stato stabilito un limite alle risorse utilizzabili da questi processi, in termini di percentuale di cpu disponibile sul pc; su un sistema multi-cpu il limite vale per il totale e non per ogni singola cpu. Il valore della cpu impegnata da un processo è calcolato come media mobile ogni 5 secondi e se un processo ISO utilizza più risorse di quelle prestabilite viene automaticamente rischedulato con priorità SCHED_NORMAL.<br/> La precentuale massima di cpu utilizzabile è impostata nel file <code>/proc/sys/kernel/iso_cpu</code> e il suo valore di default è 70%. Questo valore può essere liberamente modificato, a seconda delle esigenze, in un range da 0 a 100; impostare un valore di 100 significa dare a tutti gli utenti accesso alla policy RR, mentre un valore di 0 impedisce l'esecuzione di un qualsiasi
* [[Installazione Driver ATI per schede ATI RADEON MOBILITY 9700 SE]]
processo soft-realtime. <br/>
Per modificare il limite, ad esempio portarlo a 85, basta un


=== Stampanti ===
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre>
==== Stampanti USB ====
* ''Inserire eventuali guide su come far funzionare stampanti con porta USB''


==== Stampanti con porta parallela ====
Anche se per avviare un processo ISO non sono necessarie le credenziali di root, per garantire il mantenimento della priorità impostata dall'utente durante tutta la vita del processo, è necessario essere root per cambiare nuovamente la priorità al processo ISO mentre è già in esecuzione. Quindi, per  esempio, se vogliamo reimpostare a SCHED_NORMAL amarok dovremo dare un
* [[Introduzione all'installazione di stampanti con porta parallela]]


==== Stampanti bluetooth ====
<pre> # schedtool -N `pidof amarok` </pre>
* [[Introduzione all'installazione di stampanti bluetooth]]


=== Scanner ===
Infine è bene tenere presente che anche con le <code>patch ck</code> le priorità FIFO e RR sono accessibili solo a utenti coi privilegi di root e che lo scheduler BFS è progettato in modo da assegnare automaticmente la priorità ISO a qualsiasi applicazione che richiede priorità Sched_FIFO o Sched_RR senza avere privilegi necessari.
* [[Epson Perfection 2480 photo - usb scanner]]
* ''Inserire qui eventuali altre guide su come far funzionare scanner con Debian''


=== Palmari e cellulari ===
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.
* [[Debian e Nokia 7210: uso di gnokii e gestione degli sms]]
* [[UMTS/GPRS PCMCIA card (3g)]]
* [[Usare lcd4linux con un Palm]]


=== Altro hardware ===
* [[I2c e lm-sensors|'''I2c e lm-sensors''': usare i sensori della scheda madre]]
* [[Gestire gli HD: stato di salute, badblocks e ripristino dati|'''Gestire gli HD:''' stato di salute, badblocks e ripristino dati]]


==Portatili==
== Links ==
===Laptop Debianizzati===
===Nel wiki===
Troverete di seguito i resoconti d'installazione di Debian su dei portatili:
'''''Kernel''''':
* [[Debian Kernel Howto]]
* [[Esempio configurazione kernel]]


* [[Debian on an HP nx8220 | Debian on an HP nx8220]]
===Collegamenti esterni===
* [[Debian on a presario 2141EU | Compaq Presario 2100 (2141EU)]]
'''''BFS''''':<br/>
* [[Debian on a compaq Presario 2154EA | Compaq Presario 2100 (2154EA)]]
[1] [http://users.tpg.com.au/ckolivas/ Homepage di Con Kolivas]<br/>
* [[Debian on a Toshiba Satellite M30X-113| Toshiba M30x-113]] ''(stub)''
[2] [http://users.tpg.com.au/ckolivas/kernel/ Patch ck più recente]<br/>
* [[Debian on a HP Compaq NX6110| HP Compaq NX6110]]
[3] [http://ck.kolivas.org/patches/ versioni precedenti]<br/>
* [[Debian on an HP pavilion zv5422EA| HP pavilion zv5000 (zv5422EA)]]
[4] [http://www.kernel.org/pub/linux/kernel/ archivi kernel.org]<br/>
[5] [http://ck.kolivas.org/patches/bfs/bfs-configuration-faq.txt Configuration FAQ]<br/>
[6] [http://ck.wikia.com/wiki/BFS_FAQ BFS FAQ]<br/>
[7] [http://ck-hack.blogspot.com/ notizie sugli ultimi hack di C.K.]<br/>


===Altro===
'''''Vecchio patchset''''':<br/>
* [[Powernowd: CpuScaling per AMD]]
[8] [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br/>
* [[Cpufreqd: Cpuscaling per Intel Pentium M]]
[9] [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br/>
* [[ACPI e DSDT]]
[10] [http://lwn.net/Articles/226054/ RSDL hits a snag]<br/>
* [[Synaptics touchpad]]
[11] [http://lwn.net/Articles/230574/ Schedulers: the plot thickens]<br/>
* Inserire qui anche link a risorse in italiano sui portatili
[12] [http://apcmag.com/why_i_quit_kernel_developer_con_kolivas.htm Con Kolivas: Why i quit]<br/>


==Debian Live==
* [[Rimasterizzare una knoppix]]
* [[Damn Small Linux su chiavetta usb]]


==Crittografia==
{{Autori
* [[Crittografia e Steganografia - L'Arte di nascondere le informazioni]]
|Autore= [[Utente:Ombra|Ombra]] 19:03, 26 apr 2015 (CEST) <br/>
* [[Chiavi simmetriche e chiavi pubbliche]]
(guida originariamente scritta da [[Utente:TheNoise|The Noise]])
|Verificata_da=
|Estesa_da=
|Numero_revisori=0
}}


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

Versione attuale delle 13:01, 20 dic 2015

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 8 "jessie"

Introduzione

Le patch Con Kolivas (-ck) per il kernel di Linux sono una serie di patch pensate per incrementare le prestazioni desktop, principalmente tramite l'implementazione di uno scheduler in grado di offrire latenze molto basse.
Il primo patchset ha introdotto l'uso di 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.
L'ultima di queste patch è stata sviluppata per il kernel 2.6.22. Dopo questa versione l'amareggiato Con Kolivas ha abbandonato lo sviluppo della patch a causa di dissidi con altri sviluppatori del kernel.
Parte del design del ck è stato comunque inserito nel kernel mainline con la creazione di un nuovo scheduler, il CFS, che ha rimpiazzato il vecchio.
Dopo qualche anno di inattività Con Kolivas, dicendosi insoddisfatto dalle prestazioni offerte dal CFS, ha ripreso lo sviluppo di un nuovo patchset; questo patchset, tutt'ora mantenuto da CK, utilizza un nuovo scheduler a bassa latenza, il BFS, pensato principalmente per un uso desktop.
Il primo paragrafo di questa guida è dedicato a una breve descrizione del vecchio patchset, con particolare attenzione alle caratteristiche che non son più incluse nel BFS. Il resto della guida spiega come installare e utilizzare le caratteristiche del nuovo scheduler.

Il primo patchset

Staircase Deadline Scheduler

Le patch -ck (per il kernel 2.6.21 o successivi) includevano l'innovativo scheduler Staircase Deadline (chiamato semplicemente SD). Questo scheduler è l'evoluzione del secondo scheduler dei processi scritto da zero da Con Kolivas (il primo scheduler chiamato Staircase è stato anch'esso molto innovativo). Le sue caratteristiche principali erano la sua fairness garantita (tutti i processi della stessa priorità consumano esattamente la stessa CPU) e la sua spiccata interattività. Con Kolivas ha mostrato al mondo per la prima volta che uno scheduler per Linux completamente fair e con una interattività molto elevata (superiore al mainline) non era solo teoricamente ma anche praticamente possibile. Il vantaggio di un fair scheduler è la sua assoluta immunità a starvation che affiggeva lo scheduler mainline (ingosched) e (in misura minore) il vecchio Staircase.

Per maggiori dettagli tecnici su SD:

  • Con Kolivas Wiki: SD [8]

Per un po' di storia sulla nascita, l'evoluzione e sulla competizione con un nuovo scheduler scritto da Ingo Molnar (CFS) inspirato dal successo di SD potete leggere:

  • The Rotating Staircase Deadline Scheduler [9]
  • RSDL hits a snag [10]
  • Schedulers: the plot thickens [11]
Swap prefetching

Altra patch inclusa era 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 le prestazioni.

Lo scheduler BFS

Confronto tra BFS e Mainline

Una delle caratteristiche importanti per uno scheduler di processi è la scalabilità; ad esempio se si aggiungono dei processori ad un sistema si richiede che il throughput aumenti in modo significativo ogni volta che viene aggiunto un nuovo processore, anche quando il loro numero diventa molto elevato.
Altre due caratteristiche desiderabili sono una buona reattività e la fairness (i processi vengono eseguiti secondo la loro priorità e a quelli con uguale priorità viene assegnata la stessa quota di cpu ).
L'attuale scheduler mainline (CFS) è stato pensato per ottenere buoni risultati in tutte queste caratteristiche: tuttavia per mantenere una buona scalabilità e garantire la fairness sono necessari complessi algoritmi di bilanciamento che deteriorano la reattività e il throughput.

La particolarità del BFS è che è stato progettato con l'unico obbiettivo di ottenere una spiccata reattività e basse latenze nell'uso desktop, senza preoccuparsi minimanente della scalabilità.
Lo scheduler pesca i processi da una unica coda globale in base alla priorità e alla deadline: questa semplice struttura garantisce la fairness senza bisogno di alcun algoritmo di bilanciamento, tutto a vantaggio della reattività e del throughput.

In sostanza il CFS è uno scheduler progettato per essere adatto a diversi utilizzi, dal desktop al server, (e di conseguenza non ottimizzato per nessuno di essi), mentre all'opposto il BFS si caratterizza come uno scheduler pensato e ottimizzato per un solo utilizzo, il desktop.

Limiti e particolarità del BFS

Prima di applicare la patch conviene valutare se questo scheduler è adatto all'hardware che si possiede e all'uso che si intende fare del proprio pc:

Scalabilità

Il principale limite del BFS è la scalabilità: secondo alcuni test effettuati questo scheduler comincerà ad avere performance esponenzialmente decrescente sulle CPU con oltre 16 core, mentre al di sotto di questo numero ha una scalabilità anche migliore del CFS. Notare che ai fini del calcolo del numero di core, contano i core logici e non quelli fisici (quindi una cpu 8 core con HT conterà come 16).
Un altro caso in cui il BFS potrebbe sotto-performare rispetto al mainline è quello di un pc costantemente sottoposto ad un elevato carico, ad esempio un server che deve eseguire un numero molto elevato di processi che si susseguono tra i loro.

Overhead e jobservers

La mancanza di algoritmi per la scalabilità rende il BFS uno scheduler a basso overhead, una caratteristica che può essere molto utile con processori a basso consumo come quelli dei cellulari.
Un'altra situazione dove il basso overhead del BFS risulta vantaggioso è quando si compila del software usando l'opzione -j di make: di solito si usa -jn con n superiore al numero di core del processore, per esempio -j6 su un quad-core. Tuttavia col BFS usare -j4 su un processore quad-core è la scelta più veloce di qualsiasi altro numero scelto con lo scheduler mainline.
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.

Cgroups e systemd

A causa di alcuni bug che si sono verificati nel periodo iniziale di sviluppo di systemd si è sparsa la leggenda che le patch BFS non sono compatibili col nuovo sistema di init. Questo non è vero, nel senso che è possibile usare un kernel patchato BFS e avviarlo con systemd; quello che è vero è che il BFS non implementa i CGROUPS e dunque non sarà possibile esercitare questo tipo di controllo sui processi utilizzando la apposita funzione di systemd. Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.

Misurazione della performance

Se utilizzando la patch BFS notate dei valori di carico di cpu anomali, niente paura, almeno finchè il pc risponde ai comandi: infatti bisogna tenere conto che i due scheduler utilizzano un sistema di misurazione del carico della cpu differente e quindi i risultati non sono comparabili con quelli del mainline. In particolare il CFS utilizza il timer frequency mentre il BFS utilizza l'orologio TSC, che è più accurato per i singoli processi ma può dare misurazioni del carico complessivo "sballate". Se si vuole confrontare l'efficienza dei due scheduler nell'eseguire un certo lavoro conviene farlo basandosi sul tempo di esecuzione, ad esempio utilizzando il programma time.

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. Ma su Linux sono presenti altre classi di priorità:

SCHED_NORMAL
questa è, se non diversamente specificato, la priorità dei processi in Linux. I processi di questa classe possono avere un nice da 19 (minima) a -20 (massima) che indica la loro priorità all'interno della classe SCHED_NORMAL
SCHED_BATCH
questa priorità è stata introdotta dal kernel 2.6.16 e 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: non c'è limite di tempo all'impegno della CPU da parte di questi processi che possono rimanere in esecuzione fin quando un processo con priorità più alta non assume il controllo della CPU. In questo caso il processo che perde il controllo si posiziona in cima alla lista dei processi in attesa (FIFO) con la stessa priorità. I processi all'interno di questa classe possono avere una priorità statica da 0 (minima) a 99 (massima).
Bisogna fare attenzione se si utilizzano processi di questo tipo: infatti, in base al funzionamento appena descritto, lanciando un processo FIFO con massima priorità, può accadere di vedere esclusi tutti gli altri processi (inclusa la propria shell) dall'utilizzo della cpu.
SCHED_RR
usata anch'essa per processi realtime. Questa politica di priorità funziona in maniera simile a SCHED_FIFO ma è di tipo Round Robin anziché FIFO. In pratica ai processi schedulati con questa politica viene assegnato un intervallo di tempo (Time Quantum) durante il quale il processo impegna la CPU. Scaduto il tempo, il processo viene messo in coda alla lista dei processi eseguibili con la sua stessa priorità. Il vantaggio di questa policy rispetto alla precedente è che RR è meno soggetta al problema della starvation, situazione in cui gran parte delle risorse sono dedicate a un solo processo, rallentando o bloccando l'esecuzione di tutti gli altri.

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. Se si eseguono contemporaneamente più processi SCHED_ISO, questi si alterneranno seguendo una politica di tipo Round-Robin, in modo da evitare il problema della starvation.
SCHED_IDLEPRIO
questa classe di processi viene eseguita solo quando il processore è in IDLE. L'idea è quella di consentire l'esecuzione in background di task a priorità molto bassa, senza alcun impatto sugli altri processi avviati dall'utente. 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. In alcuni casi particolari (sospensione in ram, processo in attesa di I/O, ecc) lo scheduler è in grado di riassegnare temporaneamente a questi processi la priorità SCHED_NORMAL, in modo da evitare che le risorse di sistema siano utilizzate senza limiti di tempo e in modo indesiderato.

Installazione

Info.png Nota
per una migliore comprensione delle procedure che seguono, fate rifermineto la guida sul kernel alla debian-way


Prima di procedere è necessario installare alcuni pacchetti:

 # apt-get install module-init-tools kernel-package libncurses5-dev fakeroot lrzip schedtool time 

gli ultimi due pacchetti sono opzionali, anche se senza schedtool non potremmo usare gran parte delle potenzialità offerte dalle patch, mentre per quanto riguarda time, è utile solo se si vuole misurare la performance.

La patch -ck più recente può essere scaricata dal sito di Con Kolivas sulla pagina [2] dedicata alle patch; sulla stessa pagina troverete il link per scaricare i sorgenti del kernel vanilla.
Se la vostra Debian utilizza una versione precedente rispetto all'ultima release, potrete trovare la patch qui [3], mentre i sorgenti da patchare dovrete cercarli tra gli archivi di kernel.org [4]. Attualmente l'ultimo patch set -ck è il 4.0-ck1, ed il file patch da scaricare è patch-4.0-ck1.lrz . Di seguito si userà, come esempio, il kernel 4.0 e le patch -ck1 per tale kernel.

Spostate i due archivi appena scaricati in una directory nella nostra home, ad esempio in ~/src/ e scompattate i sorgenti

$ cd ~/src/
$ tar -xvf linux-4.0.tar.xz

Una volta scompattati i sorgenti possiamo applicare la patch con:

$ cd linux-4.0
$ lrzcat ../patch-4.0-ck1.lrz | patch -p1

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

$ cd ../
$ mv linux-4.0 linux-4.0-ck1

Per la configurazione, la strada più semplice è quella di copiare la configurazione funzionante di un kernel di versione simile a quello che state per compilare, ad esempio

 $ cd linux-4.0-ck1
 $ cp /boot/config-3.16.0-4-amd64 .config
 $ make oldconfig 

Rispetto ai kernel standard la patch cambia alcune risposte predefinite in modo da ottenere un sistema adatto a un uso Desktop con bassa latenza, quindi, a meno che non abbiate diverse esigenze, potete lasciare tutte le risposte di default e passare alla compilazione. Se siete interessati qui [5] trovate alcuni suggerimenti per configurazioni da abbinare al BFS, a seconda del tipo di computer e dell'uso che si intende farne.

Una volta terminata la configurazione è 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 -bfs --revision 1 --initrd 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 potremo comunque 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 -bfs --revision 1 --initrd 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.

Una volta terminanta la compilazione sarà sufficiente acquisire i privilegi di root e installare il nuovo kernel con dpkg:

$ cd ../
# dpkg -i linux-image-4.0.0-ck1-bfs_1_amd64.deb

Utilizzo e Tuning

Lo scheduler BFS è stato progettato per esigenze desktop pertanto il numero di impostazioni su cui si può intervenire direttamente è limitato al minimo e nella maggior parte dei casi non è necessario fare cambiamenti per migliorare le prestazioni.
Quando lanciamo un processo in Linux questo sarà automaticamente SCHED_NORMAL. Per lanciare processi con altre classi di priorità bisogna usare gli schedtool;

per lanciare un programma con priorità Idleprio si utilizza un comando del tipo

# schedtool -D -e apt-get dist-upgrade

in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. Invece il comando che segue trasforma la shell corrente in SCHED_ISO

$ schedtool -I $$  

in questo modo tutti i programmi avviati con questa shell avranno priorità sched-iso e si alterneranno nell'utilizzo della cpu alla frequenza data dall' rr_interval.
L'intervallo di Round Robin è impostato di default a 6ms e può essere liberamente modificato scrivendo nel file /proc/sys/kernel/rr_interval; i valori accettati variano da 1 a 1000 millisecondi, ad esempio per impostare il valore a 100ms

# echo 100 > /proc/sys/kernel/rr_interval 

Con valori bassi migliora la latenza e cala il throughput, e vice versa. Alcune sperimentazioni hanno mostrato che aumentare l'rr_interval può migliorare il throughput fino a 300ms, mentre per valori superiori non ci sono ulteriori benefici. Inoltre bisogna tenere presente che l'accuratezza di questo intervallo è limitata dalla frequenza HZ del kernel, pertanto il valore di rotazione deve essere coerente col timer frequency impostato nella configurazione (in breve per valori dell'rr_interval bassi è necessaria una frequenza elevata).

Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un

$ schedtool -I -e amarok

questo farà partire amarok con priorità SCHED_ISO, in modo che, se necessario, possa interrompere qualsiasi task con priorità NORMAL o inferiore. Tuttavia siccome la priorità ISO è acccessibile ai normali utenti è stato stabilito un limite alle risorse utilizzabili da questi processi, in termini di percentuale di cpu disponibile sul pc; su un sistema multi-cpu il limite vale per il totale e non per ogni singola cpu. Il valore della cpu impegnata da un processo è calcolato come media mobile ogni 5 secondi e se un processo ISO utilizza più risorse di quelle prestabilite viene automaticamente rischedulato con priorità SCHED_NORMAL.
La precentuale massima di cpu utilizzabile è impostata nel file /proc/sys/kernel/iso_cpu e il suo valore di default è 70%. Questo valore può essere liberamente modificato, a seconda delle esigenze, in un range da 0 a 100; impostare un valore di 100 significa dare a tutti gli utenti accesso alla policy RR, mentre un valore di 0 impedisce l'esecuzione di un qualsiasi processo soft-realtime.
Per modificare il limite, ad esempio portarlo a 85, basta un

 # echo 85 > /proc/sys/kernel/iso_cpu 

Anche se per avviare un processo ISO non sono necessarie le credenziali di root, per garantire il mantenimento della priorità impostata dall'utente durante tutta la vita del processo, è necessario essere root per cambiare nuovamente la priorità al processo ISO mentre è già in esecuzione. Quindi, per esempio, se vogliamo reimpostare a SCHED_NORMAL amarok dovremo dare un

 # schedtool -N `pidof amarok` 

Infine è bene tenere presente che anche con le patch ck le priorità FIFO e RR sono accessibili solo a utenti coi privilegi di root e che lo scheduler BFS è progettato in modo da assegnare automaticmente la priorità ISO a qualsiasi applicazione che richiede priorità Sched_FIFO o Sched_RR senza avere privilegi necessari.

Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli man schedtool.


Links

Nel wiki

Kernel:

Collegamenti esterni

BFS:
[1] Homepage di Con Kolivas
[2] Patch ck più recente
[3] versioni precedenti
[4] archivi kernel.org
[5] Configuration FAQ
[6] BFS FAQ
[7] notizie sugli ultimi hack di C.K.

Vecchio patchset:
[8] Con Kolivas Wiki: SD
[9] The Rotating Staircase Deadline Scheduler
[10] RSDL hits a snag
[11] Schedulers: the plot thickens
[12] Con Kolivas: Why i quit




Guida scritta da: Ombra 19:03, 26 apr 2015 (CEST)

(guida originariamente scritta da The Noise)

Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized