È stato pubblicato il rilascio dello strumento CRIU 4.0 (Checkpoint and Restore In Userspace), progettato per salvare e ripristinare i processi nello spazio utente. Lo strumento consente di salvare lo stato di un singolo processo o di un gruppo di processi, per poi riprendere il lavoro dalla posizione salvata, anche dopo un riavvio del sistema o su un altro server senza interrompere le connessioni di rete già stabilite. Il codice del progetto è scritto in linguaggio C e distribuito sotto licenza GPLv2. CRIU è utilizzato in sistemi di gestione dei contenitori come OpenVZ, LXC/LXD e Docker. Le modifiche necessarie per il funzionamento di CRIU sono incluse nel kernel principale di Linux.
Tra le aree di applicazione della tecnologia CRIU si evidenzia la possibilità di riavviare il sistema operativo senza interrompere l'esecuzione di processi lunghi, la migrazione live di contenitori isolati, l'accelerazione dell'avvio di processi lenti (è possibile iniziare il lavoro dallo stato salvato dopo l'inizializzazione), l'esecuzione di aggiornamenti del kernel senza riavviare i servizi, il salvataggio periodico dello stato delle attività computazionali a lungo termine per riprendere il lavoro in caso di crash, il bilanciamento del carico sui nodi nei cluster, la duplicazione dei processi su un altro computer (fork su un sistema remoto), la creazione di snapshot delle applicazioni utente durante l'esecuzione per analizzarle su un altro sistema o nel caso sia necessario annullare ulteriori azioni nel programma.
Nel nuovo rilascio:
- È stato aggiunto un plugin CUDA, che consente di salvare e ripristinare lo stato delle applicazioni basate sulla tecnologia NVIDIA CUDA.
- È stata aggiunta la supporto per il meccanismo Shadow Stack, supportato a partire dal kernel Linux 6.6, che consente di bloccare il funzionamento di molti exploit, sfruttando le capacità hardware dei processori Intel (dopo aver trasferito il controllo alla funzione, gli indirizzi di ritorno vengono salvati dal processore non solo nello stack normale, ma anche in uno stack "shadow" separato, che non può essere modificato direttamente, e prima di uscire dalla funzione, l'indirizzo di ritorno viene estratto dallo stack shadow e confrontato con l'indirizzo di ritorno dallo stack principale).
- È stato aggiunto il supporto per il comando ioctl PAGEMAP_SCAN per ottenere informazioni sul contenuto delle tabelle delle pagine di memoria, il che, tra l'altro, consente di determinare i fatti di scrittura in un'area di memoria specifica quando utilizzato con userfaultfd().
- È stata implementata la possibilità di ripristinare il flusso nella corretta cgroup v1.
Fonte: opennet.ru
