lunedì 16 marzo 2015

PiFS, e non preoccupiamoci più dello spazio di archiviazione!

Eccoci tornati con la nostra consueta rubrica riguardante la simpatia dei programmatori e le loro divertentissime trovate!
Cosa? Non esiste una rubrica del genere sul nostro blog? Beh, sarà proprio il caso di crearne una allora!

Partiamo dal principio, ossia dal nome che apre il titolo: PiFS. “Pi” è il noto Pi greco, quel numerino che ci si trova sempre in mezzo alle scatole e che quindi non dovrebbe aver bisogno di ulteriori presentazioni.
FS sta invece per FileSystem, quella parte del sistema operativo che permette di compiere operazioni di scrittura e lettura su qualunque dispositivo di memorizzazione (un hard disk, una chiavetta usb ecc ecc) in maniera trasparente all'utente. I nostri dati infatti non sono organizzati in cartelle, ma piuttosto scritti a casaccio, e non sempre in maniera contigua (ad esempio quel film da 4Gb che avete illegalmente scaricato sarà scritto “dove c'è spazio”, e se necessario spezzato più volte: difficile infatti trovare tutto quello spazio libero contiguo sul vostro hard disk!). Compito del filesystem quindi è, mentre navighiamo tra le cartelle del nostro pc e apriamo un file, far ruotare il disco di modo che la testina legga esattamente tutte le parti di quel file. Le cartelle sono semplicemente dei file speciali che contengono la lista dei file presenti al loro interno.
E questo condensa il what; l'how  è molto complesso e ve lo lascio cercare su google, se siete interessati.
Trovo piuttosto affascinante che all'utente tutto ciò sia nascosto, non è fantastico?
Ma bando ai sentimentalismi, andiamo avanti!
Cerchiamo di capire perché asserisco che grazie a PiFS potremo scordarci dello spazio di archiviazione. Esiste una congettura, per ora mai provata ma nemmeno smentita, che afferma che Pi sia un numero normale; cosa sia un numero normale, lo lascio alla chiara definizione data da wikipedia:
a number of infinite length is called normal when all possible sequences of digits (of any given length) appear equally often.
Il fatto che sia normale, implica anche che sia una sequenza disgiuntiva, ossia una sequenza infinita di cifre all'interno della quale compare ogni altra possibile finita sequenza. Proviamo a ragionare un po'…se Pi contiene ogni finita sequenza di numeri...allora, scrivendolo ovviamente in binario, esso conterrà anche ogni dato di tutto ciò che è stato, è, e sarà!
Detto in un'altra maniera: tutti i possibili file, da questo che sto scrivendo ora, a quel file che avete cancellato per errore anni fa, alla vostra tesi di laurea salvata prontamente sul vostro PC, e pure quel progetto di software che avete in mente di scrivere, tutto ciò è già presente in Pi!!
E da qui l'idea di PiFS: celebriamo la grandezza di questo numero, prostriamoci d'innanzi alla sua infinita potenza, e creiamo un FS che sfrutti questa sua proprietà!
L'idea dello sviluppatore è stata quindi quella di creare un filesystem che semplicemente cerchi byte per byte di ciascun file (per questioni di performance non cerca la sequenza del file intero, ma lo spezza in “sotto-file” di un byte) dove inizia la sequenza di quel dato byte di quel dato file, e segni quest'indice come metadato sullo spazio di archiviazione (che comunque è necessario).
Beh...che dire? Geniale!!! Abbiamo sconfitto la fame nel mondo il problema dello spazio di archiviazione!

Ma c'è un enorme limite, anzi due: le performance sono scarsissime e soprattutto non ci è dato sapere quanto tempo ci vorrà a cercare la sequenza corrispondente (in scrittura), potrebbero volerci giorni anche sui pc più potenti. Vale lo stesso problema anche in lettura: pur avendo l'indice dal quale la sequenza corrispondente all'inizio dell' i-esimo byte del file, dobbiamo comunque scorrere Pi fino a quell'indice (e quindi il tempo di accesso può essere molto lungo); inoltre, se spezzare i file in sotto-file da 1 byte ci permette in scrittura di essere “più efficienti”, in lettura si è penalizzati dal fatto che si avranno molti indici da cercare in fila per leggere un file interamente.
L'altro problema, e qua arriva la trollata finale, è che i metadati riguardanti gli indici generati da PiFS, hanno in media dimensione maggiore rispetto ai file stessi!
Insomma, non solo le operazioni di lettura e scrittura sarebbero lentissime, in più alla fine sprecheremmo più spazio di quanto se ne utilizzi ora!
Ovviamente lo sviluppatore è consapevole di questa contraddizione, infatti il filesystem è nato come scherzo che, devo essere sincero, gli è proprio ben riuscito! Mi ha strappato più di qualche risata, oltre a lasciarmi a bocca aperta per la genialità ovviamente!
Lascio il link al github del genio: https://github.com/philipl/pifs.

Gloria, gloria al nostro Pi!
Al prossimo numero di questa nostra splendida rubr... no, non sbattetemi fuori! Nooooooooooooo!

Nessun commento:

Posta un commento