Passa ai contenuti principali

Velocizzare boot e avvio delle applicazioni in Debian / Ubuntu

tuned car 

Introduzione e Disclaimer
Cercare il tuning perfetto della propria distribuzione è sempre un argomento interessante per gli utilizzatori di GNU\Linux. Esistono diversi tool che sostanzialmente attraverso l'analisi dell'utilizzo medio delle applicazioni di un utente o del sistema intero, riescono a predisporre delle politiche di pre-caching dei file più utilizzati in memoria.
Il prezzo da pagare, come spesso accade nell'informatica, è quello di una maggiore occupazione della memoria RAM. Alcune soluzioni, inoltre, a seconda della macchina su cui vengono applicate possono addirittura essere controproducenti per le performance.
In ogni caso varrà la pena provarle, anche solo per il gusto di farlo anche se ricordo che quello che fate sulle vostre macchine seguendo questo post lo fate a vostro rischio e pericolo.

La macchina su cui sto facendo le prove è una Debian 7.

Preload
Preload è un programma eseguito come demone "adattivo" nel senso che raccoglie dati in background sull'utilizzo delle applicazioni e ne salva alcuni file in memoria. Come potrete immaginare tale soluzione va bene per utilizzi frequenti di apertura e chiusura degli stessi programmi in una sessione di lavoro, meno bene se si è soliti aprire un paio di applicazioni e tenere il desktop sempre aperto su quelle due.

sudo apt-get install preload

Alcune letture interessanti che descrivono pro e contro di questo pacchetto le trovate qui di seguito:
http://techthrob.com/2009/03/02/drastically-speed-up-your-linux-system-with-preload/
http://askubuntu.com/questions/110335/drawbacks-of-using-preload-why-isnt-it-included-by-default

Readahead
L'approccio di readahead è quello di produrre delle statistiche sull'utilizzo dei file del disco all'avvio del sistema e di anticipare ai riavvii successivi il caricamento di tali file. Il pacchetto disponibile per Debian è attualmente obsoleto perchè il team di sviluppo si sta concentrando sul meccanismo di avvio systemd. Il nuovo progetto è disponibile qui.
Nota: se usate un SSD (disco a stato solido) non andate avanti perchè tale sistema è inutile. Link

In questo articolo vedremo come utilizzare il pacchetto "obsoleto" perchè compatibile con la mia distro.

1. Installiamo il pacchetto. Da terminale eseguire il seguente comando:

sudo apt-get install readahead-fedora

2. Attivare readahead modificando GRUB. Una volta installato dovremo attivare readahead direttamente dal bootloader GRUB per farlo basta modificare il file di configurazione di GRUB. Da terminale eseguire il seguente comando:

sudo nano /etc/default/grub

3. Inserire init=/sbin/readahead-collector tra quiet e splash. Il risultato dovrebbe essere qualcosa di simile a quanto segue:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="init=/sbin/readahead-collector quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

4. Salvare il file con Ctrl+x e poi s.
5. Aggiornare GRUB con il seguente comando da terminale:

sudo update-grub

6. Modificare la configurazione di readahead. Da terminale eseguire il seguente comando:

sudo nano /etc/readahead.conf

I parametri interessanti sono RAC_MAXTIME che indica per quanto tempo readahead debba campionare dati e TIMEOUT_SWITCH_TO_LATER che indica per quanto tempo il programma debba continuare l'analisi anche dopo l'avvio del server X. Il risultato dovrebbe essere come segue:

# Readahead config file

#
# RAC -- Read-Ahead-Collector
#

# Raw audit data
#RAC_RAWLOG="/var/log/readahead-rac.log"

# Added, timout for the collector while X is starting
TIMEOUT_SWITCH_TO_LATER="10"

# Rac automatically finish after N seconds
RAC_MAXTIME="100"

# Path to init process
RAC_INITPATH="/sbin/init"

# Template of path where RAC will store final lists
# -- %s will be replaced by "early" or "later"
RAC_LISTSPATH="/etc/readahead.d/custom.%s"

# Ignore syscalls from:
RAC_EXECIGN="/sbin/readahead /usr/sbin/preload"

