Both sides previous revision Previous revision Next revision | Previous revision |
how-to:zram-in-slackware [2014/07/24 00:01] – Giuseppe Di Terlizzi | how-to:zram-in-slackware [2016/03/18 11:17] (current) – Giuseppe Di Terlizzi |
---|
====== Utilizzare zram su Slackware ====== | ====== zram su Slackware ====== |
| |
Questo articolo spiega come abilitare ed utilizzare ''zram'' in Slackware. | {{:news:slackware-logo.png?50 |}}Questo articolo spiega come abilitare ed utilizzare ''zram'' in Slackware-current (e 14.2). |
| |
| La vecchia guida per la -current pre //quasi-beta// è presente [[how-to:zram-in-slackware?rev=1406279492|qui]]. |
| |
===== Cos'è zram ===== | ===== Cos'è zram ===== |
''zram'' è un modulo del Kernel Linux che permette di creare un area di **swap** compressa, direttamente nella RAM. Questo modulo nato in seno agli sviluppatori Android permette e promette a dispositivi con poca RAM (PC, netbook, notebook, smartphone, etc.) di aumentare le performance generali del sistema. Avendo la **swap** in RAM permette ai dispositivi che usano memorie //flash// (es. //sdcard//, //{mini,micro}sd//) di non scrivere su di essa. In questo modo la vita della memoria //flash// si allunga. | |
| |
===== Installiamo zram ===== | ''zram'' (conosciuto in precedenza anche come ''compcache'') è un modulo del Kernel Linux che permette di creare un area di **swap** compressa, direttamente nella RAM. Questo modulo permette a dispositivi con poca RAM (es. vecchi PC, netbook, notebook, smartphone, sistemi embedded, etc.) di aumentare le performance generali del sistema. Inoltre avendo la **swap** in RAM permette ai dispositivi che usano memorie di tipo //flash// (es. //sdcard//, //{mini,micro}sd//) di non **swappare** su di essa. In questo modo la vita della memoria //flash// si allunga notevolmente in quanto non ci saranno cicli di lettura/scrittura. |
| |
| Il modulo è presente sin dalla versione 3.2 del Kernel Linux ed stato diverso tempo in //staging// ma dalla versione 3.14 del Kernel Linux è in //mainline//. |
| |
| |
| ===== Carichiamo zram ===== |
| |
| Per caricare all'avvio zram, editiamo da root con il nostro editor di testo preferito il file ''/etc/rc.d/rc.modules.local'' ed aggiungiamo la riga: |
| |
| /sbin/modprobe zram |
| |
| Prossimo passo è specificare il numero dei block device da far creare a zram (di default zram ne crea solo uno - ''/dev/zram0''). |
| |
| <callout type="info" icon="true"> |
| === Quanti block device servono ? === |
| |
| Per utilizzare la swap con zram è raccomandato creare almeno un block device per cpu in modo da ottimizzare il carico sulle CPU. |
| |
| Per sapere quanti core abbiamo sulla nostra macchina possiamo scoprirlo in questo modo: |
| |
| $ cat /proc/cpuinfo | grep processor | wc -l |
| </callout> |
| |
| Per far creare automaticamente più block device creiamo il file ''/etc/modprobe.d/zram.conf'' ed aggiungiamo la riga: |
| |
| options zram num_devices=2 |
| |
| <callout type="tip" icon="true"> |
| === Usiamo LILO === |
| |
| Un'altro modo per configurare zram è utilizzare LILO aggiungendo al file ''/etc/lilo.conf'' nella variabile ''append'' la stringa ''zram.num_devices=n'' (dove **n** è il numero dei block devices da creare). |
| Dopo aver modificato ''lilo.conf'' ricordiamoci di lanciare ''lilo''. |
| </callout> |
| |
| ===== Configuriamo lo swap con eudev ===== |
| |
| Un modo che ritengo più flessibile senza creare script-shell è far gestire ad eudev la creazione dello swap all'avvio del sistema. Per farlo basta creare il file ''/etc/udev/rules.d/10-zram.rules'' ed aggiungiamo la seguente riga: |
| |
| <file bash 10-zram.rules> |
| KERNEL=="zram0", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="512M", RUN+="/sbin/mkswap $env{DEVNAME}" |
| </file> |
| |
| In questo modo alla creazione del block device (in questo caso ''/dev/zram0'') in automatico imposterà la dimensione (512M) ed eseguirà il comando ''mkswap'' per creare l'area di swap. |
| |
| <callout type="tip" icon="true"> |
| === Creiamo più aree di swap per sistemi multicore === |
| |
| Nel caso in cui abbiamo più block devices zram da creare, possiamo modificare la riga così: |
| |
| <file bash 10-zram.rules> |
| KERNEL=="zram[0-9]", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="512M", RUN+="/sbin/mkswap $env{DEVNAME}" |
| </file> |
| |
| In questo modo eudev creerà diverse aree di swap da 512M. |
| </callout> |
| |
| ===== Usiamo zram come disco ===== |
| |
==== Scarichiamo il modulo ==== | Nulla vieta di utilizzare zram come spazio temporaneo per salvare file (ad esempio ''/tmp''). A differenza di altre soluzioni del tipo **tmpfs** o **ramdisk**, zram ha il vantaggio di comprimere i dati. |
In Slackware il modulo non è fornito //out-of-the-box// ma è possibile compilarlo avendo a disposizione i sorgenti del kernel Linux. | |
Per facilitare il compito scarichiamo dal mio repository (http://lotar.altervista.org/slackbuilds) il pacchetto precompilato presente nella directory [[http://lotar.altervista.org/slackbuilds/zram-kernel-module/pkg|/slackbuilds/zram-kernel-module/pkg]] oppure possiamo utilizzare il tool ''slackpkg'' insieme a ''slackpkgplus'' (per informazioni su come configurare il repository [[:slackbuilds#slackpkg_e_slackpkg|clicca qui]]). | |
| |
# slackpkg update | Possiamo aggiungere un nuovo spazio con udev usando il file appena creato ''10-zram.rules'' aggiungendo una riga del tipo: |
# slackpkg install zram-kernel-module | |
| |
<div round center important 90%> | <code bash> |
Il pacchetto precompilato è disponibile per la versione del Kernel Linux rilasciata da Patrick per la **-current**. | KERNEL=="zram1", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="512M", RUN+="/sbin/mkfs.ext4 $env{DEVNAME}" |
</div> | </code> |
| |
<div round center important 90%> | Nell'esempio abbiamo creato un nuovo disco da 512M e formattato con **ext4** (possiamo utilizzare qualsiasi tipo di FS con o senza journaling -- es. ''/sbin/mkfs.ext4 -O ^has_journal'') |
Nel caso in cui è necessario utilizzare ''zram'' per un'altra architettura (es. arm) o per una versione stabile di **Slackware**, è possibile compilare il modulo utilizzando lo SlackBuild. | |
</div> | |
| |
==== Configuriamo ==== | Per montare all'avvio questo disco magari per utilizzarlo per la nostra directory ''/tmp'' aggiungiamo al file ''/etc/fstab'' la seguente riga: |
| |
Dopo aver installato il modulo è necessario caricarlo ed impostare la dimensione della swap. Per facilitare il compito è disponibile lo script di //stop & start// ''/etc/rc.d/rc.zram''. | /dev/zram1 /tmp ext4 defaults 0 0 |
| |
Di default lo script creerà una memoria di **swap** di 1GiB. E' possibile cambiare la dimensione modificando la variabile ''SIZE'' presente nello script. | ===== Gestiamo zram ===== |
| |
Per automatizzare all'avvio del sistema il caricamento del modulo e l'attivazione della memoria di **swap**, basta dare i permessi di esecuzione allo script. | Oltre agli strumenti classici per controllare lo stato della memoria swap (''free'', ''/proc/swaps'') ed occupata (''df'') viene fornito anche un tool ''zramctl'' che ci da diverse informazioni sull'occupazione dello spazio e dati compressi oltre alla gestione di zram stesso: |
| |
# chmod +x /etc/rc.d/rc.zram | # zramctl |
| NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT |
| /dev/zram0 lzo 512M 193M 52,9M 57,4M 1 [SWAP] |
| /dev/zram1 lzo 512M 192,6M 52,8M 57,3M 1 [SWAP] |
| |
| ===== Maggiori informazioni ===== |
| * [[wp>en.wikipedia.org/wiki/Zram|zram - Wikipedia]] |
| |
| {{tag>how-to slackware zram linux swap}} |