Indice Guide: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
Riga 1: Riga 1:
{{stub}}
Uniso � un tool molto comodo che risolve uno dei pi� grandi problemi dei possesori di portatili (dopo il risparmio energetico, ovviamente): la sincronizzazione.
== Introduzione ==
Le patch ''Con Kolivas'' (<tt>CK</tt>) per il [[kernel]] di linux sono una serie di patch che incrementano notevolmente le prestazioni desktop implementando uno scheduler innovativo (''staircase''), ottimizzando l'uso dello swap (''swap-prefetching'') e del sotto-sistema disco, e aggiungendo dei nuovi livelli di priorit� al di fuori di quelli tradizionalmente impostabili con <code>nice</code>.


Con queste patch si ottiene un sistema desktop estremamente resposivo ed ottimizzato per l'uso interattivo.
Mi trovo spesso nella situazione in cui un semplice rsync non basta per sincronizzare le directory documenti, dato che ci sono state modifiche da entrambe le parti! Cos� mi viene in aiuto unison, che permette di gestire questo genere di situazioni.


Se vi siete chiesti come mai Gentoo o Archlinux sono cos� veloci su desktop la risposta st� principalmente nell'inclusione delle patch <tt>CK</tt> nei loro kernel di default.
Unison � utilizzabile sia da interfaccia grafica, sia da riga di comando. In questa guida le affronteremo entrambe!


== Descrizione della patch ==
__TOC__


=== Staicase Scheduler ===
= Installazione =
I pacchetti sono due: ''unison'' ed ''unison-gtk'':
<pre>
# apt-get install unison unison-gtk
</pre>


Le patch <tt>ck</tt> includono l'innovativo ''staircase scheduler''. Questo � uno schedule con una logica e una implementazione pi� semplice di quello usato attualmente nel kernel linux (''ingo scheduler'') che si presta ottimamente all'uso interattivo, senza penalizzare le prestazioni server. Attualmente � in discussione la possibile sostituzione dello scheduler di linux con lo staircase.
= Utilizzo =
== Riga di Comando ==
L'utilizzo � semplice ed intuitivo; la sintassi da utilizzare � la seguente:
<pre>
$ unison  root1  root2  [opzioni]
</pre>


Le uniche perplessit� sembrano essere sul fatto se lo ''staircase scheduler'' abbia prestazioni uguali allo scheduler attuale su sistemi multiprocessori (sui quali lo scheduler attuale � altamente ottimizzato).
il comando permette la sincronizzazione tra le due directory. � possibile indicare la directory di un host remoto utilizzando il protocollo ssh:
<pre>
ssh://username@server/directory
</pre>


=== Swap prefetching ===
Supponendo di voler sincronizzare la directory Documenti presente sul dekstop con quella presente sul laptop, possiamo usare il seguente comando:
Altra patch inclusa � la cos� detta ''swap prefetching''. In pratica questa patch ottimizza l'uso dello swap precaricando delle pagine non appena della ram risulta disponibile (non quando le pagie sono richieste come sul [[kernel vanilla]]), e questo velocizza notevolmente il passaggio tra le grosse applicazioni se ad esempio se ne chiude una. Inoltre vengono tenute in swap anche pagine caricate in ram in modo da rendere immediato un successivo swap-out.
<pre>
$ unisoc ssh://username@ipdesktop/Documenti Documenti
</pre>


Con questa patch l'utilizzo apparente dello swap sar� maggiore ma in realt� questo � dovuto alle ottimizzazioni fatte per incrementare di prestazioni.
Verr� avviato il processo che controller� lo stato delle due directory; al termine del controllo verranno poste delle domande sul da farsi, come nell'esempio sottostante:
<pre>
Looking for changes
  Avis/5 minuti/PER CONOSCERE I NOSTRI ESAMI.doc
  Avis/Verbali/2004/20040609.pdf
  Universita/Architettura di Elaboratori/Sis/Introduzione_a_SIS-Algebra_di_Commutazione.pdf
  Universita/Sistemi Operativi/Slide/filesys-1_x2.pdf
  Universita/Sistemi Operativi/Slide/synchro-2_x1.pdf
  Waiting for changes from server
Reconciling changes


=== Nuove priorit�: SCHED_ISO, SCHED_IDLE ===
knio          local
Normalmente i processi in linux hanno priorit� SCHED_NORMAL. I processi di questa classe possono avere un [[nice]] da 99 a -20 che indica la loro priorit� all'interno della classe SCHED_NORMAL. Su linux sono presenti altre due classi di priorit�:
chgd dir <-?-> deleted    Avis/DonareAvis  []   </pre>
Si possono individuare 5 colonne:
# host1: stato del file
# verso dell'azione
# host2: stato del file (se vuoto indica ''non presente'')
# File/Directory in questione
# Scelta suggerita


; SCHED_NORMAL: questa �, se non diversamente specificato, priorit� dei processi in linux. I processi di questa classe possono avere un [[nice]] da 99 (''minima'') a -20 (''massima'') che indica la loro priorit� all'interno della classe SCHED_NORMAL
Se inseriamo un '?', otterremo una breve guida sulle opzioni disponibili:
; f : sostituisci le raccomandazioni di Unison (equivale a premere invio)
; I : ignora questa directory in modo definitivo
; E : ignora i file con questa estensione in modo definitivo
; N : ignora i percorsi che finiscono con questo nome
; m : effettua un merge tra i due file
; d : mostra le differenze
; x : mostra i dettagli
; l : elenca tutti i cambiamenti suggeriti
; p : vai alla scelta precedente
; b : come p
; g : procedi immediatamente ad applicare i cambiamenti
; q : esci senza effettuare alcun cambiamento
; / : salta
; > : effettua le modifiche da host1 a host2
; . : come >
; < : effettua le modifiche da host2 a host1
; , : come <


