Як і чому опція noatime підвищує продуктивність Linux-систем

Оновлення atime впливає на продуктивність системи. Що ж там відбувається і що з цим робити читайте у статті.

Як і чому опція noatime підвищує продуктивність Linux-систем
Щоразу, коли я оновлюю Linux на своєму домашньому комп'ютері, мені доводиться вирішувати певні завдання. З роками це стало звичкою: я роблю резервні копії своїх файлів, праю систему, встановлюю все з нуля, відновлюю свої файли, потім заново встановлюю свої улюблені програми. Я також змінюю під себе налаштування системи. Часом на це йде занадто багато часу. І нещодавно я задумався, чи потрібний мені цей головний біль.

Час - Одна з трьох тимчасових міток для файлів в Linux (докладніше про це пізніше). Зокрема, я ставив питання, чи варто як і раніше відключати atime в пізніших системах Linux. Оскільки atime оновлюється кожного разу, коли до файлу звертаються, я зрозумів, що він значно впливає на продуктивність системи.
Нещодавно я оновився до Fedora 32 і за звичкою почав з вимкнення atime. Я задумався: а чи потрібна вона мені в принципі? Вирішив вивчити це питання і ось що накопав.

Трохи про тимчасові мітки файлів

Щоб розібратися, вам потрібно зробити крок назад і згадати кілька речей про файлові системи Linux і про те, як ядро ​​надає тимчасові мітки файлам і каталогам. Ви можете побачити дату останньої зміни файлів та каталогів, запустивши команду ls -l (long) або просто подивившись на інформацію про це у файловому менеджері. Але за лаштунками ядро ​​Linux відстежує кілька тимчасових позначок для файлів та каталогів:

  1. Коли останній раз модифіковано файл (mtime)
  2. Коли востаннє було змінено властивості та метадані файлу (ctime)
  3. Коли востаннє зверталися до файлу (atime)
  4. Ви можете використати команду 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
  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

Але якщо я просто перейменую файл, не змінюючи його вмісту, Linux оновить лише час зміни файлу:

$ 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

Ці тимчасові мітки дуже корисні для певних програм 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 час останнього доступу до файлу завжди оновлюється, якщо йому більше XNUMX дня.

Сучасні системи 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-атак!

Як і чому опція noatime підвищує продуктивність Linux-систем

Джерело: habr.com

Додати коментар або відгук