L'aggiornamento di atime influisce sulle prestazioni del sistema. Cosa succede e come affrontarlo — leggi nell'articolo.

Ogni volta che aggiorno Linux sul mio computer di casa, mi trovo a dover affrontare alcune questioni. Negli anni è diventata una routine: faccio il backup dei miei file, formatto il sistema, installo tutto da zero, ripristino i miei file e poi reinstallo le mie applicazioni preferite. Cambi anche le impostazioni del sistema a tuo piacimento. A volte ci vuole troppo tempo. E recentemente mi sono chiesto se avessi bisogno di questo stress.
atime — è uno dei tre timestamp per i file in Linux (di più su questo dopo). In particolare, mi sono chiesto se valesse ancora la pena disattivare atime nei sistemi Linux più recenti. Poiché atime viene aggiornato ogni volta che un file viene accesso, ho capito che ha un impatto significativo sulle prestazioni del sistema.
Di recente sono passato a Fedora 32 e per abitudine ho iniziato disattivando atime. Mi sono chiesto: ne ho realmente bisogno? Ho deciso di approfondire la questione e ecco cosa ho scoperto.
Un po' sulle timestamp dei file
Per capire meglio, devi fare un passo indietro e ricordare alcune cose sui file system Linux e su come il kernel assegna timestamp a file e directory. Puoi vedere la data dell'ultima modifica di file e directory eseguendo il comando ls -l (lungo) o semplicemente visualizzando le informazioni su di essi nel gestore di file. Ma dietro le quinte, il kernel Linux tiene traccia di diversi timestamp per file e directory:
- Quando un file è stato modificato per l'ultima volta (mtime)
- Quando le proprietà e i metadati di un file sono stati modificati per l'ultima volta (ctime)
- Quando un file è stato aperto per l'ultima volta (atime)
- Puoi usare il comando stat, per visualizzare i dati di un file o di una directory. Ecco un file /etc/fstab da uno dei miei server di test:
$ stat fstab
File: fstab
Size: 261 Blocks: 8 IO Block: 4096 regular file
Device: b303h/45827d Inode: 2097285 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:etc_t:s0
Access: 2019-04-25 21:10:18.083325111 -0500
Modify: 2019-05-16 10:46:47.427686706 -0500
Change: 2019-05-16 10:46:47.434686674 -0500
Birth: 2019-04-25 21:03:11.840496275 -0500Qui puoi vedere che questo file è stato creato il 25 aprile 2019, quando ho installato il sistema. Il mio file /etc/fstab è stato modificato per l'ultima volta il 16 maggio 2019, e tutti gli altri attributi sono stati modificati più o meno nello stesso periodo.
Se copio /etc/fstab in un nuovo file, le date cambiano, indicando che si tratta di un nuovo file:
$ sudo cp fstab fstab.bak
$ stat fstab.bak
File: fstab.bak
Size: 261 Blocks: 8 IO Block: 4096 regular file
Device: b303h/45827d Inode: 2105664 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:etc_t:s0
Access: 2020-05-12 17:53:58.442659986 -0500
Modify: 2020-05-12 17:53:58.443659981 -0500
Change: 2020-05-12 17:53:58.443659981 -0500
Birth: 2020-05-12 17:53:58.442659986 -0500Ma se rinomino semplicemente il file senza modificarne il contenuto, Linux aggiornerà solo il tempo di modifica del file:
$ sudo mv fstab.bak fstab.tmp
$ stat fstab.tmp
File: fstab.tmp
Size: 261 Blocks: 8 IO Block: 4096 regular file
Device: b303h/45827d Inode: 2105664 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:etc_t:s0
Access: 2020-05-12 17:53:58.442659986 -0500
Modify: 2020-05-12 17:53:58.443659981 -0500
Change: 2020-05-12 17:54:24.576508232 -0500
Birth: 2020-05-12 17:53:58.442659986 -0500Queste timestamp sono molto utili per alcuni programmi Unix. Ad esempio, biff è un programma che ti avvisa della ricezione di un nuovo messaggio di posta elettronica. Oggi pochi usano , ma nei giorni in cui le caselle di posta erano locali al sistema, biff era piuttosto diffuso.
Come fa il programma a sapere se hai nuova posta in arrivo? biff confronta l'orario dell'ultima modifica (quando il file della posta in arrivo è stato aggiornato con un nuovo messaggio di posta elettronica) e l'ora dell'ultimo accesso (l'ultima volta che hai letto la tua posta elettronica). Se la modifica è avvenuta dopo l'accesso, biff capirà che è arrivata una nuova email e te lo comunicherà. Il client di posta Mutt funziona più o meno allo stesso modo.
Il timestamp dell'ultimo accesso è anche utile se hai bisogno di raccogliere statistiche sull'uso del file system e regolare le prestazioni. Gli amministratori di sistema devono sapere quali oggetti vengono utilizzati per configurare adeguatamente il file system.
Ma la maggior parte dei moderni programmi non ha più bisogno di questo flag, quindi è stata proposta la sua eliminazione. Nel 2007, Linus Torvalds e alcuni altri sviluppatori del kernel hanno discusso di atime nel contesto dei problemi di performance. L'ingegnere del kernel Linux Ingo Molnar ha fatto il seguente commento su atime e sul file system ext3:
«È piuttosto strano che ogni desktop e server Linux soffrano di un notevole calo delle prestazioni I/O a causa degli aggiornamenti costanti di atime, mentre i veri utenti sono solo due: tmpwatch [che può essere configurato per utilizzare ctime, quindi non è un grosso problema] e alcuni strumenti di backup».
Ma le persone continuano a utilizzare alcuni programmi che necessitano di questo flag. Quindi, rimuovere atime comprometterebbe il loro funzionamento. Gli sviluppatori del kernel Linux non devono limitare la libertà dell'utente.
Una soluzione di compromesso
Le distribuzioni Linux includono numerose applicazioni e, inoltre, gli utenti possono scaricare e installare altri programmi in base alle loro esigenze. Questo è un vantaggio chiave dei sistemi operativi con codice sorgente aperto. Tuttavia, questo complica l'ottimizzazione delle prestazioni del file system. Rimuovere componenti che richiedono molte risorse può compromettere il funzionamento del sistema.
Come compromesso, gli sviluppatori del kernel Linux hanno implementato una nuova opzione chiamata relaytime, che mira a garantire un equilibrio tra prestazioni e compatibilità:
atime viene aggiornato solo se il tempo di accesso precedente è inferiore al tempo corrente di modifica o modifica dello stato... A partire da Linux 2.6.30, il kernel utilizza questa opzione per impostazione predefinita (se non è specificato noatime)... Inoltre, a partire da Linux 2.6.30, il tempo dell'ultimo accesso a un file viene sempre aggiornato se è superiore a 1 giorno.
I moderni sistemi Linux (a partire da Linux 2.6.30, rilasciato nel 2009) utilizzano già relaytime, il che dovrebbe fornire un notevole incremento delle prestazioni. Questo significa che non è necessario configurare il file /etc/fstab, e con relaytime puoi contare sul valore predefinito.
Miglioramento delle performance di sistema attraverso noatime
Se desideri ottimizzare la tua macchina per ottenere prestazioni massime, puoi comunque disabilitare atime.
La modifica delle performance potrebbe non essere molto evidente su dischi moderni molto veloci (come NVME o Fast SSD), ma c'è un piccolo incremento.
Se sei consapevole di non utilizzare software che richiede atime, puoi migliorare leggermente le prestazioni attivando l'opzione noatime nel file /etc /fstab. Dopo di che, il kernel non aggiornerà continuamente atime. Utilizza l'opzione noatime durante il mount del file system:
/dev/mapper/fedora_localhost--live-root / ext4 defaults,noatime,x-systemd.device-timeout=0 1 1
UUID=be37c451-915e-4355-95c4-654729cf662a /boot ext4 defaults,noatime 1 2
UUID=C594-12B1 /boot/efi vfat umask=0077,shortname=winnt 0 2
/dev/mapper/fedora_localhost--live-home /home ext4 defaults,noatime,x-systemd.device-timeout=0 1 2
/dev/mapper/fedora_localhost--live-swap none swap defaults,x-systemd.device-timeout=0 0 0Le modifiche avranno effetto al prossimo riavvio.
In pubblicità
Hai bisogno di un server per ospitare il tuo sito? La nostra azienda offre con pagamento giornaliero o una tantum, ogni server è connesso a una banda internet di 500 Megabit ed è protetto gratuitamente da attacchi DDoS!
Fonte: habr.com