# Exclude dirs
RAC_EXCLUDE="/proc /sys /dev /var/log /var/run /var/lock /home /tmp /var/tmp /media /selinux /mnt /var/lib/exim4 /var/lib/preload /etc/network/run"

# A first filename in the list
# RAC_LISTBEGIN="/etc/init.d/readahead_early"

# A filename which is a separator between early and later readahead
RAC_LISTSEP="/etc/init.d/later-readahead"

# On/Off debug mode (see also "-d" option)
RAC_DEBUG="off"

# On debug mode all debug messages goes to this file
RAC_DEBUGLOG="/run/readahead-rac.debug"

Una lettura interessante è https://wiki.archlinux.org/index.php/Readahead-fedora

Conclusioni: SysVinit, Systemd, Upstart
Come già detto nell'introduzione alcune soluzioni sulla vostra macchina potrebbero addirittura peggiorare le performance. L'argomento rimane comunque interessante ed il fatto che in GNU\Linux esistano progetti di questo tipo rendono sicuramente l'ecosistema più ricco e vivo.
Altra osservazione da fare è che la seconda soluzione vista si basa sui dati ricavati dal boot del sistema ed anche di questo componente esistono varianti diverse che possono cambiare le carte in gioco. Le tecnologie più comuni sono SysV-Init attualmente usato da Debian, Systemd e Upstart di Canonical. Quest'ultimi due cercano di superare i limiti del primo. Se siete interessati all'argomento vi suggerisco le seguenti letture:
http://wiki.gentoo.org/wiki/Talk:Comparison_of_init_systems
http://www.phoronix.com/scan.php?page=news_item&px=MTQ5NzQ
http://en.wikipedia.org/wiki/Systemd
http://upstart.ubuntu.com/

Post popolari in questo blog

Se excel non aggiorna le formule

Oggi in ufficio è capitata una richiesta particolare. In un documento excel dopo aver eseguito un copia-incolla di una formula non si aggiornavano i risultati nelle celle interessate. Dopo attimi di perplessità dal fondo dell'ufficio il capo ci illumina con una funzione ai più sconosciuta e che ha risolto il problema: il tasto F9. Scusate la mia ignoranza in excel ma questo blog è pensato proprio per appuntare esperienze di vita informatica. Tutto sta nel fatto che i "calcolatori d'un tempo" non disponevano di una adeguata potenza di calcolo e nelle operazioni di copia-incolla si verificavano lunghe attese per l'aggiornamento. La soluzione adottata da MS è stata quella di inserire un'opzione per impedire l'aggiornamento automatico e forzarlo con una combinazione di tasti... il tasto F9!
Combinazioni utili per il calcolo delle formule F9 = calcola le formule modificate dall'ultimo calcolo in tutte le cartelle e fogli di lavoro aperte. MAIUSC + F9 = c…

Riflessioni sull'ordinamento

Gli algoritmi di ordinamento sono da sempre i più gettonati e interessanti dal punto di vista didattico (si veda la complessità computazionale) e funzionale (quasi tutti i programmi hanno almeno una funzione di ricerca). Proprio di questi giorni sono alcuni articoli di Programmazione.it dedicati a questo tema (link).Coding Horror in questo articolo presenta una provocazione molto interessante al di là delle opinioni personali:

The default sort functions in almost every programming language are poorly
suited for human consumption.
L'articolo pone l'attenzione sulla differenza tra l'ordinamento alfanumerico e quello ASCII solitamente usato nei metodi nativi dei linguaggi. Il discorso si ampia se poi pensiamo banalmente alla differenza tra Windows e GNU/Linux che è case sensitive.
Spesso i sistemi operativi e i linguaggi di programmazione realizzano ordinamenti rispettando l'ordine della tabella di codifica ASCII e non l'ordinamento naturale della lingua. I commenti a se…

Timeline dei Linguaggi di programmazione

O'Reilly ha reso disponibile per tutti gli appassionati un interessante poster in formato pdf in cui vengono riassunti 50 anni di storia dei linguaggi di programmazione.Il poster mostra una timeline colorata nella quale sono evidenziate le principali derivazioni tra i vari linguaggi... da vedere
http://www.oreilly.com/news/graphics/prog_lang_poster.pdf



fonte programmazione.it