https://guide.debianizzati.org/api.php?action=feedcontributions&user=Ombra&feedformat=atomGuide@Debianizzati.Org - Contributi dell'utente [it]2024-03-29T13:36:53ZContributi dell'utenteMediaWiki 1.39.5https://guide.debianizzati.org/index.php?title=Alternatives&diff=41718Alternatives2017-03-11T18:02:59Z<p>Ombra: aggiunta "get-selections" + verifica guida</p>
<hr />
<div>{{Versioni compatibili}}<br />
== Introduzione ==<br />
Le ''alternative'' sono un sistema di link simbolici che permettono di gestire comodamente i programmi di default per ogni categoria di applicazioni (browser, editor, ecc ...).<br />
<br />
L'idea che è alla base di questo sistema è di avere un database che raccoglie le possibili alternative ad una applicazione (per esempio, <code>x-www-browser</code> è una ''alternativa'' che può essere collegata al browser proferito).<br />
<br />
== Struttura del sistema ==<br />
<br />
== Elenco Alternatives ==<br />
<div align="center"><br />
{|border="1" cellpadding="0" cellspacing="0" width="90%"<br />
|Nome<br />
|Descrizione<br />
|-<br />
|editor<br />
|<br />
|-<br />
|fakeroot<br />
|<br />
|-<br />
|firefox-javaplugin.so<br />
|<br />
|-<br />
|ftp<br />
|<br />
|-<br />
|infobrowser<br />
|<br />
|-<br />
|java, javac, ...<br />
| impostazioni circa il [[path]] degli eseguibili Java<br />
|-<br />
|vi<br />
| Permette di scegliere l'alternativa tra vi o vim<br />
|-<br />
|view<br />
|<br />
|-<br />
|vim<br />
|<br />
|-<br />
|www-browser<br />
| Il browser di default in modalità testuale.<br />
|-<br />
|x-cursor-theme<br />
| Il tema dei cursori di default.<br />
|-<br />
|x-session-manager<br />
| Il session manager di default.<br />
|-<br />
|x-terminal-emulator<br />
| L'emulatore di terminale predefinito da usare in X<br />
|-<br />
|x-window-manager<br />
| Il window manager di default.<br />
|-<br />
|x-www-browser<br />
| Il browser di default in modalità grafica.<br />
|}<br />
</div><br />
<br />
per visualizzare l'elenco completo delle alternatives disponibili nel sistema <br />
<pre><br />
# update-alternatives --get-selections<br />
</pre><br />
<br />
== Modifica impostazioni ==<br />
=== Ottenere informazioni ===<br />
È possibile ottenere le informazioni relative alle varie alternative disponibili per una voce tramite il comando<br />
<pre># update-alternatives --display <alternativa></pre><br />
<br />
L'output del comando sarà simile a questo:<br />
<pre># update-alternatives --display x-www-browser<br />
x-www-browser - status is auto.<br />
link currently points to /usr/bin/konqueror<br />
/usr/bin/konqueror - priority 100<br />
slave x-www-browser.1.gz: /usr/share/man/man1/konqueror.1.gz<br />
/usr/bin/firefox - priority 70<br />
slave x-www-browser.1.gz: /usr/share/man/man1/firefox.1.gz<br />
/usr/bin/mozilla - priority 80<br />
slave x-www-browser.1.gz: /usr/share/man/man1/mozilla.1.gz<br />
Current `best' version is /usr/bin/konqueror.<br />
<br />
</pre><br />
Verranno mostrati, in ordine di priorità, le varia alternative, accompagnate dalla [[manpage]].<br />
<br />
=== Cambiare l'associazione ===<br />
Cambiare l'associazione, tra quelle disponibili, è semplice:<br />
<pre># update-alternatives --config x-www-browser<br />
<br />
There are 3 alternatives which provide `x-www-browser'.<br />
<br />
Selection Alternative<br />
-----------------------------------------------<br />
+ 1 /usr/bin/konqueror<br />
* 2 /usr/bin/firefox<br />
3 /usr/bin/mozilla<br />
<br />
Press enter to keep the default[*], or type selection number:</pre><br />
a questo punto sarà sufficiente inserire il numero della alternativa che si vuole utilizzare.<br />
<br />
A fianco delle varie scelte sono presenti due caratteri: '''+''' indica che quel programma ha la priorità maggiore (quindi, secondo il sistema, è l'associazione più appropriata); '''*''', invece, indica l'applicazione attualmente associata all'alternativa.<br />
<br />
<br />
Nel caso siano necessarie delle modifiche massive (come, ad esempio, nel caso in cui si voglia utilizzare il java ufficiale di Oracle) si può procedere alla riconfigurazione di tutte le ''alternatives'' con il comando:<br />
<pre><br />
# update-alternatives --all<br />
</pre><br />
che si occuperà di richiamare <code>update-alternatives --config</code> su tutte le ''alternatives'' registrate. Per quelle relative a java, si potrà effettuare la modifica, mentre per le altre sarà sufficiente premere ''invio'' per mantenere le impostazioni attuali senza modificarle.<br />
<br />
=== Aggiunta ===<br />
Per aggiungere alla lista delle alternative (o crearne una nuova) è possibile usare l'opzione <code>--install</code> nel seguente modo:<br />
<pre><br />
# update-alternatives [options] --install link name path priority [--slave link name path]<br />
</pre><br />
con i seguenti parametri:<br />
; link : il nome del link principale che punterà a quello inserito nella directory di alternatives (<code>/etc/alternatives/</code>)<br />
; name : il nome del link in <code>/etc/alternatives/</code> (è normale farlo coincidere con il nome del link) che punterà all'eseguibile vero e proprio<br />
; path : il path dell'eseguibile utilizzato come alternativa<br />
; priority : la priorità da assegnare a questa alternativa<br />
; --slave : si tratta di un'opzione facoltativa e utilizzabile più volte, che permette l'aggiunta di alternative secondarie, ciascuna accettante tre argomenti con il medesimo significato e configurata in base alla priorità dell'alternativa principale<br />
<br />
Ad esempio, se vogliamo aggiungere Firefox come browser, basterà dare il seguente comando:<br />
<pre><br />
# update-alternatives --install /usr/bin/x-www-browser x-www-browser /usr/bin/firefox 90 \ <br />
--slave /usr/share/man/man1/x-www-browser.1.gz x-www-browser.1.gz /usr/share/man/man1/firefox.1.gz<br />
</pre><br />
L'alternativa secondaria specificata con <code>--slave</code> farà sì che dando:<br />
<pre>$ man x-www-browser</pre><br />
sia richiamata la pagina di manuale di Firefox, fintanto che l'alternativa principale (<code>/usr/bin/firefox</code>) sarà utilizzata da <code>/usr/bin/x-www-browser</code>.<br />
<br />
=== Rimozione ===<br />
Per la rimozione esistono due opzioni:<br />
; --remove <name> <path> : provoca la rimozione di una sola alternativa (associata a <path>) dall'elenco di quelle relativa a <name><br />
; --remove-all <name> : rimuove l'intera alternativa <name><br />
<br />
<pre><br />
# update-alternatives --remove x-www-browser /usr/bin/firefox<br />
</pre><br />
<br />
== Riferimenti ==<br />
* <code>man update-alternatives</code><br />
<br />
Per una gestione grafica dei link si veda la [[Amministrazione_grafica_delle_%22Alternatives%22|pagina]] dedicata.<br />
<br />
{{Autori<br />
|Autore= [[Utente:MaXeR|MaXeR]]<br />
|Estesa_da=<br />
|Verificata_da=<br />
: [[Utente:MadameZou|MadameZou]] 22:26, 5 mar 2010 (CET)<br />
: [[Utente:HAL 9000|HAL 9000]] 18:03, 20 mag 2015 (CEST)<br />
: [[Utente:Ombra|Ombra]] 19:02, 11 mar 2017 (CET)<br />
|Numero_revisori=3<br />
}}<br />
<br />
[[Categoria:Programmi da terminale]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Superkaramba&diff=41714Superkaramba2017-03-01T15:00:48Z<p>Ombra: template versioni compatibili + box info su compatibilità</p>
<hr />
<div>{{Guida da controllare}}{{Superkaramba}}<br />
{{Versioni_compatibili|Wheezy|Jessie}}<br />
=Superkaramba=<br />
<br />
==Introduzione==<br />
Come precedentemente indicato: <br />
<br />
[[http://e-zine.debianizzati.org/web-zine/numero_1/?page=54 Articolo e-zine]]<br />
<br />
[[http://netdragon.sourceforge.net/ssuperkaramba.html Superkaramba]] è, in termini semplici, uno strumento che ti permette di creare facilmente eye-candy interattivi sul tuo desktop KDE. Attualmente, solo su linux è ufficialmente supportato.<br />
<br />
SuperKaramba è uno strumento basato su karamba che permette a chiunque di creare e gestire facilmente piccoli widget interattivi su un desktop KDE. I widget sono definiti in un semplice file di testo che può essere aumentato con codice Python per renderli interattivi. Qui sono solo alcuni esempi di ciò che si può fare:<br />
<br />
* mostra le informazioni di sistema come CPU, la riproduzione di MP3, ecc;<br />
* crea barre degli strumenti personalizzate che lavorano in ogni modo immaginabile;<br />
* creazione di piccoli giochi virtuali o animali che vivono sul tuo desktop;<br />
* mostra le informazioni da Internet, come il meteo e headlines;<br />
Questo pacchetto è parte di KDE, come una componente del modulo KDE utilità.<br />
<br />
Come consigliato nel sito ufficiale, per poter scaricare nuovi temi dovete andare a cercarli su [http://kde-look.org/index.php?xcontentmode=38 kde-look.org], qui potrete trovare di tutto, dalle GUI per visualizzare le risorse alle dock-bar.<br />
<br />
===Installare Superkaramba===<br />
<br />
{{Box|Nota| Al momento è possibile utilizzare Superkaramba anche in Sid/Testing recuperando il pacchetto proveniente da Jessie}}<br />
<br />
KDE3<br />
# apt-get install superkaramba<br />
KDE4<br />
# apt-get install plasma-scriptengine-superkaramba<br />
<br />
===Utilizzo===<br />
<br />
Eseguire il comando<br />
<br />
$ superkaramba<br />
<br />
La finestra che si aprirà vi mostrerà diverse opzioni, tra queste vi è la possibilità di scaricare diversi oggetti da Kde.look, oppure aprire un tema scaricato o avviare un tema già caricato in superkaramaba ma non attivo.<br />
<br />
[[immagine:Karamba003.jpeg|center]]<br />
<br />
Consiglio di disabilitare la tray icon di superkaramba che reputo inutile.<br />
<br />
Con un click del pulsante destro all'interno di un plasmoide di superkaramba si aprirà il menu delle opzioni<br />
<br />
[[immagine:Karamba001.jpeg|center]]<br />
<br />
da qui sarà possibile accedere al menù di superkaramba.<br />
<br />
[[immagine:Karamba002.jpeg|center]]<br />
<br />
===Modifiche al tema===<br />
Con molta probabiltà alcune cose non funzioneranno a dovere al primo avvio di un tema.<br />
<br />
Il fatto è dovuto alla non corretta configurazione dei parametri, infatti questi non vengono riconosciuti in automatico e sono legati a quanto scritto e testato dell'editore del tema.<br />
<br />
I problemi più comuni sono legati alla scheda di rete (eth0 al posto di eth1 o altro), oppure al riconoscimento degli HD e delle partizioni montate che non hanno la stessa ubicazione e/o nome diverso(hda,sda,....), in questo caso occorre editare il file .theme.<br />
<br />
Usate l'editor di testo che preferite e applicate le modifiche dovute, al salvataggio del file il tema si aggiornerà automaticamente.<br />
<br />
===Dipendenze importanti===<br />
Per poter visualizzare correttamente gli output karamba necessita di alcuni software a cui si appoggia.<br />
<br />
Ecco un breve elenco degli indispensabili:<br />
*[[hddtemp]]<br />
*smartmoontol<br />
*[[lm-sensors]]<br />
<br />
Per le temperature delle GPU pare che solo i driver propietari di ATI e NVidia diano risultati.<br />
<br />
==Documentazione==<br />
<br />
[http://karamba.sourceforge.net/?a=docs Karamba Docs]<br />
<br />
[http://netdragon.sourceforge.net/screate.html Superkaramba Docs]<br />
<br />
===karamba===<br />
<br />
Questo definisce la finestra di Karamba; una finestra di grandi dimensioni richiede più tempo per essere disegnata, quindi cercate di non crearla più grande di quanto gli elementi grafici al suo interno necessitino, ovvero evitate una grossa finestra se avete solo del testo in un angolo. <br />
<br />
* x - posizione orizzontale della finestra di Karamba / default: x=0<br />
* y - posizione verticale della finestra di Karamba / default: y=0<br />
* w - larghezza della finestra di Karamba / default: w=300<br />
* h - altezza della finestra di Karamba / default: h=300<br />
* right - se right è impostato a true, la finestra verrà posizionata sul lato destro dello schermo e il parametro x verrà ignorato / default: right=false<br />
* bottom - se bottom è impostato a true, la finestra verrà posizionata nella parte bassa dello schermo e il parametro y verrà ignorato / default: bottom=false<br />
* ontop - se ontop è impostato a true, la finestra resterà in primo piano rispetto alle altre / default: ontop=false<br />
* topbar - se topbar è impostato a true, la finestra verrà posizionata nella parte alta dello schermo e le applicazioni massimizzate non la copriranno (come avviene per kicker, il pannello di kde). In questo caso la finestra non può essere spostata / default: topbar=false<br />
* bottombar - se bottombar è impostato a true, la finestra verrà posizionata nella parte bassa dello schermo e le applicazioni massimizzate non la copriranno (come avviene per kicker, il pannello di kde). In questo caso la finestra non può essere spostata / default: bottombar=false<br />
* interval - la frequenza di aggiornamento dei misuratori in millisecondi / default: interval=5000<br />
* locked - se locked è impostato a true, la finestra non può essere spostata con il trascinamento del mouse; questa opzione può essere modificata con il click destro sulla stessa / default: locked=false<br />
<br />
<br />
===Misuratori===<br />
====bar====<br />
<br />
Visualizza una barra, come una barra di avanzamento, nella posizione desiderata; è disegnata usando l'immagine fornita dall'opzione «path» e possono essere utilizzare immagini trasparenti. Se le opzioni «w» e «h» non sono specificate, la dimensione della barra è uguale a quella dell'immagine. Il default è di avere un avanzamento da sinistra verso destra ma è possibile ottenrne una verticale (dal basso verso l'alto) con l'opzione «vertical».<br />
<br />
* x - posizione orizzontale dell'angolo alto sinistro.<br />
* y - posizione verticale dell'angolo alto sinistro.<br />
* w - la larghezza della barra [opzionale].<br />
* h - l'altezza della barra [opzionale].<br />
* path - il percorso dell'immagine per la barra (relativo al file di configurazione, posizione assoluta nel filesystem o un indirizzo http)<br />
* vertical - se impostato a true, la barra è verticale: dal basso verso l'alto / default: vertical=false<br />
* value - il valore della barra / default: value=0<br />
* min - il valore minimo; può essere sovrascritto da un sensore / default: min=0<br />
* max - il valore massimo; può essere sovrascritto da un sensore / default: max=100<br />
<br />
Esempi:<br />
bar x=0 y=0 w=10 h=200 vertical=true path="img.png" sensor=cpu<br />
bar x=0 y=0 path="img.png" min=30 max=60 sensor=cpu<br />
<br />
<br />
====graph====<br />
<br />
Visualizza un grafico the scorre verso sinistra.<br />
<br />
* x - posizione orizzontale dell'angolo alto sinistro<br />
* y - posizione verticale dell'angolo alto sinistro<br />
* w - la larghezza del grafico [opzionale]<br />
* h - l'altezza del grafico [opzionale]<br />
* points - il numero dei punti nel grafico<br />
* min - il valore minimo; può essere sovrascritto da un sensore / default: min=0<br />
* max - il valore massimo; può essere sovrascritto da un sensore / default: max=100<br />
* color - il colore del grafico; occorrono tre numeri interi tra 0 e 255 separati da una virgola (rosso, verde, blu) / default: color=0,0,0<br />
esempio: color=100,200,180.<br />
<br />
Esempi:<br />
graph x=0 y=0 w=200 h=60 points=100 sensor=cpu<br />
<br />
<br />
====image====<br />
<br />
Visualizza un'immagine nella posizione desiderata, questa può essere collegata a un sensore: il valore del sensore viene interpretato come un percorso dell'immagine. Le immagini, anche trasparenti, possono essere prese direttamente dal web.<br />
<br />
* x - posizione orizzontale dell'angolo alto sinistro dell'immagine<br />
* y - posizione verticale dell'angolo alto sinistro dell'immagine<br />
* path - il percorso dell'immagine (relativo al file di configurazione, posizione assoluta nel filesystem o un indirizzo http)<br />
<br />
Esempi:<br />
image x=10 y=10 path="/tmp/immagine.png"<br />
image x=10 y=10 path="http://tuo-sito.se/immagine.jpg"<br />
image x=10 y=10 sensor=program program="pictures.pl"<br />
<br />
<br />
====text====<br />
<br />
Visualizza un'etichetta di testo nella posizione desiderata. È possibile utilizzare le opzioni «w» e «h» per definire un'area di ritaglio: nessun testo verrà visualizzato al di fuori di quest'area. Tutti i sensori possono essere connessi a un misuratore testuale.<br />
<br />
* x - posizione orizzontale dell'angolo alto sinistro<br />
* t - posizione verticale dell'angolo alto sinistro<br />
* w - la larghezza dell'etichetta [opzionale]<br />
* h - l'altezza dell'etichetta [opzionale]<br />
* value - il testo dell'etichetta<br />
* align - imposta l'allineamento del testo: left, center o right / default: align=left<br />
* font - il carattere da utilizzare<br />
* fontsize - la dimensione del carattere<br />
* color - il colore del testo; occorrono tre numeri interi tra 0 e 255 separati da una virgola (rosso, verde, blu) / default: color=0,0,0<br />
esempio: color=100,200,180.<br />
* bgcolor - il colore dell'ombra / default: bgcolor=0,0,0<br />
* shadow - applica un'ombra di «n» pixel dal testo, il valore può essere negativo / default: shadow=0<br />
esempio: shadow=2<br />
* fixedpitch - impostare a «true» per ottenere i caratteri equidistanti / default: fixedpitch=false<br />
<br />
Esempi:<br />
text x=0 y=0 value="stringa di testo"<br />
text x=0 y=0 sensor=cpu color=255,0,0 font="arial" sensor=cpu<br />
<br />
<br />
===Sensori===<br />
====cpu====<br />
<br />
Misura l'attuale carico della CPU, sono gestibili più processori.<br />
<br />
* interval - l'intervallo di aggiornamento in millisecondi. Il primo parametro specificato verrà utilizzato per ulteriori CPU, sebbene ognuna possa avere un proprio intervallo / default: interval=1000<br />
* cpu - l'indice della CPU, utile solo se si ha più di un processore<br />
Esempio:<br />
cpu=0 - la prima CPU<br />
cpu=1 - la seconda CPU<br />
...<br />
cpu=all - il carico di tutti i processori / default: cpu=all<br />
<br />
* format - le caratteristiche del testo visualizzato; i valori possibili sono:<br />
%v - il carico della CPU,<br />
%load - come %v,<br />
%user - il carico dell'utente,<br />
%system - il carico di sistema,<br />
%nice - il carico secondo il parametro nice,<br />
%idle - il carico secondo il parametro idle.<br />
default: format="%v"<br />
<br />
esempio: cpu=0 format="%user%"<br />
<br />
<br />
====disk====<br />
<br />
Fornisce informazioni sui dischi montati, sono gestibili filesystem di rete.<br />
<br />
* interval - l'intervallo di aggiornamento in millisecondi. Il primo parametro specificato verrà utilizzato per ulteriori sensori di disco, sebbene ognuno possa avere un proprio intervallo / default: interval=5000<br />
* format - le caratteristiche del testo visualizzato; i valori possibili sono:<br />
<pre><br />
%f - spazio libero su disco in Megabytes<br />
%fkb - spazio libero su disco in Kilobits<br />
%fk - spazio libero su disco in Kilobytes<br />
%fg - spazio libero su disco in Gigabytes<br />
%fp - la percentuale dello spazio libero<br />
<br />
%u - spazio usato su disco in Megabytes<br />
%ukb - spazio usato su disco in Kilobits<br />
%uk - spazio usato su disco in Kilobytes<br />
%ug - spazio usato su disco in Gigabytes<br />
%up - la percentuale dello spazio usato<br />
<br />
%t - spazio complessivo su disco in Megabytes<br />
%tkb - spazio complessivo su disco in Kilobits<br />
%tk - spazio complessivo su disco in Kilobytes<br />
%tg - spazio complessivo su disco in Gigabytes</pre><br />
default: format="%u"<br />
<br />
esempio: format="Spazio libero: %f MB"<br />
esempio: format="Spazio usato: %up %"<br />
<br />
* mountpoint - la directory montata da monitorare / default: mountpoint="/"<br />
esempio: mountpoint="/mnt/cdrom"<br />
<br />
====memory====<br />
<br />
Misura i valori di memoria e swap.<br />
<br />
* interval - l'intervallo di aggiornamento in millisecondi. Il primo parametro specificato verrà utilizzato per ulteriori sensori di memoria, sebbene ognuno possa avere un proprio intervallo / default: interval=3000<br />
* format - le caratteristiche del testo visualizzato; i valori possibili sono:<br />
%fm - memoria libera in megabyte,<br />
%fmb - memoria libera in megabyte (esclusi cache e buffer),<br />
%um - memoria usata in megabyte,<br />
%umb - memoria usata in megabyte (esclusi cache e buffer),<br />
%tm - memoria totale in megabyte,<br />
%fs - swap libera in megabyte,<br />
%us - swap usata in megabyte,<br />
%ts - swap complessiva in megabyte.<br />
default: format="%um"<br />
<br />
esempio: format="Memoria libera: %fm MB"<br />
<br />
<br />
====network====<br />
<br />
Fornisce informazioni sul traffico di rete di una periferica.<br />
<br />
* interval - l'intervallo di aggiornamento in millisecondi. Il primo parametro specificato verrà utilizzato per ulteriori sensori di rete, sebbene ognuno possa avere un proprio intervallo / default: interval=2500<br />
* device - la periferica di rete da utilizzare / default: device="eth0"<br />
esempio: device="ppp0"<br />
* format - le caratteristiche del testo visualizzato; i valori possibili sono:<br />
%in - traffico in entrata in kilobytes per secondo,<br />
%out - traffico in uscita in kilobytes per secondo.<br />
default: format="%in" <br><br />
esempio: format="Traffico in entrata: %in kB/s"<br />
* decimals - il numero di decimali da utilizzare quando si misura il traffico di rete / default: decimals=0<br />
<br />
<br />
====noatun====<br />
<br />
Ottiene informazioni da un possibile processo Noatun in esecuzione.<br />
<br />
* interval - l'intervallo di aggiornamento in millisecondi. Il primo parametro specificato verrà utilizzato per ulteriori sensori noatun, sebbene ognuno possa avere un proprio intervallo / default: interval=1000<br />
* format - le caratteristiche del testo visualizzato; i valori possibili sono:<br />
%id - il nome dcop di noatun, può essere utile connettendosi a una clickarea (WTF?)<br />
(per utilizzarlo fare riferimento al primo esempio),<br />
%title - titolo del brano in corso,<br />
%time - tempo del brano in corso,<br />
%remain - tempo rimanente del brano in corso,<br />
%length - lunghezza del brano in corso,<br />
%full - se Noatun è avviato il sensore restituisce «MAX», altrimenti «0»; utile connettendo il sensore ad una barra, <br> l'immagine verrà mostrata solo se Noatun è in esecuzione / default: format="%title %time / %total"<br />
<br />
esempio: onclick="dcop %v Noatun play" sensor=noatun format="%id"<br />
<br />
<br />
====program====<br />
<br />
Utilizzato per eseguire un programma e collegarne l'output a un misuratore.<br />
<br />
* interval - l'intervallo di aggiornamento in millisecondi. Il primo parametro specificato verrà utilizzato per ulteriori sensori program, sebbene ognuno possa avere un proprio intervallo / default: interval=3600000<br />
* program - il programma che si vuole eseguire<br />
esempio: program="ftpwho -v"<br />
* encoding - questo parametro mostrerà il testo con, per esempio, caratteri russi; il valore è il nome della codifica, [http://doc.trolltech.com/latest/qtextcodec.html qui] si può trovare un elenco delle codifiche encodings. Il primo parametro specificato verrà utilizzato per ulteriori sensori program con un parametro program identico (parametri compresi), sebbene ognuno possa avere un proprio intervallo / default: encoding="" - viene usata la propria localizzazione<br />
esempio: encoding="KOI8-R" <br><br />
esempio: encoding="ISO8859-6"<br />
* line - utilizzare solo se si vuole una singola riga del file<br />
line=1 - la prima riga del file <br><br />
line=2 - la seconda riga del file<br />
<br />
...<br />
<br />
line=-1 - l'ultima riga del file <br><br />
line=-2 - la penultima riga del file<br />
<br />
<br />
====sensor====<br />
<br />
Il sensore sensor utilizza il programma "sensors" per misurare temperatura della CPU, velocità delle ventole, voltaggi e molto altro. Per funzionare è richiesto il programma "sensors".<br />
<br />
* interval - l'intervallo di aggiornamento in millisecondi. Il primo parametro specificato verrà utilizzato per ulteriori sensori sensor, sebbene ognuno possa avere un proprio intervallo / default: interval=30000<br />
* format - le caratteristiche del testo visualizzato; i valori possibili sono:<br />
* %v - il valore del sensore / default: format="%v"<br />
esempio: format="Velocità ventola: %v"<br />
* type - quale misuratore monitorare nel programma "sensors"; eseguire "sensors" per ottenere un elenco di quelli disponibili / default: type="temp2"<br />
esempio: type="fan1" <br />
<br />
<br />
====textfile====<br />
<br />
Legge ripetutamente un file di testo.<br />
<br />
* interval - l'intervallo di aggiornamento in millisecondi. Il primo parametro specificato verrà utilizzato per ulteriori sensori textfile con un percorso identico, sebbene ognuno possa avere un proprio intervallo / default: interval=60000<br />
* path - il percorso del file di testo<br />
esempio: path="/home/utente/file.txt"<br />
* encoding - questo parametro mostrerà il testo con, per esempio, caratteri russi; il valore è il nome della codifica, [http://doc.trolltech.com/latest/qtextcodec.html qui] si può trovare un elenco delle codifiche. Il primo parametro specificato verrà utilizzato per ulteriori sensori textfile con un percorso identico, sebbene ognuno possa avere un proprio intervallo / default: encoding="" - viene usata la propria localizzazione<br />
esempio: encoding="KOI8-R" <br><br />
esempio: encoding="ISO8859-6"<br />
* line - utilizzare solo se si vuole una singola riga del file<br />
line=1 - la prima riga del file <br><br />
line=2 - la seconda riga del file<br />
<br />
...<br />
<br />
line=-1 - l'ultima riga del file <br><br />
line=-2 - la penultima riga del file<br />
<br />
...<br />
* rdf - impostare a «true» se texfile è un file RDF/RSS / default: rdf=false <br />
<br />
<br />
====time====<br />
<br />
Restituisce ora o data attuale.<br />
<br />
* interval - l'intervallo di aggiornamento in millisecondi. Il primo parametro specificato verrà utilizzato per ulteriori sensori time, sebbene ognuno possa avere un proprio intervallo / default: interval=60000<br />
* format - le caratteristiche del testo visualizzato; i valori possibili sono: <br />
d - il numero del giorno senza lo zero iniziale (1-31)<br />
dd - il numero del giorno con lo zero iniziale (01-31)<br />
ddd - il nome abbreviato del giorno ('Lun'..'Dom')<br />
dddd - il nome esteso del giorno('Lunedì'..'Domenica')<br />
M - il numero del mese senza lo zero iniziale (1-12)<br />
MM - il numero del mese con lo zero iniziale (01-12)<br />
MMM - il nome abbreviato del mese ('Gen'..'Dic')<br />
MMMM - il nome esteso del mese ('Gennaio'..'Dicembre')<br />
yy - l'anno espresso con due cifre (00-99)<br />
yyyy - l'anno espresso con quattro cifre (1752-8000)<br />
h - l'ora senza lo zero iniziale (0..23 o 1..12 con la visualizzazione AM/PM)<br />
hh - l'ora con lo zero iniziale (00..23 o 01..12 con la visualizzazione AM/PM)<br />
m - i minuti senza lo zero iniziale (0..59)<br />
mm - i minuti con lo zero iniziale (00..59)<br />
s - i secondi senza lo zero iniziale (0..59)<br />
ss - i secondi con lo zero iniziale (00..59)<br />
z - i millisecondi senza gli zeri iniziali (0..999)<br />
zzz - i millisecondi con gli zeri iniziali (000..999)<br />
AP - visualizzazione AM/PM; AP verrà sostituito da "AM" o "PM"<br />
ap - visualizzazione am/pm; ap verrà sostituito da "am" o "pm"<br />
<br />
Stringhe di esempio (supponendo che QDateTime is 21 May 2001 14:13:09):<br />
format="dd.MM.yyyy" -> 21.05.2001<br />
format="ddd MMMM d yy" -> Tue May 21 01<br />
format="hh:mm:ss.zzz" -> 14:13:09.042<br />
format="h:m:s ap" -> 2:13:9 pm<br />
<br />
<br />
====uptime====<br />
<br />
Restituisce l'attuale uptime di sistema.<br />
<br />
* interval - l'intervallo di aggiornamento in millisecondi. Il primo parametro specificato verrà utilizzato per ulteriori sensori time, sebbene ognuno possa avere un proprio intervallo / default: interval=60000<br />
* format - le caratteristiche del testo visualizzato; i valori possibili sono: <br />
%d - giorni<br />
%h - ore<br />
%m - minuti<br />
%s - secondi<br />
%H - ore con zero iniziale<br />
%M - minuti con zero iniziale<br />
%S - secondi con zero iniziale<br />
<br />
default: format="%dd %h:%M"<br />
<br />
====xmms====<br />
<br />
Ottiene informazioni da un possibile processo XMMS in esecuzione.<br />
<br />
* interval - l'intervallo di aggiornamento in millisecondi. Il primo parametro specificato verrà utilizzato per ulteriori sensori xmms, sebbene ognuno possa avere un proprio intervallo / default: interval=1000 <br />
<br />
<br />
====Suggerimenti====<br />
<br />
{{ Warningbox | <br />
<br />
La funzione ''interval'' ha valori predefiniti molto brevi riguardo la sincronizzazione dei dati.<br />
<br />
Su alcuni dati di scarsa utilità usare dei tempi lunghi, sempre espressi in millisecondi, in modo da risparmiare risorse. }}<br />
<br />
<br />
Il consumo della CPU nell'esecuzione di superkaramba dipende molto da questi tempi, si consiglia perciò di dilatare i tempi di esecuzione di ciò che si ritiene poco utile, come ad esempio il priprio IP locale che difficilmente cambierà, ha un tempo di default di 2500.<br />
<br />
Per il resto seguite le vostre esigenze, sapendo ora che più breve sarà il tempo di aggiornamento del sensore, maggiore sarà il consumo di CPU.<br />
<br />
<br />
===Miscellanea===<br />
====clickarea====<br />
<br />
Definisce un'area cliccabile. Cliccando in una zona verrà eseguito il programma specificato, se la finestra non è bloccata è necessario un doppio click. clickarea viene utilizzato come misuratore, possono essere collegati dei sensori.<br />
<br />
* x - posizione orizzontale dell'angolo alto sinistro dell'area<br />
* y - posizione verticale dell'angolo alto sinistro dell'area<br />
* w - la larghezza dell'area cliccabile<br />
* h - l'altezza dell'area cliccabile<br />
* preview - se impostato a «true» verrà mostrato un rettangolo intorno all'area<br />
* onclick - il programma da eseguire con il click<br />
* %v sarà sostituito con l'eventuale valore di un sensore<br />
<br />
Esempio:<br />
clickarea x=0 y=0 w=100 h=10 onclick="kdialog --msgbox 'CPU load: %v'" sensor=cpu<br />
<br />
<br />
====defaultfont====<br />
<br />
Lo scopo di defaultfont è di ridurre la quantità di parametri quando si utilizzail tag text. Le etichette di testo dopo un tag defaultfont nel file del tema useranno i parametri predefiniti se l'etichetta non ha parametri specificati.<br />
<br />
Se l'etichetta di testo ha i propri valori, quello predefinito viene ignorato; non è necessario specificare tutti i parametri del carattere. Sono possibili tag defaultfont multipli. Qualsiasi valore predefinito verrà cancellato.<br />
<br />
Esempio: <br />
defaultfont shadow=2 color=255,0,0<br />
text x=0 y=0 value="test"<br />
<br />
defaultfont font="times" fontsize=10 color=255,0,0<br />
text x=0 y=40 value="test" font="arial"<br />
text x=0 y=80 value="test" color=0,0,0<br />
<br />
<br />
====<group>, </group>====<br />
<br />
Gli elementi possono essere raggruppati con il tag group; ciò semplifica muovere molti elementi e allo stesso tempo mantenere le distanze dagli altri. È possibile avere gruppi nidificati.<br />
<br />
* x - posizione orizzontale dell'angolo alto sinistro del gruppo<br />
* y - posizione verticale dell'angolo alto sinistro del gruppo<br />
<br />
Esempio:<br />
<group> x=20 y=20<br />
text x=0 y=0 value="test1"<br />
text x=10 y=10 value="test2"<br />
</group> x=20 y=20<br />
<br />
<br />
====theme====<br />
<br />
I temi possono essere caricati all'interno di un tema utilizzando il tag theme. È possibile creare un tema che semplicemente carichi altri temi.<br />
<br />
path - il percorso del file del tema desiderato<br />
<br />
esempio: theme path=noatun.theme <br />
<br />
{{Autori<br />
|Autore = [[Utente:Mm-barabba|Mm-barabba]] 16:22, 16 gen 2011 (CET)<br />
|Estesa_da =<br />
:[[user:Skizzhg|skizzhg]] (Traduzione documentazione)<br />
|Verificata_da=<br />
|Numero_revisori = 0<br />
}}<br />
<br />
[[Categoria:KDE]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Discussioni_old:Far_funzionare_ClipGrab_su_Debian:_ricostruzione_del_pacchetto&diff=41710Discussioni old:Far funzionare ClipGrab su Debian: ricostruzione del pacchetto2017-02-23T18:30:07Z<p>Ombra: guida da adottare</p>
<hr />
<div>Ciao Stampante: complimenti per l'ottima guida! Hai fatto davvero un bel lavoro: non ho ancora letto l'altra, ma questa è davvero buona.<br/><br />
Mi sono permessa solo di inserire l'indice (se ci sono meno di 4 paragrafi non lo inserisce automaticamente, basta inserire il comando TOC preceduto da due underscore e seguito da due underscore, basta che guardi il codice della guida...:D) e di inserire i nomi dei file e delle cartelle all'interno dei tag <nowiki><code></nowiki> in modo da rendere il tutto più leggibile.<br/><br />
Ancora grazie per il contributo! Continua così.:D<br />
:[[Utente:MadameZou|MadameZou]] 15:10, 24 feb 2010 (CET)<br />
<br />
<br />
Guida da adottare: la versione di clipgrab a cui si riferisce la guida è la 3.0.2, dalla homepage del progetto l'ultima versione disponibile è la 3.6.3. Ma soprattutto, esistono dei pacchetti per ubuntu e controllando non mi sembra che libvorbis sia più una dipendenza. Bisognerebbe verificare se i pacchetti per ubuntu sono installabili e funzionano senza problemi su Debian.<br />
La guida, come sempio di come modificare un pacchetto deb, resta valida, ma richiede un aggiornamento e qualche modifica.<br />
: [[Utente:Ombra|Ombra]] 19:30, 23 feb 2017 (CET)</div>Ombrahttps://guide.debianizzati.org/index.php?title=Old:Far_funzionare_ClipGrab_su_Debian:_ricostruzione_del_pacchetto&diff=41709Old:Far funzionare ClipGrab su Debian: ricostruzione del pacchetto2017-02-23T18:21:23Z<p>Ombra: da controllare --> da adottare</p>
<hr />
<div>{{Guida da adottare}}{{Versioni compatibili}}<br />
__TOC__<br />
== Introduzione ==<br />
ClipGrab è un downloader di video/audio che attualmente non si trova nei repository Debian. Si tratta comunque di un programma open-source ed è in grado di effettuare conversioni di formato al volo, nonché di scaricare solamente la traccia audio di un video.<br />
Dal sito ufficiale del software in questione, è possibile scaricare anche i pacchetti Debian, nelle versioni 32 e 64 bit. Purtroppo l'installazione di tali pacchetti presentano un problema: la dipendenza dalla libreria ''libvorbis0'' non può essere soddisfatta, visto che la stessa è stata sostituita dalla ''libvorbis0a'' in tutte le distribuzioni Debian recenti. In questa guida vedremo come correggere l'errore, ossia come ottenere un pacchetto Debian del programma perfettamente funzionante a partire da quello scaricato dal sito ufficiale.<br />
== Estrazione del pacchetto ==<br />
Creiamo innanzitutto una directory di lavoro nella nostra <code>home</code>, dove effettueremo tutte le operazioni; chiamiamola ad esempio BuildPackage.<br />
Dopo aver scaricato il pacchetto clipgrab-3-amd64.deb (o l'alternativa a 32 bit clipgrab-3-i386.deb) dal sito [http://forum.ubuntuusers.de/topic/clipgrab-videos-herunterladen-und-umwandeln/2/#post-2231077], copiamolo dentro BuildPackage ed ivi spacchettiamolo nel seguente modo:<br />
* Apriamo nautilus nella cartella contenente il pacchetto (BuildPackage ovviamente)<br />
* Estraiamo il pacchetto (tasto destro del mouse, voce '''estrai qui'''): apparirà una cartella omonima<br />
* Entriamo nella cartella <code>clipgrab-3-amd64</code>; vi troveremo dentro tre file <code>control.tar.gz</code>, <code>data.tar.gz</code>, <code>debian-binary</code><br />
* Estraiamo nello stesso modo sopra descritto i due archivi tar.gz: verranno così create le cartelle <code>control</code> e <code>data</code>.<br />
== Ricostruzione del pacchetto ==<br />
Personalmente ho scelto di ricreare il pacchetto in modo che l'installazione avvenga nella directory <code>/opt</code>, anziché in <code>/usr/bin</code>, per differenziarlo dai pacchetti scaricati dai repository ufficiali. Realizzeremo il tutto utilizzando soltanto il programma dpkg-deb. La procedura continua così:<br />
* Nella nostra directory di lavoro creiamo un albero di cartelle così strutturato:<br />
[[Immagine:alberocartelle.jpg]]<br />
* Copiamo nella cartella DEBIAN il file <code>control/control</code>; una volta copiato apriamolo e mutiamo libvorbis0 in libvorbis0a (riga Depends)<br />
* Copiamo ora in <code>opt/ClipGrab</code> l'eseguibile <code>/usr/bin/clipgrab</code><br />
* Copiamo ora <code>/usr/share/applications/clipgrab.desktop</code> nella nostra applications; modifichiamolo quindi con gedit: la riga <code>''Exec: clipgrab''</code> deve essere mutata in <code>''Exec: /opt/ClipGrab/clipgrab''</code><br />
* Infine copiamo l'icona <code>/usr/share/pixmaps/clipgrab.png</code> nella nostra pixmaps<br />
<br />
Ora siamo pronti a creare il pacchetto debian:<br />
* da terminale e da root entriamo nella directory di lavoro BuildPackage<br />
* eseguiamo il comando <pre>dpkg-deb --build clipgrab-amd64-opt</pre> ed il pacchetto è pronto.<br />
<br />
{{Autori<br />
|Autore=[[Utente:Stampante|Stampante]] 20:42, 22 feb 2010 (CET)<br />
}}<br />
<br />
[[Categoria: Creare e modificare pacchetti]]<br />
[[Categoria: Audio]]<br />
[[Categoria: Video]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Discussione:Script:_Confronto_Configurazioni_Kernel&diff=41708Discussione:Script: Confronto Configurazioni Kernel2017-02-21T13:31:12Z<p>Ombra: verifica guida</p>
<hr />
<div>verificata la guida su Debian Sid_2017, confrontando la configurazione di un kernel Debian (config-4.8.0-1-amd64) con uno da me compilato (config-4.8.12): provando diverse stringhe di ricerca (sata net snd netfilter ip debug) mi sembra tutto ok.<br />
A rigor di logica lo script dovrebbe funzionare anche su testing e stable, ma al momento non ho modo di fare verifiche. <br/>Ombra</div>Ombrahttps://guide.debianizzati.org/index.php?title=Script:_Confronto_Configurazioni_Kernel&diff=41707Script: Confronto Configurazioni Kernel2017-02-21T13:23:26Z<p>Ombra: verifica della guida</p>
<hr />
<div>{{Versioni compatibili|Unstable_2017}}<br />
__TOC__<br />
== Presentazione ==<br />
<br />
Questo script bash confronta due file di configurazione del kernel e stampa<br />
le voci che contengono una determinata stringa che siano settate (o non settate) nel primo e settate (o non settate) nel secondo.<br />
<br />
Può essere utile per individuare quali voci mancano in un kernel ricompilato ripetto ad un kernel binario debian, in una particolare sezione del kernel.<br />
<br />
== Sintassi ==<br />
Lo script va lanciato nel seguente modo (supponendo di averlo chiamato <code>ker-conf</code>):<br />
<br />
ker-conf config-1 config-2 stringa [s|n] [s|n]<br />
<br />
I primi due parametri sono i due file di configurazione del kernel da confrontare. Il terzo parametro è la stringa che deve essere contenuta nelle voci di configurazione di entrambi i kernel (solo questo sotto-insieme viene confrontato). La stringa di ricerca è ''case-insensitive'', valori di esempio sono: scsi, usb, <br />
acpi, '*', ecc...<br />
<br />
Gli ultimi due parametri (opzionali) possono essere solo 's' o 'n' (settato o non<br />
settato) e si riferiscono rispettivamente allo stato di config-1 e config-2.<br />
Se gli ultimi due parametri vengono omessi viene usato il default: n s.<br />
<br />
Quando l'ultimo parametro è s (e' il default se non specificato) le voci<br />
sono stampate con lo stato (<code>=y</code> oppure <code>=m</code>) del secondo config.<br />
<br />
Per una breve decrizione del funzionamento dello script, basta lanciarlo senza alcun parametro.<br />
<br />
== Script ==<br />
<br />
<pre><br />
#!/bin/bash<br />
#<br />
# ckc - Confronta Kernel Config <br />
# Versione: 0.0.3<br />
#<br />
# Copyright (C) 2005 - Davide Natalini <tindal@katamail.com> <br />
# Antonio Ingargiola <debian@fastwebnet.it><br />
#<br />
# Released under the GNU GENERAL PUBLIC LICENSE.<br />
#<br />
<br />
usage() {<br />
echo -e "\n *** Errore: Parametri non corretti.\n"<br />
echo -e " USO: \n" <br />
echo -e " ${0##*/} config-1 config-2 stringa [s|n] [s|n]\n"<br />
echo -e " Lo script ${0##*/} confronta due file di configurazione del kernel e stampa" <br />
echo -e " le voci che contengono 'stringa' che siano settate (o non settate) nel primo"<br />
echo -e " e settate (o non settate) nel secondo.\n"<br />
echo -e " Gli ultimi due parametri possono essere solo 's' o 'n' (settato o non" <br />
echo -e " settato) e si riferiscono rispettivamente allo stato di config-1 e config-2." <br />
echo -e " Se gli ultimi due parametri vengono omessi viene usato il default: n s. \n"<br />
echo -e " Quando l'ultimo parametro e' s (e' il default se non specificato) le voci"<br />
echo -e " sono stampate con lo stato (built-in o modulo) del secondo config.\n"<br />
exit 1<br />
}<br />
<br />
filter () {<br />
FILE=$1; STATUS=$2<br />
BOOL=''; EXP='^ *$'; [ "$STATUS" = "s" ] && BOOL="-v" || EXP='=|is not set'<br />
SED_EXP='s/\(# \)\?\([0-9a-zA-Z_]\+\)\(=.\)\?.*/\2\3/'<br />
egrep $BOOL '^#' "$FILE" | egrep $BOOL "$EXP" | egrep -i "$PAR" | sed "$SED_EXP"<br />
}<br />
<br />
[ $# -lt 3 ] || [ $# -gt 5 ] && usage<br />
<br />
NEW_CONFIG=$1; REF_CONFIG=$2; PAR=$3<br />
<br />
STATUS_NEW=${4-n}; STATUS_REF=${5-s}<br />
for S in $STATUS_NEW $STATUS_REF; do [ "$S" = "s" ] || [ "$S" = "n" ] || usage; done<br />
<br />
TMP_FILE_NEW="/tmp/${0##*/}-new.tmp"<br />
TMP_FILE_REF="/tmp/${0##*/}-ref.tmp"<br />
ON_EXIT="rm -f $TMP_FILE_NEW $TMP_FILE_REF"<br />
<br />
trap "$ON_EXIT" 0 15<br />
<br />
filter $REF_CONFIG $STATUS_REF > $TMP_FILE_REF<br />
filter $NEW_CONFIG $STATUS_NEW > $TMP_FILE_NEW<br />
<br />
for LINE_NEW in $( cat $TMP_FILE_NEW )<br />
do<br />
egrep "${LINE_NEW/%=[ymn]/}(=[ymn])?$" $TMP_FILE_REF<br />
done<br />
<br />
exit 0<br />
</pre><br />
<br />
{{Autori<br />
|Autore=[[Utente:TheNoise|TheNoise]]<br />
|Verificata_da=<br />
: [[Utente:Ombra|Ombra]] 14:23, 21 feb 2017 (CET)}}<br />
[[Categoria:Linux]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Apt-file:_ricerca_all%27interno_dei_pacchetti&diff=40625Apt-file: ricerca all'interno dei pacchetti2016-01-12T00:15:47Z<p>Ombra: verifica + aggiornamento compatibilità Unstable_2016</p>
<hr />
<div>{{APT<br />
|precedente=apt-cache<br />
|successivo=apt-mark<br />
}}<br />
{{Versioni compatibili|Wheezy|Jessie|Testing_2015|Unstable_2016}}<br />
== Introduzione ==<br />
Apt-file è un potente motore di ricerca in grado di indicare a quale pacchetto appartiene un determinato file; sembra una cosa da poco, ma non sempre è così, soprattutto quando si ha a che fare con le compilazioni da sorgenti o quando si ha bisogno di cercare un file appartenente a pacchetti non installati sul sistema.<br />
<br />
== Installazione ==<br />
Niente di più semplice, ovviamente con [[privilegi di amministrazione]]:<br />
<pre><br />
# apt-get install apt-file<br />
</pre><br />
<br />
== Configurazione ==<br />
Il file di configurazione è <code>/etc/apt/apt-file.conf</code> e presenta due sezioni:<br />
# dove collocare i file archivio e come rinominarli (all'interno del file è presente uno specchietto riassuntivo delle variabili utilizzabili);<br />
# la sintassi dei comandi utilizzati per scaricare i file.<br />
Queste direttive, salvo casi particolari, non necessitano di modifiche.<br />
<br />
== Utilizzo ==<br />
Una volta installato, dobbiamo aggiornare la lista dei file e popolare la cache che <code>apt-file</code> utilizzerà per le sue ricerche. Per fare questo è sufficiente dare il seguente comando:<br />
<pre><br />
# apt-file update<br />
</pre><br />
così verranno scaricati i file "Packages.gz" per i vari [[repository]] presenti nel file <code>/etc/apt/sources.list</code> e contenenti la lista di tutti i pacchetti disponibili. Questi file, a seconda dei repository impostati, possono raggiungere dimensioni di svariati MByte<br/><br />
La directory che conterrà la cache di <code>apt-file</code> sarà:<br />
;~/.cache/apt-file/:se il comando è stato eseguito da utente normale<br />
;/var/cache/apt/apt/file/:se il comando è stato eseguito da [[root]], e sarà consultabile da tutti gli utenti del sistema<br />
<br />
Il comando non necessita di essere eseguito come root.<br />
<br />
Vediamo, ora, le principali funzioni.<br />
=== Aggiornamento della cache ===<br />
<pre><br />
# apt-file update<br />
</pre><br />
Aggiorna la cache di <code>apt-file</code> .<br/><br />
Questo è il comando che bisognerebbe eseguire sempre prima di ogni ricerca per fare in modo che quest'ultima possa operare su dati aggiornati. In alternativa è possibile creare un job di [[Cron]] che effettui l'aggiornamento della cache ad ogni avvio del sistema; per questo scopo è sufficiente eseguire il comando "crontab -e" da utente normale (o da root o da entrambi) e inserire le seguenti righe:<br />
<pre><br />
# aggiornamento al boot della cache di apt-file<br />
@reboot apt-file -N update<br />
</pre><br />
=== Eliminazione della cache ===<br />
<pre><br />
# apt-file purge<br />
</pre><br />
Cancella la cache di <code>apt-file</code>. Anche in questo caso, come per l'update, la directory varierà a seconda dell'utente che esegue il comando.<br />
=== Ricerca di un file === <br />
<pre><br />
$ apt-file search <testo><br />
</pre><br />
Cerca e mostra tutti i file che hanno <testo> nel proprio nome, oltre al pacchetto in cui sono contenuti.<br/><br />
Esempio:<br />
<pre><br />
$ apt-file search bin/nome-eseguibile<br />
</pre><br />
Questo comando troverà tutti i pacchetti che contengono file che cominciano per ''nome-eseguibile'' e che si trovano in una directory che finisce per bin (come <code>/bin/</code>, <code>/sbin/</code>, <code>/usr/bin</code>, <code>/usr/sbin</code>).<br />
<br />
=== Visualizzazione dei contenuti di un pacchetto ===<br />
<pre><br />
$ apt-file list <nomepacchetto><br />
</pre><br />
Mostra il contenuto di <nomepacchetto>.<br/><br />
Si noti che questo comando è molto simile a "dpkg -L <nomepacchetto>" tranne che per un aspetto non di poco conto: il pacchetto non deve necessariamente essere installato.<br/><br />
Esempio:<br />
<pre>$ apt-file -F list apt</pre><br />
mostrerà il contenuto del pacchetto <code>apt</code> .<br />
<br />
Invece il comando:<br />
<pre>$ apt-file list apt</pre><br />
mostrerà il contenuto di tutti i pacchetti che hanno <code>apt</code> nel loro nome.<br />
<br />
=== Opzioni ===<br />
Tra le opzioni disponibili, ricordiamo quelle principali (di uso comune):<br />
; <code>--ignore-case | -i </code>: permette di effettuare ricerca case-insensitive;<br />
; <code> --regexp | -x </code>: tratta come un pattern di una espressione regolare;<br />
; <code>--package-only </code>: mostra solo il nome del pacchetto, e non quello dei file, utile quando si esegue una ricerca usando un nome molto comune.<br />
; <code>--fixed-string | -F</code>:utile per delimitare la ricerca solo al solo pattern effettivamente digitato.<br />
<br />
{{Autori<br />
|Autore=[[User:MaXeR|MaXeR]]<br />
|Verificata_da=<br />
:[[Utente:S3v|S3v]] 17:31, 7 giu 2013 (CEST)<br />
:[[Utente:HAL 9000|HAL 9000]] 20:00, 12 apr 2015 (CEST)<br />
:[[Utente:Ombra|Ombra]] 01:15, 12 gen 2016 (CET)<br />
|Numero_revisori=3<br />
}}<br />
<br />
[[Categoria:Apt]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Apt-listbugs:_come_monitorare_i_bug&diff=40578Apt-listbugs: come monitorare i bug2015-12-20T23:57:06Z<p>Ombra: revisione + link esterni</p>
<hr />
<div>{{Versioni compatibili|Jessie|Testing_2015|Unstable_2015}}<br />
== Introduzione ==<br />
Spesso ci è capitato di installare dei pacchetti contenenti dei [[bug]], conosciuti anche prima del nostro download. Prima di installare un pacchetto, infatti, sarebbe opportuno fare una visitina su questo<sup>[[#Collegamenti esterni| [1]]]</sup> sito, dove vengono tracciati i bug segnalati. Questo motore di gestione dei bug è molto potente e funzionale, ma se non volessimo perdere tempo ogni volta? <code>apt-listbugs</code> è la risposta!<br/><br />
<code>apt-listbugs</code>, infatti, ci permette di essere informati sui bug presenti nel nostro sistema e presenti nei pacchetti che stiamo per installare; vediamo come utilizzarlo e configurarlo al meglio per le nostre esigenze!<br />
<br />
== Installazione ==<br />
Per installare apt-listbugs, è sufficiente un:<br />
<pre><br />
# apt-get install apt-listbugs<br />
</pre><br />
<br />
== Configurazione ==<br />
<code>apt-listbugs</code> è già configurato per interagire con [[dpkg]] e [[APT]] in quanto aggiunge un file nella directory <code>/etc/apt/apt.conf.d/</code>, che contiene le direttive da eseguire al termine del download dei pacchetti e prima della loro installazione.<br/><br />
Inoltre viene creata la directory <code>/etc/apt/listbugs/</code>; essa conterrà dei file di supporto per il normale funzionamento del programma, come ad esempio il file <code>ignore_bugs</code>, contenente la lista dei bug ignorati durante l'installazione dei pacchetti.<br />
<br />
== Utilizzo ==<br />
L'utilizzo base del programma è semplicissimo e può avvenire in due modi distinti<br />
;automaticamente:ogni volta che installeremo o aggiorneremo dei pacchetti.<br />
;manualmente:eseguendo <code>apt-listbugs</code> da linea di comando. Utile per conoscere tutti bug (e il loro stato) relativi ad un pacchetto.<br />
<br />
=== Utilizzo automatico ===<br />
Ogni volta che aggiorniamo o installiamo un pacchetto, <code>apt-listbugs</code> interrogherà i server Debian per sapere se ci sono dei bug aperti per le applicazioni installate; raccolte le informazioni ci avvertirà in caso di bug (altrimenti lascerà continuare normalmente il processo di installazione).<br />
In caso di presenza di bug, mostrerà a video la lista di quelli presenti (sia aperti che chiusi); ecco un esempio:<br />
<pre><br />
Recupero delle segnalazioni di bug... Fatto<br />
Analisi delle informazioni... Fatto<br />
Bug critical di plymouth (-> 0.9.0-9) <Aperti><br />
b1 - #782456 - plymouth: With plymouth installed, starting the DM sometimes fails<br />
Riepilogo:<br />
plymouth (1 bug)<br />
Installare/aggiornare i precedenti pacchetti? [Y/n/?/...]<br />
</pre><br />
<br />
Come potete vedere, visualizza una lista di bug presenti, divisi per gravità (prima quelli 'Critical', poi quelli 'Grave') e poi per pacchetto. Inoltre i bug sono contraddistinti da 2 [[tag]], '''<done>''' e '''<open>''':<br/><br />
'''<done>''' rappresenta un bug corretto<br/><br />
'''<open>''' rappresenta un bug ancora aperto<br/><br />
[[Severità | Qui]] è visibile la descrizione dei livelli di gravità dei bug (severities).<br />
<br />
Di default <code>apt-listbugs</code> mostrerà i bug appartenenti alle prime tre categorie. In caso di bug rilevati, viene chiesto cosa fare.<br />
Le opzioni disponibili sono:<br/><br />
; <code>y</code>: continua l'installazione ignorando i bug trovati;<br/><br />
; <code>n</code>: interrompe immediatamente l'installazione;<br/><br />
; <code><num></code>: inserendo il numero del bug (quello preceduto da #) è possibile ottenere maggiori informazioni riguardo al bug;<br/><br />
; <code>r</code>: mostra la lista dei bug (comodo dopo la visualizzazione dei dettagli, ad esempio);<br/><br />
; <code>p</code>: esegui il pinning di tutti i pacchetti segnalati nel bug report (cioè lo 'blocca' e non lo installa); questa opzione richiede l'uscita da '''apt-get''' e una riesecuzione del comando di installazione/aggiornamento precedentemente lanciato;<br/><br />
; <code>p <pkg></code>: esegue il pinning del pacchetto indicato;<br/><br />
; <code>i</code>: ignora il bug corrispondente a (per evitare il pinning di pacchetti il cui bug è segnato come "done");<br/><br />
; <code>?</code>: mostra un piccolo help con le opzioni utilizzabili;<br/><br />
; <code>w</code>: mostra il report bug in html (mai usato).<br />
<br />
Il funzionamento, quindi, è molto semplice: basta leggere con attenzione la lista dei bug riscontrati ed agire di conseguenza!<br/><br />
Nel caso di pinning di anche un solo pacchetto è necessario ricominciare il processo di aggiornamento/installazione.<br />
<br />
Se si effettua il [[pinning]] di uno o più pacchetti, esso sarà annotato nel file <code>/etc/apt/preferences.d/apt-listbugs</code>. Sarà necessario al prossimo aggiornamento rimuoverlo dal file in questione, altrimenti esso sarà sempre assunto come aggiornato e non più proposto per l'aggiornamento.<br />
<br />
Installando <code>plymouth</code> è stato segnalato un bug con severità '''critical''' che ne compromette il funzionamento, per cui si è deciso di far eseguire ad <code>apt-listbugs</code> il pinning del pacchetto.<br />
Nel file <code>/etc/apt/preferences.d/apt-listbugs</code> troviamo questo blocco relativo:<br />
<pre><br />
Explanation: Pinned by apt-listbugs at 2015-05-25 15:54:32 +0200<br />
Explanation: #782456: plymouth: With plymouth installed, starting the DM sometimes fails<br />
Package: plymouth<br />
Pin: version *<br />
Pin-Priority: -30000<br />
</pre><br />
<br />
al prossimo aggiornamento, per controllare se sono presenti nuove versioni di plymouth, si dovranno rimuovere queste indicazioni, altrimenti il pacchetto in questione verrà assunto sempre come 'aggiornato'.<br/><br />
Se non sono mai state fatte modifiche al file <code>/etc/apt/preferences</code> (soprattutto per quanto riguarda pinning per l'utilizzo di più release insieme) lo si può tranquillamente eliminare prima di ogni aggiornamento.<br />
<br />
{{Box|Nota|Nelle verioni meno recenti il file in cui apt-listbugs scrive i pacchetti bloccati era <br/> <code>/etc/apt/preferences</code>}}<br />
<br />
Se si vuol disabilitare la ricerca dei bug da parte di <code>apt-listbugs</code> ad ogni aggiornamento/rimozione dei pacchetti, basta commentare le righe presenti nel file <code>/etc/apt/apt.conf.d/10apt-listbugs</code> .<br />
<br />
== Conclusioni ==<br />
<code>apt-listbugs</code> è senza dubbio uno strumento utilissimo, in quanto previene l'installazione di pacchetti che possono rendere inutilizzabile o instabile la nostra Debian Box.<br/><br />
Ovviamente non viene a sostituire le normali visite al sito bugs.debian.org<sup>[[#Collegamenti esterni| [1]]]</sup>, dove sono elencati tutti i bug di tutti i pacchetti presenti in Debian (che si invita a controllare prima di chiedere aiuto per un comportamento strano di una applicazione).<br />
<br />
==Collegamenti esterni==<br />
[1] [http://bugs.debian.org bugs.debian.org]<br/><br />
<br />
<br />
{{Autori<br />
|Autore=[[User:MaXeR|MaXeR]]<br />
|Verificata_da=<br />
:[[Utente:S3v|S3v]] 16:32, 26 feb 2014 (CET)<br />
: [[Utente:Spoon|Spoon]] 16:11, 25 mag 2015 (CEST)<br />
: [[Utente:Ombra|Ombra]] 00:57, 21 dic 2015 (CET)<br />
|Numero_revisori=3<br />
}}<br />
<br />
[[Categoria:Apt]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=40576Patch Con Kolivas: incrementare le prestazioni desktop2015-12-20T13:01:56Z<p>Ombra: fix broken links</p>
<hr />
<div>{{Versioni compatibili|Jessie|Testing_2015|Unstable_2015}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* Con Kolivas Wiki: SD<sup>[[#Collegamenti esterni | [8]]]</sup><br />
<br />
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:<br />
<br />
* The Rotating Staircase Deadline Scheduler<sup>[[#Collegamenti esterni | [9]]]</sup><br />
* RSDL hits a snag<sup>[[#Collegamenti esterni | [10]]]</sup><br />
* Schedulers: the plot thickens<sup>[[#Collegamenti esterni | [11]]]</sup> <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; 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<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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''.<br />
<br />
; 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.<br />
<br />
== Installazione ==<br />
<br />
{{Box|Nota|per una migliore comprensione delle procedure che seguono, fate rifermineto la guida sul [[Debian Kernel Howto|kernel alla debian-way]]}}<br />
<br />
Prima di procedere è necessario installare alcuni pacchetti:<br />
<pre> # apt-get install module-init-tools kernel-package libncurses5-dev fakeroot lrzip schedtool time </pre><br />
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.<br />
<br />
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>.<br />
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.<br />
<br />
Spostate i due archivi appena scaricati in una directory nella nostra home, ad esempio in <code>~/src/</code> e scompattate i sorgenti<br />
<br />
<pre>$ cd ~/src/<br />
$ tar -xvf linux-4.0.tar.xz</pre><br />
<br />
Una volta scompattati i sorgenti possiamo applicare la patch con:<br />
<br />
<pre>$ cd linux-4.0<br />
$ lrzcat ../patch-4.0-ck1.lrz | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd ../<br />
$ mv linux-4.0 linux-4.0-ck1</pre><br />
<br />
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<br />
<br />
<pre> $ cd linux-4.0-ck1<br />
$ cp /boot/config-3.16.0-4-amd64 .config<br />
$ make oldconfig </pre><br />
<br />
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.<br />
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.<br />
<br />
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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -bfs --revision 1 --initrd kernel_image</pre><br />
<br />
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>.<br />
<br />
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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -bfs --revision 1 --initrd kernel_image</pre><br />
<br />
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>.<br />
<br />
Una volta terminanta la compilazione sarà sufficiente acquisire i privilegi di root e installare il nuovo kernel con dpkg:<br />
<br />
<pre>$ cd ../<br />
# dpkg -i linux-image-4.0.0-ck1-bfs_1_amd64.deb</pre><br />
<br />
== Utilizzo e Tuning ==<br />
<br />
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/><br />
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>; <br />
<br />
per lanciare un programma con priorità Idleprio si utilizza un comando del tipo<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade</pre><br />
<br />
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. <br />
Invece il comando che segue trasforma la shell corrente in SCHED_ISO<br />
<br />
<pre>$ schedtool -I $$ </pre><br />
<br />
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<br />
<br />
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre><br />
<br />
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).<br />
<br />
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un<br />
<br />
<pre>$ schedtool -I -e amarok</pre><br />
<br />
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 <br />
processo soft-realtime. <br/> <br />
Per modificare il limite, ad esempio portarlo a 85, basta un<br />
<br />
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre><br />
<br />
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<br />
<br />
<pre> # schedtool -N `pidof amarok` </pre><br />
<br />
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. <br />
<br />
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.<br />
<br />
<br />
== Links ==<br />
===Nel wiki===<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
<br />
===Collegamenti esterni===<br />
'''''BFS''''':<br/><br />
[1] [http://users.tpg.com.au/ckolivas/ Homepage di Con Kolivas]<br/><br />
[2] [http://users.tpg.com.au/ckolivas/kernel/ Patch ck più recente]<br/><br />
[3] [http://ck.kolivas.org/patches/ versioni precedenti]<br/><br />
[4] [http://www.kernel.org/pub/linux/kernel/ archivi kernel.org]<br/><br />
[5] [http://ck.kolivas.org/patches/bfs/bfs-configuration-faq.txt Configuration FAQ]<br/><br />
[6] [http://ck.wikia.com/wiki/BFS_FAQ BFS FAQ]<br/><br />
[7] [http://ck-hack.blogspot.com/ notizie sugli ultimi hack di C.K.]<br/><br />
<br />
'''''Vecchio patchset''''':<br/><br />
[8] [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br/><br />
[9] [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br/><br />
[10] [http://lwn.net/Articles/226054/ RSDL hits a snag]<br/><br />
[11] [http://lwn.net/Articles/230574/ Schedulers: the plot thickens]<br/><br />
[12] [http://apcmag.com/why_i_quit_kernel_developer_con_kolivas.htm Con Kolivas: Why i quit]<br/><br />
<br />
<br />
{{Autori<br />
|Autore= [[Utente:Ombra|Ombra]] 19:03, 26 apr 2015 (CEST) <br/><br />
(guida originariamente scritta da [[Utente:TheNoise|The Noise]])<br />
|Verificata_da=<br />
|Estesa_da=<br />
|Numero_revisori=0<br />
}}<br />
<br />
[[Categoria:Kernel]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=40575Patch Con Kolivas: incrementare le prestazioni desktop2015-12-20T12:40:54Z<p>Ombra: link esterni</p>
<hr />
<div>{{Versioni compatibili|Jessie|Testing_2015|Unstable_2015}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* Con Kolivas Wiki: SD<sup>[[#Collegamenti esterni | [8]]]</sup><br />
<br />
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:<br />
<br />
* The Rotating Staircase Deadline Scheduler<sup>[[#Collegamenti esterni | [9]]]</sup><br />
* RSDL hits a snag<sup>[[#Collegamenti esterni | [10]]]</sup><br />
* Schedulers: the plot thickens<sup>[[#Collegamenti esterni | [11]]]</sup> <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; 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<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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''.<br />
<br />
; 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.<br />
<br />
== Installazione ==<br />
<br />
{{Box|Nota|per una migliore comprensione delle procedure che seguono, fate rifermineto la guida sul [[Debian Kernel Howto|kernel alla debian-way]]}}<br />
<br />
Prima di procedere è necessario installare alcuni pacchetti:<br />
<pre> # apt-get install module-init-tools kernel-package libncurses5-dev fakeroot lrzip schedtool time </pre><br />
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.<br />
<br />
La patch <code>-ck</code> più recente può essere scaricata dal sito di Con Kolivas, al seguente indirizzo:<br />
* http://users.on.net/~ckolivas/kernel/<sup>[[#Collegamenti esterni | [2]]]</sup><br />
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>.<br />
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.<br />
<br />
Spostate i due archivi appena scaricati in una directory nella nostra home, ad esempio in <code>~/src/</code> e scompattate i sorgenti<br />
<br />
<pre>$ cd ~/src/<br />
$ tar -xvf linux-4.0.tar.xz</pre><br />
<br />
Una volta scompattati i sorgenti possiamo applicare la patch con:<br />
<br />
<pre>$ cd linux-4.0<br />
$ lrzcat ../patch-4.0-ck1.lrz | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd ../<br />
$ mv linux-4.0 linux-4.0-ck1</pre><br />
<br />
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<br />
<br />
<pre> $ cd linux-4.0-ck1<br />
$ cp /boot/config-3.16.0-4-amd64 .config<br />
$ make oldconfig </pre><br />
<br />
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.<br />
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.<br />
<br />
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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -bfs --revision 1 --initrd kernel_image</pre><br />
<br />
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>.<br />
<br />
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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -bfs --revision 1 --initrd kernel_image</pre><br />
<br />
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>.<br />
<br />
Una volta terminanta la compilazione sarà sufficiente acquisire i privilegi di root e installare il nuovo kernel con dpkg:<br />
<br />
<pre>$ cd ../<br />
# dpkg -i linux-image-4.0.0-ck1-bfs_1_amd64.deb</pre><br />
<br />
== Utilizzo e Tuning ==<br />
<br />
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/><br />
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>; <br />
<br />
per lanciare un programma con priorità Idleprio si utilizza un comando del tipo<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade</pre><br />
<br />
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. <br />
Invece il comando che segue trasforma la shell corrente in SCHED_ISO<br />
<br />
<pre>$ schedtool -I $$ </pre><br />
<br />
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<br />
<br />
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre><br />
<br />
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).<br />
<br />
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un<br />
<br />
<pre>$ schedtool -I -e amarok</pre><br />
<br />
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 <br />
processo soft-realtime. <br/> <br />
Per modificare il limite, ad esempio portarlo a 85, basta un<br />
<br />
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre><br />
<br />
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<br />
<br />
<pre> # schedtool -N `pidof amarok` </pre><br />
<br />
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. <br />
<br />
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.<br />
<br />
<br />
== Links ==<br />
===Nel wiki===<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
<br />
===Collegamenti esterni===<br />
'''''BFS''''':<br/><br />
[1] [http://users.on.net/~ckolivas/ Homepage di Con Kolivas]<br/><br />
[2] [http://users.on.net/~ckolivas/kernel/ Patch ck più recente]<br/><br />
[3] [http://ck.kolivas.org/patches/ versioni precedenti qui]<br/><br />
[4] [http://www.kernel.org/pub/linux/kernel/ archivi kernel.org]<br/><br />
[5] [http://ck.kolivas.org/patches/bfs/bfs-configuration-faq.txt Configuration FAQ]<br/><br />
[6] [http://ck.wikia.com/wiki/BFS_FAQ BFS FAQ]<br/><br />
[7] [http://ck-hack.blogspot.com/ notizie sugli ultimi hack di C.K.]<br/><br />
<br />
'''''Vecchio patchset''''':<br/><br />
[8] [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br/><br />
[9] [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br/><br />
[10] [http://lwn.net/Articles/226054/ RSDL hits a snag]<br/><br />
[11] [http://lwn.net/Articles/230574/ Schedulers: the plot thickens]<br/><br />
[12] [http://apcmag.com/why_i_quit_kernel_developer_con_kolivas.htm Con Kolivas: Why i quit]<br/><br />
<br />
<br />
{{Autori<br />
|Autore= [[Utente:Ombra|Ombra]] 19:03, 26 apr 2015 (CEST) <br/><br />
(guida originariamente scritta da [[Utente:TheNoise|The Noise]])<br />
|Verificata_da=<br />
|Estesa_da=<br />
|Numero_revisori=0<br />
}}<br />
<br />
[[Categoria:Kernel]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Installare_Debian&diff=40574Installare Debian2015-12-19T21:01:10Z<p>Ombra: fix broken links e link esterni parte3</p>
<hr />
<div>{{Template:Installazione<br />
|successivo=Installare Debian da pendrive USB o SD card<br />
}}<br />
{{Versioni compatibili|Jessie}}<br />
In concomitanza con il rilascio<sup>[[#Collegamenti esterni | [1]]]</sup> di Debian 8.0 [[Jessie|"Jessie"]], il team Debianizzati.Org ha raccolto in questa pagina tutti i modi in cui è possibile installare Debian, CD, DVD, Hard Disk o supporti USB/SD .<br />
<br />
Ora '''nessuna scusa è buona''' per non avere una Debian!<br />
<br />
= Introduzione =<br />
<br />
Un aspetto che caratterizza Debian è la possibilità di scaricare liberamente le immagini per la sua installazione da diverse fonti: via FTP, via HTTP, via Jigdo o via torrent.<br/><br />
Essendo ogni immagine disponibile per diverse architetture, è necessario scegliere quella adatta alla propria macchina affinché il processo d'installazione possa partire correttamente.<br />
<br />
Attualmente la versione stable di Debian supporta dieci diverse [[architettura|architetture]]:<br />
# PC 32-bit («''i386''») <br />
# PC 64-bit («''amd64''») <br />
# Motorola/IBM PowerPC («''powerpc''» per hardware datato e «''pc64el''» per nuovo hardware a 64-bit (little-endian))<br />
# MIPS («''mips''» (big-endian) e «''mipsel''» (little-endian)) <br />
# IBM S/390 («s390x» per 64-bit) <br />
# ARM (32-bit: «armel» oppure, per hardware più recente, «armhf». 64-bit: «''arm64''») <br />
<br />
Esistono, inoltre, particolari immagini .iso "multi-arch" che permettono l'installazione sia per l'architettura "i386" che per "amd64".<br />
<br />
Nessun'altra distribuzione offre così tante possibilità di installazione, adattabili davvero ad ogni esigenza e soprattutto ad ogni peculiarità hardware.<br/><br />
Per una descrizione di tutti i file immagine e kernel<sup>[[#Collegamenti esterni | [2]]]</sup>, disponibili per i vari tipi di installazione, fare riferimento al file MANIFEST<sup>[[#Collegamenti esterni | [3]]]</sup> (qui indicato, a titolo di esempio, per architettura "i386").<br/><br />
Prima di scegliere l'immagine da utilizzare per l'installazione, è necessario considerare diversi fattori:<br />
* [[La_struttura_della_Distribuzione|versione di Debian]]<br />
* possibilità di accesso alla rete<br />
* tempo e/o banda di download<br />
* disponibilità dei supporti adatti a contenere l'immagine<br />
<br />
questi fattori sono da tenere bene in conto quando si deve decidere quale immagine scaricare. La seguente guida cercherà di descrivere tutti i metodi d'installazione illustrandone le rispettive caratteristiche.<br />
<br />
Tutti i seguenti metodi d'installazione fanno riferimento a Debian [[stable]], se si volesse installare Debian [[testing]] o Debian [[unstable]] (Sid) leggere la sezione [[#Altre versioni|"Altre versioni"]]<br />
<br />
= Avanzamento di versione da Debian 7.x ([[Wheezy]]) a Debian 8.0 ([[Jessie]]) =<br />
Prima di effettuare l'aggiornamento da Wheezy a Jessie è '''caldamente''' consigliato leggere la documentazione ufficiale per non incorrere in brutte sorprese:<br />
* Avanzamento di versione<sup>[[#Collegamenti esterni | [4]]]</sup><br />
L'avanzamento consiste solitamente in un semplice aggiornamento del file <code>/etc/apt/sources.list</code> in cui il sistema APT di gestione dei [[pacchetto|pacchetti]] conserva le fonti di installazione del software ([[repository]]).<br/><br />
Leggere anche [[I repository ed il loro utilizzo]], in particolare il paragrafo "[[I repository ed il loro utilizzo#Passaggio da stable a testing|Passaggio da stable a testing]]".<br />
<br />
= Metodi di installazione =<br />
Di seguito verranno elencati brevemente alcuni dei principali metodi d'installazione previsti da Debian:<br />
<br />
== CDROM o DVD ==<br />
È necessario scaricare almeno l'immagine del primo CDROM o DVD relativa alla propria architettura, masterizzarla e poi fare il boot usando il CDROM o DVD, assicurandosi che nella configurazione del BIOS il lettore CD/DVD sia la prima periferica di boot. Se si scaricano e si masterizzano una o più immagini di CDROM o DVD aggiuntivi è possibile (ovviamente) installare anche tutto il software aggiuntivo presente nelle altre immagini. È possibile scaricare le iso tramite HTTP o FTP, bittorrent, oppure tramite il potentissimo [[Jigdo]].<br />
<br />
Download delle immagini CD/DVD:<br />
* via HTTP/FTP<sup>[[#Collegamenti esterni | [5]]]</sup><br />
* via torrent<sup>[[#Collegamenti esterni | [6]]]</sup><br />
* via Jigdo<sup>[[#Collegamenti esterni | [7]]]</sup><br />
<br />
== Blu-ray ==<br />
Le immagini Blu-ray di Jessie, sia single-layer (bd) che double-layer (dlbd), sono disponibili per il download solo attraverso Jigdo e, attualmente, sono state create per due sole architetture, i386 e amd64, oltre ad un'immagine contenente i pacchetti sorgente.<br/><br />
Questo<sup>[[#Collegamenti esterni | [8]]]</sup> il link da cui poter scaricare le immagini Blu-ray tramite Jigdo.<br />
<br />
== Netinst ==<br />
Tramite netinst (net installation) è possibile installare Debian scaricando un'immagine di circa 180 MB per poi masterizzarla su CD o DVD oppure utilizzarla per un'installazione mediante supporto USB o scheda SD.<br/><br />
Quest'immagine contiene solo l'installer e una quantità molto ridotta di pacchetti, costituenti il sistema base, che permettono di scaricare i pacchetti rimanenti via rete.<br/><br />
Poiché l'installazione con l'immagine netinst permette di scaricare solo i pacchetti che si è scelto di installare, essa rappresenta un metodo molto efficiente di installazione in termini di tempo e di banda di download.<br/><br />
<br />
Download delle immagini netinst:<br />
* via HTTP/FTP<sup>[[#Collegamenti esterni | [9]]]</sup><br />
* via torrent<sup>[[#Collegamenti esterni | [10]]]</sup><br />
* via Jigdo<sup>[[#Collegamenti esterni | [11]]]</sup><br />
<br />
== Mini.iso == <br />
La "mini.iso" è attualmente l'immagine più piccola disponibile per permettere l'installazione di Debian. Questa immagine è stata pensata per il network boot ma è perfettamente funzionante anche se avviata da altri dispositivi. A differenza della netinst, l'immagine "mini.iso" contiene solo l'installer necessario ad avviare il sistema, tutto il restante software viene scaricato dalla rete.<br />
<br />
Per il download della "mini.iso" bisogna innanzitutto spostarsi in questa pagina<sup>[[#Collegamenti esterni | [12]]]</sup> e poi, nella sezione "Network Boot", scegliere la propria architettura e spostarsi nella directory "netboot".<br />
<br />
== Floppy disk ==<br />
A partire dal kernel 2.6.24, la capienza dei floppy disk non è più sufficiente a contenere i file necessari all'avvio del processo d'installazione.<br/><br />
Per poter installare Debian è quindi necessario far ricorso ad altri metodi d'installazione.<br />
<br />
== Dispositivo USB o scheda SD ==<br />
Se non si dispone di un lettore CD o DVD (come accade per i netbook o per molti server), è possibile installare Debian partendo da un dispositivo USB o da una SD card, purché il sistema lo consenta.<br/><br />
Tramite tali dispositivi è possibile utilizzare le immagini CD/DVD, netinst o mini.iso.<br/><br />
Per una guida su come preparare un dispositivo USB o una SD card per avviare l'installazione di Debian, leggere [[Installare Debian da pendrive USB o SD card | questa pagina]].<br />
<br />
== TFTP da rete ==<br />
Se la propria macchina è connessa a una rete locale, allora è possibile avviare il processo d'installazione accedendovi da remoto e facendo il boot automaticamente via rete (utile per installazioni contemporanee su decine di macchine).<br/><br />
Consultare la pagina<sup>[[#Collegamenti esterni | [13]]]</sup> di manuale per la preparazione dei file per l'avvio TFTP da rete.<br />
<br />
== Immagini .iso da hard disk ==<br />
<br />
Questo metodo consente di installare Debian partendo da un'immagine .iso precedentemente salvata in una cartella del proprio hard disk.<br/><br />
Qui è possibile leggere la guida che illustra questo procedimento: [[Installare Debian da hard disk]]<br />
<br />
== Installazione senza rete (off-line) ==<br />
Se non si possiede una connessione veloce ad internet è lo stesso possibile installare Debian, basta procurarsi tutti i CD/DVD o meglio sono sufficienti solo le .iso non masterizzate;<br />
* [[Immagini iso Debian da usare come repository | Usare direttamente le .iso]]<br />
* [[Creare immagini iso dei repository Debian | Creare le immagini .iso]] compreso multimedia e [[non-free]]<br />
<br />
== Altri metodi d'installazione ==<br />
<br />
* Partendo da un sistema GNU/Linux già funzionante ed eseguendo una '''cross installation<sup>[[#Collegamenti esterni | [14]]]</sup>'''<br />
<br />
* '''Installazione automatica tramite preconfigurazione<sup>[[#Collegamenti esterni | [15]]]</sup>''': La preconfigurazione offre un modo per impostare le risposte alle domande poste durante l'installazione senza doverle inserire manualmente. Questo permette di automatizzare completamente la maggior parte dei tipi d'installazione e offre persino alcune funzionalità che non sono disponibili durante l'installazione tradizionale. Utile per installazioni su larga scala.<br />
<br />
<!-- == Istantanee d'installazione ==<br />
Istantanee di tre diversi modi d'installazione:<br />
* [[Squeeze, installer di default]]<br />
* [[Squeeze, installer CD/DVD]]<br />
* [[Installare Debian Wheezy - Guida Grafica|Wheezy, installer grafico]] --><br />
= Altre versioni =<br />
== Testing ==<br />
Le immagini sopra menzionate esistono anche per Debian testing. In questo caso si potrà scegliere tra:<br />
* Immagini generate settimanalmente (weekly builds<sup>[[#Collegamenti esterni | [16]]]</sup>)<br/>Tipicamente create ogni lunedì e contenenti l'ultima versione dell'installer e i pacchetti aggiornati al giorno di creazione dell'immagine. Questa immagine viene creata per tutte le architetture, in versione multi-arch e nelle versioni suddivise per [[Desktop Environment]] (KDE, GNOME, XFCE, LXDE)<br />
* Immagini generate giornalmente (daily builds<sup>[[#Collegamenti esterni | [17]]]</sup>).<br/>Vengono create due volte al giorno e sono solo del tipo "netinst" per tutte le architetture.<br />
<br />
== Unstable (Sid) ==<br />
Attualmente non esistono immagini contenenti i pacchetti di Sid. Se si vuole installare Debian unstable sulla propria macchina bisogna aggiornare la stable o la testing seguendo le indicazioni riportate nella guida [[Installare Debian SID]].<br />
<br />
== Versioni antecedenti la stable ==<br />
Se si ha la necessità di dover installare una versione di Debian precedente alla stable, è possibile reperire le immagini (CD-ROM, DVD, netinst, business card) o i file .jigdo a questo indirizzo<sup>[[#Collegamenti esterni | [18]]]</sup>.<br/><br />
Sono disponibili tutte le versioni di Debian dalla 3.1 ("Sarge") in poi.<br />
<br />
Installazione Wheezy: [[Installare Debian Wheezy - Guida Grafica]]<br />
<br />
= Debian Live =<br />
Attraverso la Debian Live è possibile lanciare e utilizzare Debian senza installare nulla sull'hard disk. La live può ritornare molto utile nel caso in cui si voglia verificare la compatibilità di Debian con il proprio hardware e decidere a posteriori se installarla o meno fisicamente sul proprio hard disk.<br />
* [http://www.debian.org/CD/live/ Debian Live]<sup>[[#Collegamenti esterni | [19]]]</sup><br />
<br />
== Immagini ==<br />
Tutte le immagini possono essere scaricate attraverso il sito ufficiale Debian<sup>[[#Collegamenti esterni | [19]]]</sup> oppure dalla pagina ufficiale del Debian Live Project<sup>[[#Collegamenti esterni | [20]]]</sup> in cui si trovano anche le immagini live di Debian oldstable, di Debian testing e della stable contenente pacchetti non-free (utile se l'hardware dovesse richiedere firmware proprietario). Queste ultime vengono aggiornate con cadenza giornaliera, settimanale e mensile.<br />
<br />
Attualmente le immagini live di Debian sono disponibili per due architetture: '''i386''' (per PC a 32 bit) e '''amd64''' (PC a 64 bit).<br />
<br />
= Immagini non ufficiali =<br />
== Immagini con firmware proprietario ==<br />
Debian 8.0 ([[Jessie]]) adotta un kernel completamente libero, ossia privo di firmware non-free (non rilasciato sotto licenza GPL).<br/><br />
Per questo, nonostante gli sforzi degli sviluppatori, è possibile che, su alcuni sistemi, particolari componenti hardware non vengano riconosciuti in fase di installazione. In questo caso è possibile installare Debian partendo da un'immagine non-ufficiale scaricabile al seguente indirizzo<sup>[[#Collegamenti esterni | [21]]]</sup>. <br/><br />
<br />
Quest'immagine contiene i firmware non-free necessari al funzionamento di particolari dispositivi (schede wireless, schede video, etc.)<br />
<br />
<!-- == Immagini backports di Squeeze con kernel recente e firmware == <br />
Su macchine che presentano hardware recente, è molto probabile che, partendo dall'immagine .iso ufficiale, l'installazione di Squeeze non vada a buon fine o presenti problemi di riconoscimento delle periferiche che ne impediscono addirittura l'avvio.<br/><br />
Questo comportamento è dovuto al fatto che il kernel di default utilizzato dal Debian installer di Squeeze è il 2.6.32, inadatto a riconoscere e gestire periferiche da poco introdotte sul mercato (o che comunque, al rilascio del kernel 2.6.32, non esistevano).<br />
<br />
Una possibile soluzione a questo inconveniente è quella di installare la versione ''testing'' di Debian che presenta un installer più recente e un kernel più aggiornato.<br/><br />
<br />
Per chi, invece, ha la necessità di utilizzare la versione ''stable'', Kenshi Muto ha reso disponibili delle immagini non ufficiali di Squeeze che utilizzano kernel più recenti e contengono anche i pacchetti con il firmware proprietario necessario al funzionamento di alcune periferiche.<br/><br />
Le immagini possono essere scaricate da http://cdimage.debian.org/cdimage/unofficial/backports/squeeze/ e la loro descrizione è visibile [http://kmuto.jp/debian/d-i/ qui].<br />
<br />
Attualmente è possibile prelevare immagini di Squeeze con kernel:<br />
* 2.6.38<br />
* 2.6.39<br />
* 3.2.4<br />
contenenti o meno il firmware proprietario e disponibili per le sole architetture '''i386''' e '''amd64'''.<br/><br />
Le immagini sono ''netinst'', per cui necessitano di una connessione funzionante ad Internet per poter installare, prelevando i pacchetti dai [[repository]] ufficiali di Debian Squeeze, un ambiente completo e funzionale alle proprie esigenze.<br />
--><br />
= Problemi =<br />
Se si dovessero verificare problemi durante l'installazione di Debian:<br />
* Accertarsi di aver scaricato l'immagine corretta per la propria architettura.<br />
* [[Controllare l'integrità delle immagini Debian | Verificare]] la firma digitale dell'immagine scaricata per accertarsi che non sia corrotta.<br />
* Accedere, durante l'installazione, al terminale tty4 premendo i tasti Alt+F4 (o Ctrl+Alt+F4) e controllare eventuali messaggi d'errore.<br />
* [[Installazione Debian - I log dell'installer|Leggere]] i file di log dell'installer.<br />
* Controllare la lista<sup>[[#Collegamenti esterni | [22]]]</sup> dei bug segnalati per il Debian Installer accertandosi che il problema non sia già stato segnalato e affrontato. In caso contrario inviare una segnalazione al [[BTS]] dopo essersi accertati di essere effettivamente incappati in un [[bug]] dell'installer. (leggere la guida a [[Reportbug]])<br />
* Installare la versione più recente di Debian.<br />
<!--{{Warningbox|Il rilascio di Wheezy ha portato con sé diversi problemi che potrebbero sorgere in fase di installazione (mancata installazione di Grub, problemi con l'UEFI, convivenza con Win8 e altro). La risoluzione è, fino alla prossima [[point release]], demandata a dei workaround.<br/>Si consiglia di leggere '''attentamente''' [http://www.debian.org/releases/stable/debian-installer/ il paragrafo "Errata" di questa pagina] relativa al Debian Installer.}}--><br />
<br />
== Vecchie immagini per installare Debian ==<br />
Nel caso in cui le immagini .iso più recenti portino all'impossibilità di installare Debian, è possibile eseguire il download di immagini relative all'installazione di vecchie release di Debian.<br/><br />
La pagina da cui scaricare le immagini è questa<sup>[[#Collegamenti esterni | [23]]]</sup>.<br/><br />
Sono prelevabili le immagini di installazione di Debian (dalla 3.0 in poi) relative a tutte le architetture disponibili al momento del rilascio.<br />
<br />
Per motivi di spazio, tutte le immagini devono essere create attraverso [[Jigdo]] ma potrebbe essere possibile trovare già presenti delle immagini .iso per rilasci più recenti.<br />
<br />
== Firmware proprietario ==<br />
Su alcuni particolari sistemi è possibile che l'[[installer]] richieda [[firmware]] proprietario aggiuntivo per configurare determinati componenti hardware (schede ethernet wireless, schede ethernet cablate, schede video etc.).<br/><br />
Questo comportamento è dovuto al fatto che, a partire da Squeeze, gli sviluppatori hanno scelto di rimuovere dalla release il firmware non rilasciato sotto licenza GPL. Il tutto in conformità con la filosofia<sup>[[#Collegamenti esterni | [24]]]</sup> che è alla base di Debian, il suo contratto sociale e le [[DFSG]].<br />
<br />
Nel caso l'installer richieda tale firmware, è necessario copiare su una pendrive USB (o altro supporto rimovibile) uno dei tre file compressi (.cpio.gz, .tar.gz o .zip) scaricabili a questo indirizzo<sup>[[#Collegamenti esterni | [25]]]</sup> in base alla versione di Debian che si intende installare e alla propria [[architettura]].<br/><br />
Per ottenere direttamente un'immagine non ufficiale comprendente i firmware proprietari, leggere il paragrafo [[#Immagini_con_firmware_proprietario|immagini con firmware proprietario]].<br />
<br />
Anche nel caso in cui l'installazione terminasse senza aver installato il firmware proprietario, è sempre possibile installarlo attraverso i [[Repository|repository]] ([[sezione]] '''non-free''') di Debian o, in caso di connessione assente, in modo manuale tramite ''dpkg''.<br/><br />
La lista dei pacchetti contenenti il firmware non free per i diversi componenti hardware è mostrata in questa pagina<sup>[[#Collegamenti esterni | [26]]]</sup>.<br />
<br />
Leggere anche: [[Debian e firmware]] .<br />
<br />
= Manutenere Debian =<br />
Dopo aver installato Debian nasce il bisogno di tenere il sistema aggiornato oppure apportare qualche modifica, a questo scopo un articolo della e-zine può essere molto utile.<br />
*[http://e-zine.debianizzati.org/web-zine/numero_2/?page=12:Link e-zine n.2]<br />
<br />
= Approfondimenti =<br />
<br />
=== Debianizzati ===<br />
* [[Installazione Debian: pagine utili]]<br />
<br />
=== Collegamenti esterni ===<br />
<br />
[1] [https://www.debian.org/News/2015/20150426 rilascio Debian 8]<br/><br />
[2] [http://ftp.debian.org/debian/dists/stable/main/installer-i386/current/images/ file immagine e kernel]<br/><br />
[3] [http://ftp.debian.org/debian/dists/stable/main/installer-i386/current/images/MANIFEST MANIFEST]<br/><br />
[4] [http://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.it.html Avanzamento di versione]<br/><br />
[5] [http://www.debian.org/CD/http-ftp/#stable via HTTP/FTP]<br/><br />
[6] [http://www.debian.org/CD/torrent-cd/ via torrent]<br/><br />
[7] [http://www.debian.org/CD/jigdo-cd/ via Jigdo]<br/><br />
[8] [http://www.debian.org/CD/jigdo-cd/#which Blu-ray con Jigdo]<br/><br />
[9] [http://www.debian.org/CD/netinst/#netinst-stable Netinst HTTP/FTP]<br/><br />
[10] [http://www.debian.org/CD/torrent-cd/ Netinst torrent]<br/><br />
[11] [http://www.debian.org/CD/jigdo-cd/#which Netinst Jigdo]<br/><br />
[12] [http://www.debian.org/distrib/netinst Mini ISO]<br/><br />
[13] [http://d-i.alioth.debian.org/manual/it.i386/ch04s05.html Preparazione dei file per l'avvio TFTP da rete]<br/><br />
[14] [http://www.debian.org/releases/stable/i386/apds03.html.it cross installation]<br/><br />
[15] [http://www.debian.org/releases/stable/i386/apb.html.it Installazione automatica tramite preconfigurazione]<br/><br />
[16] [http://cdimage.debian.org/cdimage/weekly-builds/ weekly builds]<br/><br />
[17] [http://cdimage.debian.org/cdimage/daily-builds/ daily builds]<br/><br />
[18] [ftp://cdimage.debian.org/cdimage/archive/ versioni antecedenti alla stable]<br/><br />
[19] [http://www.debian.org/CD/live/ Debian Live CD]<br/><br />
[20] [http://live.debian.net/ Debian Live Project]<br/><br />
[21] [http://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware immagini con firmware proprietario]<br/><br />
[22] [http://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=d-i lista dei bug segnalati per il Debian Installer]<br/><br />
[23] [http://cdimage.debian.org/mirror/cdimage/archive/ vecchie immagini per installare Debian]<br/><br />
[24] [http://www.debian.org/social_contract#guidelines filosofia]<br/><br />
[25] [http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/ firmware non-free scaricabili]<br/><br />
[26] [http://packages.debian.org/search?keywords=firmware&searchon=names&suite=stable&section=all pacchetti con firmware non-free]<br/><br />
Per ulteriori informazioni c'è il completissimo '''Manuale di Installazione Debian''':<br/><br />
[27] [http://www.debian.org/releases/stable/i386/ Debian GNU/Linux Installation Guide]<br/><br />
[28] [http://wiki.debian.org/DebianInstaller/FAQ FAQ del Debian Installer]<br/><br />
[29] [https://www.debian.org/CD/faq/ FAQ sulle immagini CD/DVD]<br/><br />
[30] [http://www.debian.org/releases/stable/debian-installer/ Tutte le immagini relative a Debian "stable"]<br/><br />
<br />
{{Autori<br />
|Autore=Debianizzati.org<br />
|Verificata_da = <br />
:[[Utente:S3v|S3v]] 22:53, 11 dic 2015 (CET)<br />
|Numero_revisori=1<br />
}}<br />
<br />
[[Categoria:Installazione]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Installare_Debian&diff=40563Installare Debian2015-12-19T13:25:47Z<p>Ombra: fix broken links e link esterni parte2</p>
<hr />
<div>{{Template:Installazione<br />
|successivo=Installare Debian da pendrive USB o SD card<br />
}}<br />
{{Versioni compatibili|Jessie}}<br />
In concomitanza con il [https://www.debian.org/News/2015/20150426 rilascio] di Debian 8.0 [[Jessie|"Jessie"]], il team Debianizzati.Org ha raccolto in questa pagina tutti i modi in cui è possibile installare Debian, CD, DVD, Hard Disk o supporti USB/SD .<br />
<br />
Ora '''nessuna scusa è buona''' per non avere una Debian!<br />
<br />
= Introduzione =<br />
<br />
Un aspetto che caratterizza Debian è la possibilità di scaricare liberamente le immagini per la sua installazione da diverse fonti: via FTP, via HTTP, via Jigdo o via torrent.<br/><br />
Essendo ogni immagine disponibile per diverse architetture, è necessario scegliere quella adatta alla propria macchina affinché il processo d'installazione possa partire correttamente.<br />
<br />
Attualmente la versione stable di Debian supporta dieci diverse [[architettura|architetture]]:<br />
# PC 32-bit («''i386''») <br />
# PC 64-bit («''amd64''») <br />
# Motorola/IBM PowerPC («''powerpc''» per hardware datato e «''pc64el''» per nuovo hardware a 64-bit (little-endian))<br />
# MIPS («''mips''» (big-endian) e «''mipsel''» (little-endian)) <br />
# IBM S/390 («s390x» per 64-bit) <br />
# ARM (32-bit: «armel» oppure, per hardware più recente, «armhf». 64-bit: «''arm64''») <br />
<br />
Esistono, inoltre, particolari immagini .iso "multi-arch" che permettono l'installazione sia per l'architettura "i386" che per "amd64".<br />
<br />
Nessun'altra distribuzione offre così tante possibilità di installazione, adattabili davvero ad ogni esigenza e soprattutto ad ogni peculiarità hardware.<br/><br />
Per una descrizione di tutti i [http://ftp.debian.org/debian/dists/stable/main/installer-i386/current/images/ file immagine e kernel], disponibili per i vari tipi di installazione, fare riferimento al file [http://ftp.debian.org/debian/dists/stable/main/installer-i386/current/images/MANIFEST MANIFEST] (qui indicato, a titolo di esempio, per architettura "i386").<br/><br />
Prima di scegliere l'immagine da utilizzare per l'installazione, è necessario considerare diversi fattori:<br />
* [[La_struttura_della_Distribuzione|versione di Debian]]<br />
* possibilità di accesso alla rete<br />
* tempo e/o banda di download<br />
* disponibilità dei supporti adatti a contenere l'immagine<br />
<br />
questi fattori sono da tenere bene in conto quando si deve decidere quale immagine scaricare. La seguente guida cercherà di descrivere tutti i metodi d'installazione illustrandone le rispettive caratteristiche.<br />
<br />
Tutti i seguenti metodi d'installazione fanno riferimento a Debian [[stable]], se si volesse installare Debian [[testing]] o Debian [[unstable]] (Sid) leggere la sezione [[#Altre versioni|"Altre versioni"]]<br />
<br />
= Avanzamento di versione da Debian 7.x ([[Wheezy]]) a Debian 8.0 ([[Jessie]]) =<br />
Prima di effettuare l'aggiornamento da Wheezy a Jessie è '''caldamente''' consigliato leggere la documentazione ufficiale per non incorrere in brutte sorprese:<br />
* [http://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.it.html Avanzamento di versione]<br />
L'avanzamento consiste solitamente in un semplice aggiornamento del file <code>/etc/apt/sources.list</code> in cui il sistema APT di gestione dei [[pacchetto|pacchetti]] conserva le fonti di installazione del software ([[repository]]).<br/><br />
Leggere anche [[I repository ed il loro utilizzo]], in particolare il paragrafo "[[I repository ed il loro utilizzo#Passaggio da stable a testing|Passaggio da stable a testing]]".<br />
<br />
= Metodi di installazione =<br />
Di seguito verranno elencati brevemente alcuni dei principali metodi d'installazione previsti da Debian:<br />
<br />
== CDROM o DVD ==<br />
È necessario scaricare almeno l'immagine del primo CDROM o DVD relativa alla propria architettura, masterizzarla e poi fare il boot usando il CDROM o DVD, assicurandosi che nella configurazione del BIOS il lettore CD/DVD sia la prima periferica di boot. Se si scaricano e si masterizzano una o più immagini di CDROM o DVD aggiuntivi è possibile (ovviamente) installare anche tutto il software aggiuntivo presente nelle altre immagini. È possibile scaricare le iso tramite HTTP o FTP, bittorrent, oppure tramite il potentissimo [[Jigdo]].<br />
<br />
Download delle immagini CD/DVD:<br />
* [http://www.debian.org/CD/http-ftp/#stable via HTTP/FTP]<br />
* [http://www.debian.org/CD/torrent-cd/ via torrent]<br />
* [http://www.debian.org/CD/jigdo-cd/ via Jigdo]<br />
<br />
== Blu-ray ==<br />
Le immagini Blu-ray di Jessie, sia single-layer (bd) che double-layer (dlbd), sono disponibili per il download solo attraverso Jigdo e, attualmente, sono state create per due sole architetture, i386 e amd64, oltre ad un'immagine contenente i pacchetti sorgente.<br/><br />
Questo il link da cui poter scaricare le immagini Blu-ray tramite Jigdo: [http://www.debian.org/CD/jigdo-cd/#which Blu-ray con Jigdo]<br />
<br />
== Netinst ==<br />
Tramite netinst (net installation) è possibile installare Debian scaricando un'immagine di circa 180 MB per poi masterizzarla su CD o DVD oppure utilizzarla per un'installazione mediante supporto USB o scheda SD.<br/><br />
Quest'immagine contiene solo l'installer e una quantità molto ridotta di pacchetti, costituenti il sistema base, che permettono di scaricare i pacchetti rimanenti via rete.<br/><br />
Poiché l'installazione con l'immagine netinst permette di scaricare solo i pacchetti che si è scelto di installare, essa rappresenta un metodo molto efficiente di installazione in termini di tempo e di banda di download.<br/><br />
<br />
Download delle immagini netinst:<br />
* [http://www.debian.org/CD/netinst/#netinst-stable via HTTP/FTP]<br />
* [http://www.debian.org/CD/torrent-cd/ via torrent]<br />
* [http://www.debian.org/CD/jigdo-cd/#which via Jigdo]<br />
<br />
== Mini.iso == <br />
La "mini.iso" è attualmente l'immagine più piccola disponibile per permettere l'installazione di Debian. Questa immagine è stata pensata per il network boot ma è perfettamente funzionante anche se avviata da altri dispositivi. A differenza della netinst, l'immagine "mini.iso" contiene solo l'installer necessario ad avviare il sistema, tutto il restante software viene scaricato dalla rete.<br />
<br />
Per il download della "mini.iso" bisogna innanzitutto spostarsi in [http://www.debian.org/distrib/netinst questa pagina] e poi, nella sezione "Network Boot", scegliere la propria architettura e spostarsi nella directory "netboot".<br />
<br />
== Floppy disk ==<br />
A partire dal kernel 2.6.24, la capienza dei floppy disk non è più sufficiente a contenere i file necessari all'avvio del processo d'installazione.<br/><br />
Per poter installare Debian è quindi necessario far ricorso ad altri metodi d'installazione.<br />
<br />
== Dispositivo USB o scheda SD ==<br />
Se non si dispone di un lettore CD o DVD (come accade per i netbook o per molti server), è possibile installare Debian partendo da un dispositivo USB o da una SD card, purché il sistema lo consenta.<br/><br />
Tramite tali dispositivi è possibile utilizzare le immagini CD/DVD, netinst o mini.iso.<br/><br />
Per una guida su come preparare un dispositivo USB o una SD card per avviare l'installazione di Debian, leggere [[Installare Debian da pendrive USB o SD card | questa pagina]].<br />
<br />
== TFTP da rete ==<br />
Se la propria macchina è connessa a una rete locale, allora è possibile avviare il processo d'installazione accedendovi da remoto e facendo il boot automaticamente via rete (utile per installazioni contemporanee su decine di macchine).<br/><br />
Consultare la seguente pagina [http://d-i.alioth.debian.org/manual/it.i386/ch04s05.html Preparazione dei file per l'avvio TFTP da rete]<br />
<br />
== Immagini .iso da hard disk ==<br />
<br />
Questo metodo consente di installare Debian partendo da un'immagine .iso precedentemente salvata in una cartella del proprio hard disk.<br/><br />
Qui è possibile leggere la guida che illustra questo procedimento: [[Installare Debian da hard disk]]<br />
<br />
== Installazione senza rete (off-line) ==<br />
Se non si possiede una connessione veloce ad internet è lo stesso possibile installare Debian, basta procurarsi tutti i CD/DVD o meglio sono sufficienti solo le .iso non masterizzate;<br />
* [[Immagini iso Debian da usare come repository | Usare direttamente le .iso]]<br />
* [[Creare immagini iso dei repository Debian | Creare le immagini .iso]] compreso multimedia e [[non-free]]<br />
<br />
== Altri metodi d'installazione ==<br />
<br />
* Partendo da un sistema GNU/Linux già funzionante ed eseguendo una '''[http://www.debian.org/releases/stable/i386/apds03.html.it cross installation]'''<br />
<br />
* '''[http://www.debian.org/releases/stable/i386/apb.html.it Installazione automatica tramite preconfigurazione]''': La preconfigurazione offre un modo per impostare le risposte alle domande poste durante l'installazione senza doverle inserire manualmente. Questo permette di automatizzare completamente la maggior parte dei tipi d'installazione e offre persino alcune funzionalità che non sono disponibili durante l'installazione tradizionale. Utile per installazioni su larga scala.<br />
<br />
<!-- == Istantanee d'installazione ==<br />
Istantanee di tre diversi modi d'installazione:<br />
* [[Squeeze, installer di default]]<br />
* [[Squeeze, installer CD/DVD]]<br />
* [[Installare Debian Wheezy - Guida Grafica|Wheezy, installer grafico]] --><br />
= Altre versioni =<br />
== Testing ==<br />
Le immagini sopra menzionate esistono anche per Debian testing. In questo caso si potrà scegliere tra:<br />
* Immagini generate settimanalmente ([http://cdimage.debian.org/cdimage/weekly-builds/ weekly builds])<br/>Tipicamente create ogni lunedì e contenenti l'ultima versione dell'installer e i pacchetti aggiornati al giorno di creazione dell'immagine. Questa immagine viene creata per tutte le architetture, in versione multi-arch e nelle versioni suddivise per [[Desktop Environment]] (KDE, GNOME, XFCE, LXDE)<br />
* Immagini generate giornalmente ([http://cdimage.debian.org/cdimage/daily-builds/ daily builds]).<br/>Vengono create due volte al giorno e sono solo del tipo "netinst" per tutte le architetture.<br />
<br />
== Unstable (Sid) ==<br />
Attualmente non esistono immagini contenenti i pacchetti di Sid. Se si vuole installare Debian unstable sulla propria macchina bisogna aggiornare la stable o la testing seguendo le indicazioni riportate nella guida [[Installare Debian SID]].<br />
<br />
== Versioni antecedenti la stable ==<br />
Se si ha la necessità di dover installare una versione di Debian precedente alla stable, è possibile reperire le immagini (CD-ROM, DVD, netinst, business card) o i file .jigdo a questo indirizzo: [ftp://cdimage.debian.org/cdimage/archive/ ftp://cdimage.debian.org/cdimage/archive/].<br/><br />
Sono disponibili tutte le versioni di Debian dalla 3.1 ("Sarge") in poi.<br />
<br />
Installazione Wheezy: [[Installare Debian Wheezy - Guida Grafica]]<br />
<br />
= Debian Live =<br />
Attraverso la Debian Live è possibile lanciare e utilizzare Debian senza installare nulla sull'hard disk. La live può ritornare molto utile nel caso in cui si voglia verificare la compatibilità di Debian con il proprio hardware e decidere a posteriori se installarla o meno fisicamente sul proprio hard disk.<br />
* [http://www.debian.org/CD/live/ Debian Live]<br />
<br />
== Immagini ==<br />
Tutte le immagini possono essere scaricate attraverso il sito ufficiale Debian http://www.debian.org/CD/live/ oppure dalla pagina ufficiale del [http://live.debian.net/ Debian Live Project] in cui si trovano anche le immagini live di Debian oldstable, di Debian testing e della stable contenente pacchetti non-free (utile se l'hardware dovesse richiedere firmware proprietario). Queste ultime vengono aggiornate con cadenza giornaliera, settimanale e mensile.<br />
<br />
Attualmente le immagini live di Debian sono disponibili per due architetture: '''i386''' (per PC a 32 bit) e '''amd64''' (PC a 64 bit).<br />
<br />
= Immagini non ufficiali =<br />
== Immagini con firmware proprietario ==<br />
Debian 8.0 ([[Jessie]]) adotta un kernel completamente libero, ossia privo di firmware non-free (non rilasciato sotto licenza GPL).<br/><br />
Per questo, nonostante gli sforzi degli sviluppatori, è possibile che, su alcuni sistemi, particolari componenti hardware non vengano riconosciuti in fase di installazione. In questo caso è possibile installare Debian partendo da un'immagine non-ufficiale scaricabile al seguente indirizzo: http://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/<br/><br />
<br />
Quest'immagine contiene i firmware non-free necessari al funzionamento di particolari dispositivi (schede wireless, schede video, etc.)<br />
<br />
<!-- == Immagini backports di Squeeze con kernel recente e firmware == <br />
Su macchine che presentano hardware recente, è molto probabile che, partendo dall'immagine .iso ufficiale, l'installazione di Squeeze non vada a buon fine o presenti problemi di riconoscimento delle periferiche che ne impediscono addirittura l'avvio.<br/><br />
Questo comportamento è dovuto al fatto che il kernel di default utilizzato dal Debian installer di Squeeze è il 2.6.32, inadatto a riconoscere e gestire periferiche da poco introdotte sul mercato (o che comunque, al rilascio del kernel 2.6.32, non esistevano).<br />
<br />
Una possibile soluzione a questo inconveniente è quella di installare la versione ''testing'' di Debian che presenta un installer più recente e un kernel più aggiornato.<br/><br />
<br />
Per chi, invece, ha la necessità di utilizzare la versione ''stable'', Kenshi Muto ha reso disponibili delle immagini non ufficiali di Squeeze che utilizzano kernel più recenti e contengono anche i pacchetti con il firmware proprietario necessario al funzionamento di alcune periferiche.<br/><br />
Le immagini possono essere scaricate da http://cdimage.debian.org/cdimage/unofficial/backports/squeeze/ e la loro descrizione è visibile [http://kmuto.jp/debian/d-i/ qui].<br />
<br />
Attualmente è possibile prelevare immagini di Squeeze con kernel:<br />
* 2.6.38<br />
* 2.6.39<br />
* 3.2.4<br />
contenenti o meno il firmware proprietario e disponibili per le sole architetture '''i386''' e '''amd64'''.<br/><br />
Le immagini sono ''netinst'', per cui necessitano di una connessione funzionante ad Internet per poter installare, prelevando i pacchetti dai [[repository]] ufficiali di Debian Squeeze, un ambiente completo e funzionale alle proprie esigenze.<br />
--><br />
= Problemi =<br />
Se si dovessero verificare problemi durante l'installazione di Debian:<br />
* Accertarsi di aver scaricato l'immagine corretta per la propria architettura.<br />
* [[Controllare l'integrità delle immagini Debian | Verificare]] la firma digitale dell'immagine scaricata per accertarsi che non sia corrotta.<br />
* Accedere, durante l'installazione, al terminale tty4 premendo i tasti Alt+F4 (o Ctrl+Alt+F4) e controllare eventuali messaggi d'errore.<br />
* [[Installazione Debian - I log dell'installer|Leggere]] i file di log dell'installer.<br />
* Controllare la [http://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=d-i lista dei bug segnalati per il Debian Installer] accertandosi che il problema non sia già stato segnalato e affrontato. In caso contrario inviare una segnalazione al [[BTS]] dopo essersi accertati di essere effettivamente incappati in un [[bug]] dell'installer. (leggere la guida a [[Reportbug]])<br />
* Installare la versione più recente di Debian.<br />
<!--{{Warningbox|Il rilascio di Wheezy ha portato con sé diversi problemi che potrebbero sorgere in fase di installazione (mancata installazione di Grub, problemi con l'UEFI, convivenza con Win8 e altro). La risoluzione è, fino alla prossima [[point release]], demandata a dei workaround.<br/>Si consiglia di leggere '''attentamente''' [http://www.debian.org/releases/stable/debian-installer/ il paragrafo "Errata" di questa pagina] relativa al Debian Installer.}}--><br />
<br />
== Vecchie immagini per installare Debian ==<br />
Nel caso in cui le immagini .iso più recenti portino all'impossibilità di installare Debian, è possibile eseguire il download di immagini relative all'installazione di vecchie release di Debian.<br/><br />
La pagina da cui scaricare le immagini è [http://cdimage.debian.org/mirror/cdimage/archive/ questa].<br/><br />
Sono prelevabili le immagini di installazione di Debian (dalla 3.0 in poi) relative a tutte le architetture disponibili al momento del rilascio.<br />
<br />
Per motivi di spazio, tutte le immagini devono essere create attraverso [[Jigdo]] ma potrebbe essere possibile trovare già presenti delle immagini .iso per rilasci più recenti.<br />
<br />
== Firmware proprietario ==<br />
Su alcuni particolari sistemi è possibile che l'[[installer]] richieda [[firmware]] proprietario aggiuntivo per configurare determinati componenti hardware (schede ethernet wireless, schede ethernet cablate, schede video etc.).<br/><br />
Questo comportamento è dovuto al fatto che, a partire da Squeeze, gli sviluppatori hanno scelto di rimuovere dalla release il firmware non rilasciato sotto licenza GPL. Il tutto in conformità con la [http://www.debian.org/social_contract#guidelines filosofia] che è alla base di Debian, il suo contratto sociale e le [[DFSG]].<br />
<br />
Nel caso l'installer richieda tale firmware, è necessario copiare su una pendrive USB (o altro supporto rimovibile) uno dei tre file compressi (.cpio.gz, .tar.gz o .zip) scaricabili a [http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/ questo indirizzo] in base alla versione di Debian che si intende installare e alla propria [[architettura]].<br/><br />
Per ottenere direttamente un'immagine non ufficiale comprendente i firmware proprietari, leggere il paragrafo [[#Immagini_con_firmware_proprietario|immagini con firmware proprietario]].<br />
<br />
Anche nel caso in cui l'installazione terminasse senza aver installato il firmware proprietario, è sempre possibile installarlo attraverso i [[Repository|repository]] ([[sezione]] '''non-free''') di Debian o, in caso di connessione assente, in modo manuale tramite ''dpkg''.<br/><br />
La lista dei pacchetti contenenti il firmware non free per i diversi componenti hardware è mostrata in [http://packages.debian.org/search?keywords=firmware&searchon=names&suite=stable&section=all questa pagina].<br />
<br />
Leggere anche: [[Debian e firmware]] .<br />
<br />
= Manutenere Debian =<br />
Dopo aver installato Debian nasce il bisogno di tenere il sistema aggiornato oppure apportare qualche modifica, a questo scopo un articolo della e-zine può essere molto utile.<br />
*[http://e-zine.debianizzati.org/web-zine/numero_2/?page=12:Link e-zine n.2]<br />
<br />
= Approfondimenti =<br />
<br />
=== Debianizzati ===<br />
* [[Installazione Debian: pagine utili]]<br />
<br />
=== Collegamenti esterni ===<br />
<br />
[1] [https://www.debian.org/News/2015/20150426 rilascio Debian 8]<br/><br />
[2] [http://ftp.debian.org/debian/dists/stable/main/installer-i386/current/images/ file immagine e kernel]<br/><br />
[3] [http://ftp.debian.org/debian/dists/stable/main/installer-i386/current/images/MANIFEST MANIFEST]<br/><br />
[4] [http://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.it.html Avanzamento di versione]]<br/><br />
[5] [http://www.debian.org/CD/http-ftp/#stable via HTTP/FTP]<br/><br />
[6] [http://www.debian.org/CD/torrent-cd/ via torrent]<br/><br />
[7] [http://www.debian.org/CD/jigdo-cd/ via Jigdo]<br/><br />
[8] [http://www.debian.org/CD/jigdo-cd/#which Blu-ray con Jigdo]<br/><br />
[9] [http://www.debian.org/CD/netinst/#netinst-stable Netinst HTTP/FTP]<br/><br />
[10] [http://www.debian.org/CD/torrent-cd/ Netinst torrent]<br/><br />
[11] [http://www.debian.org/CD/jigdo-cd/#which Netinst Jigdo]<br/><br />
[12] [http://www.debian.org/distrib/netinst Mini ISO]<br/><br />
[13] [http://d-i.alioth.debian.org/manual/it.i386/ch04s05.html Preparazione dei file per l'avvio TFTP da rete]<br/><br />
[14] [http://www.debian.org/releases/stable/i386/apds03.html.it cross installation]<br/><br />
[15] [http://www.debian.org/releases/stable/i386/apb.html.it Installazione automatica tramite preconfigurazione]<br/><br />
[16] [http://cdimage.debian.org/cdimage/weekly-builds/ weekly builds]<br/><br />
[17] [http://cdimage.debian.org/cdimage/daily-builds/ daily builds]<br/><br />
[18] [ftp://cdimage.debian.org/cdimage/archive/ ftp://cdimage.debian.org/cdimage/archive/ versioni antecedenti alla stable]<br/><br />
[19] [http://www.debian.org/CD/live/ Debian Live CD]<br/><br />
[20] [http://live.debian.net/ Debian Live Project]<br/><br />
[21] [http://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware immagini con firmware proprietario]<br/><br />
[22] [http://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=d-i lista dei bug segnalati per il Debian Installer]<br/><br />
[23] [http://cdimage.debian.org/mirror/cdimage/archive/ vecchie immagini per installare Debian]<br/><br />
[24] [http://www.debian.org/social_contract#guidelines filosofia]<br/><br />
[25] [http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/ firmware non-free scaricabili]<br/><br />
[26] [http://packages.debian.org/search?keywords=firmware&searchon=names&suite=stable&section=all pacchetti con firmware non-free]<br/><br />
Per ulteriori informazioni c'è il completissimo '''Manuale di Installazione Debian''':<br/><br />
[27] [http://www.debian.org/releases/stable/i386/ Debian GNU/Linux Installation Guide]<br/><br />
[28] [http://wiki.debian.org/DebianInstaller/FAQ FAQ del Debian Installer]<br/><br />
[29] [https://www.debian.org/CD/faq/ FAQ sulle immagini CD/DVD]<br/><br />
[30] [http://www.debian.org/releases/stable/debian-installer/ Tutte le immagini relative a Debian "stable"]<br/><br />
<br />
{{Autori<br />
|Autore=Debianizzati.org<br />
|Verificata_da = <br />
:[[Utente:S3v|S3v]] 22:53, 11 dic 2015 (CET)<br />
|Numero_revisori=1<br />
}}<br />
<br />
[[Categoria:Installazione]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Installare_Debian&diff=40559Installare Debian2015-12-19T12:53:19Z<p>Ombra: fix broken links e link esterni parte1</p>
<hr />
<div>{{Template:Installazione<br />
|successivo=Installare Debian da pendrive USB o SD card<br />
}}<br />
{{Versioni compatibili|Jessie}}<br />
In concomitanza con il [https://www.debian.org/News/2015/20150426 rilascio] di Debian 8.0 [[Jessie|"Jessie"]], il team Debianizzati.Org ha raccolto in questa pagina tutti i modi in cui è possibile installare Debian, CD, DVD, Hard Disk o supporti USB/SD .<br />
<br />
Ora '''nessuna scusa è buona''' per non avere una Debian!<br />
<br />
= Introduzione =<br />
<br />
Un aspetto che caratterizza Debian è la possibilità di scaricare liberamente le immagini per la sua installazione da diverse fonti: via FTP, via HTTP, via Jigdo o via torrent.<br/><br />
Essendo ogni immagine disponibile per diverse architetture, è necessario scegliere quella adatta alla propria macchina affinché il processo d'installazione possa partire correttamente.<br />
<br />
Attualmente la versione stable di Debian supporta dieci diverse [[architettura|architetture]]:<br />
# PC 32-bit («''i386''») <br />
# PC 64-bit («''amd64''») <br />
# Motorola/IBM PowerPC («''powerpc''» per hardware datato e «''pc64el''» per nuovo hardware a 64-bit (little-endian))<br />
# MIPS («''mips''» (big-endian) e «''mipsel''» (little-endian)) <br />
# IBM S/390 («s390x» per 64-bit) <br />
# ARM (32-bit: «armel» oppure, per hardware più recente, «armhf». 64-bit: «''arm64''») <br />
<br />
Esistono, inoltre, particolari immagini .iso "multi-arch" che permettono l'installazione sia per l'architettura "i386" che per "amd64".<br />
<br />
Nessun'altra distribuzione offre così tante possibilità di installazione, adattabili davvero ad ogni esigenza e soprattutto ad ogni peculiarità hardware.<br/><br />
Per una descrizione di tutti i [http://ftp.debian.org/debian/dists/stable/main/installer-i386/current/images/ file immagine e kernel], disponibili per i vari tipi di installazione, fare riferimento al file [http://ftp.debian.org/debian/dists/stable/main/installer-i386/current/images/MANIFEST MANIFEST] (qui indicato, a titolo di esempio, per architettura "i386").<br/><br />
Prima di scegliere l'immagine da utilizzare per l'installazione, è necessario considerare diversi fattori:<br />
* [[La_struttura_della_Distribuzione|versione di Debian]]<br />
* possibilità di accesso alla rete<br />
* tempo e/o banda di download<br />
* disponibilità dei supporti adatti a contenere l'immagine<br />
<br />
questi fattori sono da tenere bene in conto quando si deve decidere quale immagine scaricare. La seguente guida cercherà di descrivere tutti i metodi d'installazione illustrandone le rispettive caratteristiche.<br />
<br />
Tutti i seguenti metodi d'installazione fanno riferimento a Debian [[stable]], se si volesse installare Debian [[testing]] o Debian [[unstable]] (Sid) leggere la sezione [[#Altre versioni|"Altre versioni"]]<br />
<br />
= Avanzamento di versione da Debian 7.x ([[Wheezy]]) a Debian 8.0 ([[Jessie]]) =<br />
Prima di effettuare l'aggiornamento da Wheezy a Jessie è '''caldamente''' consigliato leggere la documentazione ufficiale per non incorrere in brutte sorprese:<br />
* [http://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.it.html Avanzamento di versione]<br />
L'avanzamento consiste solitamente in un semplice aggiornamento del file <code>/etc/apt/sources.list</code> in cui il sistema APT di gestione dei [[pacchetto|pacchetti]] conserva le fonti di installazione del software ([[repository]]).<br/><br />
Leggere anche [[I repository ed il loro utilizzo]], in particolare il paragrafo "[[I repository ed il loro utilizzo#Passaggio da stable a testing|Passaggio da stable a testing]]".<br />
<br />
= Metodi di installazione =<br />
Di seguito verranno elencati brevemente alcuni dei principali metodi d'installazione previsti da Debian:<br />
<br />
== CDROM o DVD ==<br />
È necessario scaricare almeno l'immagine del primo CDROM o DVD relativa alla propria architettura, masterizzarla e poi fare il boot usando il CDROM o DVD, assicurandosi che nella configurazione del BIOS il lettore CD/DVD sia la prima periferica di boot. Se si scaricano e si masterizzano una o più immagini di CDROM o DVD aggiuntivi è possibile (ovviamente) installare anche tutto il software aggiuntivo presente nelle altre immagini. È possibile scaricare le iso tramite HTTP o FTP, bittorrent, oppure tramite il potentissimo [[Jigdo]].<br />
<br />
Download delle immagini CD/DVD:<br />
* [http://www.debian.org/CD/http-ftp/#stable via HTTP/FTP]<br />
* [http://www.debian.org/CD/torrent-cd/ via torrent]<br />
* [http://www.debian.org/CD/jigdo-cd/ via Jigdo]<br />
<br />
== Blu-ray ==<br />
Le immagini Blu-ray di Jessie, sia single-layer (bd) che double-layer (dlbd), sono disponibili per il download solo attraverso Jigdo e, attualmente, sono state create per due sole architetture, i386 e amd64, oltre ad un'immagine contenente i pacchetti sorgente.<br/><br />
Questo il link da cui poter scaricare le immagini Blu-ray tramite Jigdo: [http://www.debian.org/CD/jigdo-cd/#which Blu-ray con Jigdo]<br />
<br />
== Netinst ==<br />
Tramite netinst (net installation) è possibile installare Debian scaricando un'immagine di circa 180 MB per poi masterizzarla su CD o DVD oppure utilizzarla per un'installazione mediante supporto USB o scheda SD.<br/><br />
Quest'immagine contiene solo l'installer e una quantità molto ridotta di pacchetti, costituenti il sistema base, che permettono di scaricare i pacchetti rimanenti via rete.<br/><br />
Poiché l'installazione con l'immagine netinst permette di scaricare solo i pacchetti che si è scelto di installare, essa rappresenta un metodo molto efficiente di installazione in termini di tempo e di banda di download.<br/><br />
<br />
Download delle immagini netinst:<br />
* [http://www.debian.org/CD/netinst/#netinst-stable via HTTP/FTP]<br />
* [http://www.debian.org/CD/torrent-cd/ via torrent]<br />
* [http://www.debian.org/CD/jigdo-cd/#which via Jigdo]<br />
<br />
== Mini.iso == <br />
La "mini.iso" è attualmente l'immagine più piccola disponibile per permettere l'installazione di Debian. Questa immagine è stata pensata per il network boot ma è perfettamente funzionante anche se avviata da altri dispositivi. A differenza della netinst, l'immagine "mini.iso" contiene solo l'installer necessario ad avviare il sistema, tutto il restante software viene scaricato dalla rete.<br />
<br />
Per il download della "mini.iso" bisogna innanzitutto spostarsi in [http://www.debian.org/distrib/netinst questa pagina] e poi, nella sezione "Network Boot", scegliere la propria architettura e spostarsi nella directory "netboot".<br />
<br />
== Floppy disk ==<br />
A partire dal kernel 2.6.24, la capienza dei floppy disk non è più sufficiente a contenere i file necessari all'avvio del processo d'installazione.<br/><br />
Per poter installare Debian è quindi necessario far ricorso ad altri metodi d'installazione.<br />
<br />
== Dispositivo USB o scheda SD ==<br />
Se non si dispone di un lettore CD o DVD (come accade per i netbook o per molti server), è possibile installare Debian partendo da un dispositivo USB o da una SD card, purché il sistema lo consenta.<br/><br />
Tramite tali dispositivi è possibile utilizzare le immagini CD/DVD, netinst o mini.iso.<br/><br />
Per una guida su come preparare un dispositivo USB o una SD card per avviare l'installazione di Debian, leggere [[Installare Debian da pendrive USB o SD card | questa pagina]].<br />
<br />
== TFTP da rete ==<br />
Se la propria macchina è connessa a una rete locale, allora è possibile avviare il processo d'installazione accedendovi da remoto e facendo il boot automaticamente via rete (utile per installazioni contemporanee su decine di macchine).<br/><br />
Consultare la seguente pagina [http://d-i.alioth.debian.org/manual/it.i386/ch04s05.html Preparazione dei file per l'avvio TFTP da rete]<br />
<br />
== Immagini .iso da hard disk ==<br />
<br />
Questo metodo consente di installare Debian partendo da un'immagine .iso precedentemente salvata in una cartella del proprio hard disk.<br/><br />
Qui è possibile leggere la guida che illustra questo procedimento: [[Installare Debian da hard disk]]<br />
<br />
== Installazione senza rete (off-line) ==<br />
Se non si possiede una connessione veloce ad internet è lo stesso possibile installare Debian, basta procurarsi tutti i CD/DVD o meglio sono sufficienti solo le .iso non masterizzate;<br />
* [[Immagini iso Debian da usare come repository | Usare direttamente le .iso]]<br />
* [[Creare immagini iso dei repository Debian | Creare le immagini .iso]] compreso multimedia e [[non-free]]<br />
<br />
== Altri metodi d'installazione ==<br />
<br />
* Partendo da un sistema GNU/Linux già funzionante ed eseguendo una '''[http://www.debian.org/releases/stable/i386/apds03.html.it cross installation]'''<br />
<br />
* '''[http://www.debian.org/releases/stable/i386/apb.html.it Installazione automatica tramite preconfigurazione]''': La preconfigurazione offre un modo per impostare le risposte alle domande poste durante l'installazione senza doverle inserire manualmente. Questo permette di automatizzare completamente la maggior parte dei tipi d'installazione e offre persino alcune funzionalità che non sono disponibili durante l'installazione tradizionale. Utile per installazioni su larga scala.<br />
<br />
<!-- == Istantanee d'installazione ==<br />
Istantanee di tre diversi modi d'installazione:<br />
* [[Squeeze, installer di default]]<br />
* [[Squeeze, installer CD/DVD]]<br />
* [[Installare Debian Wheezy - Guida Grafica|Wheezy, installer grafico]] --><br />
= Altre versioni =<br />
== Testing ==<br />
Le immagini sopra menzionate esistono anche per Debian testing. In questo caso si potrà scegliere tra:<br />
* Immagini generate settimanalmente ([http://cdimage.debian.org/cdimage/weekly-builds/ weekly builds])<br/>Tipicamente create ogni lunedì e contenenti l'ultima versione dell'installer e i pacchetti aggiornati al giorno di creazione dell'immagine. Questa immagine viene creata per tutte le architetture, in versione multi-arch e nelle versioni suddivise per [[Desktop Environment]] (KDE, GNOME, XFCE, LXDE)<br />
* Immagini generate giornalmente ([http://cdimage.debian.org/cdimage/daily-builds/ daily builds]).<br/>Vengono create due volte al giorno e sono solo del tipo "netinst" per tutte le architetture.<br />
<br />
== Unstable (Sid) ==<br />
Attualmente non esistono immagini contenenti i pacchetti di Sid. Se si vuole installare Debian unstable sulla propria macchina bisogna aggiornare la stable o la testing seguendo le indicazioni riportate nella guida [[Installare Debian SID]].<br />
<br />
== Versioni antecedenti la stable ==<br />
Se si ha la necessità di dover installare una versione di Debian precedente alla stable, è possibile reperire le immagini (CD-ROM, DVD, netinst, business card) o i file .jigdo a questo indirizzo: [ftp://cdimage.debian.org/cdimage/archive/ ftp://cdimage.debian.org/cdimage/archive/].<br/><br />
Sono disponibili tutte le versioni di Debian dalla 3.1 ("Sarge") in poi.<br />
<br />
Installazione Wheezy: [[Installare Debian Wheezy - Guida Grafica]]<br />
<br />
= Debian Live =<br />
Attraverso la Debian Live è possibile lanciare e utilizzare Debian senza installare nulla sull'hard disk. La live può ritornare molto utile nel caso in cui si voglia verificare la compatibilità di Debian con il proprio hardware e decidere a posteriori se installarla o meno fisicamente sul proprio hard disk.<br />
* [http://www.debian.org/CD/live/ Debian Live]<br />
<br />
== Immagini ==<br />
Tutte le immagini possono essere scaricate attraverso il sito ufficiale Debian http://www.debian.org/CD/live/ oppure dalla pagina ufficiale del [http://live.debian.net/ Debian Live Project] in cui si trovano anche le immagini live di Debian oldstable, di Debian testing e della stable contenente pacchetti non-free (utile se l'hardware dovesse richiedere firmware proprietario). Queste ultime vengono aggiornate con cadenza giornaliera, settimanale e mensile.<br />
<br />
Attualmente le immagini live di Debian sono disponibili per due architetture: '''i386''' (per PC a 32 bit) e '''amd64''' (PC a 64 bit).<br />
<br />
= Immagini non ufficiali =<br />
== Immagini con firmware proprietario ==<br />
Debian 8.0 ([[Jessie]]) adotta un kernel completamente libero, ossia privo di firmware non-free (non rilasciato sotto licenza GPL).<br/><br />
Per questo, nonostante gli sforzi degli sviluppatori, è possibile che, su alcuni sistemi, particolari componenti hardware non vengano riconosciuti in fase di installazione. In questo caso è possibile installare Debian partendo da un'immagine non-ufficiale scaricabile al seguente indirizzo: http://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/<br/><br />
<br />
Quest'immagine contiene i firmware non-free necessari al funzionamento di particolari dispositivi (schede wireless, schede video, etc.)<br />
<br />
<!-- == Immagini backports di Squeeze con kernel recente e firmware == <br />
Su macchine che presentano hardware recente, è molto probabile che, partendo dall'immagine .iso ufficiale, l'installazione di Squeeze non vada a buon fine o presenti problemi di riconoscimento delle periferiche che ne impediscono addirittura l'avvio.<br/><br />
Questo comportamento è dovuto al fatto che il kernel di default utilizzato dal Debian installer di Squeeze è il 2.6.32, inadatto a riconoscere e gestire periferiche da poco introdotte sul mercato (o che comunque, al rilascio del kernel 2.6.32, non esistevano).<br />
<br />
Una possibile soluzione a questo inconveniente è quella di installare la versione ''testing'' di Debian che presenta un installer più recente e un kernel più aggiornato.<br/><br />
<br />
Per chi, invece, ha la necessità di utilizzare la versione ''stable'', Kenshi Muto ha reso disponibili delle immagini non ufficiali di Squeeze che utilizzano kernel più recenti e contengono anche i pacchetti con il firmware proprietario necessario al funzionamento di alcune periferiche.<br/><br />
Le immagini possono essere scaricate da http://cdimage.debian.org/cdimage/unofficial/backports/squeeze/ e la loro descrizione è visibile [http://kmuto.jp/debian/d-i/ qui].<br />
<br />
Attualmente è possibile prelevare immagini di Squeeze con kernel:<br />
* 2.6.38<br />
* 2.6.39<br />
* 3.2.4<br />
contenenti o meno il firmware proprietario e disponibili per le sole architetture '''i386''' e '''amd64'''.<br/><br />
Le immagini sono ''netinst'', per cui necessitano di una connessione funzionante ad Internet per poter installare, prelevando i pacchetti dai [[repository]] ufficiali di Debian Squeeze, un ambiente completo e funzionale alle proprie esigenze.<br />
--><br />
= Problemi =<br />
Se si dovessero verificare problemi durante l'installazione di Debian:<br />
* Accertarsi di aver scaricato l'immagine corretta per la propria architettura.<br />
* [[Controllare l'integrità delle immagini Debian | Verificare]] la firma digitale dell'immagine scaricata per accertarsi che non sia corrotta.<br />
* Accedere, durante l'installazione, al terminale tty4 premendo i tasti Alt+F4 (o Ctrl+Alt+F4) e controllare eventuali messaggi d'errore.<br />
* [[Installazione Debian - I log dell'installer|Leggere]] i file di log dell'installer.<br />
* Controllare la [http://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=d-i lista dei bug segnalati per il Debian Installer] accertandosi che il problema non sia già stato segnalato e affrontato. In caso contrario inviare una segnalazione al [[BTS]] dopo essersi accertati di essere effettivamente incappati in un [[bug]] dell'installer. (leggere la guida a [[Reportbug]])<br />
* Installare la versione più recente di Debian.<br />
<!--{{Warningbox|Il rilascio di Wheezy ha portato con sé diversi problemi che potrebbero sorgere in fase di installazione (mancata installazione di Grub, problemi con l'UEFI, convivenza con Win8 e altro). La risoluzione è, fino alla prossima [[point release]], demandata a dei workaround.<br/>Si consiglia di leggere '''attentamente''' [http://www.debian.org/releases/stable/debian-installer/ il paragrafo "Errata" di questa pagina] relativa al Debian Installer.}}--><br />
<br />
== Vecchie immagini per installare Debian ==<br />
Nel caso in cui le immagini .iso più recenti portino all'impossibilità di installare Debian, è possibile eseguire il download di immagini relative all'installazione di vecchie release di Debian.<br/><br />
La pagina da cui scaricare le immagini è [http://cdimage.debian.org/mirror/cdimage/archive/ questa].<br/><br />
Sono prelevabili le immagini di installazione di Debian (dalla 3.0 in poi) relative a tutte le architetture disponibili al momento del rilascio.<br />
<br />
Per motivi di spazio, tutte le immagini devono essere create attraverso [[Jigdo]] ma potrebbe essere possibile trovare già presenti delle immagini .iso per rilasci più recenti.<br />
<br />
== Firmware proprietario ==<br />
Su alcuni particolari sistemi è possibile che l'[[installer]] richieda [[firmware]] proprietario aggiuntivo per configurare determinati componenti hardware (schede ethernet wireless, schede ethernet cablate, schede video etc.).<br/><br />
Questo comportamento è dovuto al fatto che, a partire da Squeeze, gli sviluppatori hanno scelto di rimuovere dalla release il firmware non rilasciato sotto licenza GPL. Il tutto in conformità con la [http://www.debian.org/social_contract#guidelines filosofia] che è alla base di Debian, il suo contratto sociale e le [[DFSG]].<br />
<br />
Nel caso l'installer richieda tale firmware, è necessario copiare su una pendrive USB (o altro supporto rimovibile) uno dei tre file compressi (.cpio.gz, .tar.gz o .zip) scaricabili a [http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/ questo indirizzo] in base alla versione di Debian che si intende installare e alla propria [[architettura]].<br/><br />
Per ottenere direttamente un'immagine non ufficiale comprendente i firmware proprietari, leggere il paragrafo [[#Immagini_con_firmware_proprietario|immagini con firmware proprietario]].<br />
<br />
Anche nel caso in cui l'installazione terminasse senza aver installato il firmware proprietario, è sempre possibile installarlo attraverso i [[Repository|repository]] ([[sezione]] '''non-free''') di Debian o, in caso di connessione assente, in modo manuale tramite ''dpkg''.<br/><br />
La lista dei pacchetti contenenti il firmware non free per i diversi componenti hardware è mostrata in [http://packages.debian.org/search?keywords=firmware&searchon=names&suite=stable&section=all questa pagina].<br />
<br />
Leggere anche: [[Debian e firmware]] .<br />
<br />
= Manutenere Debian =<br />
Dopo aver installato Debian nasce il bisogno di tenere il sistema aggiornato oppure apportare qualche modifica, a questo scopo un articolo della e-zine può essere molto utile.<br />
*[http://e-zine.debianizzati.org/web-zine/numero_2/?page=12:Link e-zine n.2]<br />
<br />
= Approfondimenti =<br />
<br />
=== Debianizzati ===<br />
* [[Installazione Debian: pagine utili]]<br />
<br />
=== Collegamenti esterni ===<br />
<br />
[1] [https://www.debian.org/News/2015/20150426 rilascio]<br/><br />
[2] [http://ftp.debian.org/debian/dists/stable/main/installer-i386/current/images/ file immagine e kernel]<br/><br />
[3] [http://ftp.debian.org/debian/dists/stable/main/installer-i386/current/images/MANIFEST MANIFEST]<br/><br />
[4] [http://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.it.html Avanzamento di versione]]<br/><br />
[5] [http://www.debian.org/CD/http-ftp/#stable via HTTP/FTP]<br/><br />
[6] [http://www.debian.org/CD/torrent-cd/ via torrent]<br/><br />
[7] [http://www.debian.org/CD/jigdo-cd/ via Jigdo]<br/><br />
[8] [http://www.debian.org/CD/jigdo-cd/#which Blu-ray con Jigdo]<br/><br />
[9] [http://www.debian.org/CD/netinst/#netinst-stable via HTTP/FTP]<br/><br />
[10] [http://www.debian.org/CD/torrent-cd/ via torrent]<br/><br />
[11] [http://www.debian.org/CD/jigdo-cd/#which via Jigdo]<br/><br />
[12] [http://www.debian.org/distrib/netinst questa pagina]<br/><br />
[13] [http://d-i.alioth.debian.org/manual/it.i386/ch04s05.html Preparazione dei file per l'avvio TFTP da rete]<br/><br />
[14] [http://www.debian.org/releases/stable/i386/apds03.html.it cross installation]<br/><br />
[15] []<br/><br />
[16] []<br/><br />
[17] []<br/><br />
[18] []<br/><br />
[19] []<br/><br />
[20] []<br/><br />
[21] []<br/><br />
[22] []<br/><br />
[23] []<br/><br />
[24] []<br/><br />
[25] []<br/><br />
[26] []<br/><br />
Per ulteriori informazioni c'è il completissimo '''Manuale di Installazione Debian''':<br/><br />
[27] [http://www.debian.org/releases/stable/i386/ Debian GNU/Linux Installation Guide]<br/><br />
[28] [http://wiki.debian.org/DebianInstaller/FAQ FAQ del Debian Installer]<br/><br />
[29] [https://www.debian.org/CD/faq/ FAQ sulle immagini CD/DVD]<br/><br />
[30] [http://www.debian.org/releases/stable/debian-installer/ Tutte le immagini relative a Debian "stable"]<br/><br />
<br />
{{Autori<br />
|Autore=Debianizzati.org<br />
|Verificata_da = <br />
:[[Utente:S3v|S3v]] 22:53, 11 dic 2015 (CET)<br />
|Numero_revisori=1<br />
}}<br />
<br />
[[Categoria:Installazione]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Guida_alla_configurazione_di_Xorg&diff=40552Guida alla configurazione di Xorg2015-12-19T00:25:13Z<p>Ombra: link esterni</p>
<hr />
<div>{{Versioni compatibili|Squeeze|Wheezy|Jessie}}<br />
==Che cos'è==<br />
Xorg è il server dell'X Window System, il gestore grafico dei sistemi Unix, sviluppato da X.Org Foundation<sup>[[#Collegamenti esterni | [1]]]</sup>, rilasciato sotto licenza MIT<sup>[[#Collegamenti esterni | [5]]]</sup> (software libero).<br />
Grazie al diffondersi di applicazioni open source di un certo livello, come OpenOffice e TheGimp, X viene supportato, in modo secondario, anche da sistemi operativi proprietari (come Windows e Mac OS X).<br />
<br />
Si basa su un'intelligente architettura client/server, in cui il server X in esecuzione su un computer comunica con gli altri programmi che utilizziamo normalmente, i quali fungono da client. Il server si colloca tra l'utente e il programma client: accetta, quindi, richieste di output grafico dai client (disegnare finestre in una certa posizione) mostrandole all'utente, e riceve input dall'utente (inserimento di testo in una textbox, click del mouse su un certo pulsante ecc.) trasmettendoli ai programmi client.<br />
<br />
Questa architettura permette un notevole vantaggio rispetto alle interfacce grafiche che non la adottano (ad esempio quella di Windows): infatti, nel momento in cui vengono a presentarsi certi problemi relativi al server grafico, il sistema non è costretto ad andare in crash poiché bastano pochi comandi per farlo partire nuovamente, senza dover riavviare il computer.<br />
<br />
Una caratteristica fondamentale (e anti-intuitiva) è che il server grafico risiede sulla macchina dell'utente mentre le varie applicazioni (client) possono essere anche remote: infatti il tutto viene considerato dal punto di vista dell'applicazione che chiede (tramite l'utente) servizi al server. Da notare che, comunque, l'applicazione remota è eseguita come se risiedesse sulla stessa macchina del server.<br />
<br />
Ciò che andremo ad analizzare nella guida sarà il file <code>xorg.conf</code> (di solito è: <code>/etc/X11/xorg.conf</code>, digita <code>man xorg.conf</code> per una lista delle possibili directory del file, oppure <code>sudo find / -iname xorg.conf</code> per verificarne la posizione sul tuo computer, Ctrl+C per fermare la ricerca), che permette una configurazione precisa e accurata dell'X Server.<br />
Una caratteristica fondamentale di <code>xorg.conf</code> è che permette di associare ad ogni device, non solo determinate proprietà (come ad esempio, frequenza orizzontale dello schermo, risoluzione, ecc.) ma anche il driver specifico da utilizzare. Dunque, le sezioni che descrivono un device sono una sorta di interfaccia al driver utilizzato che, a sua volta, è un'interfaccia per il dispositivo vero e proprio.<br />
<br />
Nelle nuove versioni (dalla 7.3) Xorg si autoconfigura rendendo, in un certo senso, inutile il file di configurazione. Questo è vero da un lato, cioè se vogliamo una macchina pronta subito dopo l'installazione del sistema. Però, d'altro canto, come ogni cosa fatta personalmente, scrivere il proprio file di configurazione è molto più efficiente: non solo perché possiamo ovviare ad alcuni errori che la configurazione automatica può portare con sé, ma anche perché potremo avere così un ambiente completamente personalizzato e messo a punto in ogni particolare.<br />
<br />
==Avvisi e precauzioni==<br />
Alcuni avvisi e qualche precauzione prima d'iniziare.<br />
<br />
<b>Avviso 1</b>: Questa guida non ha l'obiettivo di spiegare ogni dettaglio del file <code>xorg.conf</code>, anche se è abbastanza particolareggiata. Per questa ragione è ovvio che possiate trovare in alcuni file di configurazione delle voci che non abbiamo descritto. Leggete <code>man xorg.conf</code> e <code>man xorg</code> se ne avete la necessità.<br />
<br />
<b>Avviso 2</b>: È possibile che non abbiate il file <code>xorg.conf</code> (come già spiegato). Basta crearne uno (semmai in <code>/etc/X11/xorg.conf</code>), per utilizzare la configurazione descritta in questo al posto di quella automatica.<br />
<br />
<b>Precauzione 1</b>: prima di modificare il file <code>xorg.conf</code> è bene farne un backup. Cerchiamo prima il percorso completo del file (come spiegato sopra) poi digitiamo (supponendo che quella indicata sia la directory giusta):<br />
<pre>$ cp /etc/X11/xorg.conf ~/xorg_backup.conf</pre><br />
<br />
<b>Precauzione 2</b>: possiamo generare un file <code>xorg.conf</code> basato sull'autodetect della nostra configurazione. Riavviamo il sistema in single-mode user, eseguiamo l'accesso come root e diamo:<br />
<pre><br />
# Xorg -configure<br />
</pre><br />
verrà creato nella directory corrente un file (di solito <code>xorg.conf.new</code>) che possiamo utilizzare non solo per ripristinare alcuni errori dovuti a modifiche accidentali, ma anche per iniziare a far pratica sui concetti che esporremo.<br />
Ricordiamo però che l'autodetect e la conseguente creazione del file <code>xorg.conf</code> in automatico può portare a dei problemi causati da un rilevamento erroneo delle componenti.<br />
<br />
==Com'è fatto==<br />
A titolo d'esempio vediamo come si presenta un file <code>xorg.conf</code>:<br />
<pre><br />
Section "ServerLayout"<br />
Identifier "Layout0"<br />
Screen 0 "Screen0"<br />
InputDevice "Keyboard0" "CoreKeyboard"<br />
InputDevice "Mouse0" "CorePointer"<br />
EndSection<br />
<br />
Section "Files"<br />
RgbPath "/etc/X11/rgb"<br />
ModulePath "/usr/lib/xorg/modules"<br />
FontPath "/usr/share/fonts/X11/misc"<br />
FontPath "/usr/share/fonts/X11/cyrillic"<br />
EndSection<br />
<br />
Section "Module"<br />
Load "dbe"<br />
Load "extmod"<br />
Load "type1"<br />
Load "freetype"<br />
Load "glx"<br />
EndSection<br />
<br />
Section "InputDevice"<br />
# generated from default<br />
Identifier "Mouse0"<br />
Driver "mouse"<br />
EndSection<br />
<br />
Section "InputDevice"<br />
# generated from default<br />
Identifier "Keyboard0"<br />
Driver "kbd"<br />
EndSection<br />
<br />
Section "Monitor"<br />
Identifier "Monitor0"<br />
VendorName "Unknown"<br />
ModelName "Unknown"<br />
HorizSync 28.0 - 33.0<br />
VertRefresh 43.0 - 72.0<br />
EndSection<br />
<br />
Section "Device"<br />
Identifier "Device0"<br />
Driver "nvidia"<br />
VendorName "NVIDIA Corporation"<br />
EndSection<br />
<br />
Section "Screen"<br />
Identifier "Screen0"<br />
Device "Device0"<br />
Monitor "Monitor0"<br />
DefaultDepth 24<br />
SubSection "Display"<br />
Depth 24<br />
EndSubSection<br />
EndSection<br />
</pre><br />
<br />
Si cerchi di leggerlo con attenzione: ovviamente sarà tutto molto complicato, ma è bene prendere confidenza con quella struttura.<br />
Alla fine di questa guida spero che le cose siano più chiare.<br />
<br />
===Struttura generale===<br />
Il file <code>xorg.conf</code> è composto da un certo numero di sezioni (=<b>Section</b>) in un ordine qualsiasi. Ogni sezione ha la forma seguente:<br />
<pre><br />
Section "SectionName"<br />
SectionEntry<br />
...<br />
EndSection<br />
</pre><br />
<br />
Come leggiamo nel man, le sezioni possono avere i seguenti nomi (in grassetto quelli più importanti)<br />
<br />
* <b>ServerLayout: </b> Livello principale del file<br />
<br />
* <b>InputDevice:</b> Descrizione dei device di input (mouse, tastiera, ecc.)<br />
<br />
* <b>Device:</b> Descrizione della scheda grafica<br />
<br />
* VideoAdaptor: Xv video adaptor description<br />
<br />
* <b>Monitor: </b>Descrizione del monitor <br />
<br />
* Modes: Video modes descriptions<br />
<br />
* <b>Screen:</b> Associazione dei monitor alla scheda grafica e viceversa<br />
<br />
* <b>Files:</b> Percorsi di file particolarmente utili (database RGB, caratteri, moduli da caricare, ecc.)<br />
<br />
* ServerFlags: Server flags<br />
<br />
* <b>Module:</b> Indica al server quali moduli deve caricare (es: estensioni come glx, per la gestione del rendering OpenGL all'interno delle finestre, moduli per il font rasterization<sup>[[#Collegamenti esterni | [6]]]</sup>, ecc.)<br />
<br />
* DRI: DRI-specific configuration<br />
<br />
* Vendor: Vendor-specific configuration<br />
<br />
La sezione '''ServerLayout''' è il livello più alto, serve a tenere uniti i device di input/output utilizzati in una sessione. I device di input sono descritti nella sezione '''InputDevice'''. Mentre i device di output (quali monitor e scheda grafica) sono descritti all'interno della sezione '''Screen'''. Il monitor è descritto nella sezione '''Monitor''' e la scheda grafica nella sezione '''Device'''.<br />
<br />
Una ''SectionEntry'' (vedremo dopo quelle particolari di ogni SectionName) è formata da una parola chiave seguita da uno o più argomenti dipendenti da essa. I tipi di questi argomenti sono 3:<br />
* Integer: interi<br />
* Real: virgola mobile<br />
* String: stringa racchiusa tra (")<br />
<br />
Una parola-chiave importante è <b>Option</b> che viene utilizzata per settare particolari opzioni di un componente del server (tastiera, mouse, monitor, scheda grafica, ecc.). <br />
<b>Option</b> è formata da una o due stringhe: la prima è il nome dell'opzione, e la seconda, non obbligatoria, è il valore dell'opzione. Che siano interi, real o stringhe i valori delle option devono essere virgolettati.<br />
Molto sinteticamente, per comprenderne il funzionamento, si legga questo esempio preso dal man:<br />
<br />
Esempio: Le seguenti opzioni sono equivalenti:<br />
<pre><br />
Option "Accel" "Off"<br />
<br />
Option "NoAccel"<br />
<br />
Option "NoAccel" "On"<br />
<br />
Option "Accel" "false"<br />
<br />
Option "Accel" "no"<br />
</pre><br />
<br />
===ServerLayout Section===<br />
La sezione ServerLayout è il livello principale di tutto il file <code>xorg.conf</code>. Essa serve a raggruppare i dispositivi di input/output (e alcune delle loro caratteristiche fondamentali) che verranno utilizzati all'interno della sessione corrente.<br />
È possibile avere più sezioni ServerLayout. Il motivo fondamentale è semplice: pensiamo ad una sessione di tre utenti su di uno stesso computer. A parte certi dispositivi che possono essere condivisi (come ad esempio la scheda grafica) sicuramente ogni utente ha una tastiera, un mouse e uno schermo "personali". Quindi questi dispositivi personali, in generale, avranno caratteristiche differenti e allora è necessario definire nel file di configurazione 3 diverse sezioni per ogni dispositivo (3 per la tastiera, 3 per il mouse, 3 per lo schermo). A questo punto è necessario definire 3 sezioni ServerLayout in modo tale che si raggruppino, per ogni utente, il proprio mouse, la propria tastiera e il proprio schermo. Facendo così, si permette ad ogni utente di avere una sessione personale e funzionante con i propri dispositivi. Infine, come spiegato altrove, se un utente vuol partire con una propria sezione ServerLayout basta che utilizza il comando: <pre>Xorg -layout nome_server_layout</pre><br />
<br />
(Nota: ovviamente se, per esempio, due utenti hanno tastiere diverse ma con identiche caratteristiche, allora non è necessario definire due sezioni per ogni tastiera, in quanto basta definirne una "condivisa". Lo stesso vale per le ServerLayout: se due utenti hanno tutti dispositivi diversi ma con identiche caratteristiche è sempre necessario definire solamente una sezione ServerLayout).<br />
<br />
Quindi principalmente in ServerLayout andiamo a dire al server X che l'utente U utilizza la tastiera A, il mouse B, lo schermo C e la scheda video D per la sua sessione e successivamente, nelle altre sezioni, specifichiamo in modo dettagliato cosa si intende per tastiera A, mouse B, ecc.<br />
<br />
Introduciamo ora alcuni concetti fondamentali riguardanti i Device che saranno utili anche in seguito. Un device è l'astrazione di un dispositivo hardware (tastiera, mouse, schermo, ecc.) al quale il sistema operativo fornisce accesso mediante un driver.<br />
Ci occuperemo dei seguenti device: tastiera, mouse, schermo e scheda grafica. A differenza degli altri device elencati, la tastiera e il mouse devono avere una caratteristica in più. Supponiamo che attaccati ad un computer ci siano più tastiere e più mouse: in questo caso possiamo utilizzarne solo una coppia alla volta. Quindi c'è bisogno di definire quale di quelle tastiere è una <b>CoreKeyboard</b> e quale mouse è un <b>CorePointer</b>. Indicando queste due opzioni (nei modi che vedremo di seguito) non facciamo altro che stabilire quale tastiera e quale mouse utilizzeremo per la nostra sessione. È possibile cambiare "dinamicamente" (con alcune opzioni del programma xorg) la corekeyboard (o la corepointer) cambiando quindi di conseguenza la tastiera (o il mouse) utilizzato nella sessione corrente. Questo discorso è utile soprattutto in presenza di una sessione multiutente su di una stessa macchina: ogni sessione avrà una corekeyboard diversa e quindi ogni utente potrà utilizzare, indipendentemente dagli altri, la sua tastiera. Tornando all'esempio di prima, la tastiera A e il mouse B per un certo utente sono dei dispositivi di input "core".<br />
(Vedremo successivamente come specificare che un dispositivo di input è "core" o "primary").<br />
<br />
Il discorso sulla scheda video e il monitor è diverso: infatti non c'è la necessità di utilizzare solo un monitor o solo una scheda video in una certa sessione, poiché uno stesso utente può, naturalmente, utilizzare due schermi contemporaneamente. In questo caso, basta inserire due sezioni Screen. Lo stesso vale per la scheda grafica.<br />
<br />
Una nota fondamentale: '''ogni dispositivo (tastiera, mouse, schermo, scheda grafica) deve avere una relativa sezione ben definita'''; questo significa, per esempio, che se abbiamo un computer con due tastiere c'è bisogno della presenza di due sezioni che le descrivano.<br />
<br />
È importante sapere che è possibile non avere una sezione ServerLayout: in questo caso verranno scelti il primo schermo "attivo" e la coppia di core input device.<br />
(Se non è chiaro questo passaggio basta avere pazienza e leggere di sotto, dove verrà spiegato il concetto di "attivo")<br />
<br />
Il formato della sezione ServerLayout è:<br />
<pre><br />
Section "ServerLayout"<br />
Identifier "name"<br />
Screen screen-num "screen-id"<br />
...<br />
InputDevice "idev-id"<br />
...<br />
options<br />
</pre><br />
<br />
Ogni sezione ServerLayout deve avere un Identifier e almeno uno Screen. Lo <code>screen-num</code> (opzionale) è utilizzato nel caso abbiate bisogno di schermi multipli (in fondo ho segnalato un link che approfondisce questo aspetto).<br />
Ovviamente bisogna mantenere una certa coerenza con le sezioni successive (ad esempio: lo <code>screen-id</code> deve essere l'Identifier di una sezione Screen, così come l'<code>idev-id</code> deve essere un identifier di un certa sezione InputDevice).<br />
<br />
L'Identifier della sezione ServerLayout è un nome che la identifica univocamente, inoltre è proprio questo nome che viene utilizzato dal programma Xorg (con l'opzione <code>-layout</code>) per avviare X con una particolare configurazione.<br />
<br />
All'interno della ServerLayout è possibile indicare quali InputDevice sono primari, in questo modo:<br />
<pre><br />
Section "ServerLayout"<br />
Identifier "name"<br />
...<br />
...<br />
InputDevice "keyboard0" "CoreKeyboard"<br />
</pre><br />
dove <code>keyboard0</code> è l'Identifier di una InputDevice Section dedicata alla tastiera che vogliamo utilizzare per la sessione corrente. Lo stesso vale per i pointer.<br />
Vedremo in seguito altri modi per dire al server X che un certo dispositivo deve essere considerato primario.<br />
<br />
===InputDevice Section===<br />
Normalmente le sezioni InputDevice sono almeno due: una per la tastiera (primaria) e l'altra per il dispositivo di puntamento primario (di solito mouse). Se viene omessa verrà utilizzata una configurazione di default che non funziona bene su tutte le piattaforme. Quindi è utile seguire i consigli successivi.<br />
<br />
La InputDevice Section ha il seguente formato<br />
<pre><br />
Section "InputDevice"<br />
Identifier "name"<br />
Driver "inputdriver"<br />
options<br />
...<br />
EndSection<br />
</pre><br />
Le voci Identifier e Driver sono obbligatorie, mentre tutto il resto è opzionale. La voce Identifier permette di dare al device un nome univoco che è lo stesso utilizzato, ad esempio, nella sezione ServerLayout). Mentre la voce Driver indica il driver utilizzato per il device di Input.<br />
Ora attenzione al seguente passaggio. Una InputDevice Section viene considerata "attiva" quando:<br />
* è specificata all'interno della ServerLayout come Core* (* = Keyboard oppure Pointer)<br />
* è specificata grazie ad alcune opzioni da linea di comando del programma xorg (digita <code>man xorg</code>) che permette di rendere "core" un device di input.<br />
* è specificata come Core* all'interno della sezione InputDevice stessa (Option "CoreKeyboard" oppure Option "CorePointer").<br />
Se nessuna delle tre condizioni è verificata allora viene considerato core (e quindi attiva) la sezione che utilizza come driver "kbd" o "mouse" (vedi <code>man</code>).<br />
<br />
Dopo questa definizione possiamo continuare dicendo che: se viene utilizzato un server dinamico (e quindi non statico) il modulo del driver "inputdriver" viene caricato per ogni sezione attiva (non per tutte ovviamente, dato che -come abbiamo visto nell'introduzione- è possibile, per ogni sessione, utilizzare un unico mouse e un'unica tastiera).<br />
<br />
Una nota interessante: per qualche ragione (vedi ***) potreste avere il bisogno di settare esplicitamente il layout della tastiera. Per farlo basta aggiungere, nella sezione InputDevice dedicata alla tastiera, la seguente opzione:<br />
<pre>Option "XkbLayout" "it"</pre><br />
dove <code>it</code> indica il layout italiano.<br />
<br />
(***) E' capitato, dopo l'installazione dei driver proprietari nvidia, che il layout della tastiera fosse impostato -in modo silente- a quello statunitense, rendendo quindi scorretta l'associazione tra tasti e caratteri.<br />
<br />
===Device Section===<br />
<code>xorg.conf</code> può avere più di una sezione Device, però ce ne deve essere come minimo una che descriva la scheda grafica utilizzata. Il formato è il seguente:<br />
<pre><br />
Section "Device"<br />
Identifier "name"<br />
Driver "driver"<br />
entries<br />
...<br />
EndSection<br />
</pre><br />
Sono obbligatorie solo le voci Identifier e Driver che funzionano come sopra. Le altre entry sono opzionali e dipendono dalla scheda grafica in questione. È utile avere a disposizione il manuale della scheda per modificarle. Ne vediamo solo alcune:<br />
<br />
* <code>BusID "bus-id"</code>: specifica l'indirizzo (il bus location) della della scheda grafica;<br />
<br />
* <code> Screen number </code>: indica quale schermo utilizzare. È utilizzato per quelle schede video che possono gestire più di uno schermo (consiglio i link seguenti per chi avesse questa necessità: Multiple Monitors with XFree86<sup>[[#Collegamenti esterni | [7]]]</sup> o Multiple Monitors with Nvidia<sup>[[#Collegamenti esterni | [8]]]</sup>).<br />
<br />
===Monitor Section===<br />
{{Warningbox|Parametri sbagliati potrebbero danneggiare irreversibilmente il vostro monitor: leggete la documentazione dello schermo per essere sicuri di inserire valori compatibili.}}<br />
La sezione Monitor, che descrive le particolarità dello schermo, ha questo formato:<br />
<pre><br />
Section "Monitor"<br />
Identifier "name"<br />
entries<br />
...<br />
EndSection<br />
</pre><br />
<br />
Può avere istanza multiple.<br />
<br />
L'unica voce obbligatoria è Identifier. Vediamo alcune entry interessanti:<br />
<br />
* <code>VendorName "vendor"</code>: opzionale, specifica il produttore del monitor;<br />
<br />
* <code>ModelName "model"</code>: opzionale, indica il modello del monitor;<br />
<br />
* <code>HorizSync horizsync-range</code>: indica il range della frequenza di aggiornamento orizzontale del monitor. Viene indicato come: <code>freq min - freq max</code>. Di default l'unità di misura è kHz (è possibile specificarlo in MHz o in Hz, però bisogna aggiungere queste unità di misura esplicitamente). Consultare il manuale del monitor per avere informazioni specifiche;<br />
<br />
* <code>VertRefresh vertrefresh-range </code>: indica il range della frequenza di aggiornamento verticale supportata dello schermo. La sintassi è come sopra;<br />
<br />
* <code>DisplaySize width height</code>: opzionale, indica larghezza e altezza, espressa in millimetri, dell'area visibile dello schermo. Se viene specificata è utilizzata per calcolare i DPI dello schermo.<br />
<br />
===Screen Section===<br />
La Screen Section può avere istanze multiple. Ovviamente ne deve essere presente almeno una. Infatti questa sezione lega il device grafico con il monitor e quindi la sezione Device con la sezione Monitor: ciò significa che associa una certa scheda video ad un dato monitor.<br />
Perchè è possibile avere istanze multiple di Screen? Poichè ad esempio avendo a disposizione due schede video e due monitor possiamo scegliere, in una particolare sezione, quale combinazione usare (è la stessa ragione, quindi, per cui possono esistere più sezioni ServerLayout).<br />
Una sezione Screen è considerata attiva se è specificata all'interno della sezione ServerLayout, oppure se viene "attivata" dal opzione <code>-screen</code> del programma xorg. Se nessuna di queste due condizioni è presente allora viene considerata "attiva" la prima sezione Screen trovata nel file <code>xorg.conf</code>.<br />
La sezione ha questo formato:<br />
<pre><br />
Section "Screen"<br />
Identifier "name"<br />
Device "devid"<br />
Monitor "monid"<br />
entries<br />
...<br />
SubSection "Display"<br />
entries<br />
...<br />
EndSubSection<br />
...<br />
EndSection<br />
</pre><br />
<br />
I campi obbligatori sono Identifier e Device. Il valore del campo device deve essere un identifier specificato della sezione Device. Anche se non obbligatorio, è bene inserire il "monid" (ovviamente uguale a uno di quelli specificati nella sezione Monitor).<br />
Interessante è anche specificare la profondità di colore<sup>[[#Collegamenti esterni | [9]]]</sup> che deve essere usata dal server per default: <code>DefaultDepth depth</code>.<br />
Importante è anche l'opzione seguente:<br />
<pre><br />
Option "Accel"<br />
</pre><br />
che abilita l'accelerazione hardware 2d tramite l'architettura XAA<sup>[[#Collegamenti esterni | [10]]]</sup>. È abilitata per default, ma se sono presenti dei bug nel driver XAA è necessario disabilitarla per avere un server X funzionante.<br />
<br />
===Display Subsection===<br />
Abbiamo visto nel formato dello schermo che è presente la sotto-sezione Display. È un concetto molto importante che ci permette di modificare alcune caratteristiche fondamentali.<br />
Ogni Screen Section può avere diverse sotto-sezioni Display. Noi ci occuperemo del caso in cui ce ne fosse solo una (vedere man per il caso generale).<br />
Questa sottosezione è opzionale e quando non viene specificata si utilizzeranno dei valori rilevati automaticamente.<br />
Il formato è:<br />
<pre><br />
SubSection "Display"<br />
Depth depth<br />
entries<br />
...<br />
EndSubSection<br />
</pre><br />
Vediamo nei dettagli:<br />
<br />
* <code>Depth depth</code>: il valore di <code>Depth</code> deve essere uguale a quello specificato nella sezione Display (di solito è 24);<br />
* <code>Modes "mode-name"</code>: è una voce opzionale, ma molto importante. Infatti in questo modo possiamo indicare le risoluzione dello schermo: <code>Modes "1024x768"</code>. Inoltre è lecito scrivere: <code>Modes "1024x768" "800x600" "640x480"</code>, cioè abbiamo indicato varie risoluzioni. Quella di default è la prima. È possibile passare alle successive con <code>Ctrl+Alt+Keypad_Plus</code> e tornare indietro con <code>Ctrl+Alt+Keypad_Minus</code>.<br />
<br />
===Files Section===<br />
Questa sezione (opzionale) viene utilizzata per specificare delle directory richieste dal server. Alcune delle entry di Files sono:<br />
<br />
* <code>FontPath "path"</code>: imposta il percorso (assoluto) per i font utilizzati dal server grafico. Per specificare più percorsi è possibile utilizzare una delle seguenti soluzioni: <pre>FonthPath "path_1","path_2",...,"path_n"</pre> È possibile anche specificare FontPath multipli invece della sintassi che utilizza la virgola. Se non viene specificata questa entry allora il server cercherà in percorsi standard (vedi man per i dettagli);<br />
<br />
* <code>RGBPath "path"</code>: imposta il percorso (assoluto) del database RGB. Il database RGB non è nient'altro che una tabella che associa un nome simbolico al colore dato dalla (R,G,B): ad esempio <code>(139, 0, 0)</code> DarkRed . Se non è specificato viene cercato in <code>/usr/share/X11/rgb</code> (i file puo' essere un .txt se il server è stato compilato per usare un database RGB testuale anzicchè binario, e in questo caso al percorso precedente viene automaticamente inserita l'estensione). La sintassi per le path multiple è identica a quella già discussa;<br />
<br />
* <code>ModulePath "path"</code>: imposta il percorso (assoluto) per i moduli utilizzati da Xorg. La sintassi per le path multiple è identica a quella già discussa.<br />
<br />
===Module Section===<br />
La sezione '''Module''' è utilizzata per specificare quali moduli caricare. Se il server è compilato staticamente (cioè se tutti i moduli, o quelli necessari, vengono compilati nel server) questa sezione viene ignorata. Come abbiamo detto in precedenza in questa sessione possono essere caricate alcune estensioni di Xorg e i moduli per il font rasterization. Per caricare un modulo è sufficiente inserire la parolachiave <b>Load</b> in questo modo:<br />
<pre><br />
Load "modulename"<br />
</pre><br />
Poichè alcuni moduli sono caricati di default è possibile disabilitarli con<br />
<pre><br />
Disable "modulename"<br />
</pre><br />
I moduli vengono cercati nei percorsi specificati nel ModulePath della sezione Files, e in alcune sottodirectory specifiche di quei percorsi. Per vedere quali moduli sono presenti (estensioni e font) si vedano queste directory:<br />
<br />
<code>/usr/lib/modules/fonts</code> e <code>/usr/lib/modules/extensions</code><br />
<br />
oppure<br />
<br />
<code>/usr/lib/xorg/modules/fonts</code> e <code>/usr/lib/xorg/modules/extensions</code><br />
<br />
Il modulo per i font bitmap<sup>[[#Collegamenti esterni | [11]]]</sup> è caricato automaticamente.<br />
È importante che venga caricato il modulo "extmod" perchè contiene alcune estensioni molto utili come la Shape Extension<sup>[[#Collegamenti esterni | [12]]]</sup> oppure la X Video Extension<sup>[[#Collegamenti esterni | [13]]]</sup>.<br />
<br />
==Collegamenti esterni==<br />
[1] [http://www.x.org/wiki/ Sito ufficiale di Xorg]<br/><br />
<br />
[2] [http://it.wikipedia.org/wiki/X.Org Cenni su Xorg]<br/><br />
<br />
[3] [http://it.wikipedia.org/wiki/X_Window_System X Window System]<br/><br />
<br />
[4] [https://it.wikipedia.org/wiki/Protocolli_e_architettura_di_X_Window_System Protocolli e Architettura dell'X Window System]<br/><br />
<br />
[5] [http://opensource.org/licenses/mit-license.php licenza MIT]<br/><br />
<br />
[6] [http://en.wikipedia.org/wiki/Font_rasterization font rasterization]<br/><br />
<br />
[7] [http://wiki.linuxquestions.org/wiki/Using_multiple_monitors_with_XFree86 Multiple Monitors with XFree86]<br/><br />
<br />
[8] [http://wiki.linuxquestions.org/wiki/Multiple_Monitors_with_Nvidia Multiple Monitors with Nvidia]<br/><br />
<br />
[9] [http://en.wikipedia.org/wiki/Color_depth profondità di colore]<br/><br />
<br />
[10] [http://en.wikipedia.org/wiki/XFree86_Acceleration_Architecture XAA]<br/><br />
<br />
[11] [http://en.wikipedia.org/wiki/Computer_font#Bitmap_fonts font bitmap]<br/><br />
<br />
[12] [http://en.wikipedia.org/wiki/Shape_extension Shape Extension]<br/><br />
<br />
[13] [http://en.wikipedia.org/wiki/X_video_extension X Video Extension]<br/><br />
<br />
==Dedica==<br />
A Serena:<br />
questo è per te cuore mio, perché, a differenza tua, io non sono capace d'altro.<br />
<br />
{{Autori<br />
|Autore=[[Utente:Np2k|np2k]] 22/03/2010<br />
}}<br />
<br />
[[Category: Xorg]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Guida_alla_configurazione_di_Xorg&diff=40551Guida alla configurazione di Xorg2015-12-18T23:54:22Z<p>Ombra: fix broken links</p>
<hr />
<div>{{Versioni compatibili|Squeeze|Wheezy|Jessie}}<br />
==Che cos'è==<br />
Xorg è il server dell'X Window System, il gestore grafico dei sistemi Unix, sviluppato da [http://www.x.org/wiki/ X.Org Foundation], rilasciato sotto [http://opensource.org/licenses/mit-license.php licenza MIT] (software libero).<br />
Grazie al diffondersi di applicazioni open source di un certo livello, come OpenOffice e TheGimp, X viene supportato, in modo secondario, anche da sistemi operativi proprietari (come Windows e Mac OS X).<br />
<br />
Si basa su un'intelligente architettura client/server, in cui il server X in esecuzione su un computer comunica con gli altri programmi che utilizziamo normalmente, i quali fungono da client. Il server si colloca tra l'utente e il programma client: accetta, quindi, richieste di output grafico dai client (disegnare finestre in una certa posizione) mostrandole all'utente, e riceve input dall'utente (inserimento di testo in una textbox, click del mouse su un certo pulsante ecc.) trasmettendoli ai programmi client.<br />
<br />
Questa architettura permette un notevole vantaggio rispetto alle interfacce grafiche che non la adottano (ad esempio quella di Windows): infatti, nel momento in cui vengono a presentarsi certi problemi relativi al server grafico, il sistema non è costretto ad andare in crash poiché bastano pochi comandi per farlo partire nuovamente, senza dover riavviare il computer.<br />
<br />
Una caratteristica fondamentale (e anti-intuitiva) è che il server grafico risiede sulla macchina dell'utente mentre le varie applicazioni (client) possono essere anche remote: infatti il tutto viene considerato dal punto di vista dell'applicazione che chiede (tramite l'utente) servizi al server. Da notare che, comunque, l'applicazione remota è eseguita come se risiedesse sulla stessa macchina del server.<br />
<br />
Ciò che andremo ad analizzare nella guida sarà il file <code>xorg.conf</code> (di solito è: <code>/etc/X11/xorg.conf</code>, digita <code>man xorg.conf</code> per una lista delle possibili directory del file, oppure <code>sudo find / -iname xorg.conf</code> per verificarne la posizione sul tuo computer, Ctrl+C per fermare la ricerca), che permette una configurazione precisa e accurata dell'X Server.<br />
Una caratteristica fondamentale di <code>xorg.conf</code> è che permette di associare ad ogni device, non solo determinate proprietà (come ad esempio, frequenza orizzontale dello schermo, risoluzione, ecc.) ma anche il driver specifico da utilizzare. Dunque, le sezioni che descrivono un device sono una sorta di interfaccia al driver utilizzato che, a sua volta, è un'interfaccia per il dispositivo vero e proprio.<br />
<br />
Nelle nuove versioni (dalla 7.3) Xorg si autoconfigura rendendo, in un certo senso, inutile il file di configurazione. Questo è vero da un lato, cioè se vogliamo una macchina pronta subito dopo l'installazione del sistema. Però, d'altro canto, come ogni cosa fatta personalmente, scrivere il proprio file di configurazione è molto più efficiente: non solo perché possiamo ovviare ad alcuni errori che la configurazione automatica può portare con sé, ma anche perché potremo avere così un ambiente completamente personalizzato e messo a punto in ogni particolare.<br />
<br />
==Avvisi e precauzioni==<br />
Alcuni avvisi e qualche precauzione prima d'iniziare.<br />
<br />
<b>Avviso 1</b>: Questa guida non ha l'obiettivo di spiegare ogni dettaglio del file <code>xorg.conf</code>, anche se è abbastanza particolareggiata. Per questa ragione è ovvio che possiate trovare in alcuni file di configurazione delle voci che non abbiamo descritto. Leggete <code>man xorg.conf</code> e <code>man xorg</code> se ne avete la necessità.<br />
<br />
<b>Avviso 2</b>: È possibile che non abbiate il file <code>xorg.conf</code> (come già spiegato). Basta crearne uno (semmai in <code>/etc/X11/xorg.conf</code>), per utilizzare la configurazione descritta in questo al posto di quella automatica.<br />
<br />
<b>Precauzione 1</b>: prima di modificare il file <code>xorg.conf</code> è bene farne un backup. Cerchiamo prima il percorso completo del file (come spiegato sopra) poi digitiamo (supponendo che quella indicata sia la directory giusta):<br />
<pre>$ cp /etc/X11/xorg.conf ~/xorg_backup.conf</pre><br />
<br />
<b>Precauzione 2</b>: possiamo generare un file <code>xorg.conf</code> basato sull'autodetect della nostra configurazione. Riavviamo il sistema in single-mode user, eseguiamo l'accesso come root e diamo:<br />
<pre><br />
# Xorg -configure<br />
</pre><br />
verrà creato nella directory corrente un file (di solito <code>xorg.conf.new</code>) che possiamo utilizzare non solo per ripristinare alcuni errori dovuti a modifiche accidentali, ma anche per iniziare a far pratica sui concetti che esporremo.<br />
Ricordiamo però che l'autodetect e la conseguente creazione del file <code>xorg.conf</code> in automatico può portare a dei problemi causati da un rilevamento erroneo delle componenti.<br />
<br />
==Com'è fatto==<br />
A titolo d'esempio vediamo come si presenta un file <code>xorg.conf</code>:<br />
<pre><br />
Section "ServerLayout"<br />
Identifier "Layout0"<br />
Screen 0 "Screen0"<br />
InputDevice "Keyboard0" "CoreKeyboard"<br />
InputDevice "Mouse0" "CorePointer"<br />
EndSection<br />
<br />
Section "Files"<br />
RgbPath "/etc/X11/rgb"<br />
ModulePath "/usr/lib/xorg/modules"<br />
FontPath "/usr/share/fonts/X11/misc"<br />
FontPath "/usr/share/fonts/X11/cyrillic"<br />
EndSection<br />
<br />
Section "Module"<br />
Load "dbe"<br />
Load "extmod"<br />
Load "type1"<br />
Load "freetype"<br />
Load "glx"<br />
EndSection<br />
<br />
Section "InputDevice"<br />
# generated from default<br />
Identifier "Mouse0"<br />
Driver "mouse"<br />
EndSection<br />
<br />
Section "InputDevice"<br />
# generated from default<br />
Identifier "Keyboard0"<br />
Driver "kbd"<br />
EndSection<br />
<br />
Section "Monitor"<br />
Identifier "Monitor0"<br />
VendorName "Unknown"<br />
ModelName "Unknown"<br />
HorizSync 28.0 - 33.0<br />
VertRefresh 43.0 - 72.0<br />
EndSection<br />
<br />
Section "Device"<br />
Identifier "Device0"<br />
Driver "nvidia"<br />
VendorName "NVIDIA Corporation"<br />
EndSection<br />
<br />
Section "Screen"<br />
Identifier "Screen0"<br />
Device "Device0"<br />
Monitor "Monitor0"<br />
DefaultDepth 24<br />
SubSection "Display"<br />
Depth 24<br />
EndSubSection<br />
EndSection<br />
</pre><br />
<br />
Si cerchi di leggerlo con attenzione: ovviamente sarà tutto molto complicato, ma è bene prendere confidenza con quella struttura.<br />
Alla fine di questa guida spero che le cose siano più chiare.<br />
<br />
===Struttura generale===<br />
Il file <code>xorg.conf</code> è composto da un certo numero di sezioni (=<b>Section</b>) in un ordine qualsiasi. Ogni sezione ha la forma seguente:<br />
<pre><br />
Section "SectionName"<br />
SectionEntry<br />
...<br />
EndSection<br />
</pre><br />
<br />
Come leggiamo nel man, le sezioni possono avere i seguenti nomi (in grassetto quelli più importanti)<br />
<br />
* <b>ServerLayout: </b> Livello principale del file<br />
<br />
* <b>InputDevice:</b> Descrizione dei device di input (mouse, tastiera, ecc.)<br />
<br />
* <b>Device:</b> Descrizione della scheda grafica<br />
<br />
* VideoAdaptor: Xv video adaptor description<br />
<br />
* <b>Monitor: </b>Descrizione del monitor <br />
<br />
* Modes: Video modes descriptions<br />
<br />
* <b>Screen:</b> Associazione dei monitor alla scheda grafica e viceversa<br />
<br />
* <b>Files:</b> Percorsi di file particolarmente utili (database RGB, caratteri, moduli da caricare, ecc.)<br />
<br />
* ServerFlags: Server flags<br />
<br />
* <b>Module:</b> Indica al server quali moduli deve caricare (es: estensioni come glx, per la gestione del rendering OpenGL all'interno delle finestre, moduli per il [http://en.wikipedia.org/wiki/Font_rasterization font rasterization], ecc.)<br />
<br />
* DRI: DRI-specific configuration<br />
<br />
* Vendor: Vendor-specific configuration<br />
<br />
La sezione '''ServerLayout''' è il livello più alto, serve a tenere uniti i device di input/output utilizzati in una sessione. I device di input sono descritti nella sezione '''InputDevice'''. Mentre i device di output (quali monitor e scheda grafica) sono descritti all'interno della sezione '''Screen'''. Il monitor è descritto nella sezione '''Monitor''' e la scheda grafica nella sezione '''Device'''.<br />
<br />
Una ''SectionEntry'' (vedremo dopo quelle particolari di ogni SectionName) è formata da una parola chiave seguita da uno o più argomenti dipendenti da essa. I tipi di questi argomenti sono 3:<br />
* Integer: interi<br />
* Real: virgola mobile<br />
* String: stringa racchiusa tra (")<br />
<br />
Una parola-chiave importante è <b>Option</b> che viene utilizzata per settare particolari opzioni di un componente del server (tastiera, mouse, monitor, scheda grafica, ecc.). <br />
<b>Option</b> è formata da una o due stringhe: la prima è il nome dell'opzione, e la seconda, non obbligatoria, è il valore dell'opzione. Che siano interi, real o stringhe i valori delle option devono essere virgolettati.<br />
Molto sinteticamente, per comprenderne il funzionamento, si legga questo esempio preso dal man:<br />
<br />
Esempio: Le seguenti opzioni sono equivalenti:<br />
<pre><br />
Option "Accel" "Off"<br />
<br />
Option "NoAccel"<br />
<br />
Option "NoAccel" "On"<br />
<br />
Option "Accel" "false"<br />
<br />
Option "Accel" "no"<br />
</pre><br />
<br />
===ServerLayout Section===<br />
La sezione ServerLayout è il livello principale di tutto il file <code>xorg.conf</code>. Essa serve a raggruppare i dispositivi di input/output (e alcune delle loro caratteristiche fondamentali) che verranno utilizzati all'interno della sessione corrente.<br />
È possibile avere più sezioni ServerLayout. Il motivo fondamentale è semplice: pensiamo ad una sessione di tre utenti su di uno stesso computer. A parte certi dispositivi che possono essere condivisi (come ad esempio la scheda grafica) sicuramente ogni utente ha una tastiera, un mouse e uno schermo "personali". Quindi questi dispositivi personali, in generale, avranno caratteristiche differenti e allora è necessario definire nel file di configurazione 3 diverse sezioni per ogni dispositivo (3 per la tastiera, 3 per il mouse, 3 per lo schermo). A questo punto è necessario definire 3 sezioni ServerLayout in modo tale che si raggruppino, per ogni utente, il proprio mouse, la propria tastiera e il proprio schermo. Facendo così, si permette ad ogni utente di avere una sessione personale e funzionante con i propri dispositivi. Infine, come spiegato altrove, se un utente vuol partire con una propria sezione ServerLayout basta che utilizza il comando: <pre>Xorg -layout nome_server_layout</pre><br />
<br />
(Nota: ovviamente se, per esempio, due utenti hanno tastiere diverse ma con identiche caratteristiche, allora non è necessario definire due sezioni per ogni tastiera, in quanto basta definirne una "condivisa". Lo stesso vale per le ServerLayout: se due utenti hanno tutti dispositivi diversi ma con identiche caratteristiche è sempre necessario definire solamente una sezione ServerLayout).<br />
<br />
Quindi principalmente in ServerLayout andiamo a dire al server X che l'utente U utilizza la tastiera A, il mouse B, lo schermo C e la scheda video D per la sua sessione e successivamente, nelle altre sezioni, specifichiamo in modo dettagliato cosa si intende per tastiera A, mouse B, ecc.<br />
<br />
Introduciamo ora alcuni concetti fondamentali riguardanti i Device che saranno utili anche in seguito. Un device è l'astrazione di un dispositivo hardware (tastiera, mouse, schermo, ecc.) al quale il sistema operativo fornisce accesso mediante un driver.<br />
Ci occuperemo dei seguenti device: tastiera, mouse, schermo e scheda grafica. A differenza degli altri device elencati, la tastiera e il mouse devono avere una caratteristica in più. Supponiamo che attaccati ad un computer ci siano più tastiere e più mouse: in questo caso possiamo utilizzarne solo una coppia alla volta. Quindi c'è bisogno di definire quale di quelle tastiere è una <b>CoreKeyboard</b> e quale mouse è un <b>CorePointer</b>. Indicando queste due opzioni (nei modi che vedremo di seguito) non facciamo altro che stabilire quale tastiera e quale mouse utilizzeremo per la nostra sessione. È possibile cambiare "dinamicamente" (con alcune opzioni del programma xorg) la corekeyboard (o la corepointer) cambiando quindi di conseguenza la tastiera (o il mouse) utilizzato nella sessione corrente. Questo discorso è utile soprattutto in presenza di una sessione multiutente su di una stessa macchina: ogni sessione avrà una corekeyboard diversa e quindi ogni utente potrà utilizzare, indipendentemente dagli altri, la sua tastiera. Tornando all'esempio di prima, la tastiera A e il mouse B per un certo utente sono dei dispositivi di input "core".<br />
(Vedremo successivamente come specificare che un dispositivo di input è "core" o "primary").<br />
<br />
Il discorso sulla scheda video e il monitor è diverso: infatti non c'è la necessità di utilizzare solo un monitor o solo una scheda video in una certa sessione, poiché uno stesso utente può, naturalmente, utilizzare due schermi contemporaneamente. In questo caso, basta inserire due sezioni Screen. Lo stesso vale per la scheda grafica.<br />
<br />
Una nota fondamentale: '''ogni dispositivo (tastiera, mouse, schermo, scheda grafica) deve avere una relativa sezione ben definita'''; questo significa, per esempio, che se abbiamo un computer con due tastiere c'è bisogno della presenza di due sezioni che le descrivano.<br />
<br />
È importante sapere che è possibile non avere una sezione ServerLayout: in questo caso verranno scelti il primo schermo "attivo" e la coppia di core input device.<br />
(Se non è chiaro questo passaggio basta avere pazienza e leggere di sotto, dove verrà spiegato il concetto di "attivo")<br />
<br />
Il formato della sezione ServerLayout è:<br />
<pre><br />
Section "ServerLayout"<br />
Identifier "name"<br />
Screen screen-num "screen-id"<br />
...<br />
InputDevice "idev-id"<br />
...<br />
options<br />
</pre><br />
<br />
Ogni sezione ServerLayout deve avere un Identifier e almeno uno Screen. Lo <code>screen-num</code> (opzionale) è utilizzato nel caso abbiate bisogno di schermi multipli (in fondo ho segnalato un link che approfondisce questo aspetto).<br />
Ovviamente bisogna mantenere una certa coerenza con le sezioni successive (ad esempio: lo <code>screen-id</code> deve essere l'Identifier di una sezione Screen, così come l'<code>idev-id</code> deve essere un identifier di un certa sezione InputDevice).<br />
<br />
L'Identifier della sezione ServerLayout è un nome che la identifica univocamente, inoltre è proprio questo nome che viene utilizzato dal programma Xorg (con l'opzione <code>-layout</code>) per avviare X con una particolare configurazione.<br />
<br />
All'interno della ServerLayout è possibile indicare quali InputDevice sono primari, in questo modo:<br />
<pre><br />
Section "ServerLayout"<br />
Identifier "name"<br />
...<br />
...<br />
InputDevice "keyboard0" "CoreKeyboard"<br />
</pre><br />
dove <code>keyboard0</code> è l'Identifier di una InputDevice Section dedicata alla tastiera che vogliamo utilizzare per la sessione corrente. Lo stesso vale per i pointer.<br />
Vedremo in seguito altri modi per dire al server X che un certo dispositivo deve essere considerato primario.<br />
<br />
===InputDevice Section===<br />
Normalmente le sezioni InputDevice sono almeno due: una per la tastiera (primaria) e l'altra per il dispositivo di puntamento primario (di solito mouse). Se viene omessa verrà utilizzata una configurazione di default che non funziona bene su tutte le piattaforme. Quindi è utile seguire i consigli successivi.<br />
<br />
La InputDevice Section ha il seguente formato<br />
<pre><br />
Section "InputDevice"<br />
Identifier "name"<br />
Driver "inputdriver"<br />
options<br />
...<br />
EndSection<br />
</pre><br />
Le voci Identifier e Driver sono obbligatorie, mentre tutto il resto è opzionale. La voce Identifier permette di dare al device un nome univoco che è lo stesso utilizzato, ad esempio, nella sezione ServerLayout). Mentre la voce Driver indica il driver utilizzato per il device di Input.<br />
Ora attenzione al seguente passaggio. Una InputDevice Section viene considerata "attiva" quando:<br />
* è specificata all'interno della ServerLayout come Core* (* = Keyboard oppure Pointer)<br />
* è specificata grazie ad alcune opzioni da linea di comando del programma xorg (digita <code>man xorg</code>) che permette di rendere "core" un device di input.<br />
* è specificata come Core* all'interno della sezione InputDevice stessa (Option "CoreKeyboard" oppure Option "CorePointer").<br />
Se nessuna delle tre condizioni è verificata allora viene considerato core (e quindi attiva) la sezione che utilizza come driver "kbd" o "mouse" (vedi <code>man</code>).<br />
<br />
Dopo questa definizione possiamo continuare dicendo che: se viene utilizzato un server dinamico (e quindi non statico) il modulo del driver "inputdriver" viene caricato per ogni sezione attiva (non per tutte ovviamente, dato che -come abbiamo visto nell'introduzione- è possibile, per ogni sessione, utilizzare un unico mouse e un'unica tastiera).<br />
<br />
Una nota interessante: per qualche ragione (vedi ***) potreste avere il bisogno di settare esplicitamente il layout della tastiera. Per farlo basta aggiungere, nella sezione InputDevice dedicata alla tastiera, la seguente opzione:<br />
<pre>Option "XkbLayout" "it"</pre><br />
dove <code>it</code> indica il layout italiano.<br />
<br />
(***) E' capitato, dopo l'installazione dei driver proprietari nvidia, che il layout della tastiera fosse impostato -in modo silente- a quello statunitense, rendendo quindi scorretta l'associazione tra tasti e caratteri.<br />
<br />
===Device Section===<br />
<code>xorg.conf</code> può avere più di una sezione Device, però ce ne deve essere come minimo una che descriva la scheda grafica utilizzata. Il formato è il seguente:<br />
<pre><br />
Section "Device"<br />
Identifier "name"<br />
Driver "driver"<br />
entries<br />
...<br />
EndSection<br />
</pre><br />
Sono obbligatorie solo le voci Identifier e Driver che funzionano come sopra. Le altre entry sono opzionali e dipendono dalla scheda grafica in questione. È utile avere a disposizione il manuale della scheda per modificarle. Ne vediamo solo alcune:<br />
<br />
* <code>BusID "bus-id"</code>: specifica l'indirizzo (il bus location) della della scheda grafica;<br />
<br />
* <code> Screen number </code>: indica quale schermo utilizzare. È utilizzato per quelle schede video che possono gestire più di uno schermo (consiglio i link seguenti per chi avesse questa necessità: [http://wiki.linuxquestions.org/wiki/Using_multiple_monitors_with_XFree86 Multiple Monitors with XFree86] o [http://wiki.linuxquestions.org/wiki/Multiple_Monitors_with_Nvidia Multiple Monitors with Nvidia]).<br />
<br />
===Monitor Section===<br />
{{Warningbox|Parametri sbagliati potrebbero danneggiare irreversibilmente il vostro monitor: leggete la documentazione dello schermo per essere sicuri di inserire valori compatibili.}}<br />
La sezione Monitor, che descrive le particolarità dello schermo, ha questo formato:<br />
<pre><br />
Section "Monitor"<br />
Identifier "name"<br />
entries<br />
...<br />
EndSection<br />
</pre><br />
<br />
Può avere istanza multiple.<br />
<br />
L'unica voce obbligatoria è Identifier. Vediamo alcune entry interessanti:<br />
<br />
* <code>VendorName "vendor"</code>: opzionale, specifica il produttore del monitor;<br />
<br />
* <code>ModelName "model"</code>: opzionale, indica il modello del monitor;<br />
<br />
* <code>HorizSync horizsync-range</code>: indica il range della frequenza di aggiornamento orizzontale del monitor. Viene indicato come: <code>freq min - freq max</code>. Di default l'unità di misura è kHz (è possibile specificarlo in MHz o in Hz, però bisogna aggiungere queste unità di misura esplicitamente). Consultare il manuale del monitor per avere informazioni specifiche;<br />
<br />
* <code>VertRefresh vertrefresh-range </code>: indica il range della frequenza di aggiornamento verticale supportata dello schermo. La sintassi è come sopra;<br />
<br />
* <code>DisplaySize width height</code>: opzionale, indica larghezza e altezza, espressa in millimetri, dell'area visibile dello schermo. Se viene specificata è utilizzata per calcolare i DPI dello schermo.<br />
<br />
===Screen Section===<br />
La Screen Section può avere istanze multiple. Ovviamente ne deve essere presente almeno una. Infatti questa sezione lega il device grafico con il monitor e quindi la sezione Device con la sezione Monitor: ciò significa che associa una certa scheda video ad un dato monitor.<br />
Perchè è possibile avere istanze multiple di Screen? Poichè ad esempio avendo a disposizione due schede video e due monitor possiamo scegliere, in una particolare sezione, quale combinazione usare (è la stessa ragione, quindi, per cui possono esistere più sezioni ServerLayout).<br />
Una sezione Screen è considerata attiva se è specificata all'interno della sezione ServerLayout, oppure se viene "attivata" dal opzione <code>-screen</code> del programma xorg. Se nessuna di queste due condizioni è presente allora viene considerata "attiva" la prima sezione Screen trovata nel file <code>xorg.conf</code>.<br />
La sezione ha questo formato:<br />
<pre><br />
Section "Screen"<br />
Identifier "name"<br />
Device "devid"<br />
Monitor "monid"<br />
entries<br />
...<br />
SubSection "Display"<br />
entries<br />
...<br />
EndSubSection<br />
...<br />
EndSection<br />
</pre><br />
<br />
I campi obbligatori sono Identifier e Device. Il valore del campo device deve essere un identifier specificato della sezione Device. Anche se non obbligatorio, è bene inserire il "monid" (ovviamente uguale a uno di quelli specificati nella sezione Monitor).<br />
Interessante è anche specificare la [http://en.wikipedia.org/wiki/Color_depth profondità di colore] che deve essere usata dal server per default: <code>DefaultDepth depth</code>.<br />
Importante è anche l'opzione seguente:<br />
<pre><br />
Option "Accel"<br />
</pre><br />
che abilita l'accelerazione hardware 2d tramite l'architettura [http://en.wikipedia.org/wiki/XFree86_Acceleration_Architecture XAA]. È abilitata per default, ma se sono presenti dei bug nel driver XAA è necessario disabilitarla per avere un server X funzionante.<br />
<br />
===Display Subsection===<br />
Abbiamo visto nel formato dello schermo che è presente la sotto-sezione Display. È un concetto molto importante che ci permette di modificare alcune caratteristiche fondamentali.<br />
Ogni Screen Section può avere diverse sotto-sezioni Display. Noi ci occuperemo del caso in cui ce ne fosse solo una (vedere man per il caso generale).<br />
Questa sottosezione è opzionale e quando non viene specificata si utilizzeranno dei valori rilevati automaticamente.<br />
Il formato è:<br />
<pre><br />
SubSection "Display"<br />
Depth depth<br />
entries<br />
...<br />
EndSubSection<br />
</pre><br />
Vediamo nei dettagli:<br />
<br />
* <code>Depth depth</code>: il valore di <code>Depth</code> deve essere uguale a quello specificato nella sezione Display (di solito è 24);<br />
* <code>Modes "mode-name"</code>: è una voce opzionale, ma molto importante. Infatti in questo modo possiamo indicare le risoluzione dello schermo: <code>Modes "1024x768"</code>. Inoltre è lecito scrivere: <code>Modes "1024x768" "800x600" "640x480"</code>, cioè abbiamo indicato varie risoluzioni. Quella di default è la prima. È possibile passare alle successive con <code>Ctrl+Alt+Keypad_Plus</code> e tornare indietro con <code>Ctrl+Alt+Keypad_Minus</code>.<br />
<br />
===Files Section===<br />
Questa sezione (opzionale) viene utilizzata per specificare delle directory richieste dal server. Alcune delle entry di Files sono:<br />
<br />
* <code>FontPath "path"</code>: imposta il percorso (assoluto) per i font utilizzati dal server grafico. Per specificare più percorsi è possibile utilizzare una delle seguenti soluzioni: <pre>FonthPath "path_1","path_2",...,"path_n"</pre> È possibile anche specificare FontPath multipli invece della sintassi che utilizza la virgola. Se non viene specificata questa entry allora il server cercherà in percorsi standard (vedi man per i dettagli);<br />
<br />
* <code>RGBPath "path"</code>: imposta il percorso (assoluto) del database RGB. Il database RGB non è nient'altro che una tabella che associa un nome simbolico al colore dato dalla (R,G,B): ad esempio <code>(139, 0, 0)</code> DarkRed . Se non è specificato viene cercato in <code>/usr/share/X11/rgb</code> (i file puo' essere un .txt se il server è stato compilato per usare un database RGB testuale anzicchè binario, e in questo caso al percorso precedente viene automaticamente inserita l'estensione). La sintassi per le path multiple è identica a quella già discussa;<br />
<br />
* <code>ModulePath "path"</code>: imposta il percorso (assoluto) per i moduli utilizzati da Xorg. La sintassi per le path multiple è identica a quella già discussa.<br />
<br />
===Module Section===<br />
La sezione '''Module''' è utilizzata per specificare quali moduli caricare. Se il server è compilato staticamente (cioè se tutti i moduli, o quelli necessari, vengono compilati nel server) questa sezione viene ignorata. Come abbiamo detto in precedenza in questa sessione possono essere caricate alcune estensioni di Xorg e i moduli per il font rasterization. Per caricare un modulo è sufficiente inserire la parolachiave <b>Load</b> in questo modo:<br />
<pre><br />
Load "modulename"<br />
</pre><br />
Poichè alcuni moduli sono caricati di default è possibile disabilitarli con<br />
<pre><br />
Disable "modulename"<br />
</pre><br />
I moduli vengono cercati nei percorsi specificati nel ModulePath della sezione Files, e in alcune sottodirectory specifiche di quei percorsi. Per vedere quali moduli sono presenti (estensioni e font) si vedano queste directory:<br />
<br />
<code>/usr/lib/modules/fonts</code> e <code>/usr/lib/modules/extensions</code><br />
<br />
oppure<br />
<br />
<code>/usr/lib/xorg/modules/fonts</code> e <code>/usr/lib/xorg/modules/extensions</code><br />
<br />
Il modulo per i [http://en.wikipedia.org/wiki/Computer_font#Bitmap_fonts font bitmap] è caricato automaticamente.<br />
È importante che venga caricato il modulo "extmod" perchè contiene alcune estensioni molto utili come la [http://en.wikipedia.org/wiki/Shape_extension Shape Extension] oppure la [http://en.wikipedia.org/wiki/X_video_extension X Video Extension].<br />
<br />
==Link utili==<br />
* [http://www.x.org/wiki/ Sito ufficiale di Xorg]<br />
<br />
* [http://it.wikipedia.org/wiki/X.Org Cenni su Xorg]<br />
<br />
* [http://it.wikipedia.org/wiki/X_Window_System X Window System]<br />
<br />
* [https://it.wikipedia.org/wiki/Protocolli_e_architettura_di_X_Window_System Protocolli e Architettura dell'X Window System]<br />
<br />
==Dedica==<br />
A Serena:<br />
questo è per te cuore mio, perché, a differenza tua, io non sono capace d'altro.<br />
<br />
{{Autori<br />
|Autore=[[Utente:Np2k|np2k]] 22/03/2010<br />
}}<br />
<br />
[[Category: Xorg]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=DNS_dinamici:_come_ottenerli_e_configurarli&diff=40550DNS dinamici: come ottenerli e configurarli2015-12-18T22:39:16Z<p>Ombra: fix broken links + link esterni</p>
<hr />
<div>{{Versioni compatibili|Squeeze|Wheezy|Jessie}}<br />
== Introduzione ==<br />
<br />
Sottoscrivere un servizio di DNS dinamico risulta molto utile per coloro i quali desiderano rendere raggiungibile uno o più computer da internet, perché per esempio hanno installato un webserver come apache o perché vogliono monitorare da remoto un programma di file sharing, ecc.<br />
<br />
Come noto un servizio DNS permette di associare ad un indirizzo IP un nome o [[alias]] o [[FQDN]], ovvero permette di accedere alle varie pagine di un sito web digitandone il nome invece che un numero IP.<BR><br />
Nel caso di IP statici quest'associazione può evidentemente essere fatta un'unica volta, viceversa deve essere ripetuta ad ogni cambio di IP nel caso di assegnazione dinamica dal proprio ISP. Quest'ultimo è il caso tipico di utenti domestici e piccole imprese/uffici, ai quali tra l'altro non viene automaticamente assegnato un FQDN.<BR><br />
Tutto ciò implica che tali utenti non possono sperare di connettersi sempre con successo alla propria macchina usando l'indirizzo IP associatogli in un certo momento, poiché questo è destinato prima poi a cambiare. Associando invece un FQDN ad una macchina o LAN ed installando un apposito applicativo (o possedendo un router adeguato) che tenga traccia delle variazioni di IP è possibile collegarsi alla propria macchina/LAN digitando sempre lo stesso FQDN.<BR><br />
Esistono società che offrono gratuitamente, previa registrazione sempre gratuita, a chiunque la possibilità di dotarsi di un proprio FQDN (in genere la prima parte del dominio è fissa, l'utente può scegliere solo l'ultima parte), come ad esempio dyndns<sup>[[#Collegamenti esterni| [1]]]</sup>.<br />
<br />
In genere la soluzione che preveda l'utilizzo di un router per l'aggiornamento dell'IP è sconsigliata, poiché non è garantito che la funzione integrata in un router rimanga compatibile nel tempo col servizio offerto dalle varie società.<br />
<br />
== ddclient ==<br />
<br />
Uno degli applicativi atti ad ottenere quanto descritto nell'introduzione è <code>ddclient</code>; naturalmente ai fini di questa guida si assume che il lettore abbia sottoscritto un servizio compatibile con questo programma. Una volta che l'utente si è registrato ed ha ottenuto un proprio FQDN può procedere all'installazione del programma, disponibile da repository:<BR><br />
<pre># apt-get install ddclient</pre><br />
Nel caso di LAN evidentemente si sceglierà per l'installazione del programma la macchina che rimane accesa più spesso e/o a lungo. Si noti che detto programma non determina l'accessibilità della macchina o della LAN dall'esterno, aspetto che dipende da una corretta configurazione del proprio router/modem, ma come già scritto garantisce solo che i dati inviati dall'esterno ed indirizzati al proprio FQDN raggiungano effettivamente il nostro modem/router, cui saranno collegati una o più macchine.<BR><br />
Durante l'installazione verranno chiesti i nomi registrati, l'utenza e la password del servizio sottoscritto, tutti parametri necessari al programma per contattare il fornitore di servizi e mantenere aggiornato l'IP associato all'alias.<br />
{{Box|Client configurator|Nel caso si sia sottoscritto il servizio offerto da dyndns<sup>[[#Collegamenti esterni| [1]]]</sup> è possibile generare automaticamente un'apposita configurazione da inserire nel file <code>ddclient.conf</code> a quest'indirizzo<sup>[[#Collegamenti esterni| [3]]]</sup>.}}<br />
A prescindere dal servizio sottoscritto <code>ddclient</code> risulta già funzionante al termine dell'installazione e già configurato per l'avvio automatico al boot di sistema. Per il suo funzionamento non è necessario aprire alcuna porta aggiuntiva sul proprio modem/router.<BR><br />
È possibile testare il funzionamento di <code>ddclient</code> digitando da terminale:<br />
<pre># ddclient -daemon=0 -debug -verbose -noquiet</pre><br />
<br />
Qualora si volesse abilitare la crittografia SSL sulle comunicazioni è sufficiente aggiungere la riga:<br />
<pre>ssl=yes</pre><br />
al file <code>ddclient.conf</code> ed assicurarsi di avere installato <code>ssh</code> e <code>libio-socket-ssl-perl</code>.<br />
<br />
=== /etc/default/ddclient ===<br />
Se si desidera far girare il servizio come [[demone]] è necessario editare il file <code>/etc/default/ddclient</code> cambiando due variabili come indicato qui di seguito:<br />
<pre><br />
run_ipup="false"<br />
run_daemon="true"<br />
</pre><br />
<br />
== Approfondimenti ==<br />
<br />
=== Collegamenti esterni ===<br />
<br />
[1] [http://www.dyndns.com dyndns home]<br><br />
[2] [http://dyndns.it/2011/12/configurazione-di-ddclient/ dyndns.it], guida rapida in italiano sul sito ufficiale<br><br />
[3] [https://help.dyn.com/ddclient/ ddclient], guida sul sito ufficiale con collegamento al client configurator<br><br />
[4] [https://help.ubuntu.com/community/DynamicDNS DynamicDNS] su Ubuntu<br />
<br />
<br />
{{Autori<br />
|Autore = [[Utente:Wtf|Wtf]] 22:39, 11 ago 2011 (CEST)<br />
}}<br />
<br />
[[Categoria:DNS e DHCP]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Backup_di_MySQL_tramite_script&diff=40549Backup di MySQL tramite script2015-12-18T22:08:29Z<p>Ombra: fix broken links + link esterni</p>
<hr />
<div>{{Versioni compatibili|Squeeze|Wheezy|Jessie}}<br />
== Introduzione ==<br />
Attraverso lo [[script]] riportato di seguito è possibile effettuare il backup di tutti i database presenti nella nostra installazione di MySQL. Lo script (basato sull'originale<sup>[[#Collegamenti esterni| [1]]]</sup> presente su cyberciti.biz<sup>[[#Collegamenti esterni| [2]]]</sup>) permette la personalizzazione attraverso i parametri:<br />
<pre><br />
MyUSER="utente_MySQL" # USERNAME<br />
MyPASS="Password_Utente # PASSWORD<br />
MyHOST="localhost" # Hostname<br />
</pre><br />
che vanno compilati con i dati per accedere al nostro server MySQL, e:<br />
<pre><br />
DEST="/backup"<br />
IGGY="test"<br />
</pre><br />
La variabile <code>'''DEST'''</code> permette di impostare la directory di destinazione del backup. I database saranno salvati all'interno di una sottodirectory chiamata <code>mysql</code>.<br/><br />
La variabile <code>'''IGGY'''</code> permette di indicare quali database devono essere esclusi dal processo di backup.<br />
<br />
== Lo script ==<br />
<pre><br />
#!/bin/bash<br />
# Shell script to backup MySql database<br />
# To backup Nysql databases file to /backup dir and later pick up by your<br />
# script. You can skip few databases from backup too.<br />
# For more info please see (Installation info):<br />
# http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/01/mysql-backup-script.html<br />
# Last updated: Aug - 2005<br />
# --------------------------------------------------------------------<br />
# This is a free shell script under GNU GPL version 2.0 or above<br />
# Copyright (C) 2004, 2005 nixCraft project<br />
# Feedback/comment/suggestions : http://cyberciti.biz/fb/<br />
# -------------------------------------------------------------------------<br />
# This script is part of nixCraft shell script collection (NSSC)<br />
# Visit http://bash.cyberciti.biz/ for more information.<br />
# -------------------------------------------------------------------------<br />
<br />
MyUSER="utente_MySQL" # USERNAME<br />
MyPASS="Password_Utente # PASSWORD<br />
MyHOST="localhost" # Hostname<br />
<br />
# Linux bin paths, change this if it can't be autodetected via which command<br />
MYSQL="$(which mysql)"<br />
MYSQLDUMP="$(which mysqldump)"<br />
CHOWN="$(which chown)"<br />
CHMOD="$(which chmod)"<br />
GZIP="$(which gzip)"<br />
<br />
# Backup Dest directory, change this if you have someother location<br />
DEST="/backup"<br />
<br />
# Main directory where backup will be stored<br />
MBD="$DEST/mysql"<br />
<br />
# Get hostname<br />
HOST="$(hostname)"<br />
<br />
# Get data in dd-mm-yyyy format<br />
NOW="$(date +"%d-%m-%Y")"<br />
<br />
# File to store current backup file<br />
FILE=""<br />
# Store list of databases<br />
DBS=""<br />
<br />
# DO NOT BACKUP these databases<br />
IGGY="test"<br />
<br />
[ ! -d $MBD ] && mkdir -p $MBD || :<br />
<br />
# Only root can access it!<br />
$CHOWN 0.0 -R $DEST<br />
$CHMOD 0600 $DEST<br />
<br />
# Get all database list first<br />
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"<br />
<br />
for db in $DBS<br />
do<br />
skipdb=-1<br />
if [ "$IGGY" != "" ];<br />
then<br />
for i in $IGGY<br />
do<br />
[ "$db" == "$i" ] && skipdb=1 || :<br />
done<br />
fi<br />
<br />
if [ "$skipdb" == "-1" ] ; then<br />
FILE="$MBD/$db.$HOST.$NOW.gz"<br />
# do all inone job in pipe,<br />
# connect to mysql using mysqldump for select mysql database<br />
# and pipe it out to gz file in backup dir :)<br />
$MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE<br />
fi<br />
done<br />
</pre><br />
Per non intasare il server e eliminare i backup vecchi è possibile mettere in <code>crontab</code> uno script simile al seguente, che cancella i file di backup più vecchi di sette giorni:<br />
<pre><br />
find /backup/mysql -type f -mtime +7 -exec rm {} \;<br />
</pre><br />
<br />
== Esecuzione automatica dello script ==<br />
L'inserimento di questo script in una voce del vostro crontab (si veda ad esempio [[Utilizzo_del_servizio_di_scheduling_Cron| la guida su Cron]]) permette un backup automatizzato dei database di MySQL senza la necessità di interrompere il servizio.<br />
<br />
== Uno script alternativo ==<br />
Quello che segue è uno script alternativo, suggerito dall'utente '''mm-barabba''' di debianizzati.org.<br />
<pre><br />
# Back Up Mysql Database phproject By oTTo<br />
#!/bin/bash<br />
<br />
FILE=/dove/voglio/backuppare/name_backup<br />
NAME=utente_sql<br />
PASS=password_sql<br />
DB=nome_DB<br />
<br />
echo "Content-type: text/plain"<br />
echo<br />
echo "Tried to export file: "$FILE<br />
<br />
#eliminare il commmento a seconda del risultato che si vuole ottenere<br />
#dump non compresso<br />
#mysqldump --quote-names -u $NAME --password=$PASS $DB > $FILE.sql<br />
<br />
#dump compresso con gzip<br />
#mysqldump --quote-names -u $NAME --password=$PASS $DB| gzip -9 > $FILE.sql.gz<br />
<br />
</pre><br />
Lo script permette il backup del database specificato nella variabile <code>DB</code>.<br/><br />
L'inserimento di questo script in una voce del vostro crontab (si veda ad esempio [[Utilizzo_del_servizio_di_scheduling_Cron|la guida su Cron]]) permette un backup automatizzato dei database di MySQL senza la necessità di interrompere il servizio.<br />
<br />
== Un terzo script ==<br />
Lo script seguente effettua il backup di tutti i database presenti sul server e imposta una rotazione che conserva gli ultimi 4 backup salvati.<br />
<pre><br />
#!/bin/bash<br />
#Simple mySQL backup script for cron – updated version<br />
<br />
# Modify the following to suit your environment<br />
export DB_BACKUP=”/home/user/mysql_backup”<br />
export DB_USER=”root”<br />
export DB_PASSWD=”***********”<br />
export DATE=”`date +”%d%b”`”<br />
export MYSQL=”/usr/bin/mysql”<br />
export MYSQLDUMP=”/usr/bin/mysqldump”<br />
<br />
# Backup part<br />
echo “mySQL_backup”<br />
echo “———————-”<br />
echo “* Rotating backups…”<br />
rm -rf $DB_BACKUP/04<br />
mv $DB_BACKUP/03 $DB_BACKUP/04<br />
mv $DB_BACKUP/02 $DB_BACKUP/03<br />
mv $DB_BACKUP/01 $DB_BACKUP/02<br />
mkdir $DB_BACKUP/01<br />
cd $DB_BACKUP/ && cd $DB_BACKUP/01<br />
$MYSQL -u $DB_USER –password=$DB_PASSWD -Bse ‘show databases’ |while read m; \<br />
do $MYSQLDUMP -u $DB_USER –password=$DB_PASSWD `echo $m` > `echo $m`.sql;done<br />
bzip2 *sql<br />
<br />
echo “* Creating new backup…”<br />
echo “Backup done! `date`” > /tmp/my_report.log<br />
<br />
# You can set the script to send you mail when backup it’s finished.<br />
mail -s “MySql Backup report” you@yourmail.com < /tmp/my_report.log<br />
echo "----------------------"<br />
echo "Done"<br />
exit 0<br />
</pre><br />
<br />
== Backup manuale ==<br />
Nel caso si volesse effettuare un backup manuale di uno specifico database, è possibile utilizzare il comando:<br />
<pre><br />
# mysqldump --opt -u [user_name] -p [database_name] > [backup_file].dump<br />
</pre><br />
<br />
Per esportare tutti i database del server:<br />
<pre><br />
# mysqldump -u root -p -all-databases > dump.sql<br />
</pre><br />
Per esportare solo la struttura di un database:<br />
<pre><br />
# mysqldump -u root -p -no-data nome_database > dump.sql<br />
</pre><br />
Per esportare solo i dati di un database:<br />
<pre><br />
# mysqldump -u root -p –no-create-info nome_database > dump.sql<br />
</pre><br />
<br />
== Ripristino del database ==<br />
Il ripristino potrà essere effettuato con il comando:<br />
<pre><br />
# mysql -u [username] -p [database_name] < [backup_file].dump<br />
</pre><br />
Oppure con la sequenza:<br />
<pre><br />
# mysql -u root -p<br />
Enter Password<br />
mysql> use database_name<br />
Database changed<br />
mysql> source [backup_file].dump<br />
</pre><br />
<br />
== Per approfondimenti ==<br />
[[Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5]]<br><br />
[[Backup di MySQL tramite script]]<br><br />
[[Configurare MySQL per accettare connessioni remote]]<br><br />
<br />
== Collegamenti esterni ==<br />
[1] [http://bash.cyberciti.biz/backup/backup-mysql-database-server-2/ script originale]<br/><br />
[2] [http://bash.cyberciti.biz/ bash.cybercity.biz]<br />
<br />
{{Autori<br />
|Autore = [[Utente:Ferdybassi|Ferdybassi]]<br />
|Estesa_da = <br />
: [[Utente:Mm-barabba|Mm-barabba]]<br />
}}<br />
<br />
[[Categoria:Bash Scripting]]<br />
[[Categoria:Database server]]<br />
[[Categoria:Backup&restore]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Ekiga:_installazione_e_configurazione&diff=40548Ekiga: installazione e configurazione2015-12-18T21:44:25Z<p>Ombra: fix broken links + link esterni</p>
<hr />
<div>{{Versioni compatibili|Squeeze|Wheezy|Jessie}}<br />
== Introduzione ==<br />
<br />
In questa guida vedremo come installare, configurare e usare il software di VoiP e videoconferenza Ekiga<sup>[[#Collegamenti esterni | [1]]]</sup> (ex GnomeMeeting) su Debian, per effettuare telefonate da PC a PC oppure da PC a telefono.<br />
<br />
== Installazione ==<br />
<br />
=== Installare il pacchetto Debian ===<br />
Ekiga è incluso in tutte le versioni di Debian. Quindi per l'installazione basta un:<br />
<br />
<pre># aptitude install ekiga</pre><br />
<br />
=== Installare l'ultima versione ===<br />
Su Wheezy, Ekiga è fermo alla versione 3.2.7. Per installare l'ultima versione (4.0.1 alla data di revisione di questa guida) controllate prima se questa è disponibile in wheezy-backports, altrimenti fate il [[pinning]] da testing/unstable/experimental.<br />
<br />
== Configurare Ekiga ==<br />
<br />
==== Account SIP ====<br />
Al primo avvio una procedura guidata ci permetterà di configurare in pochi passi Ekiga e di ottenere (se ancora non ce l'abbiamo) un indirizzo SIP iscrivendosi ad Ekiga.net<sup>[[#Collegamenti esterni | [2]]]</sup>. Un indirizzo SIP non è altro che un indirizzo che ci identifica univocamente su internet (come un indirizzo di posta elettronica, solo che invece delle e-mail riceveremo chiamate audio/video). Supponendo di registrare su Ekiga.net un account con nome utente ''piero'', il nostro indirizzo SIP sarà ''sip:piero@ekiga.net'', così ovunque noi saremo e qualsiasi PC noi useremo, saremo sempre raggiungibili come ''sip:piero@ekiga.net'' (da qualsiasi software o hardware che usa il protocollo SIP). Inoltre, con la registrazione su Ekiga.net, verremo aggiunti al loro database utenti (una specie di elenco telefonico) e gli altri utenti di Ekiga potranno vedere il nostro profilo utente, mandarci un messaggio di chat o chiamarci.<br />
<br />
Alla fine della procedura guidata se tutto è andato bene, dovremmo avere in basso il pallino verde con la scritta "In rete".<br />
<br />
<br />
=== Riconoscimento Hardware ===<br />
<br />
Durante la procedura guidata verrà richiesto quali dispositivi audio usare. Sarà possibile cambiare questi dispositivi successivamente nel menu ''Modifica > Preferenze'', insieme alla configurazione della webcam e ad altre opzioni.<br />
<br />
== La prima prova: Echo test ==<br />
<br />
Ekiga.net mette a disposizione un ''servizio echo'', ovvero un numero che potrete chiamare per testare la vostra configurazione, che vi farà semplicemente ascoltare tutto quello che direte.<br />
<br />
Dovrebbe apparire già tra i vostri contatti "Test dell'eco", altrimenti potete chiamare <code>sip:500@ekiga.net</code> oppure <code>sip:500</code> (infatti per tutti gli indirizzi SIP sotto il dominio ''@ekiga.net'' si può usare anche solo il nome utente). Dopo una breve introduzione di una simpatica signorina dovreste poter sentire la vostra voce, se parlate ovviamente. Se la qualità audio non è soddisfacente provate a disabilitare la cancellazione dell'eco e altre opzioni in ''Modifica > Preferenze > Audio > Codec''.<br />
<br />
Se chiamate il <code>sip:520@ekiga.net</code> invece verrete richiamati voi da <code>sip:500@ekiga.net</code>, per testare se siete raggiungibili dagli altri utenti.<br />
<br />
== Chiamate da PC a PC ==<br />
<br />
Se volete chiamare un'altra persona, e conoscete il suo indirizzo SIP, potete direttamente scriverlo nell'apposita barra.<br />
<br />
Se non sapete l'indirizzo SIP, aprite la rubrica, selezionate '''Directory Ekiga.net''' e vi dovrebbe apparire una lista di 100 utenti iscritti ad Ekiga.net. Cercate il nome o il nick di chi volete contattare scrivendolo nel ''Filtro ricerca'' sotto e appariranno altri risultati (sempre limitati ad un numero massimo di 100 nomi).<br />
<br />
''Per una questione di educazione e netiquette non disturbate persone sconosciute che non abbiano scritto nel commento di accettare le chiamate di prova. Magari mandate prima anche un messaggio''.<br />
<br />
Ekiga usa il diffuso protocollo SIP<sup>[[#Collegamenti esterni | [11]]]</sup> per effettuare le chiamate. Potrete quindi usare qualsiasi altro servizio SIP diverso da Ekiga.net per effettuare le vostre chiamate da Ekiga, oltre a poter contattare utenti che usano un diverso client VoIP SIP<sup>[[#Collegamenti esterni | [9]]]</sup>.<br />
<br />
== Chiamate da PC a Telefono ==<br />
Da ''Modifica > Account'' cliccate su ''Account > Aggiungi account PC-Telefono Ekiga > Ottieni un account PC-Telefono Ekiga'' e acquistate un credito dal provider '''Diamondcard'''. Poi inserite i dati in Ekiga e potrete chiamare qualunque telefono tradizionale. Ecco le tariffe<sup>[[#Collegamenti esterni | [5]]]</sup>.<br />
<br />
Dato che '''Diamondcard''' usa il protocollo di comunicazione standard SIP, potrete usare il vostro credito non solo con Ekiga ma anche con tutti i software compatibili con SIP.<br />
<br />
<br />
== Problemi ==<br />
<br />
In caso di problemi sapete che questo è software libero e non siete relegati alle quattro paginette striminzite dell'help di Skype ;-)<br />
<br />
Potete chiedere sul [http://forum.debianizzati.org nostro forum] oppure sul canale IRC ufficiale di Ekiga: #ekiga su irc.gnome.org.<br />
<br />
Ma il mezzo migliore è comunque la mailing-list ufficiale: ekiga-list<sup>[[#Collegamenti esterni | [3]]]</sup>.<br />
<br />
Se volete riportate dei problemi in mailing-list, lanciate Ekiga con:<br />
<pre><br />
$ ekiga -d 4 > ekiga-output 2>&1<br />
</pre><br />
eseguite le operazioni che creano problemi e allegate il file <code>ekiga-output</code> alla vostra mail.<br />
<br />
<br />
Buon Voip Libero a tutti!<br />
<br />
== Collegamenti esterni ==<br />
''Risorse su Ekiga:''<br/><br />
[1] [http://www.ekiga.org/ Ekiga Home]<br/><br />
[2] [http://ekiga.net Ekiga.net]<br/><br />
[3] [http://mail.gnome.org/mailman/listinfo/ekiga-list ekiga-list]<br/><br />
[4] [http://wiki.ekiga.org/ Ekiga Wiki]<br/><br />
[5] [https://www.diamondcard.us/exec/voip-rep-acc-type?secId=ekiga tariffe]<br/><br />
<br />
''Altri software che supportano il protocollo SIP:''<br/><br />
[6] [http://sourceforge.net/projects/kphone KPhone]<br/><br />
[7] [http://www.counterpath.com/x-lite.html X-Lite] (non libero)<br/><br />
[8] [http://techcrunch.com/2011/03/04/google-to-shut-down-gizmo5-on-april-3/ Gizmo5] (ex Gizmo Project, abbandonato)<br/><br />
[9] [http://it.wikipedia.org/wiki/Session_Initiation_Protocol#Software_che_sfrutta_il_protocollo_SIP client VoIP SIP]<br/><br />
<br />
''Altre Informazioni:''<br/><br />
[10] [http://www.voip-info.org/wiki/view/Open+Source+VOIP+Software Open Source VOIP Software]<br/><br />
[11] [http://it.wikipedia.org/wiki/Session_Initiation_Protocol protocollo SIP]<br/><br />
<br />
{{Autori<br />
|Autore=[[Utente:TheNoise|~ The Noise]] 07:05, Apr 6, 2006 (EDT)<br />
|Verificata_da =<br />
:[[Utente:BubuXP|BubuXP]] 04:04, 20 mag 2013 (CEST)<br />
|Numero_revisori = 1<br />
|Estesa_da =<br />
:[[Utente:BubuXP|BubuXP]] 04:04, 20 mag 2013 (CEST) (aggiornamento parti obsolete)<br />
}}<br />
<br />
[[Categoria:VoIP]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Installare_un_server_FTP_con_ProFTPD&diff=40547Installare un server FTP con ProFTPD2015-12-18T20:54:00Z<p>Ombra: fix broken links</p>
<hr />
<div>{{Versioni compatibili|Squeeze|Wheezy|Jessie|Testing_2015}}<br />
<br />
== Introduzione ==<br />
Installare un server FTP su Debian è un'operazione non particolarmente complessa, ma che merita alcune attenzioni. In questa guida utilizzerò ProFTPD, un FTP server scritto per essere utilizzato su Unix e sistemi operativi Unix-like come il nostro Linux.<br />
<br />
'''Caratteristiche di ProFTPD'''<br />
<br />
* utilizza un singolo file di configurazione, con direttive molto familiari per chi è già abituato ad amministrare web server Apache;<br />
* permette la configurazione di file ".ftpaccess" e di server FTP virtuali in maniera simile ad Apache;<br />
* non permette comandi SITE EXEC, riducendo così lo stress da sicurezza dell'amministratore;<br />
* supporta IPv6.<br />
<br />
== Installazione di ProFTPD ==<br />
Per installare il server <code>proftpd</code> basta lanciare i seguenti comandi da [[root]]:<br />
<pre><br />
# apt-get update<br />
# apt-get install proftpd-basic<br />
</pre><br />
L'installer del server FTP vi chiederà in che modo intendere far girare <code>proftpd</code>, attraverso "inetd" o in modalità "standalone". Mi sento di consigliare la modalità "standalone" che, da quanto letto in rete, sembra la più adatta per siti FTP con traffico intenso o assai variabile.<br />
<br />
== Configurazione di ProFTPD Server ==<br />
Il file di configurazione si trova in <code>/etc/proftpd/proftpd.conf</code><br/><br />
Alcune direttive degne di nota sono le seguenti:<br />
;ServerName:Permette di indicare il nome che apparirà agli utenti:<pre>ServerName “proftp server”</pre><br />
;ServerIdent:Imposta il messaggio di benvenuto:<pre>ServerIdent on “Welcome to proftp server”</pre><br />
;UseReverseDNS:<pre>UseReverseDNS off</pre><br />
;IdentLookups:<pre>IdentLookups off</pre><br />
;DefaultRoot:Imposta la chroot directory di default (la home directory dell'utente che effettua il login)<pre>DefaultRoot ~</pre>Un utilizzo interessante di questa direttiva è la possibilità di dirottare un particolare utente in una directory diversa dalla propria home:<pre>DefaultRoot /tmp bob</pre>Oppure limitare l'accesso alla sola directory "ftp" nella home dell'utente che effettua il login:<pre>DefaultRoot ~/ftp</pre>Chiaramente questa directory va preliminarmente creata.<br />
;MaxClients:Limita il numero di utenti che possono effettuare una connessione contemporanea:<pre>MaxClients 30</pre><br />
;MaxClientsPerHost:Limita il numero di connessioni per singolo client<pre>MaxClientsPerHost 50</pre><br />
<br />
Per una lista completa delle direttive potete fare riferimento alla documentazione ufficiale<sup>[[#Documentazione esterna|[2]]]</sup>.<br/><br />
Dopo aver modificato il file di configurazione è necessario riavviare il demone affinché le modifiche vengano prese in considerazione:<br />
<pre><br />
# service proftpd restart<br />
</pre><br />
<br />
== FTP anonimo ==<br />
La configurazione di un accesso anonimo al server FTP può essere molto comoda in particolari ambienti (es. rete aziendale) oppure quando si vuol permettere un accesso alle risorse senza che sia necessaria un'autenticazione.<br />
<br />
L'abilitazione del'FTP anonimo (anonymous FTP) avviene attraverso la configurazione del file <code>proftpd.conf</code>. Nel prossimo esempio si permetterà l'accesso anonimo ad una directory e solo per spostarsi al suo interno, uploadare file e elencare i file presenti; non sarà possibile cancellare, rinominare, modificare o leggere file.<br />
<br />
Aggiungere in fondo al file <code>proftpd.conf</code> le seguenti righe:<br />
<pre><br />
<Anonymous ~ftp><br />
<br />
<Limit LOGIN><br />
Order allow,deny<br />
Allow from 192.168.0.0/16<br />
DenyAll<br />
</Limit><br />
<br />
User ftp<br />
Group nogroup<br />
UserAlias anonymous ftp<br />
<br />
RequireValidShell off<br />
<br />
MaxClients 5<br />
<br />
<br />
<Directory *><br />
<br />
<Limit ALL><br />
DenyAll<br />
</Limit><br />
<br />
<Limit LIST STOR STOU CWD PWD NOOP XCWD><br />
AllowAll<br />
</Limit><br />
<br />
</Directory><br />
<br />
</Anonymous><br />
</pre><br />
<br />
;~ftp:Indica che l'accesso anonimo avverrà all'interno della directory "/srv/ftp" già creata di default. Questa directory ha come proprietari (utente:gruppo) "ftp:nogroup".<br />
;LIMIT LOGIN: sezione in cui vengono specificati gli indirizzi/nomi che possono effettuare il login anonimo.<br />
;Order allow,deny: se il login è consentito da "Allow", "Deny" non viene eseguita. Se il login non è permesso da "Allow", "Deny" viene eseguita.<br />
;Allow from 192.168.0.0/16: consente un login proveniente solo dagli indirizzi 192.168.x.x .<br />
; DenyAll: rifiuta tutti i login che non sono matchati da "Allow".<br />
;User:indica l'utente con i cui permessi verranno eseguiti i comandi da ProFTPD. È consigliato non inserire mai "root". I file creati avranno come proprietario "ftp".<br />
;Group: indica il gruppo con i cui verranno eseguiti i comandi da ProFTPD- È consigliato non inserire mai "root". I file creati avranno come gruppo proprietario "nogroup".<br />
;UserAlias: Permette un login anche inserendo "anonymous" anziché "ftp". Ad esempio:<pre>$ ftp nome_o_IP_del_server</pre> e poi scrivendo "anonymous" (anziché "ftp") alla richiesta del login name.<br />
;RequireValidShell: Permette o non permette il login all'utente la cui shell di login è elencata (o non elencata) in "/etc/shells". In questo caso va settata a "off" in quanto l'utente "ftp" non possiede una shell valida (questa è "/bin/false").<br />
;MaxClients: numero massimo di client connessi.<br />
; Limit ALL: impedisce a chiunque l'esecuzione di "ogni" comando FTP, a meno che non sia esplicitamente consentito da una direttiva seguente.<br />
; Limit LIST STOR STOU CWD PWD NOOP XCWD: permette i comandi specificati. In particolare "STOR" che consente l'upload di un file, "LIST" che consente di ottenere una lista dei file/directory e "NOOP" per mantenere la connessione attiva.<br />
<br />
Leggere anche le informazioni sulla configurazione di ''<Limit>''<sup>[[#Documentazione esterna|[3]]]</sup> e i comandi FTP supportati<sup>[[#Documentazione esterna|[4]]]</sup>.<br />
<br />
Dopo aver modificato il file, eseguire il solito:<br />
<pre><br />
# service proftpd restart<br />
</pre><br />
<br />
Ora è possibile collegarsi al server, ad esempio, con:<br />
<pre><br />
$ ftp 192.168.1.1<br />
</pre><br />
in cui si è specificato l'indirizzo IP del server (ma analogamente si potrebbe indicare un [[FQDN]]). Apparirà:<br />
<pre><br />
Connected to 192.168.1.1.<br />
220 ProFTPD 1.3.5 Server (Debian) [::ffff:192.168.1.1]<br />
Name (192.168.1.1): anonymous<br />
331 Accesso anonimo ok, inviare il proprio indirizzo email completo come password<br />
Password: pippo@pippolandia.it<br />
</pre><br />
Si noti che la password inserita è valida solo ai fini del logging lato server. Si può inserire qualunque indirizzo (vero o inventato) o anche "localhost".<br />
<br />
La precedente procedura può essere leggermente modificata per poter ottenere un FTP anonimo in una directory diversa da "/srv/ftp". Le uniche operazioni da compiere sono:<br />
# Creare la directory (es. <code>/home/ftp-anonimo</code>)<br />
# Fare in modo che abbia come utente:gruppo proprietari "ftp:nogroup":<pre># chown ftp:nogroup /home/ftp-anonimo</pre><br />
# Modificare la riga di "proftpd.conf" in:<pre><Anonymous /home/ftp-anonimo></pre><br />
<br />
== Quote ==<br />
Le quote (''quota'') sono il meccanismo con cui ProFTPD impone dei limiti al numero di byte/file che possono essere inviati/trasferiti/scaricati da/al server FTP. Questo evita che le directory diventino luoghi in cui trovare un po' di tutto e, soprattutto, consumino senza alcun limite lo spazio disponibile sul disco.<br/><br />
In alternativa, il meccanismo delle quote può essere implementato dall'amministratore direttamente a livello di filesystem.<br />
<br />
Per la gestione delle quote, ProFTPD utilizza il comando "ftpquota".<br />
<br />
=== Le tabelle ===<br />
ProFTPD gestisce le quote utilizzando due tabelle:<br />
;''ftpquota.limittab'':permette a ProFTPD di conoscere che tipo di limite imporre e a chi (utente, gruppo, classe).<br />
;''ftpquota.tallytab'':permette a ProFTPD di tener traccia dei byte/file trasferiti/inviati/scaricati dal server.<br />
La loro creazione avviene con:<br />
<pre><br />
# ftpquota --create-table --table-path /etc/proftpd/ftpquota.limittab --type=limit<br />
# ftpquota --create-table --table-path /etc/proftpd/ftpquota.tallytab --type=tally<br />
</pre><br />
<br />
;--type=''tipo'': necessario per creare una tabella di tipo "limit" o "tally"<br />
;--table-path ''/path/tabella'': facoltativo. Se non si utilizza questa opzione, verrà creata la tabella nella directory corrente con il nome di default "ftpquota.limittab" o "ftpquota.tallytab" in base al tipo scelto.<br />
<br />
=== Limiti ===<br />
Le quote possono essere impostate sui byte trasferiti/inviati/scaricati dal server e/o sui file trasferiti/inviati/scaricati dal server. È importante sapere che:<br />
* I byte/file trasferiti sono la somma dei byte/file inviati e dei byte/file scaricati<br />
* Il limite predominante è il valore più basso impostato: se il limite di invio byte è 10MB e quello di scaricamento è di 20MB, non sarà possibile il download se si sono già raggiunti i 10MB in upload.<br />
<br />
I limiti che è possibile impostare sono:<br />
;File inviati: si utilizza l'opzione "--file-upload".<br />
;File scaricati: si utilizza l'opzione "--file-download".<br />
;File trasferiti: si utilizza l'opzione "--file-xfer".<br />
<br />
;Byte inviati: si utilizza l'opzione "--byte-upload". Se non viene specificata l'opzione "--units", il numero indica i byte.<br />
;Byte scaricati: si utilizza l'opzione "--byte-download". Se non viene specificata l'opzione "--units", il numero indica i byte.<br />
;Byte trasferiti: si utilizza l'opzione "--byte-xfer". Se non viene specificata l'opzione "--units", il numero indica i byte.<br />
<br />
==== Limiti hard e soft ====<br />
Un limite "hard" o "soft" indica a ProFTPD come comportarsi se l'operazione che si sta svolgendo porta a superare il limite impostato. Influenza solo limiti di tipo byte-*.<br />
;hard limit: l'operazione non andrà a buon fine se porta a superare la quota impostata.<br />
;soft limit: l'operazione sarà consentita anche se porta a superare la quota impostata. Le successive operazioni che portano a superare la quota non saranno, però, consentite.<br />
<br />
Un limite di tipo "hard" o "soft" si imposta con l'opzione "--limit-type". Di default si ha un hard limit.<br />
<br />
=== Creazione ===<br />
Per impostare una quota si deve aggiungere un record alla tabella "ftpquota.limittab". Nel successivo esempio di imposta una quota di 60 MB in upload per l'utente "nomeutente":<br />
<pre><br />
# ftpquota --add-record --type limit --limit-type hard --quota-type user --name nomeutente --bytes-upload 60 --units Mb --table-path /etc/proftpd/ftpquota.limittab<br />
</pre><br />
;--add-record: aggiunge un record alla tabella specificata.<br />
;--type limit: indica che si sta operando sulla tabella "ftpquota.limittab".<br />
;--limit-type hard: il limite sarà "hard".<br />
;--quota-type user: necessario per operare sui limiti per gli utenti.<br />
;--name ''nomeutente'': il nome dell'utente interessato dal limite imposto.<br />
;--bytes-upload 60 --units Mb: il tipo di limite (byte in upload) espresso in Megabyte, in questo caso ci sarà un limite di 60MB.<br />
;--table-path ''/etc/proftpd/ftpquota.limittab'': il percorso e il nome della tabella su cui si sta agendo.<br />
<br />
È ovviamente possibile operare anche sui gruppi:<br />
<pre><br />
# ftpquota --add-record --type limit --limit-type hard --quota-type group --name nomegruppo --bytes-upload 100 --units Gb --table-path /etc/proftpd/ftpquota.limittab<br />
</pre><br />
<br />
=== Visualizzazione ===<br />
In qualunque momento è possibile visualizzare il contenuto delle tabelle con l'opzione "--show-records":<br />
<pre><br />
# ftpquota --show-records --type limit --units Mb --table-path /etc/proftpd/ftpquota.limittab<br />
</pre><br />
ottenendo:<br />
<pre><br />
-------------------------------------------<br />
Name: nomeutente<br />
Quota Type: User<br />
Per Session: False<br />
Limit Type: Hard<br />
Uploaded Mb: 60.00<br />
Downloaded Mb: unlimited<br />
Transferred Mb: unlimited<br />
Uploaded files: unlimited<br />
Downloaded files: unlimited<br />
Transferred files: unlimited<br />
</pre><br />
<br />
Allo stesso modo per la tabella <code>ftpquota.tallytab</code>:<br />
<pre><br />
# ftpquota --show-records --type tally --units Mb --table-path /etc/proftpd/ftpquota.tallytab<br />
ftpquota: (empty table)<br />
</pre><br />
che, almeno inizialmente, è vuota.<br />
<br />
=== Direttive ===<br />
Per abilitare la gestione delle quote è necessario impostare alcune direttive:<br />
;QuotaEngine:<pre><IfModule mod_quotatab.c>&#10;QuotaEngine on&#10;</IfModule></pre>indispensabile per attivare l'engine di gestione delle quote.<br />
;QuotaLimitTable:<pre>QuotaLimitTable file:/etc/proftpd/ftpquota.limittab</pre>direttiva necessaria per indicare la tabella "limit".<br />
;QuotaTallyTable:<pre>QuotaTallyTable file:/etc/proftpd/ftpquota.tallytab</pre>idem come la precedente ma per la tabella "tally".<br />
;QuotaDisplayUnits Kb|Mb|Gb:facoltativa. Indica la quota in Kilobyte, Megabyte, Gigabyte (anziché in byte, comportamento di default) se il client ne fa richiesta.<br />
<br />
Per maggiori informazioni, leggere anche le seguenti pagine<sup>[[#Documentazione esterna|[6]]][[#Documentazione esterna|[7]]]</sup><br />
<br />
== Note ==<br />
Il comportamento di default del server permette ad ogni utente di accedere via FTP solo alla propria directory home.<br />
<br />
== Amministrazione del server FTP ==<br />
Uno strumento molto comodo per l'amministrazione di ProFTPD è '''proftpd-admin'''<sup>[[#Documentazione esterna|[5]]]</sup>.<br />
È un'interfaccia web scritta in PHP, che per funzionare ha bisogno di un server LAMP (Apache, PHP, MySQL).<br />
<br />
== Creare un certificato SSL per TLS ==<br />
TLS è un protocollo che fornisce autenticazione e comunicazioni crittografate. Nell'utilizzo tipico con un server FTP si configura in modo che il server FTP stesso sia autenticato e che i client non lo siano.<br/><br />
Per utilizzare TLS con ProFTPD dobbiamo creare un certificato SSL:<br />
<pre><br />
# apt-get install openssl<br />
# mkdir /etc/proftpd/ssl<br />
# openssl req -newkey rsa:2048 -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem<br />
</pre><br />
Rispondete così alle domande che vi vengono poste:<br />
<pre><br />
Country Name (2 letter code) [AU]: IT<br />
State or Province Name (full name) [Some-State]: Vostra_Provincia<br />
Locality Name (eg, city) []: Vostra_Città<br />
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Vostra_Società<br />
Organizational Unit Name (eg, section) []: Nome_Dipartimento (Esempio: Dipartimento IT)<br />
Common Name (eg, YOUR name) []: FQDN del server (esempio: ftpserver.organizzazione.local)<br />
Email Address []: E-mail dell'amministratore<br />
</pre><br />
Per abilitare TLS in ProFTPD bisogna aprire il file <code>/etc/proftpd/tls.conf</code> e decommentare le seguenti righe:<br />
<pre><br />
<IfModule mod_tls.c><br />
TLSEngine on<br />
TLSLog /var/log/proftpd/tls.log<br />
TLSProtocol SSLv23<br />
TLSOptions NoCertRequest<br />
TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem<br />
TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem<br />
TLSVerifyClient off<br />
TLSRequired on<br />
</IfModule><br />
</pre><br />
<br />
Decommentare anche la seguente riga in <code>proftpd.conf</code> :<br />
<pre><br />
#<br />
# This is used for FTPS connections<br />
#<br />
Include /etc/proftpd/tls.conf<br />
</pre><br />
<br />
Se utilizzate la direttiva "<code>TLSRequired on</code>" saranno consentite solo le connessioni TLS, ma questo bloccherà gli utenti che utilizzano client FTP che non hanno il supporto TLS; suggerisco quindi, se ciò non viola le policy di sicurezza della vostra rete, di commentare la direttiva, in modo da permettere sia connessioni TLS sia connessioni non autenticate.<br/><br />
Infine riavviate il server:<br />
<pre><br />
# service proftpd restart<br />
</pre><br />
Se avete dei problemi con TLS o con le connessioni dai client potete dare un occhio al TLS log file: <code>/var/log/proftpd/tls.log</code>.<br />
<br />
== Documentazione esterna ==<br />
[1] [http://www.proftpd.org/docs/ Ducumentazione ufficiale]<br/><br />
[2] [http://www.proftpd.org/docs/directives/linked/by-name.html Direttive di ProFTPD]<br/><br />
[3] [http://www.proftpd.org/docs/howto/Limit.html Configurare <Limit>]<br/><br />
[4] [http://www.proftpd.org/docs/howto/FTP.html Comandi FTP supportati da ProFTPD]<br/><br />
[5] [http://proftpd-adm.sourceforge.net/index.php proftpd-admin]<br/><br />
'''Quote'''<br/><br />
[6] [http://www.proftpd.org/docs/howto/Quotas.html Quotas HowTo]<br/><br />
[7] [http://www.proftpd.org/docs/utils/ftpquota.html Documentazione per ftpquota]<br/><br />
<br />
{{Autori<br />
| Autore = [[Utente:Ferdybassi|Ferdybassi]]<br />
| Verificata_da=<br />
:[[Utente:S3v|S3v]] 11:17, 27 dic 2014 (CET)<br />
|Estesa_da=<br />
:[[Utente:S3v|S3v]] (FTP anonimo - Quote)<br />
|Numero_revisori=1<br />
}}<br />
<br />
[[Categoria:FTP server]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Irssi,_chattare_da_terminale&diff=40546Irssi, chattare da terminale2015-12-18T19:42:56Z<p>Ombra: fix broken links</p>
<hr />
<div>{{Versioni compatibili|Squeeze|Wheezy|Jessie}}<br />
==Introduzione==<br />
<code>irssi</code> è un client IRC che funziona da linea di comando. È un programma estremamente spartano, ma che ha al suo arco molte frecce.<br />
<br />
==Installazione==<br />
L'installazione di <code>irssi</code> su Debian è molto semplice:<br />
# apt-get install irssi<br />
<br />
Una volta installato, il programma è già funzionante e potete avviarlo come ogni altro programma da shell:<br />
$ irssi<br />
<br />
==Configurazione==<br />
Vi troverete davanti ad una semplice console dove a prima vista non sembrano esserci comandi disponibili. <br><br />
Per iniziare basta però digitare:<br />
/set <invio><br />
<br />
e verrete sommersi da un nugolo di opzioni da selezionare. <br><br />
Le opzioni e i parametri seguono una sintassi standard:<br />
/set nome_opzione_da_selezionare = parametro_che_si_vuole_impostare<invio><br />
<br />
Potete usare il completamento automatico: ossia una volta scritta una parte del comando:<br />
/set nome_opzione<br />
<br />
potete premere il tasto <code>TAB</code> per completare il comando. <br><br />
Il comando /set si comporta in modo simile a grep, per cui si possono ottenere tutte le opzioni riguardanti un certo pattern:<br />
/set name <br><br />
[dcc]<br />
dcc_autorename = OFF<br />
[lookandfeel]<br />
actlist_names = ON<br />
names_max_columns = 6<br />
names_max_width = 0<br />
show_names_on_join = ON<br />
[server]<br />
hostname = <br />
real_name = skizzhg<br />
user_name = skizzhg<br />
<br />
Come prima cosa conviene impostare il vostro nick name:<br />
/set nick il_mio_nick <invio><br />
<br />
dove al posto di <code>il_mio_nick</code> dovrete scrivere il nickname con cui volete essere riconosciuti su IRC. <br><br />
Se si vuole annullare una modifica e tornare allo stato iniziale:<br />
/set -clear opzione<br />
<br />
Data la complessità del file di configurazione è fortemente sconsigliato modificarlo manualmente tramite un editor, usate invece i comandi interni e il ricco help ottenibile con <code>/help</code> e quindi <code>/help comando</code>; ad esempio: <code>/help set</code>.<br />
<br />
==Collegamento ad un server IRC==<br />
Digitate:<br />
/connect nome_server_irc <invio><br />
<br />
e <code>irssi</code> cercherà immediatamente di collegarsi. Un esempio:<br />
/connect irc.azzurra.org <invio><br />
<br />
Una volta collegati al server potrete raggiungere un canale. Se non conoscete a priori il nome del canale o se volete sfogliare la lista dei canali disponibili, il comando irc <code>list</code>, magari specificando l'argomento di interesse, ad esempio <code>linux</code>, è quello che fa per voi:<br />
/list #linux*<br />
<br />
Sarà elencata una serie di canali inerenti questo tema. Per entrare in un canale usate il comando <code>join</code>:<br />
/join #debianizzati<br />
<br />
Si aprirà un'altra finestra con l'elenco delle persone collegate e il topic del canale; per iniziare a chattare basta digitare quello che volete comunicare e poi premere invio. <br><br />
Se volete ritornare alla finestra iniziale del server a cui siete collegati basta premere <code>ALT+1</code>.<br />
<br />
Automatizziamo la connessione al server e il join al canale:<br />
/server add -ssl -auto -network azzurra irc.azzurra.org 9999<br />
/network add -nick skizzhg -user skizzhg -realname skizzhg azzurra<br />
<br />
aggiungere la seguente stringa solo se si ha un nick registrato sostituendo mia_password con la propria password:<br />
/network add -autosendcmd "/quote nickserv identify mia_password; wait 3000" azzurra<br />
<br />
quindi l'autojoin<br />
/channel add -auto #debianizzati azzurra<br />
<br />
e infine salviamo il tutto (le impostazioni verranno scritte nel file <code>~/.irssi/config</code>)<br />
/save<br />
<br />
==All'interno di un canale==<br />
Quando si è in un canale, se volete aprire una finestra privata col vostro interlocutore dovete digitare il comando:<br />
/query nick_con_cui_volete_parlare <invio><br />
<br />
Per passare da una finestra ad un'altra è possibile utilizzare varie combinazioni di tasti:<br />
* <code>ALT+numero</code> (oltre le 10 finestre ci si muove con Alt+q,w,e,r...)<br />
* <code>ESC+numero</code> (premere e rilasciare ESC e quindi il numero)<br />
* <code>CRTL-n / CTRL-p</code><br />
* scrivendo <code>/window goto N</code> (dove N è il numero della finestra o il nome del canale)<br />
mentre premere <code>ALTt+a</code> porta alla prima finestra dove c'è attività.<br />
<br />
Se invece volete spedire un file ad un utente usate:<br />
/dcc send nick_destinatario file_da_spedire<invio><br />
<br />
Per ricevere un file:<br />
/dcc get nick_che_spedisce file_da_ricevere <invio><br />
<br />
Per chiudere una qualsiasi finestra è sufficiente trovarsi nella finestra che si vuol chiudere e digitare:<br />
/wc (ovvero window close)<invio><br />
<br />
Tutti i comandi standard di IRC funzionano sotto <code>irssi</code>. <br><br />
Per uscire utilizzate il comando:<br />
/quit<invio><br />
<br />
==Alias==<br />
Come per qualsiasi altro client IRC possiamo creare tanti alias quanto le esigenze e la fantasia ci suggeriscono, ecco qualche esempio. <br><br />
Innanzitutto dobbiamo creare gli alias per i service dell'Ircd perché irssi, al contrario di altri, non interpreta le consuete abbreviazioni:<br />
/alias CS quote chanserv<br />
/alias NS quote nickserv<br />
/alias MS quote memoserv<br />
/alias HS quote helpserv<br />
/alias SEEN quote seenserv seennick<br />
<br />
Spesso irssi viene usato insieme a [[GNU/Screen]] per restare connessi a lungo, in questo caso non vogliamo uscire per sbaglio:<br />
/alias quit echo ^C5 sei sicuro? usa //quit<br />
<br />
<code>^C5</code> significa premere e rilasciare <code>CTRL-c</code> e quindi <code>5</code> per ottenere il testo colorato di rosso, lo stesso si ottiene con<br />
/alias quit echo \0035 sei sicuro? usa //quit<br />
<br />
D'ora in poi per chiudere realmente si userà il comando <code>//quit</code>. È bene anche eliminare gli altri alias predefiniti che rimandano a <code>quit</code>:<br />
/unalias BYE<br />
/unalias EXIT<br />
/unalias SIGNOFF<br />
<br />
È possibile dividere orizzontalmente la finestra per visualizzare più canali contemporaneamente, in questo caso prendiamo l'esempio della finestra di status (la 1) dove finiscono ad esempio i notice, i memo e altri messaggi che altrimenti possiamo facilmente non notare; creiamo una piccola porzione (11 righe) dello status sopra la finestra solita:<br />
/alias SPLIT window show 1; window shrink 11<br />
<br />
e un altro in caso volessimo tornare allo stato iniziale (espanderlo per quante finestre occorrono):<br />
/alias UNSPLIT window goto 1; window stick off; window goto 2; window stick off; window goto 3; window stick off; \<br><br />
window goto 4; window stick off; window goto 5; window stick off; window goto 1; window hide<br />
<br />
Stanchi di scrivere sempre la ragione per cui si è away? Mettiamone una fissa:<br />
/alias A away non sono al pc<br />
<br />
e con questo torniamo:<br />
/alias B away<br />
<br />
Capita di dimenticarsi finestre aperte, controlliamo cosa c'è:<br />
/alias WL window list<br />
<br />
Uno dei punti forti di irssi è la ricerca di pattern nel buffer della finestra, proprio come se usassimo grep:<br />
<br />
normale, cerca qualsiasi cosa, ad esempio <code>/ll debian</code> mostrerà tutte le righe che contengono la parola debian:<br />
/alias LL lastlog<br />
<br />
mostra tutte le righe nelle quali si è stati nominati:<br />
/alias LLH lastlog -hilight<br />
<br />
pulisce i risultati, elimina quindi le righe mostrate in precedenza:<br />
/alias LLC lastlog -clear<br />
<br />
Una volta che abbiamo trovato una certa riga con <code>/lastlog</code> vogliamo anche risalire a quel punto per leggere un certo pezzo di conversazione o altro, il comando <code>/scrollback</code> fa proprio questo:<br />
<br />
normale, per il gusto di digitare meno lettere:<br />
/alias SB scrollback<br />
<br />
va all'inizio del buffer:<br />
/alias SBH scrollback home<br />
<br />
va alla fine del buffer:<br />
/alias SBE scrollback end<br />
<br />
va in un punto preciso secondo determinati pattern che spaziano dal numero di riga al timestamp, ad esempio <code>/sbg 21:33</code> risalirà in prossimità della prima corrispondenza dell'orario richiesto, mentre <code>/sbg -1 21:33</code> alla stessa ora ma del giorno precedente, <code>/sbg -11</code> invece scrollerà in su di 11 righe:<br />
/alias SBG scrollback goto<br />
<br />
A questo proposito consiglio di aumentare visibilmente il buffer:<br />
/set scrollback_time 3day<br />
<br />
Tramite il comando <code>/exec</code> possiamo invocare comandi esterni, e qui ci si può davvero sbizzarrire.<br />
<br />
grep:<br />
/alias GREP exec - grep<br />
<br />
tail:<br />
/alias TAIL exec - tail<br />
<br />
controllo del volume (down, up, mute, normal, valore impostabile)<br />
/alias VD exec - echo "\033[35mvolume: $$(amixer set Master 1- | grep -m 1 -Eo '[0-9]+%')"<br />
/alias VU exec - echo "\033[35mvolume: $$(amixer set Master 1+ | grep -m 1 -Eo '[0-9]+%')"<br />
/alias VM exec - echo "\033[35mvolume: $$(amixer set Master 0 | grep -m 1 -Eo '[0-9]+%')"<br />
/alias VN exec - echo "\033[35mvolume: $$(amixer set Master 19% | grep -m 1 -Eo '[0-9]+%')"<br />
/alias VS exec - echo "\033[35mvolume: $$(amixer set Master '$*'% | grep -m 1 -Eo '[0-9]+%')"<br />
<br />
pastebinit, l'opzione <code>-o</code> manda l'output in canale:<br />
/alias PB exec - -o pastebinit<br />
/alias PBC exec - -o $* | pastebinit<br />
/alias PBG exec - -o grep $* | pastebinit<br />
<br />
URL shrinker:<br />
/alias US exec - -o w3m -no-cookie -dump <nowiki>'http://2tu.us/?save=y&url=$*'</nowiki> | awk '/Your tight URL is/ {print $$5}'<br />
<br />
Il comando <code>/alias</code> senza argomenti mostra tutti quelli impostati, mentre <code>/alias w</code> tutti quelli che iniziano con la lettera <code>w</code>.<br />
<br />
==Collegamenti Esterni==<br />
* http://irssi.org/documentation<br />
* https://irssi-import.github.io/themes/<br />
* http://scripts.irssi.org/<br />
* http://wouter.coekaerts.be/site/irssi/aliases<br />
* https://github.com/shabble/irssi-docs/wiki<br />
<br />
{{Autori<br />
|Autore=[[Utente:Ferdybassi|Ferdybassi]] 16:03, 10 mar 2010 (CET)<br />
}}<br />
<br />
[[Categoria:Shell]]<br />
[[Categoria:Instant Messaging]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Guida_alla_formattazione_dei_dischi_con_fdisk&diff=40536Guida alla formattazione dei dischi con fdisk2015-12-17T18:46:34Z<p>Ombra: revisione</p>
<hr />
<div>{{File_System<br />
|precedente=SSHFS:_montare_una_risorsa_remota_sfruttando_FUSE_ed_SSH<br />
}}{{Versioni compatibili}}<br />
= Introduzione =<br />
Se state aggiungendo una nuova unità disco a un sistema Debian GNU/ Linux e desiderate utilizzare il filesystem ext4, dovete anzitutto partizionare il disco fisso con un programma come <code>fdisk</code> e poi formattare il filesystem.<br />
<br />
= Partizionare un disco con fdisk =<br />
== Partizionamento ==<br />
Il programma più comune su Linux per partizionare un disco utilizzando la shell è <code>fdisk</code>. Il comando <code>fdisk</code> vi chiederà di specificare come argomento il nome del disco fisso che intendete partizionare, ad esempio <code>/dev/sda</code>, oppure <code>/dev/hdb</code>. Per approfondire la nomenclatura dei dischi fissi su Debian GNU/Linux si veda questa guida: [[Guida_ai_comandi_da_terminale - Gestione_del_File_System| Gestione del file system]].<br/><br />
Negli esempi che seguono, utilizzeremo il disco <code>/dev/hdb</code>, che corrisponde al secondo dispositivo sul canale IDE primario. Perciò:<br />
<pre><br />
# fdisk /dev/hdb<br />
</pre><br />
Nell'elenco che segue sono riportati i comandi di utilizzo più comune:<br />
* <code>'''m'''</code>: visualizza l'help<br />
* <code>'''p'''</code>: visualizza la tabella corrente delle partizioni<br />
* <code>'''d'''</code>: cancella una partizione<br />
* <code>'''n'''</code>: crea una nuova partizione<br />
* <code>'''w'''</code>: scrive la tabella delle partizioni sul disco<br />
* <code>'''t'''</code>: imposta il tipo di filesystem previsto per la partizione<br />
* <code>'''a'''</code>: abilita/disabilita il flag che rende la partizione avviabile (''boot flag'')<br />
* <code>'''l'''</code>: visualizza l'elenco dei tipi di filesystem utilizzabili<br />
* <code>'''q'''</code>: chiude fdisk senza modificare il disco<br />
Una volta entrati in <code>fdisk</code>, iniziamo digitando <code>'''n'''</code> per creare una nuova partizione. <code>fdisk</code> chiederà di scegliere un tipo di partizione tra:<br />
* <code>'''p'''</code> se intendete creare una partizione primaria<br />
* <code>'''e'''</code> se intendete creare una partizione estesa<br />
* <code>'''l'''</code> se intendete creare una partizione logica<br />
Prima di scegliere un tipo di partizione, ricordatevi che Debian vi permette di avere un massimo di quattro partizioni primarie per ciascun disco. Se desiderate avere più di quattro partizioni, una (e soltanto una) delle quattro partizioni primarie può essere una partizione estesa, che fungerà poi da contenitore per una o più partizioni logiche.<br/><br />
Dopo aver scelto il tipo di partizione, scegliete su quale cilindro desiderate far avviare la partizione. Per accettare il valore di default potete digitare <code>[Invio]</code>.<br/><br />
Successivamente dovete specificare le dimensioni. Probabilmente il modo più semplice per farlo è quello di digitare <code>+''dimensione''M</code>, dove <code>''dimensione''</code> è la dimensione (in megabyte) voluta per la partizione. Premendo invece il tasto <code>[Invio]</code> senza inserire alcun valore, <code>fdisk</code> utilizzerà tutta la restante parte vuota del disco.<br><br />
Ripetete l'intera procedura fino a quando non avrete creato lo schema di partizionamento che desiderate.<br />
<br />
== Tipi di filesystem ==<br />
Ora occorre specificare con quale tipo di filesystem intendete formattare il disco perché, di default, <code>fdisk</code> crea partizioni di tipo unknown.<br/><br />
Digitiamo quindi <code>t</code> seguito dal numero della partizione di cui vogliamo cambiare il tipo di filesystem. Poi inseriamo il valore esadecimale per il tipo di filesystem che intendiamo assegnare alla partizione. Per le partizioni Linux swap il valore esadecimale è 82; per le partizioni Linux ext2/3/4 il valore esadecimale è 83. Per altri tipi di partizione possiamo utilizzare il comando <code>l</code>: ci verrà mostrato un elenco di tipi di filesystem con i relativi valori esadecimali. Ripetiamo l'operazione per ciascuna delle partizioni che abbiamo creato.<br/><br />
Terminata la creazione delle partizioni, digitiamo <code>w</code> per salvare le modifiche e chiudere <code>fdisk</code>. <br />
= Formattazione dei filesystem ext4 =<br />
Una volta create con <code>fdisk</code> le partizioni desiderate, queste dovranno essere formattate per creare un filesystem ext4 su ciascuna di loro. Per compiere questa operazione utilizzeremo il comando <code>mkfs</code>; colleghiamoci come root e digitiamo:<br />
<pre><br />
# mkfs -t ext4 /dev/hdbX<br />
</pre><br />
dove X corrisponde al numero della partizione del disco che vogliamo formattare.<br />
{{ Warningbox | Utilizzando mkfs per formattare la partizione di un disco, cancellerete in modo permanente qualsiasi dato presente sulla partizione}} <br />
= Montare le partizioni create =<br />
L'ultimo passo prima di utilizzare le partizioni create è quello di ''montarle'' in una directory del nostro filesystem.<br/><br />
Prima di tutto è necessario creare la directory dove verrà poi montata la nostra partizione. In questa guida verrà utilizzata la directory <code>/mnt/prova</code>:<br />
<pre><br />
# mkdir /mnt/prova<br />
</pre><br />
Per poter montare in automatico la nostra partizione ext4 nella directory <code>/mnt/prova</code> è necessario modificare adesso il file <code>/etc/fstab</code>. Apriamo il file con i permessi di root:<br />
<pre><br />
# nano /etc/fstab<br />
</pre><br />
e inseriamo in fondo al file la seguente riga:<br />
<pre><br />
/dev/sdb1 /mnt/prova ext4 rw,defaults 0 2<br />
</pre><br />
Salviamo il file, chiudiamo e riavviamo il sistema.<br />
= Etichettare le partizioni create =<br />
Una volta creata e formattata una partizione è possibile assegnarle un'etichetta utilizzando il comando <code>e2label</code>. Per assegnare un'etichetta a una partizione collegatevi come root e digitate:<br />
<pre><br />
e2label /dev/sdbX etichetta<br />
</pre><br />
dove:<br />
* <code>/dev/sdbX</code> è la partizione che avete creato e formattato<br />
* <code>etichetta</code> indica è l'etichetta che intendete assegnare alla partizione<br />
= Verificare le etichette assegnate alle partizioni =<br />
Il comando<br />
<pre><br />
mount -l<br />
</pre><br />
mostra tutte le partizioni montate nel sistema, evidenziando tra parentesi quadre l'etichetta assegnata ad ogni partizone.<br />
<br />
{{Autori<br />
|Autore=[[Utente:Ferdybassi|Ferdybassi]] 19:17, 20 gen 2010 (CET)<br />
|Verificata_da=<br />
: [[Utente:HAL 9000|HAL 9000]] 18:11, 20 ago 2014 (CEST)<br />
: [[Utente:Ombra|Ombra]] 19:46, 17 dic 2015 (CET)<br />
|Numero_revisori=2<br />
}}<br />
<br />
<br />
[[Categoria:Shell]]<br />
[[Categoria:Filesystem]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Lm-sensors&diff=40474Lm-sensors2015-12-14T20:50:44Z<p>Ombra: verifica con Debian Sid</p>
<hr />
<div>{{Versioni compatibili|Squeeze|Wheezy|Jessie|Unstable_2015}}<br />
== Descrizione ==<br />
<br />
Lm-sensors è un pacchetto di monitoraggio della salute hardware per Linux. Esso consente di accedere alle informazioni da parte della temperatura, tensione e sensori di velocità della ventola. Funziona con la maggior parte dei sistemi più recenti. Questo pacchetto contiene i programmi per aiutarvi a creare e leggere i dati da lm-sensors.<br />
<br />
== Installazione ==<br />
<br />
<pre><br />
# apt-get install lm-sensors<br />
</pre><br />
<br />
== Utilizzo ==<br />
<br />
Per poter riuscire a individuare i sensori del nostro chipset occorre prima eseguire<br />
<br />
<pre><br />
# sensors-detect<br />
</pre><br />
<br />
{{ Warningbox | È sconsigliato modificare il comportamento di default, salvo si sappia cosa si sta facendo e sia stata controllata la compatibilità con l'hardware in dotazione, perché in rari casi le operazioni di rilevamento potrebbero compromettere il funzionamento dei chip interrogati dal comando. Si legga la pagina di manuale (<code>man sensors-detect</code>) per maggiori dettagli.}}<br />
<br />
Ci verranno poste una serie di domande alle quali dovremmo rispondere yes, se corrisponde alla scelta di default, così che alla fine ci verrà chiesto di poter inserire i dati all'interno del file ''/etc/modules'', al prossimo riavvio lm-sensors sarà in grado di leggere i vari output dei nostri sensori, ma fino ad allora possiamo caricare questi moduli a mano tramite il comando <code>modprobe</code>.<br />
<br />
Questo è quello che è stato inserito per la mia ASUS A7N8X-E Deluxe<br />
<pre><br />
# Generated by sensors-detect on Tue Sep 16 01:14:58 2008<br />
# I2C adapter drivers<br />
i2c-nforce2<br />
# Chip drivers<br />
asb100<br />
</pre><br />
<br />
Ricordiamoci che lm-sensors è alla base di molti altri programmi, che si affidano a lui per restituirvi dati come la temperatura, il numero di giri delle ventole e altro ancora, sempre se supportati e rilevati.<br />
<br />
Per visualizzare da terminale tutte le informazioni dei vari sensori caricati è sufficiente digitare:<br />
<pre>$ sensors</pre><br />
Di seguito un esempio di cosa restituisce l'esecuzione del precedente comando:<br />
<pre><br />
asb100-i2c-1-2d<br />
Adapter: SMBus nForce2 adapter at 5500<br />
VCore 1: +1.70 V (min = +1.31 V, max = +1.97 V)<br />
+3.3V: +3.34 V (min = +2.96 V, max = +3.63 V)<br />
+5V: +4.89 V (min = +4.49 V, max = +5.51 V)<br />
+12V: +11.92 V (min = +9.55 V, max = +14.41 V)<br />
-12V (reserved): -12.45 V (min = -0.00 V, max = -0.00 V)<br />
-5V (reserved): -5.22 V (min = -0.00 V, max = -0.00 V)<br />
CPU Fan: 5232 RPM (min = 168750 RPM, div = 2)<br />
Chassis Fan: 0 RPM (min = -1 RPM, div = 2)<br />
Power Fan: 0 RPM (min = -1 RPM, div = 2)<br />
M/B Temp: +51.0°C (high = +80.0°C, hyst = +75.0°C)<br />
CPU Temp (Intel): +24.0°C (high = +80.0°C, hyst = +75.0°C)<br />
Power Temp: +127.0°C (high = +80.0°C, hyst = +64.0°C)<br />
CPU Temp (AMD): +25.0° C (high = +80.0°C, hyst = +75.0°C)<br />
cpu0_vid: +1.650 V<br />
</pre><br />
<br />
Per maggiori informazioni consultate ''man sensors'' e ''sensors -h''.<br />
<br />
== Possibili Errori ==<br />
<br />
{{ Warningbox | Non tutto l'hardware viene riconosciuto, può capitare che prodotti recenti non siano ancora stati supportati.}}<br />
<br />
Visitare la pagina ufficiale del progetto per una [http://www.lm-sensors.org/wiki/Devices lista dell'hardware supportato].<br />
<br />
{{Autori<br />
| Autore = [[Utente:Mm-barabba|Mm-barabba]] 00:50, 9 apr 2011 (CEST)<br />
| Estesa_da =<br />
| Verificata_da =<br />
: [[Utente:Wtf|Wtf]] 17:13, 5 giu 2011 (CEST)<br />
: [[Utente:Nydebianized|Nydebianized]] 11:37, 11 set 2012 (CEST)<br />
:[[Utente:HAL 9000|HAL 9000]] 12:51, 1 lug 2014 (CEST)<br />
: [[Utente:Ombra|Ombra]] 21:50, 14 dic 2015 (CET)<br />
| Numero_revisori= 4<br />
}}<br />
<br />
[[Categoria:Shell]]<br />
[[Categoria:Monitoraggio]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Cowsay,_la_mucca_che_ci_parla_dal_terminale&diff=40412Cowsay, la mucca che ci parla dal terminale2015-12-08T15:24:48Z<p>Ombra: aggiunta compatibilità a unstable_2015</p>
<hr />
<div>{{Versioni compatibili|Squeeze|Wheezy|Jessie|Unstable_2015}}<br />
__TOC__<br />
== Introduzione ==<br />
Cowsay è un programma che disegna sullo schermo del terminale una mucca parlante. Con poche e veloci modifiche possiamo fare in modo che la nostra mucca preferita ci accolga ad ogni apertura di terminale recitandoci una battuta spiritosa, raccolta attraverso il programma fortune.<br />
<br />
== Installazione ==<br />
Per installare cowsay e fortune basta digitare:<br />
<pre><br />
# apt-get install cowsay fortunes fortunes-it fortunes-it-off fortunes-bofh-excuses fortunes-debian-hints<br />
</pre><br />
Il comando precedente installerà, oltre a cowsay e fortune, anche le battute italiane (fortunes-it), le battute un po' più volgari (fortunes-it-off) e le spettacolari scuse dei Bastard Operators From Hell, cioè i sysadmin particolarmente sadici, nonché un insieme di consigli e suggerimenti sull'uso di Debian.<br />
<br />
== Configurazione ==<br />
Per essere accolti dalla nostra mucca parlante dobbiamo solo modificare il file <code>.bashrc</code> contenuto nella nostra home:<br />
<pre><br />
$ nano .bashrc<br />
</pre><br />
aggiungendo come ultima riga:<br />
<pre><br />
/usr/games/cowsay $(/usr/games/fortune)<br />
</pre><br />
e il gioco è fatto. Al prossimo login via terminale ci apparirà Cowsay in tutta la sua saggezza:<br />
<pre><br />
_______________________________________<br />
/ Definizione di Johnson: L'amore e' la \<br />
| saggezza del pazzo e la pazzia del |<br />
\ saggio. /<br />
---------------------------------------<br />
\ ^__^<br />
\ (oo)\_______<br />
(__)\ )\/\<br />
||----w |<br />
|| ||<br />
</pre><br />
<br/><br/><br />
{{Autori<br />
|Autore = [[Utente:Ferdybassi|Ferdybassi]] 18:37, 21 gen 2010 (CET)<br />
|Verificata_da =<br />
: [[Utente:Nydebianized|Nydebianized]]<br />
: [[Utente:Stemby|Stemby]]<br />
: [[Utente:People|People]]<br />
: [[Utente:Ombra|Ombra]] 16:16, 8 dic 2015 (CET)<br />
|Numero_revisori = 4<br />
}}<br />
<br />
[[Categoria:Fun]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Come_abilitare_il_completamento_automatico_%27avanzato%27&diff=40411Come abilitare il completamento automatico 'avanzato'2015-12-08T15:20:05Z<p>Ombra: </p>
<hr />
<div>{{Versioni compatibili}}<br />
== Introduzione ==<br />
Il completamento automatico (o autocompletamento) è una feature molto condoda e potente che permette di completare l'immissione di un comando, di un [[path]], delle opzioni di un comando o del nome di un file attraverso la pressione del tasto [TAB].<br/><br />
Questo consente di velocizzare la digitazione da tastiera e, contemporaneamente, di evitare errori di battitura.<br />
<br />
L'autocompletamento si applica alla [[shell]] [[Bash]].<br />
<br />
== Come funziona ==<br />
Vi sarete chiesti, ad esempio, come abilitare quella interessante feature quando date un comando tipo:<br />
<pre><br />
# apt-get install kde<br />
</pre><br />
e premete il tasto [TAB] 2 volte, viene mostrata una lista di tutti i pacchetti inizianti con kde!<br />
<br />
La singola pressione del tasto [TAB] 'autocompleta' l'input nel caso ci fosse un solo modo per completare l'immissione.<br/><br />
La doppia pressione del tasto [TAB] mostrerà, invece, una lista dei possibili modi per completare l'input nel caso questi fossero più di uno.<br />
<br />
== Installazione ==<br />
È sufficiente installare il pacchetto appropriato:<br />
<pre><br />
# aptitude install bash-completion<br />
</pre><br />
Tipicamente questo pacchetto viene installato di default sul proprio sistema.<br />
<br />
== Utilizzo ==<br />
L'autocompletamento è automaticamente abilitato per tutti gli utenti di login del sistema con la sola eccezione di [[root]].<br/><br />
Per abilitare il completamento automatico anche per root è sufficiente decommentare le righe in modo che risulti:<br />
<pre><br />
# enable bash completion in interactive shells<br />
if ! shopt -oq posix; then<br />
if [ -f /usr/share/bash-completion/bash_completion ]; then<br />
. /usr/share/bash-completion/bash_completion<br />
elif [ -f /etc/bash_completion ]; then<br />
. /etc/bash_completion<br />
fi<br />
fi<br />
</pre><br />
nel file '''<code>/etc/bash.bashrc</code>'''.<br />
Questa modifica avrà effetto per tutti gli utenti di sistema.<br/><br />
Sarà necessario eseguire un:<br />
<pre># . /etc/bash.bashrc</pre><br />
oppure chiudere e riaprire il proprio emulatore di terminale per rendere effettive le modifiche.<br />
<br />
Se si vuole che l'autocompletamento sia disponibile solo per alcuni utenti (compreso [[root]]), bisogna fare in modo che ciascuno di loro abbia nel proprio file <code>~/.bashrc</code> le righe sopra riportate.<br/><br />
Per rendere effettive le modifiche al file bisogna eseguire:<br />
<pre><br />
. ~/.bashrc<br />
</pre><br />
oppure effettuare un logout/login se si utilizza il terminale o, se si sta utilizzando un [[emulatore di terminale]], chiudere e riaprire il programma.<br />
<br />
Oltre al completamento riportato come esempio ne aggiunge degli altri...ad esempio, con il comando <code>tar</code>, verranno mostrati i file con estensioni tipiche di file tar (.tar.bz2, .tar.gz, .tgz), verranno completate le opzioni di apt-get (apt-get ins[tab] produrrà apt-get install) e molte altre cose ancora.<br />
<br />
Se volete scoprirle tutte, analizzate il file '''<code>/etc/bash_completion</code>'''!<br />
<br />
Non è nemmeno difficile crearne delle proprie personalizzate, magari per i programmi utilizzati frequentemente!<br />
<br />
{{Autori<br />
|Autore=[[User:MaXeR|MaXeR]]<br />
|Verificata_da=<br />
:[[Utente:S3v|S3v]] 02:46, 19 ott 2012 (CEST)<br />
:[[Utente:HAL 9000|HAL 9000]] 21:59, 22 giu 2014 (CEST)<br />
:[[Utente:Spoon|Spoon]] 15:21, 25 mag 2015 (CEST)<br />
: [[Utente:Ombra|Ombra]] 16:20, 8 dic 2015 (CET)<br />
|Numero_revisori=4<br />
}}<br />
<br />
[[Categoria:Bash]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Cowsay,_la_mucca_che_ci_parla_dal_terminale&diff=40410Cowsay, la mucca che ci parla dal terminale2015-12-08T15:16:38Z<p>Ombra: verifica</p>
<hr />
<div>{{Versioni compatibili|Squeeze|Wheezy|Jessie}}<br />
__TOC__<br />
== Introduzione ==<br />
Cowsay è un programma che disegna sullo schermo del terminale una mucca parlante. Con poche e veloci modifiche possiamo fare in modo che la nostra mucca preferita ci accolga ad ogni apertura di terminale recitandoci una battuta spiritosa, raccolta attraverso il programma fortune.<br />
<br />
== Installazione ==<br />
Per installare cowsay e fortune basta digitare:<br />
<pre><br />
# apt-get install cowsay fortunes fortunes-it fortunes-it-off fortunes-bofh-excuses fortunes-debian-hints<br />
</pre><br />
Il comando precedente installerà, oltre a cowsay e fortune, anche le battute italiane (fortunes-it), le battute un po' più volgari (fortunes-it-off) e le spettacolari scuse dei Bastard Operators From Hell, cioè i sysadmin particolarmente sadici, nonché un insieme di consigli e suggerimenti sull'uso di Debian.<br />
<br />
== Configurazione ==<br />
Per essere accolti dalla nostra mucca parlante dobbiamo solo modificare il file <code>.bashrc</code> contenuto nella nostra home:<br />
<pre><br />
$ nano .bashrc<br />
</pre><br />
aggiungendo come ultima riga:<br />
<pre><br />
/usr/games/cowsay $(/usr/games/fortune)<br />
</pre><br />
e il gioco è fatto. Al prossimo login via terminale ci apparirà Cowsay in tutta la sua saggezza:<br />
<pre><br />
_______________________________________<br />
/ Definizione di Johnson: L'amore e' la \<br />
| saggezza del pazzo e la pazzia del |<br />
\ saggio. /<br />
---------------------------------------<br />
\ ^__^<br />
\ (oo)\_______<br />
(__)\ )\/\<br />
||----w |<br />
|| ||<br />
</pre><br />
<br/><br/><br />
{{Autori<br />
|Autore = [[Utente:Ferdybassi|Ferdybassi]] 18:37, 21 gen 2010 (CET)<br />
|Verificata_da =<br />
: [[Utente:Nydebianized|Nydebianized]]<br />
: [[Utente:Stemby|Stemby]]<br />
: [[Utente:People|People]]<br />
: [[Utente:Ombra|Ombra]] 16:16, 8 dic 2015 (CET)<br />
|Numero_revisori = 4<br />
}}<br />
<br />
[[Categoria:Fun]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Reportbug&diff=38574Reportbug2015-05-16T18:23:31Z<p>Ombra: </p>
<hr />
<div>{{Versioni compatibili}}<br />
== Introduzione ==<br />
La segnalazione dei bug è un'attività importantissima perché facilita la risoluzione rapida dei problemi che affliggono il software e quindi contribuisce a migliorare la qualità generale della distribuzione che si utilizza.<br />
È qualcosa su cui tutti gli utenti dovrebbero prestare attenzione perché è un eccellente modo di contribuire visto, tra l'altro, che per poterlo fare non è assolutamente necessario essere degli sviluppatori o avere delle competenze specifiche.<br />
<br />
Reportbug è un software (presente nei [[repository]] di tutti e tre i rami di Debian) pensato per facilitare la compilazione e l'invio dei report relativi a "difetti" e malfunzionamenti.<br/><br />
Aiuta a produrre dei report dettagliati, aderenti agli standard e "leggibili".<br />
<br />
In questa sede si esplorerà la configurazione e l'utilizzo di questo strumento in modo tale da poter fornire delle linee guida alle quali attenersi in quelle situazioni in cui ci si dovesse ritrovare davanti ad un malfunzionamento.<br/><br />
In quel caso, invece di ignorare subito il problema e prima di tuffarsi alla ricerca di una soluzione o workaround, si potrà provvedere ad inviare una segnalazione di bug.<br/><br />
Prima di far questo, però, sarà doveroso accertarsi che si tratti proprio di un malfunzionamento e non di una caratteristica... e che qualcuno non abbia già segnalato la cosa prima di noi.<br />
<br />
== Installazione ==<br />
Come detto, reportbug è presente nei repository, quindi per installarlo basterà:<br />
<pre><br />
# apt-get install reportbug<br />
</pre><br />
<br />
Conterrà sia l'eseguibile <code>reportbug</code>, sia <code>querybts</code> che può essere utilizzato per controllare eventuali bug presenti in un pacchetto prima di inviare la propria segnalazione.<br />
<br />
== Configurazione ==<br />
Al primo avvio il sistema porrà delle domande riguardanti l'utente e le impostazioni della macchina host.<br/><br />
Queste informazioni verranno scritte nel file <code>.reportbugrc</code> all'interno della home directory di chi lo lancia (non è consigliabile eseguirlo da [[root]]).<br />
<pre><br />
$ reportbug<br />
<br />
Welcome to reportbug! Since it looks like this is the first time you have used reportbug, we are configuring its behavior. These settings will be saved to the file "/home/nome-utente/.reportbugrc", <br />
which you will be free to edit further.<br />
Please choose the default operating mode for reportbug.<br />
<br />
1 novice Offer simple prompts, bypassing technical questions.<br />
<br />
2 standard Offer more extensive prompts, including asking about things that a moderately sophisticated user would be expected to know about Debian.<br />
<br />
3 advanced Like standard, but assumes you know a bit more about Debian, including "incoming".<br />
<br />
4 expert Bypass most handholding measures and preliminary triage routines. This mode should not be used by people unfamiliar with Debian's policies and operating procedures.<br />
<br />
Select mode: [novice] <br />
</pre><br />
<br />
Questa prima domanda riguarda il nostro "livello" di abilità. Si va da ''novice'' (domande semplici evitando complicate questioni tecniche) fino, gradualmente, a ''expert''.<br/><br />
Si risponderà secondo il proprio grado di preparazione tecnica.<br />
<pre><br />
Please choose the default interface for reportbug.<br />
<br />
1 text A text-oriented console user interface<br />
<br />
2 gtk2 A graphical (GTK+) user interface.<br />
<br />
Select interface: <br />
</pre><br />
<br />
È il momento di scegliere l'interfaccia che si vuole utilizzare: testuale oppure grafica.<br />
<pre><br />
Will reportbug often have direct Internet access? (You should answer yes to this question unless you know what you are doing and plan to check whether duplicate reports have been filed via some other channel.) [Y|n|q|?]?<br />
</pre><br />
Si risponderà Y se c'è un accesso diretto ad Internet (facendo attenzione, prima di ciascun invio, di evitare duplicati di segnalazioni già presenti).<br />
<pre><br />
What real name should be used for sending bug reports?<br />
[pmate]> <br />
<br />
Which of your email addresses should be used when sending bug reports? (Note that this address will be visible in the bug tracking system, so you may want to use a webmail address or another address<br />
with good spam filtering capabilities.)<br />
[pmate@debian.mine]><br />
</pre><br />
Si forniranno le informazioni relative al nome di chi invierà le segnalazioni e al suo indirizzo email.<br />
<pre><br />
Do you have a "mail transport agent" (MTA) like Exim, Postfix or SSMTP configured on this computer to send mail to the Internet? [Y|n|q|?]? <br />
</pre><br />
Si risponderà Y se c'è un MTA configurato nel sistema in uso: penserà lui ad inviare in automatico le segnalazioni.<br />
<pre><br />
Please enter the name of your SMTP host. Usually it's called something like "mail.example.org" or "smtp.example.org". If you need to use a different port than default, use the <host>:<port> alternative format.<br />
<br />
Just press ENTER if you don't have one or don't know.<br />
> <br />
</pre><br />
Nel caso in cui esista, si inserirà il nome dell'host SMTP o si presserà semplicemente ENTER per continuare.<br />
<br />
<pre><br />
Please enter the name of your proxy server. It should only use this parameter if you are behind a firewall. The PROXY argument should be formatted as a valid HTTP URL, including (if necessary) a port number; <br />
for example, http://192.168.1.1:3128/.<br />
Just press ENTER if you don't have one or don't know.<br />
</pre><br />
<br />
Stessa cosa per quanto riguarda un eventuale server proxy.<br />
<pre><br />
Default preferences file written. To reconfigure, re-run reportbug with the "--configure" option.<br />
</pre><br />
<br />
{{Box|Nota|Se sul nostro sistema non c'è un MTA configurato per mandare email e non abbiamo inserito il nome di un host smtp è comunque possibile inviare le segnalazioni di bug dato che reportbug verrà configurato per utilizzare l'host smtp di Debian}}<br />
<br />
A questo punto le impostazioni sono state scritte nel file <code>.reportbugrc</code>.<br />
<br />
'''/home/pmate/.reportbugrc''':<br />
<pre><br />
# reportbug preferences file<br />
# character encoding: UTF-8<br />
# Version of reportbug this preferences file was written by<br />
reportbug_version "4.10.2"<br />
# default operating mode: one of: novice, standard, advanced, expert<br />
mode novice<br />
# default user interface<br />
ui text<br />
# offline setting - comment out to be online<br />
offline<br />
# name and email setting (if non-default)<br />
realname "pmate"<br />
email "pmate@debian.mine"<br />
# Disable fallback mode by commenting out the following:<br />
no-cc<br />
header "X-Debbugs-CC: pmate@debian.mine"<br />
smtphost reportbug.debian.org<br />
# You can add other settings after this line. See<br />
# /etc/reportbug.conf for a full listing of options.<br />
</pre><br />
<br />
Sarà sempre possibile riavviare la medesima procedura di configurazione passando a reportbug il parametro "--configure":<br />
<pre><br />
$ reportbug --configure<br />
</pre><br />
<br />
=== Integrazione con Gmail ===<br />
Potete usare il vostro account Gmail per inviare la vosta segnalazione del bug usando direttamente reportbug; dovrete aggiungere al file di configurazione <code>.reportbugrc</code> le seguenti linee:<br />
<pre><br />
smtpuser <ilvostroutente>@gmail.com<br />
smtppasswd <lavostrapassword><br />
smtptls<br />
</pre><br />
<br />
=== Firma GPG/Mime ===<br />
Se avete una chiave [[GPG]] potete firmare la vostra email aggiungendo le linee:<br />
<pre><br />
sign gpg<br />
keyid <vostraGPG/PGPkeyid><br />
</pre><br />
<br />
== La segnalazione ==<br />
Si simulerà la simulazione di un bug riscontrato in <code>xterm</code> e i passaggi necessari per inviarlo correttamente al bug tracking system.<br />
<br />
Per prima cosa dobbiamo individuare il [[pacchetto]] responsabile, con [[dpkg]] per esempio:<br />
<pre>$ dpkg --search $(which xterm)<br />
xterm: /usr/bin/xterm</pre><br />
<br />
In questo caso si tratta dell'omonimo ''xterm''. Si fosse trattato di un file di configurazione, sarebbe bastato riportare il percorso assoluto per individuare il pacchetto, per esempio:<br />
<pre>$ dpkg --search /etc/...</pre><br />
<br />
Controlliamo con <code>querybts</code> i bug già individuati nel pacchetto ''xterm'':<br />
<pre><br />
$ querybts xterm<br />
</pre><br />
È possibile premere <code>?</code> per informazioni sulle opzioni disponibili (come filtrare i bug con una ricerca o mostrare la pagina successiva), o digitare il numero del bug (sia la forma progressiva #NNNN che la posizione occupata nella lista dei risultati attuali) per visualizzare direttamente quello.<br />
<br />
Una volta controllato che si tratta di un nuovo bug, avviamo <code>reportbug</code>:<br />
<pre><br />
$ reportbug<br />
Please enter the name of the package in which you have found a problem, or type 'other' to report a<br />
more general problem.<br />
> xterm<br />
</pre><br />
La prima domanda che ci verrà posta è assolutamente scontata: il nome del pacchetto nel quale è stato riscontrato il problema.<br />
<pre><br />
*** Welcome to reportbug. Use ? for help at prompts. ***<br />
Detected character set: UTF-8<br />
Please change your locale if this is incorrect.<br />
<br />
Using 'pmate <pmate@debian.mine>' as your from address.<br />
Getting status for xterm...<br />
Maintainer for xterm is 'Debian X Strike Force <debian-x@lists.debian.org>'.<br />
Looking up dependencies of xterm...<br />
<br />
Please briefly describe your problem (max. 100 characters allowed; you can elaborate in a moment; an<br />
empty response will stop reportbug). This will be the bug email subject, so write a concise summary of<br />
what is wrong with the package, for example, "fails to send email" or "does not start with -q option<br />
specified" (enter Ctrl+c to exit).<br />
> xterm CPU usage >50%<br />
</pre><br />
<br />
Si dovrà poi inserire una breve descrizione del problema riscontrato.<br />
Si raccomanda di scriverlo in forma concisa visto che costituirà il subject del messaggio che verrà inviato al Bug Tracking System.<br />
<pre><br />
How would you rate the severity of this problem or report?<br />
<br />
1 critical makes unrelated software on the system (or the whole system) break, or causes serious<br />
data loss, or introduces a security hole on systems where you install the package.<br />
2 grave makes the package in question unusable by most or all users, or causes data loss, or<br />
introduces a security hole allowing access to the accounts of users who use the<br />
package.<br />
3 serious is a severe violation of Debian policy (that is, the problem is a violation of a<br />
'must' or 'required' directive); may or may not affect the usability of the package.<br />
Note that non-severe policy violations may be 'normal,' 'minor,' or 'wishlist' bugs.<br />
(Package maintainers may also designate other bugs as 'serious' and thus release-<br />
critical; however, end users should not do so.)<br />
4 important a bug which has a major effect on the usability of a package, without rendering it<br />
completely unusable to everyone.<br />
5 does-not-build a bug that stops the package from being built from source. (This is a 'virtual<br />
severity'.)<br />
6 normal a bug that does not undermine the usability of the whole package; for example, a<br />
problem with a particular option or menu item.<br />
7 minor things like spelling mistakes and other minor cosmetic errors that do not affect the<br />
core functionality of the package.<br />
8 wishlist suggestions and requests for new features.<br />
<br />
Please select a severity level: [normal] 4<br />
Spawning sensible-editor...<br />
</pre><br />
Ora viene il momento di assegnare un "voto" alla gravità del problema, ossia di decidere quale livello di [[severità]] assegnare al [[bug]].<br />
<br />
Fatto questo, in automatico si aprirà l'[[Impostare l'editor predefinito della shell|editor]] di testo predefinito e verrà visualizzata la bozza del messaggio che si invierà al BTS.<br />
Si dovrà editare sotto la riga che recita:<br />
<pre><br />
*** Please type your report below this line ***<br />
</pre><br />
inserendo una descrizione dettagliata del problema riscontrato.<br />
Ad esempio:<br />
<pre><br />
*** Please type your report below this line ***<br />
when starting up xterm is using >50% of CPU whilst idling causes slow performance and responsiveness in system.<br />
<br />
I have an Intel i915 graphics card.<br />
<br />
Thanks<br />
<br />
pmate<br />
</pre><br />
Inserita la descrizione, si dovrà salvare ed uscire dall'editor.<br />
<br />
Reportbug porrà l'ultima domanda:<br />
<pre><br />
Report will be sent to "Debian Bug Tracking System" <submit@bugs.debian.org><br />
Submit this report on xterm (e to edit) [Y|n|a|c|e|i|l|m|p|q|d|t|s|?]? n<br />
</pre><br />
Rispondendo Y il report del bug verrà inviato.<br />
Stoppando invece l'operazione:<br />
<pre><br />
reportbug stopped; your incomplete report is stored as "/tmp/reportbug-xterm-20100220-25271-NPlCvG".<br />
This file may be located in a temporary directory; if so, it might disappear without any further<br />
notice. To recover this file to use it as bug report body, please take a look at the "-i FILE,<br />
--include=FILE" option. Alternatively, you can copy the content of the temporary file (both headers and<br />
body) and copy it into your MUA and send the mail to submit@bugs.debian.org, editing the subject and<br />
bug text as needed (but not altering the other information).<br />
</pre><br />
verremo informati che il report è stato creato e conservato nel file temporaneo ''/tmp/reportbug-xterm-20100220-25271-NPlCvG''. Sarà possibile allora copiarne il contenuto ed incollarlo nel gestore di posta preferito e inviare la segnalazione<br />
all'indirizzo: submit@bugs.debian.org.<br />
<br />
Questo il contenuto del file temporaneo generato dall'esempio su proposto:<br />
<pre><br />
Subject: xterm CPU usage >50%<br />
Package: xterm<br />
Version: 253-1<br />
Severity: important<br />
<br />
*** Please type your report below this line ***<br />
when starting up xterm is using >50% of CPU whilst idling causes slow performance and responsiveness in system.<br />
<br />
I have an Intel i915 graphics card.<br />
<br />
Thanks<br />
<br />
pmate<br />
<br />
-- System Information:<br />
Debian Release: squeeze/sid<br />
APT prefers unstable<br />
APT policy: (500, 'unstable'), (1, 'experimental')<br />
Architecture: i386 (i686)<br />
<br />
Kernel: Linux 2.6.31-1-686-bigmem (SMP w/2 CPU cores)<br />
Locale: LANG=it_IT.UTF-8, LC_CTYPE=it_IT.UTF-8 (charmap=UTF-8)<br />
Shell: /bin/sh linked to /bin/dash<br />
<br />
Versions of packages xterm depends on:<br />
ii libc6 2.10.2-5 Embedded GNU C Library: Shared lib<br />
ii libfontconfig1 2.8.0-2 generic font configuration library<br />
ii libice6 2:1.0.6-1 X11 Inter-Client Exchange library<br />
ii libncurses5 5.7+20090803-2 shared libraries for terminal hand<br />
ii libutempter0 1.1.5-2 A privileged helper for utmp/wtmp <br />
ii libx11-6 2:1.3.3-1 X11 client-side library<br />
ii libxaw7 2:1.0.7-1 X11 Athena Widget library<br />
ii libxft2 2.1.14-1 FreeType-based font drawing librar<br />
ii libxmu6 2:1.0.5-1 X11 miscellaneous utility library<br />
ii libxt6 1:1.0.7-1 X11 toolkit intrinsics library<br />
ii xbitmaps 1.1.0-1 Base X bitmaps<br />
<br />
Versions of packages xterm recommends:<br />
ii x11-utils 7.5+2 X11 utilities<br />
ii xutils 1:7.5+3 X Window System utility programs m<br />
<br />
Versions of packages xterm suggests:<br />
pn xfonts-cyrillic <none> (no description available)<br />
<br />
-- no debconf information<br />
</pre><br />
Nel caso sia necessario inserire l'output di uno o più comandi per una dettagliata descrizione del bug, tener presente che i messaggi devono essere inseriti in lingua inglese; questo consentirà a chiunque di poterli comprendere e, quindi, di essere maggiormente utile alla risoluzione del problema. Per poter visualizzare i messaggi in inglese si può impostare temporaneamente la variabile "LANG":<br />
<pre>$ LANG=C nomecomando</pre><br />
oppure:<br />
<pre>$ LANG=C.UTF-8 nomecomando</pre><br />
dopo essersi accertati, con il comando "locale -a", che il locale scelto sia disponibile.<br />
<br />
== Conclusioni ==<br />
Come si è visto la segnalazione di un bug non è un'operazione particolarmente complessa ed è alla portata di tutti.<br/><br />
Basta solo cercare di compierla in maniera corretta avendo cura di:<br />
* accertarsi che si tratti di un vero problema e non di una feature prevista;<br />
* verificare che non esista una segnalazione identica (si duplicherebbe inutilmente il lavoro di chi riceve i report);<br />
* scrivere oggetto e descrizione in maniera chiara e... in inglese...!<br />
<br />
Questo piccolo sforzo, come detto all'inizio, permette a chi sviluppa di ricevere feedback concreti sul funzionamento del software, di fixare i problemi in tempi rapidi e quindi di far sì che la nostra distribuzione diventi più stabile, sicura e performante.<br />
<br />
Happy bug reporting!<br />
<br />
== Collegamenti esterni ==<br />
* [http://raphaelhertzog.com/2011/07/11/7-tips-to-file-useful-debian-bug-reports-and-get-your-problem-solved/ 7 trucchi per inviare bug report utili per Debian e vedere risolti i tuoi problemi] (in inglese)<br />
<br />
{{Autori<br />
| Autore = [[Utente:Pmate|pmate]] 20:59, 20 feb 2010 (CET)<br />
| Verificata_da =<br />
:[[Utente:Stemby|Stemby]]<br />
:[[Utente:S3v|S3v]] 20:42, 19 ott 2013 (CEST)<br />
: [[Utente:HAL 9000|HAL 9000]] 14:23, 20 apr 2015 (CEST)<br />
: [[Utente:Ombra|Ombra]] 20:23, 16 mag 2015 (CEST)<br />
| Estesa_da =<br />
: [[Utente:HAL 9000|HAL 9000]]<br />
| Numero_revisori = 4<br />
}}<br />
<br />
[[Categoria:Programmi da terminale]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38164Patch Con Kolivas: incrementare le prestazioni desktop2015-04-28T20:02:43Z<p>Ombra: </p>
<hr />
<div>{{Versioni compatibili|Jessie|Stretch|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens] <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; 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<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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''.<br />
<br />
; 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.<br />
<br />
== Installazione ==<br />
<br />
{{Box|Nota|per una migliore comprensione delle procedure che seguono, fate rifermineto la guida sul [[Debian Kernel Howto|kernel alla debian-way]]}}<br />
<br />
Prima di procedere è necessario installare alcuni pacchetti:<br />
<pre> # apt-get install module-init-tools kernel-package libncurses5-dev fakeroot lrzip schedtool time </pre><br />
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.<br />
<br />
La patch <code>-ck</code> più recente può essere scaricata dal sito di Con Kolivas, al seguente indirizzo:<br />
* http://users.on.net/~ckolivas/kernel/<br />
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 [http://ck.kolivas.org/patches/ qui], mentre i sorgenti da patchare dovrete cercarli tra gli archivi di [http://www.kernel.org/pub/linux/kernel/ kernel.org].<br />
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.<br />
<br />
Spostate i due archivi appena scaricati in una directory nella nostra home, ad esempio in <code>~/src/</code> e scompattate i sorgenti<br />
<br />
<pre>$ cd ~/src/<br />
$ tar -xvf linux-4.0.tar.xz</pre><br />
<br />
Una volta scompattati i sorgenti possiamo applicare la patch con:<br />
<br />
<pre>$ cd linux-4.0<br />
$ lrzcat ../patch-4.0-ck1.lrz | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd ../<br />
$ mv linux-4.0 linux-4.0-ck1</pre><br />
<br />
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<br />
<br />
<pre> $ cd linux-4.0-ck1<br />
$ cp /boot/config-3.16.0-4-amd64 .config<br />
$ make oldconfig </pre><br />
<br />
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.<br />
Se siete interessati [http://ck.kolivas.org/patches/bfs/bfs-configuration-faq.txt qui] trovate alcuni suggerimenti per configurazioni da abbinare al BFS, a seconda del tipo di computer e dell'uso che si intende farne.<br />
<br />
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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -bfs --revision 1 --initrd kernel_image</pre><br />
<br />
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>.<br />
<br />
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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -bfs --revision 1 --initrd kernel_image</pre><br />
<br />
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>.<br />
<br />
Una volta terminanta la compilazione sarà sufficiente acquisire i privilegi di root e installare il nuovo kernel con dpkg:<br />
<br />
<pre>$ cd ../<br />
# dpkg -i linux-image-4.0.0-ck1-bfs_1_amd64.deb</pre><br />
<br />
== Utilizzo e Tuning ==<br />
<br />
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/><br />
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>; <br />
<br />
per lanciare un programma con priorità Idleprio si utilizza un comando del tipo<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade</pre><br />
<br />
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. <br />
Invece il comando che segue trasforma la shell corrente in SCHED_ISO<br />
<br />
<pre>$ schedtool -I $$ </pre><br />
<br />
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<br />
<br />
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre><br />
<br />
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).<br />
<br />
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un<br />
<br />
<pre>$ schedtool -I -e amarok</pre><br />
<br />
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 <br />
processo soft-realtime. <br/> <br />
Per modificare il limite, ad esempio portarlo a 85, basta un<br />
<br />
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre><br />
<br />
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<br />
<br />
<pre> # schedtool -N `pidof amarok` </pre><br />
<br />
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. <br />
<br />
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://users.on.net/~ckolivas/ Homepage di Con Kolivas]<br />
* [http://ck-hack.blogspot.com/ notizie sugli ultimi hack di C.K.]<br />
* [http://ck.wikia.com/wiki/BFS_FAQ BFS FAQ]<br />
* [http://apcmag.com/why_i_quit_kernel_developer_con_kolivas.htm Con Kolivas: Why i quit]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
<br />
{{Autori<br />
|Autore= [[Utente:Ombra|Ombra]] 19:03, 26 apr 2015 (CEST) <br/><br />
(guida originariamente scritta da [[Utente:TheNoise|The Noise]])<br />
|Verificata_da=<br />
|Estesa_da=<br />
|Numero_revisori=0<br />
}}<br />
<br />
[[Categoria:Kernel]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38163Patch Con Kolivas: incrementare le prestazioni desktop2015-04-28T19:48:33Z<p>Ombra: /* Installazione */</p>
<hr />
<div>{{Guida da adottare|[[Utente:Ombra|Ombra]]}}<br />
{{Stub}}<br />
<br />
{{Versioni compatibili|Jessie|Testing|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens] <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; 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<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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''.<br />
<br />
; 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.<br />
<br />
== Installazione ==<br />
<br />
{{Box|Nota|per una migliore comprensione delle procedure che seguono, fate rifermineto la guida sul [[Debian Kernel Howto|kernel alla debian-way]]}}<br />
<br />
Prima di procedere è necessario installare alcuni pacchetti:<br />
<pre> # apt-get install module-init-tools kernel-package libncurses5-dev fakeroot lrzip schedtool time </pre><br />
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.<br />
<br />
La patch <code>-ck</code> più recente può essere scaricata dal sito di Con Kolivas, al seguente indirizzo:<br />
* http://users.on.net/~ckolivas/kernel/<br />
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 [http://ck.kolivas.org/patches/ qui], mentre i sorgenti da patchare dovrete cercarli tra gli archivi di [http://www.kernel.org/pub/linux/kernel/ kernel.org].<br />
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.<br />
<br />
Spostate i due archivi appena scaricati in una directory nella nostra home, ad esempio in <code>~/src/</code> e scompattate i sorgenti<br />
<br />
<pre>$ cd ~/src/<br />
$ tar -xvf linux-4.0.tar.xz</pre><br />
<br />
Una volta scompattati i sorgenti possiamo applicare la patch con:<br />
<br />
<pre>$ cd linux-4.0<br />
$ lrzcat ../patch-4.0-ck1.lrz | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd ../<br />
$ mv linux-4.0 linux-4.0-ck1</pre><br />
<br />
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<br />
<br />
<pre> $ cd linux-4.0-ck1<br />
$ cp /boot/config-3.16.0-4-amd64 .config<br />
$ make oldconfig </pre><br />
<br />
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.<br />
Se siete interessati [http://ck.kolivas.org/patches/bfs/bfs-configuration-faq.txt qui] trovate alcuni suggerimenti per configurazioni da abbinare al BFS, a seconda del tipo di computer e dell'uso che si intende farne.<br />
<br />
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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -bfs --revision 1 --initrd kernel_image</pre><br />
<br />
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>.<br />
<br />
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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -bfs --revision 1 --initrd kernel_image</pre><br />
<br />
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>.<br />
<br />
Una volta terminanta la compilazione sarà sufficiente acquisire i privilegi di root e installare il nuovo kernel con dpkg:<br />
<br />
<pre>$ cd ../<br />
# dpkg -i linux-image-4.0.0-ck1-bfs_1_amd64.deb</pre><br />
<br />
== Utilizzo e Tuning ==<br />
<br />
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/><br />
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>; <br />
<br />
per lanciare un programma con priorità Idleprio si utilizza un comando del tipo<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade</pre><br />
<br />
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. <br />
Invece il comando che segue trasforma la shell corrente in SCHED_ISO<br />
<br />
<pre>$ schedtool -I $$ </pre><br />
<br />
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<br />
<br />
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre><br />
<br />
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).<br />
<br />
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un<br />
<br />
<pre>$ schedtool -I -e amarok</pre><br />
<br />
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 <br />
processo soft-realtime. <br/> <br />
Per modificare il limite, ad esempio portarlo a 85, basta un<br />
<br />
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre><br />
<br />
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<br />
<br />
<pre> # schedtool -N `pidof amarok` </pre><br />
<br />
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. <br />
<br />
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://users.on.net/~ckolivas/ Homepage di Con Kolivas]<br />
* [http://ck-hack.blogspot.com/ notizie sugli ultimi hack di C.K.]<br />
* [http://ck.kolivas.org/patches/bfs/bfs-faq.txt BFS FAQ]<br />
* [http://apcmag.com/why_i_quit_kernel_developer_con_kolivas.htm Con Kolivas: Why i quit]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore= [[Utente:Ombra|Ombra]] 19:03, 26 apr 2015 (CEST) <br/><br />
(guida originariamente scritta da [[Utente:TheNoise|The Noise]])<br />
|Verificata_da=<br />
|Estesa_da=<br />
|Numero_revisori=0<br />
}}<br />
<br />
[[Categoria:Kernel]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38127Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T17:52:12Z<p>Ombra: </p>
<hr />
<div>{{Guida da adottare|[[Utente:Ombra|Ombra]]}}<br />
{{Stub}}<br />
<br />
{{Versioni compatibili|Jessie|Testing|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens] <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; 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<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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''.<br />
<br />
; 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.<br />
<br />
== Installazione ==<br />
<br />
{{Box|Nota|per una migliore comprensione delle procedure che seguono, fate rifermineto la guida sul [[Debian Kernel Howto|kernel alla debian-way]]}}<br />
<br />
Prima di procedere è necessario installare alcuni pacchetti:<br />
<pre> # apt-get install module-init-tools kernel-package libncurses5-dev fakeroot lrzip schedtool time </pre><br />
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.<br />
<br />
La patch <code>-ck</code> più recente può essere scaricata dal sito di Con Kolivas, al seguente indirizzo:<br />
* http://users.on.net/~ckolivas/kernel/<br />
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 [http://ck.kolivas.org/patches/ qui], mentre i sorgenti da patchare dovrete cercarli tra gli archivi di [http://www.kernel.org/pub/linux/kernel/ kernel.org].<br />
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.<br />
<br />
Spostate i due archivi appena scaricati in una directory nella nostra home, ad esempio in <code>~/src/</code> e scompattate i sorgenti<br />
<br />
<pre>$ cd ~/src/<br />
$ tar -xvf linux-4.0.tar.xz</pre><br />
<br />
Una volta scompattati i sorgenti possiamo applicare la patch con:<br />
<br />
<pre>$ cd linux-4.0<br />
$ lrzcat ../patch-4.0-ck1.lrz | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd ../<br />
$ mv linux-4.0 linux-4.0-ck1</pre><br />
<br />
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<br />
<br />
<pre> $ cd linux-4.0-ck1<br />
$ cp /boot/config-3.16.0-4-amd64 .config<br />
$ make oldconfig </pre><br />
<br />
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.<br />
Se siete interessati [http://ck.kolivas.org/patches/bfs/bfs-configuration-faq.txt qui] trovate alcuni suggerimenti per configurazioni da abbinare al BFS, a seconda del tipo di computer e dell'uso che si intende farne.<br />
<br />
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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Una volta terminanta la compilazione sarà sufficiente acquisire i privilegi di root e installare il nuovo kernel con dpkg:<br />
<br />
<pre>$ cd ../<br />
# dpkg -i linux-image-4.0.0-ck1-bfs_1_amd64.deb</pre><br />
<br />
== Utilizzo e Tuning ==<br />
<br />
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/><br />
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>; <br />
<br />
per lanciare un programma con priorità Idleprio si utilizza un comando del tipo<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade</pre><br />
<br />
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. <br />
Invece il comando che segue trasforma la shell corrente in SCHED_ISO<br />
<br />
<pre>$ schedtool -I $$ </pre><br />
<br />
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<br />
<br />
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre><br />
<br />
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).<br />
<br />
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un<br />
<br />
<pre>$ schedtool -I -e amarok</pre><br />
<br />
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 <br />
processo soft-realtime. <br/> <br />
Per modificare il limite, ad esempio portarlo a 85, basta un<br />
<br />
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre><br />
<br />
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<br />
<br />
<pre> # schedtool -N `pidof amarok` </pre><br />
<br />
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. <br />
<br />
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://users.on.net/~ckolivas/ Homepage di Con Kolivas]<br />
* [http://ck-hack.blogspot.com/ notizie sugli ultimi hack di C.K.]<br />
* [http://ck.kolivas.org/patches/bfs/bfs-faq.txt BFS FAQ]<br />
* [http://apcmag.com/why_i_quit_kernel_developer_con_kolivas.htm Con Kolivas: Why i quit]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore= [[Utente:Ombra|Ombra]] 19:03, 26 apr 2015 (CEST) <br/><br />
(guida originariamente scritta da [[Utente:TheNoise|The Noise]])<br />
|Verificata_da=<br />
|Estesa_da=<br />
|Numero_revisori=0<br />
}}<br />
<br />
[[Categoria:Kernel]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38126Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T17:31:56Z<p>Ombra: </p>
<hr />
<div>{{Guida da adottare|[[Utente:Ombra|Ombra]]}}<br />
{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens] <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; 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<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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''.<br />
<br />
; 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.<br />
<br />
== Installazione ==<br />
<br />
{{Box|Nota|per una migliore comprensione delle procedure che seguono, fate rifermineto la guida sul [[Debian Kernel Howto|kernel alla debian-way]]}}<br />
<br />
Prima di procedere è necessario installare alcuni pacchetti:<br />
<pre> # apt-get install module-init-tools kernel-package libncurses5-dev fakeroot lrzip schedtool time </pre><br />
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.<br />
<br />
La patch <code>-ck</code> più recente può essere scaricata dal sito di Con Kolivas, al seguente indirizzo:<br />
* http://users.on.net/~ckolivas/kernel/<br />
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 [http://ck.kolivas.org/patches/ qui], mentre i sorgenti da patchare dovrete cercarli tra gli archivi di [http://www.kernel.org/pub/linux/kernel/ kernel.org].<br />
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.<br />
<br />
Spostate i due archivi appena scaricati in una directory nella nostra home, ad esempio in <code>~/src/</code> e scompattate i sorgenti<br />
<br />
<pre>$ cd ~/src/<br />
$ tar -xvf linux-4.0.tar.xz</pre><br />
<br />
Una volta scompattati i sorgenti possiamo applicare la patch con:<br />
<br />
<pre>$ cd linux-4.0<br />
$ lrzcat ../patch-4.0-ck1.lrz | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd ../<br />
$ mv linux-4.0 linux-4.0-ck1</pre><br />
<br />
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<br />
<br />
<pre> $ cd linux-4.0-ck1<br />
$ cp /boot/config-3.16.0-4-amd64 .config<br />
$ make oldconfig </pre><br />
<br />
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.<br />
Se siete interessati [http://ck.kolivas.org/patches/bfs/bfs-configuration-faq.txt qui] trovate alcuni suggerimenti per configurazioni da abbinare al BFS, a seconda del tipo di computer e dell'uso che si intende farne.<br />
<br />
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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Una volta terminanta la compilazione sarà sufficiente acquisire i privilegi di root e installare il nuovo kernel con dpkg:<br />
<br />
<pre>$ cd ../<br />
# dpkg -i linux-image-4.0.0-ck1-bfs_1_amd64.deb</pre><br />
<br />
== Utilizzo e Tuning ==<br />
<br />
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/><br />
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>; <br />
<br />
per lanciare un programma con priorità Idleprio si utilizza un comando del tipo<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade</pre><br />
<br />
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. <br />
Invece il comando che segue trasforma la shell corrente in SCHED_ISO<br />
<br />
<pre>$ schedtool -I $$ </pre><br />
<br />
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<br />
<br />
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre><br />
<br />
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).<br />
<br />
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un<br />
<br />
<pre>$ schedtool -I -e amarok</pre><br />
<br />
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 <br />
processo soft-realtime. <br/> <br />
Per modificare il limite, ad esempio portarlo a 85, basta un<br />
<br />
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre><br />
<br />
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<br />
<br />
<pre> # schedtool -N `pidof amarok` </pre><br />
<br />
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. <br />
<br />
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://users.on.net/~ckolivas/ Homepage di Con Kolivas]<br />
* [http://ck-hack.blogspot.com/ notizie sugli ultimi hack di C.K.]<br />
* [http://ck.kolivas.org/patches/bfs/bfs-faq.txt BFS FAQ]<br />
* [http://apcmag.com/why_i_quit_kernel_developer_con_kolivas.htm Con Kolivas: Why i quit]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore= [[Utente:Ombra|Ombra]] 19:03, 26 apr 2015 (CEST) <br/><br />
(guida originariamente scritta da [[Utente:TheNoise|The Noise]])<br />
|Verificata_da=<br />
|Estesa_da=<br />
|Numero_revisori=0<br />
}}<br />
<br />
[[Categoria:Kernel]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38125Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T17:03:53Z<p>Ombra: /* Links */</p>
<hr />
<div>{{Guida da adottare|[[Utente:Ombra|Ombra]]}}<br />
{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens] <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; 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<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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''.<br />
<br />
; 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.<br />
<br />
== Installazione ==<br />
<br />
{{Box|Nota|per una migliore comprensione delle procedure che seguono, fate rifermineto la guida sul [[Debian Kernel Howto|kernel alla debian-way]]}}<br />
<br />
Prima di procedere è necessario installare alcuni pacchetti:<br />
<pre> # apt-get install module-init-tools kernel-package libncurses5-dev fakeroot lrzip schedtool time </pre><br />
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.<br />
<br />
La patch <code>-ck</code> più recente può essere scaricata dal sito di Con Kolivas, al seguente indirizzo:<br />
* http://users.on.net/~ckolivas/kernel/<br />
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 [http://ck.kolivas.org/patches/ qui], mentre i sorgenti da patchare dovrete cercarli tra gli archivi di [http://www.kernel.org/pub/linux/kernel/ kernel.org].<br />
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.<br />
<br />
Spostate i due archivi appena scaricati in una directory nella nostra home, ad esempio in <code>~/src/</code> e scompattate i sorgenti<br />
<br />
<pre>$ cd ~/src/<br />
$ tar -xvf linux-4.0.tar.xz</pre><br />
<br />
Una volta scompattati i sorgenti possiamo applicare la patch con:<br />
<br />
<pre>$ cd linux-4.0<br />
$ lrzcat ../patch-4.0-ck1.lrz | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd ../<br />
$ mv linux-4.0 linux-4.0-ck1</pre><br />
<br />
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<br />
<br />
<pre> $ cd linux-4.0-ck1<br />
$ cp /boot/config-3.16.0-4-amd64 .<br />
$ make oldconfig </pre><br />
<br />
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.<br />
Se siete interessati [http://ck.kolivas.org/patches/bfs/bfs-configuration-faq.txt qui] trovate alcuni suggerimenti per configurazioni da abbinare al BFS, a seconda del tipo di computer e dell'uso che si intende farne.<br />
<br />
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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Una volta terminanta la compilazione sarà sufficiente acquisire i privilegi di root e installare il nuovo kernel con dpkg:<br />
<br />
<pre>$ cd ../<br />
# dpkg -i linux-image-4.0.0-ck1-bfs_1_amd64.deb</pre><br />
<br />
== Utilizzo e Tuning ==<br />
<br />
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/><br />
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>; <br />
<br />
per lanciare un programma con priorità Idleprio si utilizza un comando del tipo<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade</pre><br />
<br />
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. <br />
Invece il comando che segue trasforma la shell corrente in SCHED_ISO<br />
<br />
<pre>$ schedtool -I $$ </pre><br />
<br />
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<br />
<br />
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre><br />
<br />
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).<br />
<br />
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un<br />
<br />
<pre>$ schedtool -I -e amarok</pre><br />
<br />
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 <br />
processo soft-realtime. <br/> <br />
Per modificare il limite, ad esempio portarlo a 85, basta un<br />
<br />
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre><br />
<br />
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<br />
<br />
<pre> # schedtool -N `pidof amarok` </pre><br />
<br />
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. <br />
<br />
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://users.on.net/~ckolivas/ Homepage di Con Kolivas]<br />
* [http://ck-hack.blogspot.com/ notizie sugli ultimi hack di C.K.]<br />
* [http://ck.kolivas.org/patches/bfs/bfs-faq.txt BFS FAQ]<br />
* [http://apcmag.com/why_i_quit_kernel_developer_con_kolivas.htm Con Kolivas: Why i quit]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore= [[Utente:Ombra|Ombra]] 19:03, 26 apr 2015 (CEST) <br/><br />
(guida originariamente scritta da [[Utente:TheNoise|The Noise]])<br />
|Verificata_da=<br />
|Estesa_da=<br />
|Numero_revisori=0<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38124Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T16:43:53Z<p>Ombra: /* Utilizzo e Tuning */</p>
<hr />
<div>{{Guida da adottare|[[Utente:Ombra|Ombra]]}}<br />
{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens] <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; 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<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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''.<br />
<br />
; 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.<br />
<br />
== Installazione ==<br />
<br />
{{Box|Nota|per una migliore comprensione delle procedure che seguono, fate rifermineto la guida sul [[Debian Kernel Howto|kernel alla debian-way]]}}<br />
<br />
Prima di procedere è necessario installare alcuni pacchetti:<br />
<pre> # apt-get install module-init-tools kernel-package libncurses5-dev fakeroot lrzip schedtool time </pre><br />
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.<br />
<br />
La patch <code>-ck</code> più recente può essere scaricata dal sito di Con Kolivas, al seguente indirizzo:<br />
* http://users.on.net/~ckolivas/kernel/<br />
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 [http://ck.kolivas.org/patches/ qui], mentre i sorgenti da patchare dovrete cercarli tra gli archivi di [http://www.kernel.org/pub/linux/kernel/ kernel.org].<br />
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.<br />
<br />
Spostate i due archivi appena scaricati in una directory nella nostra home, ad esempio in <code>~/src/</code> e scompattate i sorgenti<br />
<br />
<pre>$ cd ~/src/<br />
$ tar -xvf linux-4.0.tar.xz</pre><br />
<br />
Una volta scompattati i sorgenti possiamo applicare la patch con:<br />
<br />
<pre>$ cd linux-4.0<br />
$ lrzcat ../patch-4.0-ck1.lrz | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd ../<br />
$ mv linux-4.0 linux-4.0-ck1</pre><br />
<br />
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<br />
<br />
<pre> $ cd linux-4.0-ck1<br />
$ cp /boot/config-3.16.0-4-amd64 .<br />
$ make oldconfig </pre><br />
<br />
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.<br />
Se siete interessati [http://ck.kolivas.org/patches/bfs/bfs-configuration-faq.txt qui] trovate alcuni suggerimenti per configurazioni da abbinare al BFS, a seconda del tipo di computer e dell'uso che si intende farne.<br />
<br />
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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Una volta terminanta la compilazione sarà sufficiente acquisire i privilegi di root e installare il nuovo kernel con dpkg:<br />
<br />
<pre>$ cd ../<br />
# dpkg -i linux-image-4.0.0-ck1-bfs_1_amd64.deb</pre><br />
<br />
== Utilizzo e Tuning ==<br />
<br />
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/><br />
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>; <br />
<br />
per lanciare un programma con priorità Idleprio si utilizza un comando del tipo<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade</pre><br />
<br />
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. <br />
Invece il comando che segue trasforma la shell corrente in SCHED_ISO<br />
<br />
<pre>$ schedtool -I $$ </pre><br />
<br />
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<br />
<br />
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre><br />
<br />
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).<br />
<br />
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un<br />
<br />
<pre>$ schedtool -I -e amarok</pre><br />
<br />
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 <br />
processo soft-realtime. <br/> <br />
Per modificare il limite, ad esempio portarlo a 85, basta un<br />
<br />
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre><br />
<br />
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<br />
<br />
<pre> # schedtool -N `pidof amarok` </pre><br />
<br />
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. <br />
<br />
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]<br />
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]<br />
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore= [[Utente:Ombra|Ombra]]<br/><br />
(guida originariamente scritta da [[Utente:TheNoise|The Noise]])<br />
|Verificata_da=<br />
|Estesa_da=<br />
|Numero_revisori=0<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38123Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T16:42:22Z<p>Ombra: /* Installazione */</p>
<hr />
<div>{{Guida da adottare|[[Utente:Ombra|Ombra]]}}<br />
{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens] <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; 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<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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''.<br />
<br />
; 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.<br />
<br />
== Installazione ==<br />
<br />
{{Box|Nota|per una migliore comprensione delle procedure che seguono, fate rifermineto la guida sul [[Debian Kernel Howto|kernel alla debian-way]]}}<br />
<br />
Prima di procedere è necessario installare alcuni pacchetti:<br />
<pre> # apt-get install module-init-tools kernel-package libncurses5-dev fakeroot lrzip schedtool time </pre><br />
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.<br />
<br />
La patch <code>-ck</code> più recente può essere scaricata dal sito di Con Kolivas, al seguente indirizzo:<br />
* http://users.on.net/~ckolivas/kernel/<br />
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 [http://ck.kolivas.org/patches/ qui], mentre i sorgenti da patchare dovrete cercarli tra gli archivi di [http://www.kernel.org/pub/linux/kernel/ kernel.org].<br />
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.<br />
<br />
Spostate i due archivi appena scaricati in una directory nella nostra home, ad esempio in <code>~/src/</code> e scompattate i sorgenti<br />
<br />
<pre>$ cd ~/src/<br />
$ tar -xvf linux-4.0.tar.xz</pre><br />
<br />
Una volta scompattati i sorgenti possiamo applicare la patch con:<br />
<br />
<pre>$ cd linux-4.0<br />
$ lrzcat ../patch-4.0-ck1.lrz | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd ../<br />
$ mv linux-4.0 linux-4.0-ck1</pre><br />
<br />
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<br />
<br />
<pre> $ cd linux-4.0-ck1<br />
$ cp /boot/config-3.16.0-4-amd64 .<br />
$ make oldconfig </pre><br />
<br />
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.<br />
Se siete interessati [http://ck.kolivas.org/patches/bfs/bfs-configuration-faq.txt qui] trovate alcuni suggerimenti per configurazioni da abbinare al BFS, a seconda del tipo di computer e dell'uso che si intende farne.<br />
<br />
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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Una volta terminanta la compilazione sarà sufficiente acquisire i privilegi di root e installare il nuovo kernel con dpkg:<br />
<br />
<pre>$ cd ../<br />
# dpkg -i linux-image-4.0.0-ck1-bfs_1_amd64.deb</pre><br />
<br />
== Utilizzo e Tuning ==<br />
<br />
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/><br />
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>; inoltre se vogliamo misurare il carico della cpu e i tempi di esecuzione possiamo usare il programma <code>time</code> (opzionale). I pacchetti si trovano nei repository Debian per cui basterà dare un<br />
<br />
<pre># apt-get install schedtool time</pre><br />
<br />
A questo punto, per lanciare un programma con priorità Idleprio si utilizza un comando del tipo<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade</pre><br />
<br />
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. <br />
Invece il comando che segue trasforma la shell corrente in SCHED_ISO<br />
<br />
<pre>$ schedtool -I $$ </pre><br />
<br />
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<br />
<br />
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre><br />
<br />
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).<br />
<br />
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un<br />
<br />
<pre>$ schedtool -I -e amarok</pre><br />
<br />
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 <br />
processo soft-realtime. <br/> <br />
Per modificare il limite, ad esempio portarlo a 85, basta un<br />
<br />
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre><br />
<br />
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<br />
<br />
<pre> # schedtool -N `pidof amarok` </pre><br />
<br />
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. <br />
<br />
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.<br />
<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]<br />
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]<br />
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore= [[Utente:Ombra|Ombra]]<br/><br />
(guida originariamente scritta da [[Utente:TheNoise|The Noise]])<br />
|Verificata_da=<br />
|Estesa_da=<br />
|Numero_revisori=0<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38122Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T15:05:07Z<p>Ombra: /* Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO */</p>
<hr />
<div>{{Guida da adottare|[[Utente:Ombra|Ombra]]}}<br />
{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens] <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; 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<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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''.<br />
<br />
; 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.<br />
<br />
== Installazione ==<br />
<br />
Le patch <code>-ck</code> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:<br />
<br />
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/<br />
<br />
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 <code>-ck</code> si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.6.16.4. <br />
<br />
Attualmente l'ultimo patch set <code>-ck</code> è 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 <code>/usr/src/</code> è il seguente:<br />
<br />
* [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]<br />
<br />
''Nel seguito si userà, come esempio, il kernel 2.6.16 e le patch <code>-ck5</code> per tale kernel.''<br />
<br />
Una volta scompattati i sorgenti del kernel vanilla in <code>/usr/src/</code> si possono patchare con:<br />
<br />
<pre>$ cd /usr/src/linux-2.6.16/<br />
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd /usr/src<br />
$ mv linux-2.6.16 linux-2.6.16-ck5</pre><br />
<br />
È consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:<br />
<br />
<pre> $ cd linux-2.6.16-ck5<br />
$ cp /boot/config-2.6.16-vanilla .<br />
$ make oldconfig </pre><br />
<br />
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.<br />
<br />
A questo punto è 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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Se non abbiamo un kernel <code>-ck</code>, 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 <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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Per saperne di più sulla compilazione del kernel e la ''Debian way'': [[Debian Kernel Howto]].<br />
<br />
== Utilizzo e Tuning ==<br />
<br />
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/><br />
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>; inoltre se vogliamo misurare il carico della cpu e i tempi di esecuzione possiamo usare il programma <code>time</code> (opzionale). I pacchetti si trovano nei repository Debian per cui basterà dare un<br />
<br />
<pre># apt-get install schedtool time</pre><br />
<br />
A questo punto, per lanciare un programma con priorità Idleprio si utilizza un comando del tipo<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade</pre><br />
<br />
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. <br />
Invece il comando che segue trasforma la shell corrente in SCHED_ISO<br />
<br />
<pre>$ schedtool -I $$ </pre><br />
<br />
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<br />
<br />
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre><br />
<br />
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).<br />
<br />
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un<br />
<br />
<pre>$ schedtool -I -e amarok</pre><br />
<br />
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 <br />
processo soft-realtime. <br/> <br />
Per modificare il limite, ad esempio portarlo a 85, basta un<br />
<br />
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre><br />
<br />
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<br />
<br />
<pre> # schedtool -N `pidof amarok` </pre><br />
<br />
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. <br />
<br />
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.<br />
<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]<br />
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]<br />
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore= [[Utente:Ombra|Ombra]]<br/><br />
(guida originariamente scritta da [[Utente:TheNoise|The Noise]])<br />
|Verificata_da=<br />
|Estesa_da=<br />
|Numero_revisori=0<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38112Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T09:53:47Z<p>Ombra: /* Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO */</p>
<hr />
<div>{{Guida da adottare|[[Utente:Ombra|Ombra]]}}<br />
{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens] <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; 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<br />
<br />
; 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.<br />
<br />
; 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 />
<br />
; 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. Per i 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à.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
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>. Il pacchetto è presente nei repository di Sid e Lenny.<br />
<br />
<pre># apt-get install schedtool</pre><br />
<br />
''(è indicato per <code>Sid</code> ma va benissimo anche per <code>Etch</code>)''<br />
<br />
Ecco alcuni esempi:<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade # aggiornare in modalità SCHED_IDLEPRIO<br />
<br />
# schedtool -I -e xmms # xmms in modalità SCHED_ISO<br />
<br />
# schedtool -I $$ # trasforma la shell corrente in SCHED_ISO</pre><br />
<br />
Per ulteriori informazioni rimando alla semplice e chiara pagina: <code>man schedtool</code><br />
<br />
== Installazione ==<br />
<br />
Le patch <code>-ck</code> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:<br />
<br />
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/<br />
<br />
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 <code>-ck</code> si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.6.16.4. <br />
<br />
Attualmente l'ultimo patch set <code>-ck</code> è 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 <code>/usr/src/</code> è il seguente:<br />
<br />
* [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]<br />
<br />
''Nel seguito si userà, come esempio, il kernel 2.6.16 e le patch <code>-ck5</code> per tale kernel.''<br />
<br />
Una volta scompattati i sorgenti del kernel vanilla in <code>/usr/src/</code> si possono patchare con:<br />
<br />
<pre>$ cd /usr/src/linux-2.6.16/<br />
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd /usr/src<br />
$ mv linux-2.6.16 linux-2.6.16-ck5</pre><br />
<br />
È consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:<br />
<br />
<pre> $ cd linux-2.6.16-ck5<br />
$ cp /boot/config-2.6.16-vanilla .<br />
$ make oldconfig </pre><br />
<br />
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.<br />
<br />
A questo punto è 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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Se non abbiamo un kernel <code>-ck</code>, 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 <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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Per saperne di più sulla compilazione del kernel e la ''Debian way'': [[Debian Kernel Howto]].<br />
<br />
== Utilizzo e Tuning ==<br />
<br />
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/><br />
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>; inoltre se vogliamo misurare il carico della cpu e i tempi di esecuzione possiamo usare il programma <code>time</code> (opzionale). I pacchetti si trovano nei repository Debian per cui basterà dare un<br />
<br />
<pre># apt-get install schedtool time</pre><br />
<br />
A questo punto, per lanciare un programma con priorità Idleprio si utilizza un comando del tipo<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade</pre><br />
<br />
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. <br />
Invece il comando che segue trasforma la shell corrente in SCHED_ISO<br />
<br />
<pre>$ schedtool -I $$ </pre><br />
<br />
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<br />
<br />
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre><br />
<br />
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).<br />
<br />
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un<br />
<br />
<pre>$ schedtool -I -e amarok</pre><br />
<br />
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 <br />
processo soft-realtime. <br/> <br />
Per modificare il limite, ad esempio portarlo a 85, basta un<br />
<br />
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre><br />
<br />
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<br />
<br />
<pre> # schedtool -N `pidof amarok` </pre><br />
<br />
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. <br />
<br />
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.<br />
<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]<br />
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]<br />
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore= [[Utente:Ombra|Ombra]]<br/><br />
(guida originariamente scritta da [[Utente:TheNoise|The Noise]])<br />
|Verificata_da=<br />
|Estesa_da=<br />
|Numero_revisori=0<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38110Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T09:21:43Z<p>Ombra: </p>
<hr />
<div>{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens] <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; SCHED_NORMAL: questa è, se non diversamente specificato, 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<br />
<br />
; SCHED_BATCH : questa priorità viene usata per processi non interattivi (batch). I processi di questa classe avranno priorità inferiore a qualsiasi processo SCHED_NORMAL.<br />
<br />
; 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 />
<br />
; 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. Per i 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à.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
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>. Il pacchetto è presente nei repository di Sid e Lenny.<br />
<br />
<pre># apt-get install schedtool</pre><br />
<br />
''(è indicato per <code>Sid</code> ma va benissimo anche per <code>Etch</code>)''<br />
<br />
Ecco alcuni esempi:<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade # aggiornare in modalità SCHED_IDLEPRIO<br />
<br />
# schedtool -I -e xmms # xmms in modalità SCHED_ISO<br />
<br />
# schedtool -I $$ # trasforma la shell corrente in SCHED_ISO</pre><br />
<br />
Per ulteriori informazioni rimando alla semplice e chiara pagina: <code>man schedtool</code><br />
<br />
== Installazione ==<br />
<br />
Le patch <code>-ck</code> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:<br />
<br />
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/<br />
<br />
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 <code>-ck</code> si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.6.16.4. <br />
<br />
Attualmente l'ultimo patch set <code>-ck</code> è 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 <code>/usr/src/</code> è il seguente:<br />
<br />
* [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]<br />
<br />
''Nel seguito si userà, come esempio, il kernel 2.6.16 e le patch <code>-ck5</code> per tale kernel.''<br />
<br />
Una volta scompattati i sorgenti del kernel vanilla in <code>/usr/src/</code> si possono patchare con:<br />
<br />
<pre>$ cd /usr/src/linux-2.6.16/<br />
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd /usr/src<br />
$ mv linux-2.6.16 linux-2.6.16-ck5</pre><br />
<br />
È consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:<br />
<br />
<pre> $ cd linux-2.6.16-ck5<br />
$ cp /boot/config-2.6.16-vanilla .<br />
$ make oldconfig </pre><br />
<br />
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.<br />
<br />
A questo punto è 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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Se non abbiamo un kernel <code>-ck</code>, 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 <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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Per saperne di più sulla compilazione del kernel e la ''Debian way'': [[Debian Kernel Howto]].<br />
<br />
== Utilizzo e Tuning ==<br />
<br />
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/><br />
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>; inoltre se vogliamo misurare il carico della cpu e i tempi di esecuzione possiamo usare il programma <code>time</code> (opzionale). I pacchetti si trovano nei repository Debian per cui basterà dare un<br />
<br />
<pre># apt-get install schedtool time</pre><br />
<br />
A questo punto, per lanciare un programma con priorità Idleprio si utilizza un comando del tipo<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade</pre><br />
<br />
in questo modo ad esempio eseguiremo un aggiornamento del sistema in background. <br />
Invece il comando che segue trasforma la shell corrente in SCHED_ISO<br />
<br />
<pre>$ schedtool -I $$ </pre><br />
<br />
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<br />
<br />
<pre># echo 100 > /proc/sys/kernel/rr_interval </pre><br />
<br />
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).<br />
<br />
Se si vuole eseguire una sola applicazione ISO per volta da una normale shell basterà dare un<br />
<br />
<pre>$ schedtool -I -e amarok</pre><br />
<br />
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 <br />
processo soft-realtime. <br/> <br />
Per modificare il limite, ad esempio portarlo a 85, basta un<br />
<br />
<pre> # echo 85 > /proc/sys/kernel/iso_cpu </pre><br />
<br />
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<br />
<br />
<pre> # schedtool -N `pidof amarok` </pre><br />
<br />
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. <br />
<br />
Il programma schedtool offre anche altre interessanti funzionalità; per maggiori dettagli <code>man schedtool</code>.<br />
<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]<br />
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]<br />
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore=[[Utente:TheNoise|The Noise]]<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38109Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T08:56:57Z<p>Ombra: /* Il primo patchset */</p>
<hr />
<div>{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens] <br />
<br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; SCHED_NORMAL: questa è, se non diversamente specificato, 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<br />
<br />
; SCHED_BATCH : questa priorità viene usata per processi non interattivi (batch). I processi di questa classe avranno priorità inferiore a qualsiasi processo SCHED_NORMAL.<br />
<br />
; 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 />
<br />
; 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. Per i 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à.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
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>. Il pacchetto è presente nei repository di Sid e Lenny.<br />
<br />
<pre># apt-get install schedtool</pre><br />
<br />
''(è indicato per <code>Sid</code> ma va benissimo anche per <code>Etch</code>)''<br />
<br />
Ecco alcuni esempi:<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade # aggiornare in modalità SCHED_IDLEPRIO<br />
<br />
# schedtool -I -e xmms # xmms in modalità SCHED_ISO<br />
<br />
# schedtool -I $$ # trasforma la shell corrente in SCHED_ISO</pre><br />
<br />
Per ulteriori informazioni rimando alla semplice e chiara pagina: <code>man schedtool</code><br />
<br />
== Installazione ==<br />
<br />
Le patch <code>-ck</code> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:<br />
<br />
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/<br />
<br />
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 <code>-ck</code> si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.6.16.4. <br />
<br />
Attualmente l'ultimo patch set <code>-ck</code> è 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 <code>/usr/src/</code> è il seguente:<br />
<br />
* [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]<br />
<br />
''Nel seguito si userà, come esempio, il kernel 2.6.16 e le patch <code>-ck5</code> per tale kernel.''<br />
<br />
Una volta scompattati i sorgenti del kernel vanilla in <code>/usr/src/</code> si possono patchare con:<br />
<br />
<pre>$ cd /usr/src/linux-2.6.16/<br />
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd /usr/src<br />
$ mv linux-2.6.16 linux-2.6.16-ck5</pre><br />
<br />
È consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:<br />
<br />
<pre> $ cd linux-2.6.16-ck5<br />
$ cp /boot/config-2.6.16-vanilla .<br />
$ make oldconfig </pre><br />
<br />
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.<br />
<br />
A questo punto è 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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Se non abbiamo un kernel <code>-ck</code>, 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 <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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Per saperne di più sulla compilazione del kernel e la ''Debian way'': [[Debian Kernel Howto]].<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]<br />
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]<br />
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore=[[Utente:TheNoise|The Noise]]<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38108Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T08:54:38Z<p>Ombra: </p>
<hr />
<div>{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Il primo patchset ==<br />
<br />
;Staircase Deadline Scheduler<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens]<br />
<br><br />
;Swap prefetching<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
== Lo scheduler BFS ==<br />
<br />
=== Confronto tra BFS e Mainline===<br />
<br />
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/><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/><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.<br />
<br />
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/> <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.<br />
<br />
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.<br />
<br />
===Limiti e particolarità del BFS===<br />
<br />
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:<br />
<br />
; Scalabilità<br />
<br />
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.<br />
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/><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.<br />
<br />
; Overhead e jobservers<br />
<br />
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/><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/><br />
Di fatto lo scheduler mainline non riesce a sfruttare appieno le potenzialità della cpu nelle situazioni più comuni su un desktop.<br />
<br />
; Cgroups e systemd<br />
<br />
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.<br />
Poco male perchè le patch introducono un altro semplice strumento, descritto in seguito, per limitare l'utilizzo della cpu da parte dei processi.<br />
<br />
; Misurazione della performance<br />
<br />
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.<br />
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".<br />
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>.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; SCHED_NORMAL: questa è, se non diversamente specificato, 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<br />
<br />
; SCHED_BATCH : questa priorità viene usata per processi non interattivi (batch). I processi di questa classe avranno priorità inferiore a qualsiasi processo SCHED_NORMAL.<br />
<br />
; 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 />
<br />
; 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. Per i 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à.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
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>. Il pacchetto è presente nei repository di Sid e Lenny.<br />
<br />
<pre># apt-get install schedtool</pre><br />
<br />
''(è indicato per <code>Sid</code> ma va benissimo anche per <code>Etch</code>)''<br />
<br />
Ecco alcuni esempi:<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade # aggiornare in modalità SCHED_IDLEPRIO<br />
<br />
# schedtool -I -e xmms # xmms in modalità SCHED_ISO<br />
<br />
# schedtool -I $$ # trasforma la shell corrente in SCHED_ISO</pre><br />
<br />
Per ulteriori informazioni rimando alla semplice e chiara pagina: <code>man schedtool</code><br />
<br />
== Installazione ==<br />
<br />
Le patch <code>-ck</code> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:<br />
<br />
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/<br />
<br />
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 <code>-ck</code> si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.6.16.4. <br />
<br />
Attualmente l'ultimo patch set <code>-ck</code> è 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 <code>/usr/src/</code> è il seguente:<br />
<br />
* [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]<br />
<br />
''Nel seguito si userà, come esempio, il kernel 2.6.16 e le patch <code>-ck5</code> per tale kernel.''<br />
<br />
Una volta scompattati i sorgenti del kernel vanilla in <code>/usr/src/</code> si possono patchare con:<br />
<br />
<pre>$ cd /usr/src/linux-2.6.16/<br />
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd /usr/src<br />
$ mv linux-2.6.16 linux-2.6.16-ck5</pre><br />
<br />
È consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:<br />
<br />
<pre> $ cd linux-2.6.16-ck5<br />
$ cp /boot/config-2.6.16-vanilla .<br />
$ make oldconfig </pre><br />
<br />
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.<br />
<br />
A questo punto è 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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Se non abbiamo un kernel <code>-ck</code>, 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 <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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Per saperne di più sulla compilazione del kernel e la ''Debian way'': [[Debian Kernel Howto]].<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]<br />
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]<br />
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore=[[Utente:TheNoise|The Noise]]<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38107Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T08:44:47Z<p>Ombra: /* Swap prefetching */</p>
<hr />
<div>{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Descrizione della patch ==<br />
<br />
=== Staircase Deadline Scheduler ===<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens]<br />
<br><br />
<br />
=== Swap prefetching ===<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; SCHED_NORMAL: questa è, se non diversamente specificato, 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<br />
<br />
; SCHED_BATCH : questa priorità viene usata per processi non interattivi (batch). I processi di questa classe avranno priorità inferiore a qualsiasi processo SCHED_NORMAL.<br />
<br />
; 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 />
<br />
; 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. Per i 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à.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
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>. Il pacchetto è presente nei repository di Sid e Lenny.<br />
<br />
<pre># apt-get install schedtool</pre><br />
<br />
''(è indicato per <code>Sid</code> ma va benissimo anche per <code>Etch</code>)''<br />
<br />
Ecco alcuni esempi:<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade # aggiornare in modalità SCHED_IDLEPRIO<br />
<br />
# schedtool -I -e xmms # xmms in modalità SCHED_ISO<br />
<br />
# schedtool -I $$ # trasforma la shell corrente in SCHED_ISO</pre><br />
<br />
Per ulteriori informazioni rimando alla semplice e chiara pagina: <code>man schedtool</code><br />
<br />
== Installazione ==<br />
<br />
Le patch <code>-ck</code> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:<br />
<br />
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/<br />
<br />
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 <code>-ck</code> si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.6.16.4. <br />
<br />
Attualmente l'ultimo patch set <code>-ck</code> è 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 <code>/usr/src/</code> è il seguente:<br />
<br />
* [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]<br />
<br />
''Nel seguito si userà, come esempio, il kernel 2.6.16 e le patch <code>-ck5</code> per tale kernel.''<br />
<br />
Una volta scompattati i sorgenti del kernel vanilla in <code>/usr/src/</code> si possono patchare con:<br />
<br />
<pre>$ cd /usr/src/linux-2.6.16/<br />
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd /usr/src<br />
$ mv linux-2.6.16 linux-2.6.16-ck5</pre><br />
<br />
È consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:<br />
<br />
<pre> $ cd linux-2.6.16-ck5<br />
$ cp /boot/config-2.6.16-vanilla .<br />
$ make oldconfig </pre><br />
<br />
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.<br />
<br />
A questo punto è 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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Se non abbiamo un kernel <code>-ck</code>, 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 <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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Per saperne di più sulla compilazione del kernel e la ''Debian way'': [[Debian Kernel Howto]].<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]<br />
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]<br />
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore=[[Utente:TheNoise|The Noise]]<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38106Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T08:43:03Z<p>Ombra: /* Staircase Deadline Scheduler */</p>
<hr />
<div>{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Descrizione della patch ==<br />
<br />
=== Staircase Deadline Scheduler ===<br />
<br />
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''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens]<br />
<br><br />
<br />
=== Swap prefetching ===<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; SCHED_NORMAL: questa è, se non diversamente specificato, 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<br />
<br />
; SCHED_BATCH : questa priorità viene usata per processi non interattivi (batch). I processi di questa classe avranno priorità inferiore a qualsiasi processo SCHED_NORMAL.<br />
<br />
; 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 />
<br />
; 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. Per i 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à.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
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>. Il pacchetto è presente nei repository di Sid e Lenny.<br />
<br />
<pre># apt-get install schedtool</pre><br />
<br />
''(è indicato per <code>Sid</code> ma va benissimo anche per <code>Etch</code>)''<br />
<br />
Ecco alcuni esempi:<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade # aggiornare in modalità SCHED_IDLEPRIO<br />
<br />
# schedtool -I -e xmms # xmms in modalità SCHED_ISO<br />
<br />
# schedtool -I $$ # trasforma la shell corrente in SCHED_ISO</pre><br />
<br />
Per ulteriori informazioni rimando alla semplice e chiara pagina: <code>man schedtool</code><br />
<br />
== Installazione ==<br />
<br />
Le patch <code>-ck</code> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:<br />
<br />
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/<br />
<br />
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 <code>-ck</code> si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.6.16.4. <br />
<br />
Attualmente l'ultimo patch set <code>-ck</code> è 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 <code>/usr/src/</code> è il seguente:<br />
<br />
* [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]<br />
<br />
''Nel seguito si userà, come esempio, il kernel 2.6.16 e le patch <code>-ck5</code> per tale kernel.''<br />
<br />
Una volta scompattati i sorgenti del kernel vanilla in <code>/usr/src/</code> si possono patchare con:<br />
<br />
<pre>$ cd /usr/src/linux-2.6.16/<br />
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd /usr/src<br />
$ mv linux-2.6.16 linux-2.6.16-ck5</pre><br />
<br />
È consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:<br />
<br />
<pre> $ cd linux-2.6.16-ck5<br />
$ cp /boot/config-2.6.16-vanilla .<br />
$ make oldconfig </pre><br />
<br />
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.<br />
<br />
A questo punto è 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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Se non abbiamo un kernel <code>-ck</code>, 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 <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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Per saperne di più sulla compilazione del kernel e la ''Debian way'': [[Debian Kernel Howto]].<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]<br />
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]<br />
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore=[[Utente:TheNoise|The Noise]]<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38105Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T08:36:54Z<p>Ombra: /* Introduzione */</p>
<hr />
<div>{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
<br />
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/> <br />
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/><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/><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/><br />
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/><br />
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.<br />
<br />
== Descrizione della patch ==<br />
<br />
=== Staircase Deadline Scheduler ===<br />
<br />
Le patch <code>-ck</code> (per il kernel 2.6.21 o successivi) includono 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 sono 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 affigge l'attuale scheduler mainline e (in misura minore) il vecchio ''Staircase''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens]<br />
<br />
Quale dei due scheduler (SD o CFS) sostituirà l'attuale ''ingosched'' in mainline solo la storia potrà dircelo ;).<br />
<br />
=== Swap prefetching ===<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; SCHED_NORMAL: questa è, se non diversamente specificato, 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<br />
<br />
; SCHED_BATCH : questa priorità viene usata per processi non interattivi (batch). I processi di questa classe avranno priorità inferiore a qualsiasi processo SCHED_NORMAL.<br />
<br />
; 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 />
<br />
; 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. Per i 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à.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
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>. Il pacchetto è presente nei repository di Sid e Lenny.<br />
<br />
<pre># apt-get install schedtool</pre><br />
<br />
''(è indicato per <code>Sid</code> ma va benissimo anche per <code>Etch</code>)''<br />
<br />
Ecco alcuni esempi:<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade # aggiornare in modalità SCHED_IDLEPRIO<br />
<br />
# schedtool -I -e xmms # xmms in modalità SCHED_ISO<br />
<br />
# schedtool -I $$ # trasforma la shell corrente in SCHED_ISO</pre><br />
<br />
Per ulteriori informazioni rimando alla semplice e chiara pagina: <code>man schedtool</code><br />
<br />
== Installazione ==<br />
<br />
Le patch <code>-ck</code> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:<br />
<br />
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/<br />
<br />
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 <code>-ck</code> si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.6.16.4. <br />
<br />
Attualmente l'ultimo patch set <code>-ck</code> è 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 <code>/usr/src/</code> è il seguente:<br />
<br />
* [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]<br />
<br />
''Nel seguito si userà, come esempio, il kernel 2.6.16 e le patch <code>-ck5</code> per tale kernel.''<br />
<br />
Una volta scompattati i sorgenti del kernel vanilla in <code>/usr/src/</code> si possono patchare con:<br />
<br />
<pre>$ cd /usr/src/linux-2.6.16/<br />
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd /usr/src<br />
$ mv linux-2.6.16 linux-2.6.16-ck5</pre><br />
<br />
È consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:<br />
<br />
<pre> $ cd linux-2.6.16-ck5<br />
$ cp /boot/config-2.6.16-vanilla .<br />
$ make oldconfig </pre><br />
<br />
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.<br />
<br />
A questo punto è 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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Se non abbiamo un kernel <code>-ck</code>, 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 <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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Per saperne di più sulla compilazione del kernel e la ''Debian way'': [[Debian Kernel Howto]].<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]<br />
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]<br />
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore=[[Utente:TheNoise|The Noise]]<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38104Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T08:31:25Z<p>Ombra: </p>
<hr />
<div>{{Stub}}<br />
<br />
{{Versioni compatibili|Sid}}<br />
== Introduzione ==<br />
Le patch ''Con Kolivas'' (<code>-ck</code>) 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>.<br />
<br />
Con queste patch si ottiene un sistema desktop estremamente responsivo ed ottimizzato per l'uso interattivo.<br />
<br />
Se vi siete chiesti come mai Gentoo o Archlinux sono così veloci su desktop la risposta sta principalmente nell'inclusione delle patch <code>-ck</code> nei loro kernel di default.<br />
<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.<br />
<br />
Con Kolivas manteneva anche un altro insieme di patch, chiamate <code>-cks</code>, che sono specificatamente pensate per ottimizzare le prestazioni dei server.<br />
<br />
== Descrizione della patch ==<br />
<br />
=== Staircase Deadline Scheduler ===<br />
<br />
Le patch <code>-ck</code> (per il kernel 2.6.21 o successivi) includono 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 sono 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 affigge l'attuale scheduler mainline e (in misura minore) il vecchio ''Staircase''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens]<br />
<br />
Quale dei due scheduler (SD o CFS) sostituirà l'attuale ''ingosched'' in mainline solo la storia potrà dircelo ;).<br />
<br />
=== Swap prefetching ===<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; SCHED_NORMAL: questa è, se non diversamente specificato, 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<br />
<br />
; SCHED_BATCH : questa priorità viene usata per processi non interattivi (batch). I processi di questa classe avranno priorità inferiore a qualsiasi processo SCHED_NORMAL.<br />
<br />
; 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 />
<br />
; 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. Per i 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à.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
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>. Il pacchetto è presente nei repository di Sid e Lenny.<br />
<br />
<pre># apt-get install schedtool</pre><br />
<br />
''(è indicato per <code>Sid</code> ma va benissimo anche per <code>Etch</code>)''<br />
<br />
Ecco alcuni esempi:<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade # aggiornare in modalità SCHED_IDLEPRIO<br />
<br />
# schedtool -I -e xmms # xmms in modalità SCHED_ISO<br />
<br />
# schedtool -I $$ # trasforma la shell corrente in SCHED_ISO</pre><br />
<br />
Per ulteriori informazioni rimando alla semplice e chiara pagina: <code>man schedtool</code><br />
<br />
== Installazione ==<br />
<br />
Le patch <code>-ck</code> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:<br />
<br />
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/<br />
<br />
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 <code>-ck</code> si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.6.16.4. <br />
<br />
Attualmente l'ultimo patch set <code>-ck</code> è 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 <code>/usr/src/</code> è il seguente:<br />
<br />
* [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]<br />
<br />
''Nel seguito si userà, come esempio, il kernel 2.6.16 e le patch <code>-ck5</code> per tale kernel.''<br />
<br />
Una volta scompattati i sorgenti del kernel vanilla in <code>/usr/src/</code> si possono patchare con:<br />
<br />
<pre>$ cd /usr/src/linux-2.6.16/<br />
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd /usr/src<br />
$ mv linux-2.6.16 linux-2.6.16-ck5</pre><br />
<br />
È consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:<br />
<br />
<pre> $ cd linux-2.6.16-ck5<br />
$ cp /boot/config-2.6.16-vanilla .<br />
$ make oldconfig </pre><br />
<br />
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.<br />
<br />
A questo punto è 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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Se non abbiamo un kernel <code>-ck</code>, 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 <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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Per saperne di più sulla compilazione del kernel e la ''Debian way'': [[Debian Kernel Howto]].<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]<br />
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]<br />
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore=[[Utente:TheNoise|The Noise]]<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Indice_Guide&diff=38103Indice Guide2015-04-26T08:06:37Z<p>Ombra: /* Kernel */</p>
<hr />
<div>__NOTOC__<br />
[[Image:Banner-wheezy.png|link=Installazione_Debian:_pagine_utili]]<br />
{|style="border-radius: 0.5em; width:100%; margin-top:+.7em; background-color:#F9F9FF; border: 1px solid #ccc"<br />
|style="width:50%;color:#000"|<br />
{| style="width:280px;border:solid 0px;background:none"<br />
|-<br />
| style="width:280px;text-align:center; white-space: nowrap; color:#000" |<br />
<h1 style="font-size: 162%; border: none; margin: 0; padding:.1em; color:#000"><br />
Indice delle Guide<br />
</h1><br />
<div style="top: +0.2em; font-size: 100%"><br />
Di seguito troverete un indice parzialmente completo delle guide contenute su [[Guide@Debianizzati.Org:About|Wiki]].<br />
<br />
La totalità delle guide è disponibile nella lista delle '''[[Lista Categorie|categorie]]''' qua a destra.<br />
</div><br />
|-<br />
|}<br />
<!-- ----------Portals Follow----------------------------- --><br />
|style="width:16%;font-size:95%;color:#000"|<br />
* [[:Categoria:Conoscere Debian|Conoscere Debian]]<br />
* [[:Categoria:Usare Debian|Usare Debian]]<br />
* [[:Categoria:Configurare Debian|Configurare Debian]]<br />
* [[:Categoria:Debian in rete|Debian in rete]]<br />
* [[:Categoria:Debian server|Debian server]]<br />
|style="width:16%;font-size:95;color:#000"|<br />
* [[:Categoria:Virtualizzazione|Virtualizzazione]]<br />
* [[:Categoria:Debian e sicurezza|Debian e sicurezza]]<br />
* [[:Categoria:Debian e Hardware|Debian e Hardware]]<br />
* [[:Categoria:Sviluppare con Debian|Sviluppare con Debian]]<br />
* [[:Categoria:Giocare con Debian|Giocare con Debian]]<br />
|style="width:16%;font-size:95%;color:#000"|<br />
* [[:Categoria:Cultura libera|Cultura libera]]<br />
* [[:Categoria:Wiki|Wiki]]<br />
* [[:Categoria:Debianizzati|Debianizzati]]<br />
* [[:Categoria:Non-Free|Non-Free]]<br />
* '''[[Lista Categorie]]'''<br />
|}<br />
<br />
<br />
<br />
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.<br />
<br />
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]]: [[Image:swirl.png|link=]]. Per ulteriori informazioni sul processo di revisione vedere: [[Aiuto:Prima di iniziare#Evoluzione delle guide|Evoluzione delle guide]].<br />
<br />
Potete trovare un elenco completo delle guide '''Debianized''' in [[:Categoria:Debianized|questa pagina]].<br />
<br />
Le guide contrassegnate da questa immagine [[Immagine:Swirl_blu.png]] rimandano ad articoli della [http://e-zine.debianizzati.org/ e-zine] di Debianizzati.<br />
<br />
__TOC__<br />
<br />
== Mondo Debian ==<br />
=== Introduzione a Debian ===<br />
* [[L' Universo Debian]]<br />
* [[La struttura della Distribuzione]]<br />
* [[Immagine:Swirl_blu.png]] [[La nascita di Debian]]<br />
* [[Immagine:Swirl blu.png]] [[Debian Free Software Guidelines]]<br />
<br />
=== Installazione sistema operativo ===<br />
* [[Installare Debian]]<br />
** [[Installare Debian SID]]<br />
** [[Installare Debian da pendrive USB o SD card]] <br />
** [[Installare Debian da hard disk]]<br />
* [[Installare Debian: configurazione LVM]] <br />
* [[Installare Debian: configurazione RAID]]<br />
* [[Installare Debian su un RAID1 software | Configurare un RAID1]]<br />
* [[Installare Debian con Raid1 software e LVM | Configurare RAID1+LVM]]<br />
* [[Aggiornare da Etch a Lenny]]<br />
* [[Installare e configurare Debian edu (Skolelinux)]]<br />
* [[Jigdo | '''Jigdo''': Scaricare e Aggiornare le iso di Debian]]<br />
<br />
==== Guide per immagini ====<br />
* [[Installare Debian Lenny - Guida Grafica | '''Lenny''', grafica]]<br />
* [[Squeeze, installer di default | '''Squeeze''', non grafica]]<br />
* [[Squeeze, installer grafico | '''Squeeze''' businesscard e netinst, grafica]]<br />
* [[Squeeze, installer CD/DVD | '''Squeeze''' CD/DVD, grafica]]<br />
* [[Installare Debian Wheezy - Guida Grafica | '''Wheezy''' netinst, grafica]]<br />
<br />
=== Boot loader ===<br />
==== Grub e Grub 2 ====<br />
* [[Guida a Grub]]<br />
** [[Aggiungere uno sfondo a Grub]]<br />
* [[Guida a GRUB 2]]<br />
** [[Grub2: riconoscere altri sistemi operativi installati]]<br />
** [[Ripristinare Grub2 dopo l'installazione di un altro sistema operativo]]<br />
<br />
==== Altri ====<br />
<br />
* [[Smart Boot Manager (SBM): avviare differenti SO]]<br />
<br />
=== Installazione e gestione dei pacchetti ===<br />
<br />
* [[Introduzione all' Apt System | '''>>INTRODUZIONE ALL'APT SYSTEM<<''']]<br />
<br />
====Lato Client====<br />
===== Pacchetto apt =====<br />
* [[Apt| '''Apt''': funzionalità di base per amministrare i pacchetti]]<br />
* [[Apt-get | '''Apt-Get''': per scaricare, installare, rimuovere e aggiornare i pacchetti]]<br />
* [[Apt-cache | '''Apt-Cache''': per ricercare informazioni sui pacchetti]]<br />
* [[Apt-mark | '''Apt-Mark''': per leggere o modificare lo stato dei pacchetti]]<br />
* [[Apt-cdrom | '''Apt-cdrom''': aggiunta di cd/dvd nella lista dei repository]]<br />
===== Altro software =====<br />
* [[Aptitude | '''Aptitude''': strumento avanzato per amministrare i pacchetti]]<br />
* [[Dpkg | '''Dpkg''': introduzione al package manager di Debian]]<br />
* [[Gdebi|'''Gdebi''': come installare pacchetti .deb con le loro dipendenze]]<br />
* [[Synaptic | '''Synaptic''': software grafico e più intuitivo per amministrare i pacchetti]]<br />
* [[Immagine:Swirl_blu.png]] [[Wajig | '''Wajig''']]<br />
* [[Apt-file: ricerca all'interno dei pacchetti | '''Apt-file''': ricerca all'interno dei pacchetti]]<br />
* [[Apt-listbugs: come monitorare i bug | '''Apt-listbugs''': come monitorare i bug]]<br />
* [[Apt-zip: aggiornamenti senza una connessione veloce | '''Apt-zip''': aggiornamenti senza una connessione veloce]]<br />
* [[Apt-spy: trovare i mirror più veloci | '''Apt-spy''': trovare i mirror più veloci]]<br />
* [[Apt-show-versions | '''Apt-show-versions''': scoprire a che release appartiene un pacchetto in sistemi "misti"]]<br />
* [[Impedire l'aggiornamento di un pacchetto | Impedire e/o retrocedere la versione dei singoli pacchetti]]<br />
<br />
* "Fare il downgrade di uno o più pacchetti", accorpata a "Impedire e/o retrocedere la versione dei singoli pacchetti"<br />
<br />
====Lato Server====<br />
* [[Usare apt-cacher per creare una cache dei pacchetti usabile in una LAN |'''Apt-Cacher''': creare una cache dei pacchetti usabile in una LAN]]<br />
* [[Apt-Proxy: un proxy per i pacchetti Debian| '''Apt-Proxy''': un proxy per i pacchetti Debian]]<br />
* [[Aptoncd |'''Aptoncd''': creare immagini iso della cache di apt]]<br />
* [[Creare un Repository Debian]]<br />
* [[Gestione di un repository con debarchiver |'''Debarchiver''': gestione di un repository con debarchiver]]<br />
* [[Debmirror: creiamo un mirror Debian |'''Debmirror''': creiamo un mirror Debian]]<br />
* [[Dupload per l'upload dei pacchetti Debian |'''Dupload''': dupload per l'upload dei pacchetti Debian]]<br />
<br />
====Repository====<br />
* [[Image:swirl.png|link=]] [[I repository ed il loro utilizzo]]<br />
* [[Immagine:Swirl blu.png]] [[Repository & pinning]]<br />
* [[Il repository Backports]]<br />
* [[Repository non ufficiali]]<br />
* [[Archivi Debian]]<br />
* [[Il repository di Google]]<br />
* [[Il repository di HWraid]]<br />
* [[Il repository DotDeb]]<br />
* [[Il repository LinuxMint]] <br />
* [[Immagini iso Debian da usare come repository | Utilizzare immagini ISO come repository locali]]<br />
<br />
* "APT uso avanzato: mixare releases diverse", accorpata a "I repository e il loro utilizzo".<br />
* "Introduzione al pinning", accorpata a "I repository e il loro utilizzo".<br />
<br />
====Manutenzione====<br />
* [[Controllare lo stato di un pacchetto]]<br />
* [[APT: Errori (non così) frequenti]]<br />
* [[Pulire Debian]]<br />
* [[Usare pacchetti a 32 bit su sistemi a 64 bit]]<br />
<br />
==== Creazione e modifica dei pacchetti ====<br />
* [[Make-jpkg: Pacchettizziamo Java| '''Make-jpkg''': Pacchettizziamo Java]]<br />
* [[Gestione dei metapacchetti | Metapacchetti]]<br />
* [[Applicare una patch ad un pacchetto Debian]]<br />
* [[Apt-build: ottimizzazione dei pacchetti | '''Apt-build''': ottimizzazione dei pacchetti]]<br />
* [[Dpkg-sig: Firma dei packages .deb | '''Dpkg-sig''': Firma dei packages .deb]]<br />
* [[Pacchettizzare un tema per Bootsplash]]<br />
* [[Backport da unstable in testing]]<br />
* [[Pbuilder: compilazione in ambienti puliti]]<br />
<br />
* "Pacchetti binari e sorgenti", inclusa nella guida "Introduzione all'apt system".<br />
<br />
==Configurazione Sistema==<br />
===Autenticazione locale===<br />
* [[Privilegi di amministratore]]<br />
* [[Password sicure: la base della sicurezza informatica]]<br />
* [[Autenticazione via token con PAM USB]]<br />
* [[Configurare SUDO per gestire le attività degli amministratori]]<br />
===Kernel===<br />
* [[Linux Kernel in a Nutshell]] in Italiano (work in progress)<br />
* [[Un kernel UNIX libero: Linux]] ''(stub)''<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Kernel2.6.10 - Framebuffer - Gensplash Patch]]<br />
* [[Compilazione Kernel 2.6.11 con Bootsplash]]<br />
* [[Pagina di manuale di module-assistant|Pagina di manuale di '''<code>module-assistant</code>''']]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
* [[Script: Confronto Configurazioni Kernel]]<br />
* [[Patch Con Kolivas: incrementare le prestazioni desktop|Patch '''Con Kolivas''': incrementare le prestazioni '''desktop''']]<br />
* [[Immagine:Swirl_blu.png]] [[Compilazione del Kernel Linux]]<br />
<br />
===Ports===<br />
* [[Immagine:Swirl blu.png]] [[Nexenta]]<br />
* [[Immagine:Swirl blu.png]] [[Debian su android]]<br />
* [[Immagine:Swirl blu.png]] [[Debian GNU/kFreeBSD]]<br />
* [[Immagine:Swirl blu.png]] [[GNU/Hurd|Debian GNU/Hurd]]<br />
<br />
===Sistema===<br />
* [[SysV | Il sistema SysV per la gestione dei Runlevel]]<br />
* [[Configurare il server X in Debian GNU/Linux]]<br />
* [[Linux Admin Quick Reference]]<br />
* [[Debian: accelerare GTK con Cairo e Glitz]]<br />
* [[Debian: software suspend e ibernazione per laptops]]<br />
* [[Alternatives]]<br />
* [[Filesystem: i permessi sui files]]<br />
* [[Utilizzo del servizio di scheduling Cron]]<br />
* [[Gestione e creazione di servizi in Debian]]<br />
* [[Esecuzione di programmi: la variabile PATH]]<br />
* [[Impostare l'editor predefinito della shell]]<br />
* [[Immagine:Swirl_blu.png]] [[Le fasi del boot]]<br />
* [[Immagine:Swirl_blu.png]] [[System Monitor]]<br />
* [[Immagine:Swirl_blu.png]] [[Mai più senza backup]]<br />
* [[Usare pacchetti a 32 bit su sistemi a 64 bit]]<br />
* [[Monitorare e backuppare i cambiamenti della configurazione]]<br />
<br />
==== Filesystem e supporti di memorizzazione permanente ====<br />
* [[File System]]<br />
* [[Attivare le quote su un filesystem]]<br />
* [[Guida alla formattazione dei dischi con fdisk | '''fdisk''']]<br />
* [[LVM: Logical Volume Manager | '''LVM''': '''L'''ogical '''V'''olume '''M'''anager]]<br />
* [[RAID: Redundant Array of Indipendent Disks | '''RAID''': '''R'''edundant '''A'''rray of '''I'''ndipendent '''D'''isks]]<br />
** [[Software Raid 1: configurazione e verifiche | '''Raid 1''': configurazione e verifiche]]<br />
* [[Udev e Debian | Udev]]<br />
<br />
==== Sistema / Tips & Tricks: ====<br />
:* [[Impostare e modificare data e ora]]<br />
:* [[Impostare e modificare il layout della tastiera]]<br />
:* [[Impostare la lingua italiana nel sistema]]<br />
:* [[Tmpreaper: pulire le directory contenenti file temporanei]]<br />
:* [[Messaggio del giorno | Come rendere permanenti le modifiche a <code>/etc/motd</code>]]<br />
:* [[Remastersys | Remastersys: creare un CD Live a partire da un sistema installato]]<br />
:* [[Colorare il boot di Debian]]<br />
:* [[Forzare la risoluzione video della shell con KMS]]<br />
<br />
=== Elaborazione testi ===<br />
<br />
* [[Immagine:Swirl_blu.png]] [[Guida a vim | Vim, guida]]<br />
* [[Vim Cheat Sheet | Vim, Cheat Sheet]]<br />
* [[LaTeX e Vim | Vim, LaTeX]]<br />
<br />
=== Desktop ===<br />
* [[Correggere la risoluzione di GDM | '''GDM''', correggerne la risoluzione]]<br />
* [[Ekiga: installazione e configurazione|'''Ekiga''': installazione e configurazione]]<br />
* [[DVD Backup: xDVDShrink per Debian]]<br />
* [[Abilitare_Xinerama | Multi monitor con Xinerama]]<br />
* [[Personalizzare il comportamento delle finestre con Devil's Pie]]<br />
* [[Xfce e shutdown da utente]]<br />
* [[Thumbnail in Thunar]]<br />
* [[Gimp: rendere un logo trasparente|'''Gimp''': rendere un logo trasparente]]<br />
* [[XGL e Beryl su KDE con schede ATI]]<br />
* [[Debian: guida all' installazione di Enlightenment 17 - e17 cvs]]<br />
* [[Debian con Enlightenment 17]]<br />
* [[Installare e configurare i codec per DVD e Mp3]]<br />
* [[Abilitare i suoni di sistema su Gnome]]<br />
* [[Realizzazione di un Desktop Environment su misura]]<br />
* [[Fluxbox, un Window Manager per Computer con poche risorse]]<br />
* [[Immagine:Swirl_blu.png]] [[Debian & Xfce]]<br />
* [[Immagine:Swirl_blu.png]] [[Debian trip]]<br />
* [[Come visualizzare i video in streaming su Debian]] ''(es: Youtube, Megavideo)''<br />
* [[Cattura stream RTMP|Come catturare uno stream RTMP]]<br />
* [[Visualizzare filmati YouTube con Gnash e GreaseMonkey]] (per Debian Squeeze)<br />
* [[Gnash]] (per Debian 7 (Wheezy) e più recenti)<br />
* [[Configurare un client IRC per collegarsi al canale debianizzati]]<br />
* [[Installare Emerald Window Decorator su Debian]]<br />
<br />
==== Desktop / Tips & Tricks ====<br />
:* [[Desktop Search su Debian Etch: Installare Tracker]]<br />
:* [[Cambiare il Tema dei Cursori per il Mouse]]<br />
:* [[Eseguire comandi con gli shortcuts di Gnome]]<br />
:* [[Abilitare ESound con ALSA in Gnome]]<br />
:* [[Nautilus: navigare con una sola finestra]]<br />
:* [[Antispam in Evolution con Bogofilter]]<br />
:* [[Associare a Icedove/Thunderbird il browser preferito]]<br />
:* [[Migliorare l'aspetto dei font]]<br />
:* [[Configurare la scheda audio]]<br />
:* [[Installare estensioni per Firefox comuni a tutti gli utenti]]<br />
:* [[Realizzare uno slideshow]]<br />
:* [[KDE4 - Notifica degli aggiornamenti sulla systray]]<br />
:* [[Modificare i colori in Midnight Commander]]<br />
:* [[Impedire l'avvio automatico del Desktop Manager]]<br />
<br />
=== Xorg / Xfree ===<br />
* [[Guida alla configurazione di Xorg]]<br />
* [[Installazione driver proprietari Ati]]<br />
* [[Installazione driver proprietari Nvidia]]<br />
* [[Abilitare AIGLX con Compiz on Debian testing]]<br />
* [[Intel 945GM- GMA 4500MHD - Intel Mobile 4 Series]]<br />
* [[Tabella delle risoluzioni VGA]]<br />
* [[Installare Compiz su Debian]]<br />
<br />
===Applicazioni Esterne===<br />
* [[Elenco programmi senza interfaccia grafica]]<br />
* [[Debian e sintesi vocale: installazione di festival e mbrola]]<br />
* [[Installare il browser Opera]]<br />
* [[Installare Skype su Debian]]<br />
* [[Installare Adobe Flash Player]]<br />
* [[VanBasco|VanBasco Karaoke su Debian]]<br />
* [[Guake]]<br />
<br />
=== Emulatori e Virtualizzazione ===<br />
<br />
* [[QEMU/KVM]]<br />
* [[Installare KVM su Debian]]<br />
* [[Installazione Qemu con supporto accelerazione Kqemu | KQEMU]] (obsoleta)<br />
* [[VirtualBox]]<br />
* [[VirtualBox: installazione]]<br />
* [[VirtualBox: configurazione]]<br />
* [[VirtualBox: amministrazione da terminale]]<br />
* [[VirtualBox: creazione di una rete virtuale]]<br />
* [[Installare VMWare Server su Debian Etch | VMWare: installazione su Debian Etch]]<br />
* [[Installare VMWare Tools su una macchina guest Debian]]<br />
* [[ePSXe Emulatore Playstation]]<br />
* [[MAME e MESS | MAME e MESS, emulatori di sistemi arcade e casalinghi]]<br />
<br />
===Altro===<br />
* [[Dual Boot Debian-Altra distribuzione Linux]]<br />
* [[Logging su MySQL]]<br />
* [[Immagine:Swirl_blu.png]] [[FFmpeg]]<br />
* [[Immagine:Swirl_blu.png]] [[Midnight Commander]]<br />
* [[Immagine:Swirl_blu.png]] [[Vivere l'Emacs]]<br />
* [[Forked-daapd | '''forked-daapd''', un media server basato su protocollo DAAP]]<br />
<br />
===Tips and Tricks===<br />
====Bash====<br />
* [[Bash tips]]: un elenco di trucchetti sull'uso interattivo di Bash<br />
* [[Bash scripting | Bash scripting]]: guida sulla scrittura di script in Bash<br />
* [[Colorare bash]]<br />
* [[Come abilitare il completamento automatico 'avanzato']]<br />
* [[Cambiare i permessi ricorsivamente]]<br />
* [[Due simpatici login: welcome2l e linuxlogo]]<br />
* [[Wodim: masterizzare da shell]]<br />
* [[Cowsay, la mucca che ci parla dal terminale]]<br />
* [[Immagine:Swirl_blu.png]] [[Alias | Alias di bash]]<br />
* [[Irssi, chattare da terminale]]<br />
<br />
====Firefox====<br />
* [[Firefox: Disattivare la ricerca con il tasto centrale]]<br />
* [[Velocizzare Firefox per la banda larga]]<br />
* [[Il vostro motore di ricerca da Firefox]]<br />
* [[Aggiungere un motore di ricerca al quicksearch di Firefox]]<br />
* [[Spostare il tasto di chiusura delle tab di Firefox 2]]<br />
* [[Firefox Tips and tricks]]<br />
<br />
====Altro====<br />
<br />
* [[Convertire immagini .nrg in immagini .iso|Convertire immagini '''<code>.nrg</code>''' (Nero) in immagini '''<code>.iso</code>''' su Linux]]<br />
* [[Rileggere la tabella delle partizioni]]<br />
* [[Scrivere su filesystem NTFS]]<br />
* [[Amministrazione grafica delle "Alternatives"]]<br />
* [[Creare DVD Cover con GLabels]]<br />
* [[Logs: visualizziamoli in una console]]<br />
* [[Guida ai comandi da terminale]]<br />
* [[Ricerca Google da terminale]]<br />
<br />
==Networking==<br />
=== Server ===<br />
* [[Internet Service Provider con Debian]]<br />
* [[Internet Service Provider con Debian Wheezy]]<br />
==== Database ====<br />
* Database NoSQL<br />
** [[MongoDB]]<br />
====Condivisione risorse====<br />
* [[Condividere file e connessione con Xbox 360 | Condividere connessione e file con Xbox 360]]<br />
* [[Firefox Sync Server | Sincronizzare Firefox/Iceweasel tramite un proprio server]]<br />
* [[Unison e la sincronizzazione di directory]]<br />
* [[Rsync e Grsync]]<br />
* [[Immagine:Swirl_blu.png]] [[Creare un Access Point con Debian]]<br />
* [[Dropbox]]<br />
===== Condividere directory/file tra macchine Linux =====<br />
* [[SSHFS: montare una risorsa remota sfruttando FUSE ed SSH | '''SSHFS''': montare una risorsa remota sfruttando FUSE ed SSH]]<br />
* [[NFS: Networking FileSystem tramite nfs-user-server | '''nfs-user-server''': condividere risorse tra macchine GNU/Linux]]<br />
* [[Nfs-kernel-server: condividere risorse tra macchine GNU/Linux | '''nfs-kernel-server''': condividere risorse tra macchine GNU/Linux]]<br />
<br />
* "Come montare cartelle condivise da MS Windows su Debian", accorpata a "Samba: guida estesa"<br />
<br />
===== Samba =====<br />
:* [[Samba: guida rapida | '''Samba''': guida rapida]]<br />
:* [[Samba: guida estesa | '''Samba''': guida estesa]]<br />
:* [[Samba: creare un cestino di rete per le condivisioni | '''Samba''': creare un cestino di rete per le condivisioni]]<br />
:* [[Sfogliare la rete in Thunar con fusesmb | '''Thunar/fusesmb''': caricare risorse remote samba in Thunar sfruttando FUSE]]<br />
:* [[ClamAV: scansione antivirus delle condivisioni Samba | '''ClamAV''': scansione antivirus delle condivisioni Samba<br />
]]<br />
:* "Accedere alle condivisioni Samba dal browser", accorpata a "Samba: guida estesa"<br />
<br />
===== Creare un controller di dominio usando OpenLDAP e Samba =====<br />
:* [[Samba e OpenLDAP: creare un controller di dominio | Debian Sarge]]<br />
:* [[Samba e OpenLDAP: creare un controller di dominio con Debian Etch | Debian Etch]]<br />
:* [[Samba e OpenLDAP: creare un controller di dominio con Debian Lenny | Debian Lenny]]<br />
:* [[Samba e OpenLDAP: creare un controller di dominio con Debian Squeeze | Debian Squeeze]]<br />
:* [[Samba e OpenLDAP: creare un controller di dominio NT4 con Debian Wheezy | Dominio NT4 con Debian Wheezy]]<br />
:* [[Samba e OpenLDAP: creare un controller di dominio Active Directory con Debian Wheezy | Dominio Active Directory con Debian Wheezy]]<br />
:* [[Samba e OpenLDAP: creare un controller di dominio con Ubuntu Server | Ubuntu Server]]<br />
<br />
===== FTP =====<br />
:* [[Installare un server FTP con ProFTPD]]<br />
:* [[Installare un server FTP con utenti virtuali su MySQL]]<br />
:* [[Installare un server vsFTPd con utenti virtuali su MySQL]]<br />
<br />
===== OpenLDAP =====<br />
:* [[Implementare un'architettura ridondante master/slave OpenLDAP | Come implementare un'architettura ridondante master/slave]]<br />
<br />
====Mailing====<br />
* [[Mail Server Sicuro con Postfix]]<br />
* [[Mailserver con Exim, Mutt e Dovecot]]<br />
* [[Postgrey:_filtrare_lo_spam_con_il_greylisting]]<br />
* [[Postfix_e_autenticazione_su_smtp_remoto]]<br />
* [[Mail_Server]]<br />
* [[Zarafa: un sostituto opensource per Microsoft Exchange]]<br />
* Server mail, con Postfix, Courier, MailDrop e mySQL [[Postfix-mysql]]<br />
* Creare un server mail base, con Postfix, Dovecot e mySQL [[Server_mail_base:_Postfix_Dovecot_e_MySql]]<br />
* Implementare il server mail base, con Amavisd-new [[Server_mail:_Postfix_Amavisd-new_Dovecot_e_MySql]]<br />
* Implementare il controllo spam con Pyzor: [[Pyzor]]<br />
* Implementare il controllo spam con Razor: [[Razor]]<br />
* [[Impostare Exim per inviare tramite GMail]]<br />
* [[Citadel, un groupware per Debian]]<br />
* [[Installare eGroupware in Debian]]<br />
* [[Installare un ambiente Groupware integrato in Samba4]]<br />
* [[Installare Group-Office in Debian]]<br />
<br />
====Http====<br />
* [[Server casalingo (SOHO)]]<br />
* [[Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5]]<br />
* [[Installazione Tomcat]]<br />
* [[LAMP: Linux, Apache, MySQL e PHP| Installare un ambiente LAMP: Linux, Apache, SSL, MySQL, PHP4]]<br />
* [[Installare Memcached in un server Apache2]]<br />
* [[Apache e Virtual Hosts: configurare Apache2 per ospitare più siti web]]<br />
* [[Incrementare le prestazioni di Apache con mod_pagespeed]] <br />
* [[Hardening di un web server Apache]]<br />
* [[Apache2: proteggere directory mediante autenticazione]]<br />
* [[Utilizzare Webalizer per avere le statistiche di Apache]]<br />
* [[Ottimizzare la banda di Apache]]<br />
* [[Configurare Apache in un ambiente Chroot]]<br />
* [[Installazione e configurazione di Apache, PHP e Oracle]]<br />
* [[XAMPP: Linux, Apache, MySQL e PHP facili]]<br />
* [[Debian MapServer/MapScript]]<br />
* [[Configurare Ruby On Rails un su server web di produzione]]<br />
* [[Autorità di certificazione locale|Generare un'autorità di certificazione locale]]<br />
* [[Installare Bugzilla su Debian]]<br />
* [[Individuare gli script PHP che inviano SPAM]]<br />
* [[Bitnami LAMP Stack: Linux-Apache-MySQL-PHP facili]]<br />
<br />
====Altri servizi di rete====<br />
* DNS e DHCP<br />
** [[Un server DNS e DHCP su Debian]]<br />
** [[DNS dinamici: come ottenerli e configurarli]]<br />
* [[Debian su server HP Proliant: installazione del software HP]]<br />
* [[Installare un server SNMP]]<br />
* [[Installare una SSL VPN con SSL Explorer]]<br />
* [[Configurare MySQL per accettare connessioni remote]]<br />
* [[Backup di MySQL tramite script]]<br />
* [[Ottimizzare le performances di MySQL]]<br />
* [[Installare_hamachi_su_debian_lenny_x86_x64_come_server_e_client | Installare hamachi server e client su Debian]]<br />
* [[Ajaxterm: utilizzare SSH via web]]<br />
* [[Connessioni SSH attraverso un proxy HTTP]]<br />
* [[Webmin: amministrare Debian via web]]<br />
* [[Netkit: laboratorio di rete virtuale]]<br />
* [[NAT con iptables|NAT con iptables: utilizzare Debian come router]]<br />
* [[Immagine:Swirl_blu.png]] [[Debian server tramite preseed]]<br />
* [[Un semplice Wiki con DokuWiki]]<br />
* [[Installare e configurare MediaWiki]]<br />
* [[Installare un Media Server per lo streaming della musica]]<br />
* [[Subsonic, un Media Server completo e funzionale]]<br />
* [[UpHosts | Content Filtering "domestico"]]<br />
* [[Autenticazione degli accessi Wireless tramite server Radius]]<br />
* [[Storage online sicuro con Webdav e EncFS]]<br />
<br />
===Amministrazione===<br />
====Gestione Remota/Locale====<br />
* [[Wake On Lan | '''Wake On Lan''' per accendere i propri PC a distanza tramite la LAN]]<br />
* [[Debian e il controllo di servizi e demoni]]<br />
* [[Gestione della banda in Apache]]<br />
* [[Inetd e i servizi di rete]]<br />
* [[SSH]]<br />
** [[OpenSSH: configurazione di base]]<br />
** [[Ssh e autenticazione tramite chiavi]]<br />
** [[SSH sicuro]]<br />
** [[Come effettuare una connessione remota SSH da Windows a Linux]]<br />
** [[Connessioni SSH attraverso un proxy HTTP]]<br />
<br />
====Connettività====<br />
* [[Condividere la connessione a internet]]<br />
* [[Ifplugd: connessione automatica|'''<code>ifplugd</code>''': connessione automatica]]<br />
* [[IP fissi | Come impostare indirizzi IP fissi su Debian]]<br />
* [[Impostare manualmente velocità e duplex di una scheda di rete]]<br />
* [[Configurazione di una connessione wireless]]<br />
* [[Disabilitare IPv6 | Disabilitare il protocollo IPv6 su Debian]]<br />
* [[Immagine:Swirl_blu.png]] [[Switchconf]]<br />
* [[Immagine:Swirl_blu.png]] [[Iproute2]]<br />
* [[Gestire automaticamente configurazioni wifi multiple]]<br />
* [[Ethernet Bonding: come garantire ridondanza e/o massimizzare la banda disponibile | '''Ethernet Bonding''': come garantire ridondanza e/o massimizzare la banda disponibile<br />
]]<br />
* [[Ethernet Bridging | '''Ethernet Bridging''': "trasformare" un computer in un hub/switch]]<br />
* [[Autenticazione degli accessi Wireless tramite server Radius]]<br />
<br />
===Sicurezza===<br />
====Firewalling====<br />
* [[Impostare un firewall con uno script iptables]]<br />
* [[Configurare Netfilter con Shorewall]]<br />
* [[Debian e iptables]]<br />
* [[Firewall Builder]]<br />
* [[Parametri a run-time per Netfilter]]<br />
* [[Layer7 filter Kernel-space: droppare protocolli p2p con iptables]]<br />
* [[Proxy Server con filtraggio dei contenuti della navigazione]]<br />
<br />
====Monitoraggio & Scanning====<br />
* [[Monitoriamo il Sistema]]<br />
* [[Monitorare il traffico sulle interfacce di rete]]<br />
* [[Mrtg: monitoriamo la banda]]<br />
* [[Cacti | Cacti: monitor di rete, per più computer]]<br />
* [[Munin]]<br />
* [[Configurare un server Syslog su Debian]]<br />
* [[Configurare un server Syslog su Debian Squeeze]]<br />
* [[Monitorare molteplici files di log da terminale]]<br />
* [[Fail2ban]]: impedire attacchi brute-force ai nostri server<br />
* [[Impedire attacchi SSH brute-force con Denyhosts]]<br />
* [[Monitorare l'attività ARP con Arpwatch]]<br />
* [[Integrit: file verification system]]<br />
* [[Registrare i log di Iptables in MySQL]]<br />
* [[Monitorare la nostra rete con ntop]]<br />
* [[Monitorare un server con Munin e Monit]]<br />
* [[Configurare Zabbix su Debian]]<br />
* [[Configurare SUDO per gestire le attività degli amministratori]]<br />
* [[Monitorare la banda con BitmeterOS]]<br />
* [[Strumenti per monitorare le performance]]<br />
* [[Autenticazione degli accessi Wireless tramite server Radius]]<br />
* [[Proxy Server con filtraggio dei contenuti della navigazione]]<br />
* [[Autenticare Squid Proxy Server su un server Radius]]<br />
* [[Individuare gli script PHP che inviano SPAM]]<br />
<br />
====Proxy====<br />
* [[Privoxy: navigazione sicura a prova di spam]]<br />
* [[Anonimato in rete - Tor ]]<br />
* [[CNTLM | CNTLM, proxy per collegarsi ad un proxy windows]]<br />
<br />
====Tunneling====<br />
* [[Openvpn]]<br />
* [[Debian come server VPN]]<br />
<br />
=== File Sharing ===<br />
* [[Moblock - mobloquer]]<br />
* [[aMule]]<br />
* [[Emule-morph]]<br />
* [[Transmission]]<br />
<br />
== Hardware ==<br />
=== Fotocamere digitali e dispositivi di memorizzazione di massa removibili ===<br />
* [[Usare Fotocamere Digitali|Usare Fotocamere Digitali (libgphoto2)]]<br />
* [[Usare Fotocamere Digitali (usb-storage)]]<br />
* [[UsbMount: Gestione automatizzata delle periferiche usb di memorizzazione]]<br />
* [[Debian e iPod]]<br />
* [[Debian e lettori mp3 Creative]]<br />
<br />
=== Modem e periferiche di rete ===<br />
<br />
* [[Debian e i Modem ADSL]]<br />
<br />
==== Modem USB ADSL ====<br />
* [[Installare i driver conexant accessrunner]]<br />
* [[Installare i driver eagle-adsl]]<br />
* [[Modem adsl Telindus ND220]]<br />
* [[Modem adsl Aethra Starmodem]]<br />
* [[Modem adsl Fastrate 100 USB]]<br />
<br />
==== Modem dial-up 56K ====<br />
* [[Modem Smart Link]]<br />
<br />
==== Modem UMTS/3G/HDSA ====<br />
* [[Modem Alice Mobile Onda MT503HSA: installazione e configurazione]]<br />
* [[Internet Key Huawei E173s 7.2Mb]]<br />
<br />
=== Schede di rete Wireless ===<br />
* [[Wireless Support | Informazioni sul supporto alle periferiche Wireless]]<br />
* [[Configurazione di una connessione wireless]]<br />
====Installazione dei driver delle schede wireless====<br />
* [[ADMtek ADM8211: installazione e configurazione]]<br />
* [[Atheros AR5210, AR5211, AR5212, AR5213, AR5414, AR2413, AR242x]]<br />
* [[Atheros 802.11n: installazione e configurazione]]<br />
* [[Intel PRO/Wireless 2200BG]] (obsoleta)<br />
* [[Intel PRO/Wireless 2100, 2200 e 2915: installazione e configurazione]]<br />
* [[Intel PRO/Wireless 3945, 3945ABG e 4965: installazione e configurazione]]<br />
* [[Intel PRO/Wireless 5100 ABN: installazione e configurazione]]<br />
* [[Broadcom BCM43xx: installazione e configurazione]]<br />
* [[Schede Wireless con driver ACX100 / ACX111]]<br />
<br />
====Altro====<br />
* [[Script Bash abilitazione scheda wireless]]<br />
* [[NdisWrapper | NdisWrapper: Usiamo i driver di Windows per il WLan con GNU/Linux]]<br />
* [[Madwifi | Installazione Driver Madwifi]]<br />
* [[PCMCIA WiFi UPspeed (chipset Marvell) su Debian Sarge on Thinkpad T20 ]]<br />
* [[Wg111v2 con ndiswrapper e crittografia WPA]]<br />
<br />
=== Schede Video ===<br />
* [[Scheda Tv WinFast TV2000 XP Pro RM]]<br />
* [[Intel 945GM- GMA 4500MHD - Intel Mobile 4 Series]]<br />
<br />
=== Stampanti ===<br />
* [[Livello degli inchiostri e pulizia testine per stampanti Epson]]<br />
* [[Immagine:Swirl_blu.png]] [[Stampanti multifunzione]]<br />
==== Stampanti USB ====<br />
* [[Installare stampanti con porta USB utilizzando CUPS]]<br />
* [[Lexmark_z640|Installare una stampante Lexmark z640]]<br />
* [[Installare una stampante Epson Stylus D78]]<br />
<br />
==== Stampanti con porta parallela ====<br />
* [[Introduzione all'installazione di stampanti con porta parallela]]<br />
<br />
==== Stampanti bluetooth ====<br />
* [[Introduzione all'installazione di stampanti bluetooth]]<br />
<br />
=== Scanner ===<br />
* [[Epson Perfection 2480 photo - USB scanner]]<br />
* [[Trust 240TH Direct Webscan Gold - USB scanner]]<br />
* [[Canon Lide 100 - USB scanner]]<br />
* [[Canon Lide 200 - USB scanner]]<br />
* [[Mustek 1200 Ub Plus - USB scanner]]<br />
* ''Inserire qui eventuali altre guide su come far funzionare scanner con Debian''<br />
<br />
=== Palmari e cellulari ===<br />
* [[Debian e Nokia 7210: uso di gnokii e gestione degli sms]]<br />
* [[UMTS/GPRS PCMCIA card (3g)]]<br />
* [[UMTS/GPRS: Internet col cellulare]]<br />
* [[Usare lcd4linux con un Palm]]<br />
* [[Collegare il proprio Nokia via USB]]<br />
* [[Modem Alice Mobile Onda MT503HSA: installazione e configurazione]]<br />
<br />
=== Server ===<br />
* [[Debian su server HP Proliant: installazione del software HP]]<br />
<br />
=== Altro hardware ===<br />
* [[Tasti Multimediali: configurazione ed uso| '''Tasti Multimediali''': configurazione ed uso]]<br />
* [[Associare un pulsante ad un'azione: Hotkeys|Associare un pulsante ad un' azione: '''Hotkeys''']]<br />
* [[Utilizzare un UPS APC con Debian]]<br />
* [[ Aggiornare il BIOS senza windows ]]<br />
* [[SheevaPlug|Come installare Debian sullo SheevaPlug]]<br />
* [[Eye toy]]<br />
* [[Bamboo pen CTL-460]]<br />
===== CPU Scaling =====<br />
* [[Modulare il funzionamento di una CPU | '''CPUFreq''', interfaccia del kernel per variare la frequenza della CPU]]<br />
* [[Cpufreqd: Un demone per il CPU frequency scaling | '''Cpufreqd''']]<br />
* [[Powernowd: CpuScaling per AMD | '''Powernowd''' (non solo AMD)]]<br />
<br />
===== Dischi rigidi =====<br />
* [[Controller RAID LSI Fusion-MPT SAS: installazione e monitoraggio dei dischi | '''Controller RAID LSI Fusion-MPT SAS''': installazione e monitoraggio dei dischi]]<br />
* [[Gestire gli HD: stato di salute, badblocks e ripristino dati|'''Gestire gli HD:''' stato di salute, badblocks e ripristino dati]]<br />
* [[Hdparm|'''hdparm''', monitoraggio e configurazione dischi]]<br />
* [[Recuperare i dati da un Hard Disk danneggiato]]<br />
<br />
===== Sensori Hardware =====<br />
* [[Lm-sensors | '''Lm-sensors''', strumenti per monitorare temperatura e altro]]<br />
<br />
==Portatili==<br />
===Laptop Debianizzati===<br />
Troverete di seguito i resoconti d'installazione di Debian su dei portatili:<br />
<br />
* [[Debian on an HP nx8220 | Debian on an HP nx8220]]<br />
* [[Debian on a presario 2141EU | Compaq Presario 2100 (2141EU)]]<br />
* [[Debian on a compaq Presario 2154EA | Compaq Presario 2100 (2154EA)]]<br />
* [[Debian on a Toshiba Satellite M30X-113| Toshiba Satellite M30x-113]]<br />
* [[Debian on a HP Compaq NX6110| HP Compaq NX6110]]<br />
* [[Debian su HP Compaq nx6325| HP Compaq nx6325]]<br />
* [[Debian on an HP pavilion zv5422EA| HP pavilion zv5000 (zv5422EA)]]<br />
* [[Debian on a ACER Aspire 1450 | ACER Aspire 1450 (1454 LMi)]]<br />
* [[Debian Wheezy-Testing su HP 635 | Debian Wheezy-Testing su HP 635]]<br />
* [[Immagine:Swirl_blu.png]] [[Debian Lenny su ASUS eeePC 900A]]<br />
<br />
Infine un elenco di portatili, suddivisi per marca e modello, su cui Debian è stata installata con maggiore o minore successo:<br />
<br />
* [[Elenco laptop debianizzati]]<br />
<br />
===Altro===<br />
* [[ACPI e DSDT]]<br />
* [[Synaptics touchpad]]<br />
* [[Notebook: far funzionare i caratteri ALT-GR]]<br />
* [[Disabilitare temporaneamente il touchpad]]<br />
* [[Configurare fluxbox sui netbook]]<br />
* Inserire qui anche link a risorse in italiano sui portatili<br />
<br />
==Debian Live==<br />
* [[Debian Live Project]]<br />
* [[Damn Small Linux su chiavetta usb]]<br />
* [[DebianLive su usb installabile]]<br />
* [[DebianLive multi-distro]]<br />
<br />
==Crittografia==<br />
* [[Crittografia e Steganografia - L'Arte di nascondere le informazioni]]<br />
* [[Introduzione alla crittografia]]<br />
* [[Chiavi simmetriche e chiavi pubbliche]]<br />
* [[Volumi criptati LUKS - Creazione e uso con cryptmount]]<br />
* [[LUKS gestione manuale dei volumi: cryptsetup]]<br />
* [[Immagine:Swirl blu.png]] [[Crittografia portami via|Creare una directory crittografata]]<br />
* [[Truecrypt® - Installazione per Debian]]<br />
* [[Mail criptate e/o firmate con standard OpenPGP usando Icedove/Thunderbird ed Enigmail]]<br />
<br />
==Varie==<br />
* [[Debian Fun]]<br />
* [[Umorismo informatico]]<br />
* [[Lista e-zine]]<br />
* [[Ergonomia]]<br />
* [[Immagine:Swirl_blu.png]] [[Intervista a MaXer]]<br />
* [[Immagine:Swirl_blu.png]] [[Intervista al Prof. Cantaro]]<br />
* [[Immagine:Swirl_blu.png]] [[Informatica e Pubblica Amministrazione]]<br />
* [[Immagine:Swirl_blu.png]] [[Intervista a Steve McIntyre]]<br />
* [[Immagine:Swirl_blu.png]] [[Free software, opensource, freeware]]<br />
* [[Immagine:Swirl_blu.png]] [[Zack]]<br />
* [[Come formulare quesiti tecnici al forum]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Discussioni_old:Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38098Discussioni old:Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T07:56:22Z<p>Ombra: ha spostato Discussioni old:Patch Con Kolivas: incrementare le prestazioni desktop a Discussione:Patch Con Kolivas: incrementare le prestazioni desktop tramite redirect: Adozione e aggiornamento della guida</p>
<hr />
<div>#RINVIA [[Discussione:Patch Con Kolivas: incrementare le prestazioni desktop]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Discussione:Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38097Discussione:Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T07:56:22Z<p>Ombra: ha spostato Discussioni old:Patch Con Kolivas: incrementare le prestazioni desktop a Discussione:Patch Con Kolivas: incrementare le prestazioni desktop tramite redirect: Adozione e aggiornamento della guida</p>
<hr />
<div>scusa l'ignoranza, ma che differenza c'è tra una patch "ck" e una "cks"? ho notato che quando specifichi il file da scaricare li nomini tutti e due e mi sono un po' perso...<br />
<br />
un'altra cosa che mi sono chiesto è se questa patch si può applicare anche ad un linux-source debian, e se la cosa ha un qualche senso.<br />
<br />
ad ogni modo l'argomento è molto interessante, bravo The_Noise ;-)<br />
<br />
:[[Utente:Tindal|Tindal]] 13:16, 18 Apr 2006 (EDT)<br />
<br />
Con Kolivas mantiene due patch set, le -ck (per il desktop) che sono quelle al quale si riferisce questo articolo e le -cks che sono invece indicate per i server (non so quali ottimizzazioni abbiano quest'ultime).<br />
<br />
Trovi tutto qui: http://members.optusnet.com.au/ckolivas/kernel/<br />
<br />
Per il discorso se è possibile applicarle a sorgenti debian, non ne ho idea. Se le patch debian modificano cose diverse dalle patch -ck si. Bisognerebbe vedere se le patch -ck si applicano senza errori ai sorgenti debian, se il kernel compila, e se il kernel boota ;-).<br />
<br />
Grazie per i complimenti :P<br />
<br />
: [[Utente:TheNoise|~ The Noise]] 14:34, 18 Apr 2006 (EDT)<br />
<br />
== Ritorno di Con Kolivas ==<br />
<br />
Come risulta dalla [http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/ directory di Con Kolivas sul mirror di kernel.org] e [http://users.on.net/~ckolivas/kernel/ dal suo sito], Con Kolivas si è rimesso a creare le sue mitiche patch (a partire dalla 2.6.32 di Dicembre 2009) e l'ha rilasciata anche per l'attuale 2.6.33.<br />
<br />
Ecco anche alcuni blog che ne hanno parlato, ad esempio [http://www.ossblog.it/post/5852/con-kolivas-torna-con-una-nuova-patch-per-linux ossblog].<br />
<br />
Stando al mirror però pare che stia sviluppando di nuovo le ck ma non le cks.<br />
<br />
Direi che è il caso di aggiornare la pagina. --[[Utente:Stefano-c|Stefano-c]] 16:26, 1 mar 2010 (CET)<br />
<br />
<br />
: Dalle informazioni che ho trovato la nuova patch ha un altro nome, ma le prestazioni sono estremamente ridotte, visto che buona parte delle idee della patch originale sono già state integrate, anche se con un'altra implementazione, nello scheduler del kernel. Quindi tolgo "da adottare" e marco la guida come "obsoleta". [[Utente:HAL 9000|HAL 9000]] 17:29, 13 apr 2015 (CEST)<br />
<br />
:: Ombra nel forum ha scritto che la riadottava [[Utente:Selky|Selky]] 17:30, 23 apr 2015 (CEST)<br />
<br />
::: Per me è ovviamente ok se la adotta. :) [[Utente:HAL 9000|HAL 9000]] 17:49, 23 apr 2015 (CEST)</div>Ombrahttps://guide.debianizzati.org/index.php?title=Old:Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38096Old:Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T07:56:22Z<p>Ombra: ha spostato Old:Patch Con Kolivas: incrementare le prestazioni desktop a Patch Con Kolivas: incrementare le prestazioni desktop: Adozione e aggiornamento della guida</p>
<hr />
<div>#RINVIA [[Patch Con Kolivas: incrementare le prestazioni desktop]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Patch_Con_Kolivas:_incrementare_le_prestazioni_desktop&diff=38095Patch Con Kolivas: incrementare le prestazioni desktop2015-04-26T07:56:22Z<p>Ombra: ha spostato Old:Patch Con Kolivas: incrementare le prestazioni desktop a Patch Con Kolivas: incrementare le prestazioni desktop: Adozione e aggiornamento della guida</p>
<hr />
<div>{{Old}}<br />
<br />
{{Versioni compatibili|Squeeze}}<br />
== Introduzione ==<br />
Le patch ''Con Kolivas'' (<code>-ck</code>) 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>.<br />
<br />
Con queste patch si ottiene un sistema desktop estremamente responsivo ed ottimizzato per l'uso interattivo.<br />
<br />
Se vi siete chiesti come mai Gentoo o Archlinux sono così veloci su desktop la risposta sta principalmente nell'inclusione delle patch <code>-ck</code> nei loro kernel di default.<br />
<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.<br />
<br />
Con Kolivas manteneva anche un altro insieme di patch, chiamate <code>-cks</code>, che sono specificatamente pensate per ottimizzare le prestazioni dei server.<br />
<br />
== Descrizione della patch ==<br />
<br />
=== Staircase Deadline Scheduler ===<br />
<br />
Le patch <code>-ck</code> (per il kernel 2.6.21 o successivi) includono 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 sono 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 affigge l'attuale scheduler mainline e (in misura minore) il vecchio ''Staircase''. <br />
<br />
Per maggiori dettagli tecnici su ''SD'':<br />
* [http://ck.wikia.com/wiki/SD Con Kolivas Wiki: SD]<br />
<br />
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:<br />
<br />
* [http://lwn.net/Articles/224865/ The Rotating Staircase Deadline Scheduler]<br />
* [http://lwn.net/Articles/226054/ RSDL hits a snag]<br />
* [http://lwn.net/Articles/230574/ Schedulers: the plot thickens]<br />
<br />
Quale dei due scheduler (SD o CFS) sostituirà l'attuale ''ingosched'' in mainline solo la storia potrà dircelo ;).<br />
<br />
=== Swap prefetching ===<br />
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''.<br />
<br />
Con questa patch l'utilizzo apparente dello swap sarà maggiore ma in realtà questo è dovuto alle ottimizzazioni fatte per incrementare le prestazioni.<br />
<br />
=== Nuove priorità: SCHED_ISO, SCHED_IDLEPRIO ===<br />
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à:<br />
<br />
; SCHED_NORMAL: questa è, se non diversamente specificato, 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<br />
<br />
; SCHED_BATCH : questa priorità viene usata per processi non interattivi (batch). I processi di questa classe avranno priorità inferiore a qualsiasi processo SCHED_NORMAL.<br />
<br />
; 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 />
<br />
; 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. Per i 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à.<br />
<br />
Le patch <code>-ck</code> introducono due ulteriori livelli:<br />
<br />
; 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.<br />
<br />
; 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.<br />
<br />
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>. Il pacchetto è presente nei repository di Sid e Lenny.<br />
<br />
<pre># apt-get install schedtool</pre><br />
<br />
''(è indicato per <code>Sid</code> ma va benissimo anche per <code>Etch</code>)''<br />
<br />
Ecco alcuni esempi:<br />
<br />
<pre># schedtool -D -e apt-get dist-upgrade # aggiornare in modalità SCHED_IDLEPRIO<br />
<br />
# schedtool -I -e xmms # xmms in modalità SCHED_ISO<br />
<br />
# schedtool -I $$ # trasforma la shell corrente in SCHED_ISO</pre><br />
<br />
Per ulteriori informazioni rimando alla semplice e chiara pagina: <code>man schedtool</code><br />
<br />
== Installazione ==<br />
<br />
Le patch <code>-ck</code> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:<br />
<br />
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/<br />
<br />
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 <code>-ck</code> si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.6.16.4. <br />
<br />
Attualmente l'ultimo patch set <code>-ck</code> è 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 <code>/usr/src/</code> è il seguente:<br />
<br />
* [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]<br />
<br />
''Nel seguito si userà, come esempio, il kernel 2.6.16 e le patch <code>-ck5</code> per tale kernel.''<br />
<br />
Una volta scompattati i sorgenti del kernel vanilla in <code>/usr/src/</code> si possono patchare con:<br />
<br />
<pre>$ cd /usr/src/linux-2.6.16/<br />
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1</pre><br />
<br />
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:<br />
<br />
<pre>$ cd /usr/src<br />
$ mv linux-2.6.16 linux-2.6.16-ck5</pre><br />
<br />
È consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:<br />
<br />
<pre> $ cd linux-2.6.16-ck5<br />
$ cp /boot/config-2.6.16-vanilla .<br />
$ make oldconfig </pre><br />
<br />
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.<br />
<br />
A questo punto è 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:<br />
<br />
<pre> $ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Se non abbiamo un kernel <code>-ck</code>, 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 <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.<br />
<br />
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):<br />
<br />
<pre>$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop --revision 0.1 kernel_image</pre><br />
<br />
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>.<br />
<br />
Per saperne di più sulla compilazione del kernel e la ''Debian way'': [[Debian Kernel Howto]].<br />
<br />
== Links ==<br />
'''''Con Kolivas''''':<br />
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]<br />
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]<br />
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]<br />
<br />
'''''Kernel''''':<br />
* [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
<br />
{{Autori<br />
|Autore=[[Utente:TheNoise|The Noise]]<br />
}}</div>Ombrahttps://guide.debianizzati.org/index.php?title=Apt-listbugs:_come_monitorare_i_bug&diff=36841Apt-listbugs: come monitorare i bug2014-11-09T11:02:21Z<p>Ombra: /* Utilizzo automatico */</p>
<hr />
<div>{{Versioni compatibili}}<br />
== Introduzione ==<br />
Spesso ci è capitato di installare dei pacchetti contenenti dei [[bug]], conosciuti anche prima del nostro download. Prima di installare un pacchetto, infatti, sarebbe opportuno fare una visitina su [http://bugs.debian.org questo] sito, dove vengono tracciati i bug segnalati. Questo motore di gestione dei bug è molto potente e funzionale, ma se non volessimo perdere tempo ogni volta? <code>apt-listbugs</code> è la risposta!<br/><br />
<code>apt-listbugs</code>, infatti, ci permette di essere informati sui bug presenti nel nostro sistema e presenti nei pacchetti che stiamo per installare; vediamo come utilizzarlo e configurarlo al meglio per le nostre esigenze!<br />
<br />
== Installazione ==<br />
Per installare apt-listbugs, è sufficiente un:<br />
<pre><br />
# apt-get install apt-listbugs<br />
</pre><br />
<br />
== Configurazione ==<br />
<code>Apt-listbugs</code> è già configurato per interagire con [[dpkg]] e [[APT]] in quanto aggiunge un file nella directory <code>/etc/apt/apt.conf.d/</code>, che contiene le direttive da eseguire al termine del download dei pacchetti e prima della loro installazione.<br/><br />
Inoltre viene creata la directory <code>/etc/apt/listbugs/</code>; essa conterrà dei file di supporto per il normale funzionamento del programma, come ad esempio il file <code>ignore_bugs</code>, contenente la lista dei bug ignorati durante l'installazione dei pacchetti.<br />
<br />
== Utilizzo ==<br />
L'utilizzo base del programma è semplicissimo e può avvenire in due modi distinti<br />
;automaticamente:ogni volta che installeremo o aggiorneremo dei pacchetti.<br />
;manualmente:eseguendo <code>apt-listbugs</code> da linea di comando. Utile per conoscere tutti bug (e il loro stato) relativi ad un pacchetto.<br />
<br />
=== Utilizzo automatico ===<br />
Ogni volta che aggiorniamo o installiamo un pacchetto, <code>apt-listbugs</code> interrogherà i server Debian per sapere se ci sono dei bug aperti per le applicazioni installate; raccolte le informazioni ci avvertirà in caso di bug (altrimenti lascerà continuare normalmente il processo di installazione).<br />
In caso di presenza di bug, mostrerà a video la lista di quelli presenti (sia aperti che chiusi); ecco un esempio:<br />
<pre><br />
Retrieving bug reports... Done<br />
critical bugs of login (1:4.0.3-30.7 -> 1:4.0.3-30.8) <done><br />
#290803 - login: /var/log/btmp is created with insecure permissions<br />
critical bugs of postfix (2.1.4-5 -> 2.1.5-5) <done><br />
#288728 - postfix gives up with warning: no MX host for xxxx.com has a valid A record<br />
grave bugs of mysql-server (4.0.23-1 -> 4.0.23-3) <open><br />
#291378 - mysql-server: Security fixes pending in experimental version<br />
grave bugs of postfix (2.1.4-5 -> 2.1.5-5) <open><br />
#285111 - postfix: newaliases not working due to some library problem<br />
#291031 - postfix: Upgrade from Postfix 2.1.4-5 to 2.1.5-4 fails #3<br />
#292086 - stock installed master.cf file causes postfix to fail to start<br />
Summary:<br />
mysql-server(1 bug), login(1 bug), postfix(4 bugs)<br />
Are you sure you want to install/upgrade the above packages? [Y/n/?/...]<br />
</pre><br />
<br />
<br />
Come potete vedere, visualizza una lista di bug presenti, divisi per gravità (prima quelli 'Critical', poi quelli 'Grave') e poi per pacchetto. Inoltre i bug sono contraddistinti da 2 [[tag]]: '''<done>''' e '''<open>''':<br/><br />
'''<done>''' rappresenta un bug corretto<br/><br />
'''<open>''' rappresenta un bug ancora aperto<br/><br />
[[Severità | Qui]] è visibile la descrizione dei livelli di gravità dei bug (severities).<br />
<br />
Di default <code>apt-listbugs</code> mostrerà i bug appartenenti alle prime tre categorie.<br />
<br />
Tornando ad <code>apt-listbugs</code>, in caso di bug rilevati, viene chiesto cosa fare.<br />
Le opzioni disponibili sono:<br/><br />
; <code>y</code>: continua l'installazione ignorando i bug trovati;<br/><br />
; <code>n</code>: interrompe immediatamente l'installazione;<br/><br />
; <code><num></code>: inserendo il numero del bug (quello preceduto da #) è possibile ottenere maggiori informazioni riguardo al bug;<br/><br />
; <code>r</code>: mostra la lista dei bug (comodo dopo la visualizzazione dei dettagli, ad esempio);<br/><br />
; <code>p</code>: esegui il pinning di tutti i pacchetti segnalati nel bug report (cioè lo 'blocca' e non lo installa); questa opzione richiede l'uscita da '''apt-get''' e una riesecuzione del comando di installazione/aggiornamento precedentemente lanciato;<br/><br />
; <code>p <pkg></code>: esegue il pinning del pacchetto indicato;<br/><br />
; <code>i</code>: ignora il bug corrispondente a (per evitare il pinning di pacchetti il cui bug è segnato come "done");<br/><br />
; <code>?</code>: mostra un piccolo help con le opzioni utilizzabili;<br/><br />
; <code>w</code>: mostra il report bug in html (mai usato).<br />
<br />
Il funzionamento, quindi, è molto semplice: basta leggere con attenzione la lista dei bug riscontrati ed agire di conseguenza!<br/><br />
Ricordo che, nel caso di pinning di anche un solo pacchetto, è necessario ricominciare il processo di aggiornamento/installazione.<br />
<br />
In caso di [[pinning]] di uno o più pacchetti, è necessario (al prossimo aggiornamento) rimuoverlo da <code>/etc/apt/preferences</code>.<br />
Nel file <code>/etc/apt/preferences</code>, ad esempio, trovo questo blocco relativo a postfix (prima l'ho pinnato, visto che il bug comprometteva gravemente il funzionamento):<br />
<pre><br />
Explanation: Pinned by apt-listbugs at Mon Jan 31 22:17:38 CET 2005<br />
Explanation: #288728: postfix gives up with warning: no MX host for xxxx.com has a valid<br />
A record<br />
Explanation: #285111: postfix: newaliases not working due to some library problem<br />
Explanation: #291031: postfix: Upgrade from Postfix 2.1.4-5 to 2.1.5-4 fails #3<br />
Explanation: #292086: stock installed master.cf file causes postfix to fail to start<br />
Package: postfix<br />
Pin: version 2.1.4-5<br />
Pin-Priority: 1000<br />
</pre><br />
<br />
al prossimo aggiornamento, per controllare se sono presenti nuove versioni di postfix, dovrò rimuovere queste indicazioni, altrimenti il pacchetto in questione verrà assunto sempre come 'aggiornato'.<br/><br />
Se non sono mai state fatte modifiche al file <code>/etc/apt/preferences</code> (soprattutto per quanto riguarda pinning per l'utilizzo di più release insieme) lo si può tranquillamente eliminare prima di ogni aggiornamento.<br />
<br />
{{Box|Nota|Nelle verioni più recenti la directory e il file in cui apt-listbugs scrive i pacchetti bloccati sono stati modificati in <br/> <code>/etc/apt/preferences.d/apt-listbugs</code>}}<br />
<br />
Se si vuol disabilitare la ricerca dei bug da parte di <code>apt-listbugs</code> ad ogni aggiornamento/rimozione dei pacchetti, basta commentare le righe presenti nel file <code>/etc/apt/apt.conf.d/10apt-listbugs</code> .<br />
<br />
== Conclusioni ==<br />
<code>apt-listbugs</code> è senza dubbio uno strumento utilissimo, in quanto previene l'installazione di pacchetti che possono rendere inutilizzabile o instabile la nostra Debian Box.<br/><br />
Ovviamente non viene a sostituire le normali visite al sito http://bugs.debian.org, dove sono elencati tutti i bug di tutti i pacchetti presenti in Debian (che invito a controllare prima di chiedere aiuto per un comportamento strano di una applicazione).<br />
<br />
{{Autori<br />
|Autore=[[User:MaXeR|MaXeR]]<br />
|Verificata_da=<br />
:[[Utente:S3v|S3v]] 16:32, 26 feb 2014 (CET)<br />
|Numero_revisori=1<br />
}}<br />
<br />
[[Categoria:Apt]]</div>Ombrahttps://guide.debianizzati.org/index.php?title=Adozione_Guide&diff=27560Adozione Guide2012-03-10T19:20:01Z<p>Ombra: /* Lista Adozioni */</p>
<hr />
<div><!-- ------INIZIO INTESTAZIONE PAGINA------ --><br />
{|style="-moz-border-radius: 0.5em; width:100%; height:150px; margin-top:+.7em; background-color:#d8bfd8; border: 1px solid #ccc; font-size:160%" <br />
|-<br />
| align="center" | [[Immagine:Swirl-100-alpha.png]] ||'''Benvenuti sulla pagina dedicata al Progetto Adozioni di [[Guide@Debianizzati.Org:About|Guide@Debianizzati.Org]]''' <br />
|}<br/><br/><br />
<!-- ------FINE INTESTAZIONE------ --><br />
<br />
=Introduzione=<br />
Durante il processo di revisione del Wiki, ci siamo resi conto che esistevano un gran numero di guide che, pur essendo molto buone e trattando argomenti interessanti, erano spesso datate oppure incomplete e in qualche modo "abbandonate" dall'autore allo stadio di Stub.<br/><br />
Ci è sembrato uno spreco decidere per la cancellazione di queste guide, tuttavia non era possibile, nell'ambito di un processo di razionalizzazione della struttura del Wiki, mantenerle così com'erano.<br/><br />
Così è nata l'idea dell'"adozione delle guide": guide a tutti gli effetti '''orfane''' e che potrebbero sicuramente rappresentare materiale utile per la comunità se meglio gestite e valorizzate.<br />
Naturalmente nel caso in cui questa iniziativa non abbia il successo sperato, vorrà dire che gli argomenti che queste guide trattano non sono, semplicemente, argomenti necessari all'utente medio e che le guide possono essere quindi cancellate senza timore: viene meno infatti la loro funzione principale, che non è quella di mero esercizio stilistico, bensì di condivisione del know-how su un determinato argomento.<br />
<br />
=In cosa consiste=<br />
L'adozione di una guida comporta in genere la revisione e l'ampliamento della guida stessa e il più delle volte riguarda guide che sono valide dal punto di vista qualitativo, ma che sono o troppo brevi e necessitano quindi un [[#Ampliamento|ampliamento]]; o datate, e si interverrà allora con un [[#Aggiornamento|aggiornamento]]; oppure incomplete, e in tal caso sarà opportuna una [[#Integrazione|integrazione]].<br />
<br />
==Ampliamento==<br />
L'ampliamento di una guida si attua semplicemente mantenendo più o meno la struttura di base impostata dall'autore iniziale e inserendo nuove sezioni e/o nuovi spunti di riflessione per il lettore: a volte basta inserire una sezione '''Link''' finale (se non è presente) con i collegamenti e gli approfondimenti interessanti inerenti l'argomento della guida; altre volte può essere necessario un intervento più incisivo.<br />
Provate a guardare la documentazione ufficiale, a capire se vi sono aspetti che non sono stati trattati, se ci sono progetti nuovi da segnalare o incompatibilità particolari: insomma provate a rendere quanto più possibile completa la guida.<br />
<br />
==Aggiornamento==<br />
L'aggiornamento consiste semplicemente nel modificare le parti della guida che sono ormai obsolete con indicazioni attuali. Ciò significa verificare l'esistenza dei pacchetti citati nella guida, delle versioni di tali pacchetti, della necessità di installare o meno delle patch, della necessità di ricompilare o meno il kernel per far funzionare determinato hardware, eccetera.<br />
È un'operazione importante perché consente di mantenere fruibile della documentazione che altrimenti andrebbe persa.<br />
<br />
==Integrazione==<br />
L'integrazione di una guida consiste nello scrivere ed inserire le parti che mancano della guida stessa, a volte si tratta di un singolo paragrafo, a volte si tratta di metà guida. Non richiede necessariamente un impegno eccessivo, basta scegliere una guida quasi del tutto completa!:)<br />
<br />
= Come contribuire =<br />
Per adottare una guida basta consultare l'elenco delle guide "da adottare", consultabile alla pagina [[:Categoria:Da Adottare]] e scrivere qui di seguito quale guida si intende adottare e il proprio nome utente. Mi raccomando: se non avete più intenzione di sistemare la guida che avete adottato basta cancellarvi dalla lista, così che la guida sia disponibile nuovamente.<br />
<br />
<br />
==Lista Adozioni==<br />
<br />
; [[Utente:Risca86 | Risca]] '''adotta:''' : [[Debian_e_iptables]]; <br />
: [[Debian e sintesi vocale: installazione di festival e mbrola]];<br />
: [[Wiimote]].<br />
<br />
; [[Utente:Kmc | kmc]] '''adotta:''' : [[I2c_e_lm-sensors]].<br />
<br />
; [[Utente:janov | janov]] '''adotta:''' : [[Come_effettuare_una_connessione_remota_SSH_da_Windows_a_Linux]].<br />
<br />
; [[Utente:Pmate | pmate]] '''adotta:''' : [[Reportbug]];<br />
: [[Clustering con PVM]];<br />
: [[Impostare la lingua italiana nel sistema]].<br />
<br />
; [[Utente:Ernestus | Ernestus]] '''adotta:'''<br />
: [[Abilitare ESound con ALSA in Gnome]].<br />
<br />
; [[Utente:s3v | s3v]] '''adotta:''' <br />
: [[Aggiungere un motore di ricerca al quicksearch di Firefox]]<br />
: [[Firefox Tips and tricks]]<br />
: [[Firefox: Disattivare la ricerca con il tasto centrale]]<br />
: [[Il vostro motore di ricerca da Firefox]]<br />
: [[Installare estensioni per Firefox comuni a tutti gli utenti]]<br />
<br />
; [[Utente:faak | faak]] '''adotta:''' : [[Attivare l'audio in Gnome]];<br />
<br />
; [[Utente:ferdybassi | ferdybassi]] '''adotta:'''<br />
: [[Java in Debian]]<br />
<br />
; [[Utente:Skizzhg | skizzhg]] '''adotta:'''<br />
: [[Tabella Software]]<br />
<br />
; [[Utente:Ombra | Ombra]] '''adotta:'''<br />
: [[Patch Con Kolivas: incrementare le prestazioni desktop]]<br />
<br />
[[Categoria:Wiki]]</div>Ombra