Обновяването на atime влияе на производителността на системата. Какво точно се случва и какво да правите с това - прочетете в статията.

Всеки път, когато актуализирам Linux на домашния си компютър, се сблъсквам с определени задачи. С годините това стана навик: правя резервни копия на файловете си, изтривам системата, инсталирам всичко отначало, възстановявам файловете си и след това отново инсталирам любимите си приложения. Също така променям настройките на системата за моите нужди. Понякога това отнема прекалено много време. И наскоро се замислих, нужна ли ми е тази главоболия.
atime — една от трите времеви печати за файлове в Linux (повече за това по-късно). По-специално, се запитах дали все още трябва да деактивирам atime в по-новите версии на Linux. Тъй като atime се актуализира всеки път, когато файлът се достъпи, осъзнах, че оказва значително влияние върху производителността на системата.
Наскоро ъпгрейднах до Fedora 32 и по навик започнах с деактивирането на atime. Запитах се: необходима ли ми е изобщо? Реших да проуча този въпрос и ето какво открих.
Няколко думи за времевите печати на файловете
За да разберете, трябва да направите крачка назад и да си спомните няколко неща за файловите системи на Linux и как ядрото присвоява времеви печати на файловете и директориите. Можете да видите датата на последната промяна на файловете и директориите, като изпълните командата ls -l (дълго) или просто като погледнете информацията за това в файловия мениджър. Но зад кулисите ядрото на Linux проследява няколко времеви бележки за файлове и директории:
- Кога за последен път е модифициран файлът (mtime)
- Кога за последен път са променени свойствата и метаданните на файла (ctime)
- Кога за последен път е достъпен файлът (atime)
- Можете да използвате командата stat, за да видите данните за файла или директорията. Ето файлът /etc/fstab от един от моите тестови сървъри:
$ 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Тук виждаме, че този файл е създаден на 25 април 2019 г., когато инсталирах системата. Моят файл /etc/fstab е бил променян за последен път на 16 май 2019 г., а всички останали атрибути са били променени приблизително по същото време.
Ако копирам /etc/fstab в нов файл, датите се променят, указвайки, че това е нов файл:
$ sudo cp fstab fstab.bak
$ stat fstab.bak
Файл: fstab.bak
Размер: 261 Блокове: 8 IO Блок: 4096 редовен файл
Устройство: b303h/45827d Идентификатор: 2105664 Линкове: 1
Достъп: (0644/-rw-r--r--) UID: ( 0/ root) GID: ( 0/ root)
Контекст: unconfined_u:object_r:etc_t:s0
Достъп: 2020-05-12 17:53:58.442659986 -0500
Модификация: 2020-05-12 17:53:58.443659981 -0500
Промяна: 2020-05-12 17:53:58.443659981 -0500
Раждане: 2020-05-12 17:53:58.442659986 -0500Но ако просто преименувам файла, без да променям съдържанието му, Linux ще актуализира само времето на промяна на файла:
$ sudo mv fstab.bak fstab.tmp
$ stat fstab.tmp
Файл: fstab.tmp
Размер: 261 Блокове: 8 IO Блок: 4096 редовен файл
Устройство: b303h/45827d Идентификатор: 2105664 Линкове: 1
Достъп: (0644/-rw-r--r--) UID: ( 0/ root) GID: ( 0/ root)
Контекст: unconfined_u:object_r:etc_t:s0
Достъп: 2020-05-12 17:53:58.442659986 -0500
Модификация: 2020-05-12 17:53:58.443659981 -0500
Промяна: 2020-05-12 17:54:24.576508232 -0500
Раждане: 2020-05-12 17:53:58.442659986 -0500Тези времеви марки са много полезни за определени Unix програми. Например, biff — това е програма, която ви уведомява за появата на ново съобщение по електронната поща. В момента малко хора я използват , но в онези дни, когато пощенските кутии бяха локални за системата, biff беше доста широко разпространен.
Как програмата разбира, че имате нова поща в входящите? biff сравнява времето на последна промяна (когато файлът на входящата поща е бил обновен с ново електронно съобщение) и времето на последен достъп (последния път, когато сте прочели електронната си поща). Ако промяната е станала по-късно от достъпа, то biff ще разбере, че е пристигнало ново писмо и ще ви уведоми за това. Пощенският клиент Mutt работи по подобен начин.
Времевият знак за последен достъп също е полезен, ако трябва да събирате статистика за използването на файловата система и да оптимизирате производителността. Системните администратори трябва да знаят, до кои обекти се осъществява достъп, за да настроят файловата система по подходящ начин.
Но на повечето съвременни програми тази марка вече не е необходима, затова беше предложено да не я използват. През 2007 година Линус Торвалдс и няколко други разработчици на ядрото обсъждаха atime в контекста на проблема с производителността. Разработчикът на ядрото на Linux Инго Молнар направи следното забележка относно atime и файловата система ext3:
Доста странно е, че всеки работен плот и сървър на Linux страдат от значително намаление на производителността при вход-изход поради постоянните актуализации на atime, въпреки че реалните потребители са само двама: tmpwatch [който може да бъде конфигуриран да използва ctime, така че това не е голям проблем] и някои инструменти за архивиране.
Но хората все още използват някои приложения, за които е необходима тази отметка. Така че премахването на atime ще наруши тяхната работа. Разработчиците на ядрото на Linux не трябва да ограничават свободата на потребителя.
Соломоново решение
В дистрибуциите на Linux са включени много приложения, а освен това потребителите могат да изтеглят и инсталират други програми в съответствие с техните нужди. Това е основното предимство на ОС с отворен код. Но това усложнява оптимизацията на производителността на файловата система. Премахването на ресурсно интензивни компоненти може да наруши работата на системата.
Като компромис разработчиците на ядрото на Linux внедриха нова опция relaytime, която цели да осигури баланс между производителност и съвместимост:
atime се актуализира само ако предишното време на достъп е по-малко от текущото време на модификация или изменение на статуса… Започвайки с Linux 2.6.30, ядрото по подразбиране използва тази опция (освен ако не е посочено noatime)… Освен това, от Linux 2.6.30, времето на последния достъп до файла винаги се актуализира, ако е повече от 1 ден.
Съвременните системи Linux (от Linux 2.6.30, пусната през 2009 г.) вече използват relaytime, което трябва да доведе до значителен ръст в производителността. Това означава, че не е нужно да конфигурирате файла /etc/fstab, а с relaytime можете да разчитате на стойността по подразбиране.
Повишаване на производителността на системата с помощта на noatime
Но ако искате да конфигурирате системата си за максимална производителност, изключването на atime все още е възможно.
Промяната в производителността може да не е много забележима на много бързи съвременни дискове (като NVME или Fast SSD), но там има малко увеличение.
Ако знаете, че не използвате софтуер, за който е необходим atime, можете леко да увеличите производителността, като активирате опцията noatime в файла /etc /fstab. След това ядрото няма да актуализира постоянно atime. Използвайте опцията noatime при монтиране на файловата система:
/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Промените ще влязат в сила при следващото рестартиране.
Реклама
Нужен ли ви е сървър за хостване на сайта? Нашата компания предлага с дневно или еднократно плащане, всеки сървър е свързан с интернет канал от 500 Мегабита и е защитен безплатно от DDoS атаки!
Източник: habr.com
