Aktualizacja Atime wpływa na wydajność systemu. Co się tam dzieje i co z tym zrobić - przeczytaj artykuł.
Ilekroć aktualizuję Linuksa na moim komputerze domowym, muszę rozwiązać pewne problemy. Z biegiem lat stało się to moim nawykiem: tworzę kopie zapasowe plików, czyszczę system, instaluję wszystko od zera, przywracam pliki, a następnie ponownie instaluję moje ulubione aplikacje. Zmieniam też ustawienia systemu na własne. Czasami zajmuje to zbyt dużo czasu. A ostatnio zastanawiałam się, czy ten ból głowy jest mi potrzebny.
czas jest jednym z trzech znaczników czasu plików w systemie Linux (więcej na ten temat później). W szczególności zastanawiałem się, czy nadal dobrym pomysłem byłoby wyłączenie atime w nowszych systemach Linux. Ponieważ atime jest aktualizowany przy każdym dostępie do pliku, zdałem sobie sprawę, że ma to znaczący wpływ na wydajność systemu.
Niedawno zaktualizowałem do Fedory 32 i z przyzwyczajenia zacząłem od wyłączenia atime. Pomyślałem: czy naprawdę tego potrzebuję? Postanowiłem przestudiować ten problem i oto, co wykopałem.
Trochę o znacznikach czasu plików
Aby to zrozumieć, musisz cofnąć się o krok i pamiętać kilka rzeczy o systemach plików Linuksa oraz o tym, jak jądro oznacza znaczniki czasu plikom i katalogom. Możesz zobaczyć datę ostatniej modyfikacji plików i katalogów, uruchamiając polecenie ls -l (długie) lub po prostu przeglądając informacje na ten temat w menedżerze plików. Ale za kulisami jądro Linuksa śledzi kilka znaczników czasu plików i katalogów:
- Kiedy plik był ostatnio modyfikowany (mtime)
- Kiedy ostatni raz zmieniono właściwości pliku i metadane (ctime)
- Kiedy był ostatni dostęp do pliku (atime)
- Możesz użyć polecenia stanaby wyświetlić informacje o pliku lub katalogu. Oto plik / etc / fstab z jednego z moich serwerów testowych:
$ 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
Tutaj widać, że plik ten powstał 25 kwietnia 2019 roku, kiedy instalowałem system. Mój plik / etc / fstab został ostatnio zmodyfikowany 16 maja 2019 r., a wszystkie inne atrybuty zostały zmienione mniej więcej w tym samym czasie.
Jeśli skopiuję / etc / fstab do nowego pliku, daty zmieniają się, wskazując, że jest to nowy plik:
$ 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
Ale jeśli po prostu zmienię nazwę pliku bez zmiany jego zawartości, Linux zaktualizuje tylko czas modyfikacji pliku:
$ 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
Te znaczniki czasu są bardzo przydatne w przypadku niektórych programów uniksowych. Na przykład biff to program, który powiadamia Cię, gdy w Twojej wiadomości e-mail pojawi się nowa wiadomość. Obecnie niewiele osób korzysta
Skąd program wie, czy w Twojej skrzynce odbiorczej znajduje się nowa poczta? biff porównuje czas ostatniej modyfikacji (kiedy plik skrzynki odbiorczej został zaktualizowany nową wiadomością e-mail) i czas ostatniego dostępu (kiedy ostatni raz przeczytałeś wiadomość e-mail). Jeśli zmiana nastąpiła później niż dostęp, to biff zrozumie, że przyszedł nowy list i powiadomi Cię o tym. Klient poczty elektronicznej Mutt działa w podobny sposób.
Znacznik czasu ostatniego dostępu jest również przydatny, jeśli chcesz zebrać statystyki użycia systemu plików i dostroić wydajność. Administratorzy systemu muszą wiedzieć, do jakich obiektów uzyskuje się dostęp, aby móc odpowiednio skonfigurować system plików.
Jednak większość nowoczesnych programów nie potrzebuje już tej etykiety, więc zaproponowano, aby jej nie używać. W 2007 roku Linus Torvalds i kilku innych programistów jądra omawiało czas w kontekście problemu z wydajnością. Twórca jądra Linuksa, Ingo Molnar, poczynił następujące uwagi na temat atime i systemu plików ext3:
„To dość dziwne, że każdy komputer stacjonarny i serwer z Linuksem odczuwa zauważalną degradację wydajności we/wy z powodu ciągłych aktualizacji czasu, mimo że prawdziwych użytkowników jest tylko dwóch: tmpwatch [który można skonfigurować do używania ctime, więc nie jest to duży problem] i niektóre narzędzia do tworzenia kopii zapasowych.”
Jednak ludzie nadal korzystają z niektórych programów wymagających tej etykiety. Zatem usunięcie atime przerwie ich funkcjonalność. Twórcy jądra Linuksa nie powinni naruszać wolności użytkownika.
Rozwiązanie Salomona
W dystrybucjach Linuksa znajduje się wiele aplikacji, a ponadto użytkownicy mogą pobierać i instalować inne programy zgodnie ze swoimi potrzebami. Jest to kluczowa zaleta systemu operacyjnego typu open source. Utrudnia to jednak optymalizację wydajności systemu plików. Usunięcie komponentów wymagających dużej ilości zasobów może zakłócić działanie systemu.
W ramach kompromisu twórcy jądra Linuksa wprowadzili nową opcję czasu przekaźnika, która ma zapewnić równowagę pomiędzy wydajnością i kompatybilnością:
atime jest aktualizowane tylko wtedy, gdy poprzedni czas dostępu jest krótszy niż bieżący czas modyfikacji lub zmiany statusu... Od Linuksa 2.6.30 jądro domyślnie używa tej opcji (chyba że określono noatime)... Również od Linuksa 2.6.30. 1, czas ostatniego dostępu do pliku jest zawsze aktualizowany, jeśli jest on starszy niż XNUMX dzień.
Nowoczesne systemy Linux (od Linuksa 2.6.30 wydanego w 2009 roku) już korzystają z czasu przekaźnika, co powinno dać naprawdę duży wzrost wydajności. Oznacza to, że nie musisz konfigurować pliku / etc / fstab, a w przypadku czasu przekaźnika możesz polegać na wartości domyślnej.
Poprawa wydajności systemu za pomocą noatime
Jeśli jednak chcesz dostroić swój system, aby uzyskać maksymalną wydajność, wyłączenie atime jest nadal możliwe.
Zmiana wydajności może nie być bardzo zauważalna na bardzo szybkich, nowoczesnych dyskach (takich jak NVME lub Fast SSD), ale jest tam niewielki wzrost.
Jeśli wiesz, że nie używasz oprogramowania wymagającego atime, możesz nieznacznie poprawić wydajność, włączając opcję noatime w pliku /etc/fstab. Po tym, jądro nie będzie stale aktualizowane. Użyj opcji noatime podczas montowania systemu plików:
/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
Zmiany zaczną obowiązywać przy następnym ponownym uruchomieniu.
O prawach reklamy
Czy potrzebujesz serwera do hostowania swojej witryny internetowej? Nasza firma oferuje
Źródło: www.habr.com