Gentoo e tmpfs: una convivenza utile ma difficile?

mercoledì 1 ottobre 2008 | by Sanchan |

Prendo spunto da alcuni bug di Gentoo che recentemente mi hanno visto attivamente coinvolto (#238710 e #236649) per spiegare cos’è tmpfs, perché è utile usarlo in Gentoo e perché usandolo si va incontro ad una convivenza difficile.

Cos’è tmpfs?

Tmpfs è il nome dato ad un particolare file system grazie al quale i file che vi si trovano vengono mantenuti nella memoria virtuale anziché su disco. In pratica, se il tuo PC ha molta RAM i files che si trovano in una locazione montata in tmpfs sono praticamente sempre in RAM. In questo modo frequenti operazioni di lettura e scrittura sono velocissime perché non devono attendere il movimento delle testine e la lentezza del disco fisso.
Questo incremento di velocità però ha un costo per alcuni sistemi molto gravoso: lo spazio occupato dai file in locazioni tmpfs viene sottratto alla memoria virtuale libera. Su sistemi con poca RAM questo significa avere forti rallentamenti inoltre, allo spegnimento del PC, tutti i dati presenti in tmpfs vengono persi. Essendo la RAM una memoria volatile, un’improvvisa caduta di tensione può causare perdite di dati significative.

Perché tmpfs è utile in Gentoo?

In Gentoo l’installazione e l’aggiornamento dei pacchetti avviene ricompilando il software partendo dai sorgenti. Quest’operazione consiste sostanzialmente nell’estrarre i sorgenti in una directory che solitamente è /var/tmp/portage, compilare il sorgente, installarlo nel sistema e ripulire la directory di compilazione per ricominciare il ciclo per il pacchetto successivo.
Come già potete iniziare ad intuire, queste operazioni richiedono (con alcune notevoli eccezioni) molte letture e scritture per un periodo limitato di tempo, poco spazio su disco e nessuna perdita di dati significativi in caso di caduta di tensione (basta ricominciare). /var/tmp/portage è quindi un’ottima candidata per l’uso di tmpfs in Gentoo. Oltre a velocizzare la compilazione dei pacchetti, l’uso di tmpfs ci permette di non uccidere il disco continuando ad accedervi migliaia di volte nelle stesse aree e ci evita di frammentare il file system, cosa che rallenterebbe il nostro sistema. Se avete un PC con almeno 1Gb di RAM e usate Gentoo, vi consiglio caldamente di provare: vi piacerà.

Una difficile convivenza

Da come ve l’ho presentata, tmpfs sembra la soluzione ideale per compilare i vostri pacchetti. Ed è vero, nel 99.9% dei casi. Resta però quello 0.1% nel quale ricadono i bug che hanno ispirato questo articolo, in cui il resto del mondo non ha nessun problema ed a voi iniziano a succedere cose strane. Pacchetti che normalmente compilano, su tmpfs smettono di funzionare e ogni volta che riprovi hai un risultato diverso. Ma perchè?
Ce lo spiega Mart Raudsepp nel bug #236649. In sostanza i problemi nascono dal diverso comportamento dei file system tradizionali rispetto a tmpfs per quanto concerne la granularità dei tempi di modifica/accesso dei file. Su sistemi tradizionali l’ora di salvataggio di un file è precisa al secondo, su tmpfs l’ora è precisa al jiffy (da qualche nanosecondo a qualche millisecondo). Poiché i sistemi di compilazione utilizzano la data e l’ora di creazione dei files per capire se un file deve essere ricompilato o rigenerato, capita che alcuni files che hano tempi di salvataggio che differiscono per meno di un secondo facciano scattare una ricompilazione di un file su tmpfs ma non su altri file system. In genere i problemi si evidenziano su pacchetti che hanno regole di compilazione sbagliate ma che funzionano grazie alla tolleranza introdotta dai file system tradizionali. Se non ve la sentite di scontrarvi con pacchetti che non compilano valutate bene pro e contro, prima di adottare tmpfs. Nel caso, quando segnalate il problema agli sviluppatori Gentoo, precisate che usate tmpfs :-)

Share

Articoli simili

Nessun articolo correlato

  1. One Response to “Gentoo e tmpfs: una convivenza utile ma difficile?”

  2. By Sanchan on ott 2, 2008 | Reply

    Per completezza, come ricorda Diego Pettenò (http://bugs.gentoo.org/show_bug.cgi?id=238710#c18) tmpfs non è l’unico file system con una granularità inferiore al secondo: anche jfs e xfs hanno questa caratteristica.

Commenta