Tag Archives: optimization

Primi test sull’Eee 900

Prima ancora di iniziare a usarlo, ho iniziato i benchmark.

Magari non sono del tutto normale, ma avevo già provato la Xandros per qualche ora sull’Eee 701 di un amico, quindi prima ancora di acquistare l’Eee avevo già decise che ci avrei installato Debian. Avevo quindi bisogno di sapere le prestazioni del sistema originale, in modo da valutare se con una Debian ottimizzata “a mano” le prestazioni sarebbero state migliori o peggiori.

Cronometro alla mano (quello incluso nel cellulare…) ho iniziato a misurare un po’ di tempi. Non saranno precisi al millesimo di secondo, ma mi servono soprattutto per avere un’idea di massima. Vediamoli. Continue reading

Multi core e programmazione concorrente

Bisogna adeguarsi al mondo che cambia…

Qualche giorno fa Donald Knuth, uno dei mostri sacri della programmazione, autore di vari libri della serie Art of Computer Programming, ha rilasciato un’intervista a InformIT in cui, tra le altre cose, esprime un parere estremamente negativo sulla attuale tendenza dei produttori hardware verso le architetture multi-core.

Il suo pensiero si può riassumere più o meno con: i produttori hardware non sanno più come migliorare le prestazioni dei loro chip, quindi hanno riciclato l’idea del multiprocessing, mantenendo le prestazioni fisse (o inferiori) su un singolo core, e mettendo diversi core per poter dire che la CPU è più veloce. In questo modo fanno ricadere la “colpa” nel mancato rispetto della legge di Moore (il raddoppio della potenza di elaborazione ogni 18 mesi) sui programmatori, dicendo che non sono in grado di scrivere software adatto alle nuove architetture.

Io, come diceva un saggio, sono “completamente d’accordo a metà col mister”. Continue reading

Ottimizzare Linux (3)

Accorcio il titolo dei post, perché ormai non si tratta più solo di portatili e server, ma rientrano anche i client. L’argomento di oggi infatti è totalmente trasversale e riguarda tutti gli usi possibili.

Per motivi di efficienza nell’allocazione delle risorse, ogni (buon) programma su Linux si appoggia a una serie più o meno lunga di librerie condivise, le cosiddette Shared Objects, riconoscibili per l’estensione .so

Queste librerie sono gestite in modo da averne in memoria una sola copia in ogni momento, e tutti i software che hanno bisogno delle funzioni fornite leggono dalla stessa copia in memoria. In questo modo si risparmia RAM e tempo di caricamento da disco, in quanto la libreria viene letta da disco una volta sola e poi viene collegata (link) agli eseguibili che ne fanno richiesta.

Ma c’è un problema: ogni programma ha una sua area di memoria isolata dagli altri programmi, e il kernel deve mappare all’interno di ognuna di queste aree le diverse librerie, e ricalcolare tutti gli offset delle funzioni all’interno del binario che le richiama. Questa operazione ha il vantaggio di slegare completamente il binario dalle librerie (possiamo avere due versioni della stessa libreria in memoria con due software diversi che le usano, e caricarli quando vogliamo), ma ha lo svantaggio che, al caricamento del programma, tutte queste mappature devono essere ricalcolate.

Ma c’è, naturalmente, un modo per rendere più efficiente questa operazione.

Continue reading

Ottimizzare Linux per dispositivi mobili e server (2)

Da un po’ sto raccogliendo informazioni per la seconda parte di questo articolo, cercando di estrapolare solo suggerimenti non troppo complicati da applicare.

Durante questa ricerca sono incappato in due documenti che raccolgono una messe di informazioni su come configurare varie componenti in diversi modi.

Non sono sempre “digita e dimentica”, anzi, a volte richiedono un’analisi preventiva dell’hardware presente, e un tuning dei parametri per funzionare al meglio, ma sono una bella lista abbastanza completa. Alcune cose le ho già scritte nella prima parte di questo articolo.

Ma ecco i link: Velocizzare Debian e Recuperare spazio sull’HD.

