Ogni volta che aggiorno Linux sul mio computer di casa, ho un elenco di attività che di solito svolgo. Sono diventate abitudini nel corso degli anni:eseguo il backup dei miei file, pulisco il sistema, reinstallo da zero, ripristino i miei file, quindi reinstallo le mie applicazioni extra preferite. Ho anche apportato alcune modifiche al sistema. Ho apportato alcune di queste modifiche per così tanto tempo che di recente mi sono chiesto se avessi ancora bisogno di farle.
Una modifica è atime
, che è uno dei tre timestamp su ogni file su Linux (ne parleremo più avanti). In particolare, mi chiedevo se vale ancora la pena disabilitare atime
nei sistemi Linux più recenti. Da atime
viene aggiornato ogni volta che si accede al file, ho capito che ha avuto un impatto significativo sulle prestazioni del sistema.
Di recente ho aggiornato il mio computer a Fedora 32 e ho disattivato atime
sul mio sistema aggiornato per abitudine. Ma ne avevo ancora bisogno? Ho deciso di approfondire. Ecco cosa ho trovato.
Un po' sui timestamp dei file
Per capire noatime
, è necessario fare un passo indietro e comprendere alcune cose sui filesystem Linux e su come il kernel applica timestamp a file e directory. Probabilmente sei già a conoscenza della data dell'ultima modifica su file e directory; puoi vederlo in un ls -l
elenco di directory (lungo) o se guardi i dettagli del file in un file manager. Ma dietro le quinte, il kernel Linux tiene traccia di diversi timestamp su file e directory:
- Quando il file è stato modificato l'ultima volta (
mtime
) - Quando il file è stato modificato l'ultima volta (
ctime
) - Quando è stato effettuato l'ultimo accesso al file (
atime
)
Puoi usare la stat
comando per vedere questi dettagli per un file o una directory. Ecco un esempio di /etc/fstab
file su uno dei miei server di prova:
$ 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 -0500
Dall'output, puoi vedere che questo file è stato creato il 25 aprile 2019, quando ho installato il sistema. Il mio /etc/fstab
il file è stato modificato 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 -0500
Ma se rinomino il file senza cambiarne il contenuto, Linux aggiorna solo l'ora 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 -0500
Questi timestamp sono molto utili per alcuni programmi Unix. Ad esempio, biff è un programma che ti avvisa quando hai un nuovo messaggio di posta elettronica. Non vedi molte persone che usano biff in questi giorni, ma ai tempi in cui le cassette postali erano locali nel tuo sistema, biff era abbastanza comune.
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
Come fa un programma a sapere se hai nuova posta nella tua casella di posta? Biff confronta l'ora dell'ultima modifica (quando il file della posta in arrivo è stato aggiornato con un nuovo messaggio email) e l'ora dell'ultimo accesso (l'ultima volta che hai letto la tua email). Se Modified è più recente di Accessed, allora biff sa che è arrivato un messaggio e-mail dall'ultima volta che hai letto l'e-mail e te lo farà sapere. Il client di posta elettronica Mutt fa qualcosa di simile per avvisarti quando arrivano nuovi messaggi.
L'ora dell'ultimo accesso è utile anche se devi eseguire statistiche sul filesystem e ottimizzare le prestazioni. Su sistemi Linux di grandi dimensioni, gli amministratori potrebbero aver bisogno di sapere a cosa si accede in modo da poter ottimizzare il filesystem in modo appropriato.
Ma la maggior parte dei programmi moderni non ha più bisogno dell'ora dell'ultimo accesso, quindi c'è stato qualche argomento per non usarlo. Nel 2007, Linus Torvalds e molti altri sviluppatori di kernel hanno discusso di atime
e i suoi problemi di prestazioni. Lo sviluppatore del kernel Linux Ingo Molnár ha fatto questa osservazione su atime
e il filesystem ext3:
È un po' strano che ogni desktop e server Linux sia danneggiato da un notevole rallentamento delle prestazioni IO dovuto ai costanti aggiornamenti atime, mentre ci sono solo due utenti reali: tmpwatch [che può essere configurato per utilizzare ctime quindi non è un grosso problema] e alcuni strumenti di backup. (Ok, e anche la notifica tramite posta, immagino.) Su decine di migliaia di applicazioni.
Ma le persone usano ancora alcuni programmi che ne hanno bisogno e rimuovono atime
interromperebbe quei programmi utente. E la regola nello sviluppo del kernel Linux è di non rompere lo spazio utente.
Il compromesso relativo
Le distribuzioni Linux includono molte applicazioni software e gli utenti possono scaricare e installare altri programmi per soddisfare le loro esigenze particolari. Questo è il vantaggio chiave di un sistema operativo open source! Ma ciò rende le cose più difficili nell'ottimizzazione delle prestazioni del filesystem. Hai bisogno di atime
o rimuoverlo interromperà qualcosa sul tuo sistema?
Come compromesso, gli sviluppatori del kernel Linux hanno implementato un nuovo metodo:relatime
è una misura delle prestazioni leggermente diversa che ha lo scopo di bilanciare le prestazioni con la compatibilità. Il mount
la pagina man dice questo su relatime
:
L'ora di accesso viene aggiornata solo se l'ora di accesso precedente era precedente all'ora di modifica o modifica corrente. … A partire da Linux 2.6.30, il kernel assume per impostazione predefinita il comportamento fornito da questa opzione (a meno che non sia stato specificato noatime) … Inoltre, a partire da Linux 2.6.30, l'ora dell'ultimo accesso al file viene sempre aggiornata se è più vecchia di 1 giorno.
In breve:i moderni sistemi Linux (da Linux 2.6.30, rilasciato nel 2009) utilizzano già relatime
, che dovrebbe darti un aumento delle prestazioni davvero veloce. Ciò significa che non è necessario modificare il tuo /etc/fstab
file e può fare affidamento su relatime
predefinito del kernel.
Modificare le prestazioni del sistema con noatime
Ma se stai cercando di modificare il tuo sistema per ottenere le massime prestazioni, disabilita atime
è ancora un'opzione valida nel 2020.
Questa modifica delle prestazioni potrebbe non essere molto evidente su unità moderne molto veloci (come NVME o un veloce SSD), ma c'è ancora un piccolo aumento.
Se sai di non utilizzare software che richiede atime
, puoi ottenere un leggero aumento delle prestazioni impostando noatime
nel tuo /etc/fstab
file. Questo dice al kernel di non tenere traccia dell'ora dell'ultimo accesso, evitando quel piccolo calo delle prestazioni per aggiornare continuamente atime
nel filesystem. Aggiungi noatime
come opzione per i tuoi filesystem Linux, di solito dopo la voce di default:
/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 0
Ciò avrà effetto al prossimo riavvio.