darktable page lede image
darktable page lede image

Capitolo 10. Argomenti speciali

Questo capitolo analizza diversi argomenti tecnici che potrebbero aiutarvi a fare funzionare darktable su hardware particolare o ad ottimizzarne le performances. Parecchie altre informazioni tecniche e molti suggerimenti vengono anche trattati in modo molto approfondito nel blog che potete trovare sulla nostra homepage.

10.1. darktable e la memoria

darktable richiede parecchia memoria. Un semplice calcolo chiarisce il motivo. Se avete un'immagine da 20MPix darktable, per motivi ben precisi, la memorizza internamente come una cella a 4 x 32-bit a virgola mobile per ogni pixel. Quindi ogni immagine di questa dimensione richiede circa 300MB di memoria. Durante l'elaborazione dell'immagine è necessario utilizzare almeno due buffer per ogni modulo - uno per l'input e uno per l'output. Con un modulo più complesso il suo algoritmo potrebbe richiedere dei buffer intermedi delle medesime dimensioni. Senza alcuna ottimizzazione c'è bisogno di qualcosa tra i 600MB e i 3GB solamente per memorizzare ed elaborare i dati dell'immagine. Poi abbiamo, ovviamente, il codice e i dati delle librerie collegate dinamicamente, e non dimentichiamo altri buffer che darktable utilizza per memorizzare le immagini elaborate parzialmente per poterle mettere a disposizione rapidamente durante il lavoro (mip map cache). Quindi, approssimativamente, darktable vuole vedere almeno 4GB di memoria libera per funzionare senza problemi.

10.1.1. Memoria totale di sistema

Visto quanto sopra è evidente che il vostro computer ha bisogno di avere una memoria ben configurata per poter eseguire darktable. Suggeriamo un minimo di 4GB di RAM fisica più 4/8GB di spazio swap addizionale. Quest'ultimo è richiesto per permettere al sistema di allocare temporaneamente i dati non necessari sul disco e liberare la RAM fisica.

In linea teorica darktable può funzionare anche con meno RAM fisica bilanciata da un maggiore spazio swap. Tuttavia vi avvisiamo che il vostro sistema potrebbe diventare veramente «lentissimo» dato che dovrà leggere e scrivere parecchi dati dal disco rigido. Tanti utenti ci hanno segnalato che il sistema funziona ma tanti altri potrebbero trovarlo estremamente lento...

10.1.2. Spazio di indirizzamento disponibile

Oltre alla memoria totale di sistema c'è un altro fattore limitante: lo spazio di indirizzamento disponibile sulla vostra architettura hardware. La quantità di memoria che può essere indirizzata da un processo dipende dal numero di bit di indirizzamento che la vostra CPU vi mette a disposizione. Per una CPU con un registro di indirizzamento a 32-bit sono 2^32 bytes, ovvero un totale di 4GB. Questo è il limite massimo assoluto di memoria che un processo può utilizzare e, come abbiamo visto in precedenza, questa è una situazione molto critica per darktable.

La soluzione che darktable utilizza viene chiamata piastrellatura (tiling). Anziché processare l'immagine in un grosso blocco unico, viene spezzata in parti più piccole che sono quindi elaborate da ogni singolo modulo. Questa operazione richiede comunque un buffer in ingresso e in uscita unico ma i buffers intermedi possono essere abbastanza piccoli per rientrare nei limiti dell'hardware.

10.1.3. Frammentazione della memoria

Purtroppo, però, la storia non è ancora finita. C'è un effetto, chiamato frammentazione della memoria, che colpisce i software che hanno bisogno di gestire grosse quantità di memoria. Se uno di questi software dovesse allocare 5 volte 300MB in una sola volta per poi liberarla, ci aspetteremmo di averne nuovamente a disposizione 1,5GB. Spesso però questo non accade perché il sistema di allocazione della memoria potrebbe non vederla più come un'area contigua da 1,5GB ma come aree di 300MB allineate quindi, se non dovesse esserci una nuova area libera da 1,5GB la nuova allocazione di memoria fallirebbe. Durante l'esecuzione di un programma questo meccanismo perderebbe sempre più blocchi di memoria grandi in favore di blocchi più piccoli. La cache mip map di darktable 2.0 alloca molti piccoli blocchi di memoria per ogni anteprima così questo problema potrebbe essere ancora più grave. Per questo motivo, a partire da darktable 2.0, il supporto a 32-bit è deprecato.

10.1.4. Altre limitazioni

Come se tutto questo non fosse abbastanza, ci sono altre cose che potrebbero limitare il vostro accesso alla memoria. Su alcune vecchie schede madri potrebbe essere necessario attivare l'opzione «memory remapping» del BIOS per avere a disposizione tutta la memoria fisica installata. Inoltre se state usando un Sistema Operativo a 32-bit avrete probabilmente bisogno di un kernel con l'opzione «Physical Address Extension» (PAE) abilitata. Questo è spesso un caso tipico per Linux. Parecchie distribuzioni forniscono diversi kernel che possono avere o non avere il PAE attivato e voi dovrete scegliere quello giusto! Per controllare se il vostro sistema è correttamente configurato lanciate il comando «free» dall'interno di un terminale ed esaminatene l'output. Se vedete meno RAM di quella fisicamente installata avete un problema da correggere: ad es. avete installato 4GB di RAM ma il vostro sistema ne vede solo 3GB o meno. Consultate il manuale del vostro BIOS e le informazioni che trovate sulla variante del kernel del vostro Linux per ulteriori informazioni.

10.1.5. Configurare darktable su sistemi a 32-bit

Come avrete già capito i sistemi a 32-bit sono ambienti veramente difficili per darktable. Molti utenti utilizzano darktable normalmente su sistemi di questo tipo se le richieste minime in termini di memoria totale di sistema e le accortezze menzionate nel capitolo precedente sono state rispettate.