I consigli sono diretti a utenti Debian, ma la maggior parte sono validi per qualsiasi distribuzione.

Non tutti sono da applicare ad occhi chiusi, ma richiedono una minima conoscenza del (sotto-)sistema che si sta configurando. Magari in futuro ne estrapolerò qualcuno e lo approfondirò qui. Nel frattempo ne approfitto per ringraziare il progetto Linguistico per queste e per le altre guide che hanno pubblicato, oltre che per i dizionari e i thesaurus in italiano, naturalmente.

Risparmio energetico: cosa usare?

A volte, quando mi trovo davanti un nuovo PC su cui voglio abilitare il risparmio energetico, mi trovo a domandarmi quale sia il modulo del kernel giusto da caricare, vista la diversità tra il nome del driver e quello che il produttore dà al chip in questione. Ecco quindi una lista dei moduli per le CPU più comuni:

  • powernow_k6: per le CPU AMD K6 mobile (K6-2+ e K6-3+)
  • powernow_k7: per AMD Athlon, Duron e i Sempron a 32 bit
  • powernow_k8: per le CPU AMD a 64 bit: Athlon 64, Turion 64, Sempron 64, Opteron 64
  • p4_clockmod: per pentium 4, Celeron D, Pentium D, Celeron M
  • speedstep_centrino: per Pentium M (Centrino), Core Duo, Core 2 Duo
  • longrun: per CPU Transmeta
  • longhaul: per CPU Via Cyrix (quelli delle Epia, per esempio)
  • e_powersaver:per CPU VIA C7

Purtroppo ho scoperto anche che il p4_clockmod che devo usare per il mio Pentium-D non risparmia energia, ma aiuta solamente a ridurre la temperatura.

Per automatizzare la gestione del frequency scaler ci sono diversi programmi, ma quello che trovo migliore è powernowd che, nonostante il nome, è compatibile con tutte le CPU, perché non è altro che un’interfaccia al sysfs del kernel, che si occupa di tutto. Powernowd non fa altro che verificare il carico sulla CPU a intervalli costanti (configurabili, di default una volta al secondo) e, se sale oltre un certo limite (di default 80%, io l’ho impostato al 50%) aumenta la frequenza della CPU secondo un algoritmo, anch’esso configurabile (di default schizza al massimo e poi scende lentamente, ma si può impostare al contrario, oppure che salga e scenda gradualmente). Quando l’utilizzo scende sotto una certa soglia (di default 20%) cala la frequenza secondo l’algoritmo impostato. Non ha un file di configurazione, solo alcuni semplici flag che, in Debian, si impostano in /etc/default/powernowd in modo che lo script di avvio li trovi.

Mentre testavo questi aggeggini mi sono capitati davanti anche due pacchetti deb molto utili: cpufrequtils e sysfsutils. Il primo fornisce alcuni comandi per interrogare e impostare i parametri di cpufreq, appunto. Usando powernowd non dovrebbero essere necessari (gestisce tutto lui), ma cpufreq-info può essere utile per avere informazioni dettagliate sulle capacità di risparmio energetico della CPU.

sysfsutils fornisce il comando systool per interrogare i vari sottosistemi riconosciuti dal kernel attraverso il file-system virtuale /sys. Onestamente non l’ho usato molto, e non saprei nemmeno immaginarne un uso, che sicuramente c’è per utilizzi avanzati.

Ottimizzare Linux per dispositivi mobili e server (1)

Ci sono molti piccoli accorgimenti che si possono adottare per adattare il nostro sistema Linux all’uso che lo aspetta, che si tratti di un sistema desktop o di un server.

Martin Michlmayr ha pubblicato un paio di articoli su come ottimizzare Linux per l’uso su dispositivi embedded (NSLU2 nel caso specifico): per la riduzione della memoria occupata e per il funzionamento su memorie flash.

Ma molti consigli valgono anche in generale per migliorare le prestazioni di Linux, sia su dispositivi portatili che non. Ne traduco qui alcuni e mi permetto di aggiungerne altri che possono tornare utili, con un’occhio all’uso desktop e uno all’uso server. Continue reading