Il Kernel Linux 5.10 aiuterà l’ibernazione

2

Ancora non è uscito ufficialmente il Kernel Linux 5.9, ma già si vedono le proposte per il Kernel 5.10. Stavolta parliamo di ibernazione.

L’ibernazione è quel processo in cui il computer si spegne ma salva tutte le proprie memorie volatili in quelle persistenti per poter riaccendersi esattamente in quello stesso stato. È simile alla sospensione, quando viene spento tutto tranne l’alimentazione delle memorie volatili (cache della CPU, ma soprattutto RAM) in modo che non ne siano cancellati i dati.
La prima applicazione è per i sistemi a batteria: vien da sé che spegnere anche questi componenti permette un risparmio di energia. Ma esistono altri campi che potrebbero beneficiare, e (tanto per cambiare) uno di questi è il cloud.

Talvolta infatti le istanze di macchine virtuali, ma più spesso i container, sono segnate come “a bassa priorità”: la loro esecuzione può essere interrotta o ritardata per lasciare spazio ad altre più critiche. Possono perfino, se in quel momento non sono utilizzate, essere spente, per essere accese solo quando necessario.
Vero che i container nascono come usa e getta: ne si attiva uno per un certo compito, finito il quale lo si può buttare via. Ma può essere comodo avere qualcosa di più persistente, ma che possa essere “riposto” facilmente: per questo caso è possibile usare l’ibernazione.

Dicevamo in apertura che sono già disponibili delle proposte per il Kernel futuro, e ben due riguardano l’ibernazione: il primo il processo in sé, il secondo un meccanismo che aiuta questo processo.

La prima patchè proposta da Xiaoyi Chen, di Amazon, e punta a raggruppare i comandi di scrittura (e lettura) del disco che servono a salvare (o ricaricare) la memoria RAM: dando un gruppo di operazioni, queste verranno eseguite una dietro l’altra invece di dover aspettare il completamento della prima per poter inviare il successivo comando.
Per sistemi con dischi rapidi (SSD) la cosa può avere poca influenza: si trova spesso il disco “disponibile” ad eseguire un comando, quindi il momento in cui viene lanciato ha poco peso. Ma per dischi lenti, o comunque sistemi di storage con poche operazioni al secondo (IOPS) la cosa cambia molto:

One hibernate and resume cycle for 16GB RAM out of 32GB in use takes
around 21 minutes before the change, and 1 minutes after the change on
a system with limited storage IOPS.

Un ciclo di ibernazione e ripresa per 16 GB di RAM in uso su 32 GB [totali] impiega circa 21 minuti prima della modifica, ed 1 minuto dopo la modifica su un sistema con IOPS limitati per lo storage.

Un bel cambiamento, non c’è che dire!

La seconda patch proposta da Andrea Righi, sviluppatore di Canonical, riguarda direttamente la gestione della memoria, e mette a disposizione dello user space un comando affinché il Kernel “reclami” tutta la memoria non usata attivamente: cache, buffer di programmi spenti, swap… Un demone non farebbe altro che rilevare l’idle della macchina (il non-uso) per un certo periodo di tempo, dopo il quale invoca questo meccanismo. La teoria è che in questa maniera la macchina ha più memoria a disposizione per eventuali nuovi programmi, ma anche meno memoria da salvare in caso di ibernazione (probabile, se non è usata da un po’ di tempo).
In realtà questa è la seconda patch per la stessa cosa proposta: la prima, a giugno, era limitata alla funzione di ibernazione, ma per l’appunto il campo di utilizzo sembra più ampio.

Result:
– average of 10 runs tested with `/sys/power/image_size=default` and
`/sys/power/image_size=0`:
5.9-vanilla 5.9-mm_reclaim
———– ————–
[hibernate] image_size=default 49.07s 3.40s
[resume] image_size=default 18.35s 7.13s

[hibernate] image_size=0 71.55s 4.72s
[resume] image_size=0 7.49s 7.41s

Risultato:
– media di 10 giri testato sia con ‘/sys/power/image_size=default’ che con ‘/sys/power/image_size=0

Senza entrare nel dettaglio delle condizioni dei test, rimane piuttosto evidente il vantaggio ottenuto.

Le due patch sembrano entrambe interessanti, e potrebbero anche funzionare assieme dandosi una mano. Sono in tanti ad usare l’ibernazione per poter spegnere il PC senza doversi sorbire il boot ogni volta, e che ne avrebbero vantaggio. Io non sono tra questi… Voi?

Ho coltivato la mia passione per l’informatica fin da bambino, coi primi programmi BASIC. In età adulta mi sono avvicinato a Linux ed alla programmazione C, per poi interessarmi di reti. Infine, il mio hobby è diventato anche il mio lavoro.
Per me il modo migliore di imparare è fare, e per questo devo utilizzare le tecnologie che ritengo interessanti; a questo scopo, il mondo opensource offre gli strumenti perfetti.