Ci sono diversi parametri che richiedono attenzione affinché il sistema funzioni. Se fate un'installazione da zero darktable verrà configurato con impostazioni di sicurezza predefinite. Tuttavia, se state aggiornando una vecchia versione di darktable (ad es. avete la 0.9.3 e aggiornate alla 1.0), può accadere che vi ritroviate con dei parametri di configurazione non ottimali. Come conseguenza potrebbe accadere che darktable termini di funzionare senza preavviso o, molto probabilmente, non sarete in grado di importare un nuovo rullino. Uno dei sintomi più evidenti è la comparsa dei teschi al posto delle anteprime.

If this is the case, take a minute to optimize the preference settings in this case. You will find them under «cpu / gpu / memory» (Sezione 8.8, «Cpu / gpu / memory») in darktable's preference dialog. You should also find these parameters as configuration variables in $HOME/.config/darktable/darktablerc and edit them there.

Qui sotto trovate una breve spiegazione dei relativi parametri e dei valori proposti:

numero di elaborazioni in background

Questo parametro definisce il numero massimo di operazioni che sono consentite in parallelo durante l'importazione dei rullini o altre operazioni in background. Per ovvie ragioni su sistemi a 32-bit si può avere solo un'operazione particolarmente avida di risorse alla volta. Quindi è necessario impostare questo parametro su 1: un valore più alto vi ucciderà.

limite di memoria (in MB) per il tiling

Questo parametro indica a darktable quanta memoria (in MB) si dovrebbe presumere di avere a disposizione per memorizzare dei buffer delle immagini durante le operazioni dei moduli. Se un'immagine non può essere elaborata entro questi limiti in un unico blocco, la piastrellatura elaborerà l'immagine in più parti, una dopo l'altra. Impostate questo valore a meno di di 500 come punto di partenza. Successivamente potrete sperimentare se è possibile aumentarlo un po' al fine di ridurre l'overhead della piastrellatura.

limite di memoria (in MB) per un singolo buffer nel tiling

Questo è un secondo parametro che controlla la piastrellatura. Imposta un limite inferiore per la dimensione del buffer dell'immagine intermedia in megabytes. Il parametro è necessario per evitare eccessiva piastrellatura in alcuni casi (per alcuni moduli). Impostate questo parametro su un valore di sicurezza uguale a 8. Potete tentare di aumentarlo progressivamente fino a 16 in un secondo momento.

memoria in megabytes da utilizzare per la cache delle anteprime

Questo parametro controlla quante anteprime (o mip maps) possono essere memorizzate in una volta sola. Per partire potete inserire un valore di 256MB. Dal momento che a partire da darktable 2.0 la cache alloca una serie di piccoli buffer per ogni anteprima, questa cosa causa una notevole frammentazione della memoria. Come spiegato prima questo è un problema per i sistemi a 32-bit. E per questo motivo a partire da darktable 2.0 il supporto a 32-bit è deprecato.

10.1.6. darktable su sistemi a 64-bit

Non c'è molto da dire qui. Ovviamente anche un sistema a 64-bit richiede una sufficiente quantità di memoria quindi 4GB più la swap resta un buon punto di partenza. D'altra parte le architetture a 64-bit non soffrono delle limitazioni di quelle a 32-bit come il limitato spazio di indirizzamento e la frammentazione.

Gran parte delle moderne CPU Intel o AMD a 64-bit hanno spazi di indirizzamento disponibili per diversi Terabytes. La parola «moderne» è relativa in questo contesto: tutte le CPU AMD e Intel prodotte a partire, rispettivamente, dal 2003 e 2004 erano disponibili anche a 64-bit. Linux a 64-bit è disponibile da parecchi anni.

Tutte le maggiori distribuzioni Linux permettono di scegliere se installare un sistema a 32 o a 64-bit senza aggravio di costi. Potete addirittura eseguire un binario a 32-bit su un sistema Linux a 64-bit. L'unica cosa da fare è investire un po' di tempo nell'operazione di migrazione. Per concludere, il suggerimento è quello di passare ad un sistema Linux a 64-bit. Non c'è nessun motivo valido per non farlo.

Su di un sistema a 64-bit potete tranquillamente lasciare i parametri relativi alla piastrellatura ai loro valori predefiniti: «limite di memoria (in MB) per il tiling» dovrebbe avere un valore di 1500 e «limite di memoria (in MB) per un singolo buffer nel tiling» dovrebbe essere impostato a 16. Nel caso in cui doveste migrare da un sistema a 32-bit ad uno a 64-bit dovrete verificare questi parametri e cambiarli manualmente - se necessario - attraverso il menu delle preferenze di darktable.

Non c'è bisogno di limitare il numero di operazioni in background su un sistema a 64-bit. Su di un sistema multi-processore una quantità da due a otto operazioni possono accelerare significativamente la generazione delle anteprime in confronto ad un'operazione sola. La ragione non è tanto da ricercare nella quantità di core della vostra CPU - che il flusso di sviluppo di darktable utilizzerà comunque per intero ed in parallelo - quanto nell'eliminazione della latenza di Input/Output.

E' utile menzionare un'unica eccezione. Se utilizzate darktable per elaborare delle foto cucite in panorami, come ad es. i files TIFF generati da hugin, dovrete confrontarvi con files dalle dimensioni considerevoli. Ogni operazione in background deve allocare sufficiente memoria per poter gestire i buffers dell'immagine originale, di quelle intermedie e di quella finale. Questo caso potrebbe causare l'esaurimento della memoria anche in un robusto sistema a 64-bit. In questo caso riducete il numero delle operazioni in background ad una soltanto.