; SCHED_BATCH : questa priorit� viene usata per processi non interattivi (batch). I processi di questa classe avranno priorit� inferiore a qualsiasi processo SCHED_NORMAL.
== Interfaccia Grafica ==
L'interfaccia grafica offre uno strumento sicuramente pi� intuitivo e facile da usare. A differenza della riga di comando, per�, consente la creazione di profili (che verranno salvati in ~/.unison/ ), permettendo di riutilizzare ogni profilo in modo rapido (viene conservato un database dello stato dei file).


; SCHED_FIFO: usata per processi realtime. Un processo SCHED_FIFO avr� priorit� superiore ad ogni altro processo (anche SCHED_NORMAL con nice -20). Normalmente processi con tali privileggi possono essere lanciati solo da root a meno di non usare [[Low-latency_2.6_kernel_per_applicazioni_audio_realtime#Modalit.C3.A0_realtime_e_realtime_scheduling|particolari tecniche]] per permettere anche a normali utenti di eseguire applicazioni realtime. I processi all'interno di questa classe possono avere una priorit� da 0 (''minima'') a 99 (''massima'').
Per avviare l'interfaccia grafica, eseguiamo ''unison-gtk''.


Le patch <tt>ck</tt> introducono due ulteriori livelli:
Se � la prima volta che lo avviamo, ci verranno chiesti dei dati (la directory locale, quella remota) e verr� automaticamente creato un profilo. Inoltre riceveremo un messaggio di avvertimento, che notificher� la mancanza del database di sincronizzazione, che verr� subito creato.


; SCHED_ISO : questa � la priorit� chiamata ''soft realtime''. Infatti i processi di questa classe avranno priorit� superiore ai processi SCHED_NORMAL ma non sono necessari i privileggi di root per eseguire programmi con questa priorit�. Potremmo impostare ad esempio il nostro player audio preferito su SCHED_ISO, e non importa quanto sia carico il sitema non avremo mai salti nell'audio.
[[Immagine:Unison.jpg|thumb|center|Schermata riepilogativa di Unison]]


; SCHED_IDLE: questa classe di processi viene eseguita solo quando il processore � in IDLE. Potremo lanciare compilazioni di kernel, aggiornamenti di sitema, pesanti cron jobs usando questa priorit� e non noterermo il bench� minimo degrado delle prestazioni durante il nostro utilizzo interattivo.
Al termine della sincronizzazione, verr� mostrata una schermata riepilogativa, che mostrer� le azioni consigliate (direttamente nella tabella) e le opzioni disponibili (sottoforma di tasti)!


Quando lanciamo un processo in linux questo sar� automaticamente SCHED_NORMAL. Per lanciare processi con altre classi di priorit� bisogna usare gli <tt>schedtools</tt>. E' presente il seguente repository per debian:
= Conclusioni =
 
Questa piccola introduzione mostra l'utilizzo base di questo potente strumento. Nella directory /usr/share/doc/unison presente dell'ottima manualistica, che mostra tutti i possibili utilizzi di questo programma ;-)
deb http://users.tpg.com.au/sigm/debian sid main
 
''(anche se indicato per sid anche su etch funziona senza problemi)''
 
Ecco alcuni esempi:
 
schedtools -D -e apt-get dist-upgrade # aggiornare in modalit� SCHED_IDLE
 
schedtools -I -e xmms                # xmms in modalit� SCHED_ISO
 
schedtools -I $$                      # trasforma la shell corrente in SCHED_ISO
 
Per ulteriori informazioni rimando alla semplice e chiara pagina: <tt>man schedtools</tt>
 
== Installazione ==
 
Le patch <tt>ck</tt> possono essere scaricate da http://www.kernel.org:
 
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/
 
e si applicano al primo kernel vanilla stabile di ogni serie. Ad esmpio l'ultimo kernel stabile � attualmente il 2.6.16.4 ma le patch ck si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.16.4. Attualmente l'ultimo patch set ck � il [http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/2.6.16/2.6.16-ck5/ 2.6.16-ck5], ed il file da scaricare e porre in <tt>/usr/src/</tt> il seguente:
 
* [http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/2.6.16/2.6.16-ck5/patch-2.6.16-cks5.bz2 patch-2.6.16-cks5.bz2]
 
Una volta scompattati i sorgenti del kernel vanilla in <tt>/usr/src/</tt> si possono patchare con:
 
$ cd /usr/src/linux-2.6.XX/
$ bzcat ../patch-2.6.XX-ckY.bz2 | patch -p1
 
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da ripecchiare la patch usata:
$ cd /usr/src
$ mv linux-2.6.16 linux-2.6.16-ck5
 
E' consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:
 
$ cd linux-2.6.16-ck5
$ cp /boot/config-2.6.16-vanilla .
$ make oldconfig
 
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.
 
A questo punto � possibile compilare il kenrnel, ovviamente [[Debian Kernel Howto|alla debian-way]]. Usiamo la priorit� pi� bassa possibile, se siamo gi� su un kernel ck:
 
$ schedtools -D -e time fakeroot make-kpkg --append-to-version -desktop \
  --revision 0.1 kernel_image
 
In questo modo la compilazione non interferir� con il normale utlizzo interattivo del computer e avremo anche stampata la durata della compilazione con <code>time</code>.
== Links ==
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]
 
 
 
 
[[Categoria:Kernel]][[Categoria:Desktop]]