Hur och varför noatime-alternativet förbättrar prestanda för Linux-system

Atime-uppdatering påverkar systemets prestanda. Vad som händer där och vad du ska göra åt det - läs artikeln.

Hur och varför noatime-alternativet förbättrar prestanda för Linux-system
När jag uppdaterar Linux på min hemdator måste jag lösa vissa problem. Med åren har detta blivit en vana: jag säkerhetskopierar mina filer, torkar systemet, installerar allt från början, återställer mina filer och installerar sedan om mina favoritprogram. Jag ändrar även systeminställningarna så att de passar mig själv. Ibland tar det för mycket tid. Och nyligen undrade jag om jag behövde den här huvudvärken.

en tid är en av tre tidsstämplar för filer i Linux (mer om detta senare). I synnerhet undrade jag om det fortfarande skulle vara en bra idé att inaktivera Atime på nyare Linux-system. Eftersom atime uppdateras varje gång filen öppnas, insåg jag att det har en betydande inverkan på systemets prestanda.
Jag uppgraderade nyligen till Fedora 32 och, av vana, började jag med att inaktivera Atime. Jag tänkte: behöver jag verkligen det? Jag bestämde mig för att studera den här frågan och det här är vad jag grävde fram.

Lite om filtidsstämplar

För att ta reda på det måste du ta ett steg tillbaka och komma ihåg några saker om Linux-filsystem och hur kärnan tidsstämplar filer och kataloger. Du kan se det senaste ändrade datumet för filer och kataloger genom att köra kommandot ls -l (lång) eller helt enkelt genom att titta på information om det i filhanteraren. Men bakom kulisserna håller Linux-kärnan reda på flera tidsstämplar för filer och kataloger:

  1. När ändrades filen senast (mtime)
  2. När ändrades senast filegenskaper och metadata (ctime)
  3. När öppnades filen senast (atime)
  4. Du kan använda kommandot statför att visa information om en fil eller katalog. Här är filen / Etc / fstab från en av mina testservrar:

$ 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

Här kan du se att den här filen skapades den 25 april 2019 när jag installerade systemet. Min fil / Etc / fstab ändrades senast den 16 maj 2019 och alla andra attribut ändrades ungefär samtidigt.

Om jag kopierar / Etc / fstab till en ny fil ändras datumen för att indikera att det är en ny fil:

$ 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

Men om jag bara byter namn på filen utan att ändra dess innehåll kommer Linux bara att uppdatera den tid då filen ändrades:

$ 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

Dessa tidsstämplar är mycket användbara för vissa Unix-program. Till exempel är biff ett program som meddelar dig när det finns ett nytt meddelande i din e-post. Nuförtiden använder få människor stek, men på den tiden då brevlådor var lokala i systemet var biff ganska vanligt.

Hur vet programmet om du har ny e-post i din inkorg? biff jämför den senast ändrade tiden (när inkorgsfilen uppdaterades med ett nytt e-postmeddelande) och den senaste åtkomsttiden (senaste gången du läste din e-post). Om ändringen inträffade senare än access, kommer biff att förstå att ett nytt brev har kommit och kommer att meddela dig om det. Mutt-e-postklienten fungerar på ungefär samma sätt.

Den senaste åtkomsttidsstämpeln är också användbar om du behöver samla in filsystemanvändningsstatistik och justera prestanda. Systemadministratörer behöver veta vilka objekt som nås så att de kan konfigurera filsystemet därefter.

Men de flesta moderna program behöver inte längre denna etikett, så det fanns ett förslag om att inte använda den. 2007 diskuterade Linus Torvalds och flera andra kärnutvecklare tid i samband med en prestandafråga. Linux-kärnutvecklaren Ingo Molnar gjorde följande påpekande om atime och ext3-filsystemet:

"Det är ganska konstigt att varje Linux-skrivbord och -server lider av märkbar I/O-prestandaförsämring på grund av ständiga tidsuppdateringar, även om det bara finns två riktiga användare: tmpwatch [som kan konfigureras för att använda ctime, så det är inte ett stort problem] och några säkerhetskopieringsverktyg."

Men folk använder fortfarande vissa program som behöver denna etikett. Så att ta bort atime kommer att bryta deras funktionalitet. Linux-kärnutvecklare bör inte inkräkta på användarfriheten.

Salomos lösning

Det finns många applikationer som ingår i Linux-distributioner och dessutom kan användare ladda ner och installera andra program efter deras behov. Detta är en viktig fördel med ett operativsystem med öppen källkod. Men detta gör det svårt att optimera ditt filsystems prestanda. Att ta bort resurskrävande komponenter kan störa systemet.

Som en kompromiss har Linux-kärnutvecklarna introducerat ett nytt relätidsalternativ som är avsett att hitta en balans mellan prestanda och kompatibilitet:

atime uppdateras endast om den tidigare åtkomsttiden är mindre än den aktuella ändrings- eller statusändringstiden... Sedan Linux 2.6.30 använder kärnan det här alternativet som standard (om inte noatime anges)... Också eftersom Linux 2.6.30 . 1 uppdateras den senaste åtkomsttiden för en fil alltid om den är mer än XNUMX dag gammal.

Moderna Linux-system (sedan Linux 2.6.30, släppt 2009) använder redan relätid, vilket borde ge en riktigt stor prestandaökning. Det betyder att du inte behöver konfigurera filen / Etc / fstab, och med relätid kan du lita på standarden.

Förbättra systemets prestanda med noatime

Men om du vill ställa in ditt system för att få maximal prestanda är det fortfarande möjligt att inaktivera tid.

Prestandaförändringen kanske inte är särskilt märkbar på mycket snabba moderna enheter (som NVME eller Fast SSD), men det finns en liten ökning där.

Om du vet att du inte använder programvara som kräver atime kan du förbättra prestandan något genom att aktivera alternativet noatime i filen /etc/fstab. Efter detta kommer kärnan inte att uppdateras hela tiden. Använd alternativet noatime när du monterar filsystemet:

/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

Ändringarna träder i kraft nästa gång du startar om.

Om reklamens rättigheter

Behöver du en server för din webbplats? Vårt företag erbjuder pålitliga servrar med en daglig eller engångsbetalning är varje server ansluten till en internetkanal på 500 megabit och skyddas mot DDoS-attacker gratis!

Hur och varför noatime-alternativet förbättrar prestanda för Linux-system

Källa: will.com

Lägg en kommentar