Все буде Україна!

Файл та розділ підкачки в Linux. Різниця між swapping та paging

  Юрій  | 

  Оновл. 10 Чер 2022  | 

 58

Кожна операційна система має у своєму розпорядженні певний виділений обсяг оперативної пам’яті, за допомогою якого вона здійснює обробку різних програм. Однак цей обсяг обмежений і не може вмістити занадто велику кількість даних. У зв’язку з цим у системи періодично виникає потреба у додатковому резерві пам’яті, до якого можна було б звертатися щоразу, коли вичерпується оперативна пам’ять.

Ця концепція застосовується як в Windows-системах, так і в Linux-системах. У Windows, якщо виникає ситуація, коли для зберігання процесу не вистачає оперативної пам’яті, система займає деякий обсяг пам’яті (так званої “віртуальної пам’яті”) з вторинного сховища. Аналогічно роблять і Linux-системи.

Таким чином, оперативна пам’ять завжди має достатній обсяг пам’яті для збереження в ній будь-якого процесу, що запускається. Запозичений простір жорсткого диска називається пам’яттю підкачки (англ. “swap memory”).

Swapping vs. Paging

Paging — це процес, при якому Linux ділить свою фізичну оперативну пам’ять на шматочки фіксованого розміру (4 КБ), які називаються сторінками (англ. “pages”).

Swapping (або “підкачка пам’яті”) — це процес, при якому сторінка пам’яті копіюється в спеціальний простір на жорсткому диску, який називається простором підкачки (англ. “swap space”), звільняючи зайнятий раніше об’єм оперативної пам’яті. У Linux для цього існує спеціальна програма — менеджер пам’яті. Щоразу, коли системі потрібно більше пам’яті, ніж фізично є у наявності, менеджер пам’яті шукає всі сторінки пам’яті, що рідко використовуються, і витісняє їх на жорсткий диск, надаючи звільнену пам’ять іншому процесу.

Часто трапляється так, що програма в момент свого старту задіює значну кількість сторінок пам’яті, які надалі їй будуть не потрібні. У таких випадках операційна система також може витіснити подібні сторінки пам’яті на диск, звільнивши цим самим пам’ять для інших програм (або навіть для дискового кеша).

Розглянемо основні відмінності між Swapping та Paging:

Swapping Paging
Процедура копіювання пам’яті всього процесу. Метод виділення пам’яті.
Виникає тоді, коли пам’ять всього процесу переноситься на диск. Виникає тоді, коли якась частина процесу переноситься на диск.
Відбувається тимчасове витіснення даних з основної пам’яті у “вторинну”. Безперервний фрагмент пам’яті розбивається на декілька окремих блоків фіксованого розміру, які називаються фреймами (frames) чи сторінками (pages).
Може виконуватися без будь-якого управління пам’яттю. Керується менеджером пам’яті.
Виконується над неактивними процесами. Виконується лише за участі активних процесів.

Типи пам’яті підкачки

Як правило, існує два різні типи пам’яті підкачки:

   Розділ підкачки (англ. “swap partition”) — тип пам’яті підкачки за замовчуванням. Це розділ жорсткого диску, який використовується виключно для підкачки пам’яті; інші файли не можуть знаходитися на ньому.

   Файл підкачки (англ. “swap file”) — спеціальний файл, який знаходиться серед інших файлів вашої файлової системи.

Щоб дізнатися, яким обсягом пам’яті підкачки ви володієте, використовуйте наступну команду:

$ sudo swapon -s

Кожен рядок на вищенаведеному скріншоті (у нас всього 1 рядок) позначає наявні простори підкачки. Розглянемо детально:

   Filename — вказує на розташування простору підкачки (ми бачимо, що наш розділ підкачки знаходиться у /dev/sda5).

   Type — вказує, що простір підкачки є розділом (partition), а не файлом (file).

   Size — розмір простору підкачки в кілобайтах.

   Used — вказує на використану кількість кілобайт пам’яті підкачки.

   Priority — визначає, який простір підкачки використовувати в першу чергу.

Одна з чудових особливостей підсистеми підкачки Linux полягає в тому, що якщо ви змонтуєте два (або більше) простори підкачки (на двох різних пристроях) з однаковим пріоритетом, то Linux чергуватиме активність підкачки між ними, що може значно підвищити продуктивність системи підкачки.

Примітка: Монтування у Linux — це підключення диска в основну файлову систему.

Переваги використання пам’яті підкачки

Вивчаючи роботу пам’яті підкачки, ми можемо легко зрозуміти переваги її використання, основні з яких наведені нижче:

   Пам’ять підкачки може легко утримувати ті неактивні блоки оперативної пам’яті, які були задіяні 1 чи 2 рази, після чого до них не було жодних звернень. Звільнена таким чином оперативна пам’ять може бути передана в роботу програмам з більшим пріоритетом.

   Пам’ять підкачки запобігає нестачі місця в оперативній пам’яті, дозволяючи запускати “важкі” програми, що вимагають великого обсягу оперативної пам’яті.

   Пам’ять підкачки діє як резервна копія для збільшення фактичного простору оперативної пам’яті.

   У процесі гібернації весь вміст оперативної пам’яті записується на диск в пам’ять підкачки.

   Збільшує загальну продуктивність вашої системи.

Розділ підкачки

Розділ підкачки (англ. “swap partition”) — це розділ жорсткого диску, який використовується виключно для підкачки пам’яті; є типом пам’яті підкачки за замовчуванням.

Додання розділу підкачки

Щоб додати додатковий розділ підкачки до вашої системи, вам спочатку потрібно виконати його підготовку. На першому кроці необхідно переконатися, що розділ жорсткого диска позначений як swap. На другому — створити файлову систему swap. Щоб перевірити, чи розділ позначений як swap, запустіть команду:

$ sudo fdisk -l /dev/sda

Примітка: Замініть /dev/sda на шлях до диска у вашій системі з розділом підкачки на ньому.

Ви повинні побачити приблизно наступне:

Якщо розділ не позначений як swap, вам потрібно змінити його, запустивши команду fdisk з параметром t. Будьте обережні під час роботи з розділами, оскільки інформація розділу підкачки буде повністю видалена, тому двічі перевіряйте кожну виконувану вами зміну.

Як тільки ваш розділ позначиться як swap, його необхідно буде підготувати за допомогою команди mkswap (скор. від make swap):

$ sudo mkswap /dev/sda5

Якщо при цьому не було отримано жодних помилок, ваш розділ підкачки готовий до використання. Для активації введіть команду:

$ sudo swapon /dev/sda5

Ви можете переконатися, що цей розділ тепер задіяний системою, виконавши команду swapon -s. Щоб автоматично змонтувати розділ підкачки під час завантаження системи, необхідно додати відповідний запис до файлу /etc/fstab, що містить список файлових систем та просторів підкачки:

/dev/sda5       swap    swap    defaults      0       0

Розглянемо детально:

   /dev/sda5 — шлях до розділу підкачки;

   swap — означає, що розділ буде змонтовано як розділ підкачки;

   swap — тип розділу;

   defaults — означає використовувати налаштування за замовчуванням;

   0 (останні два параметри) — означає, що даний параметр не використовується.

Щоб без перезавантаження перевірити, що ваш розділ підкачки монтується автоматично, ви можете запустити команду swapoff -a (яка відключає всі простори підкачки), а потім swapon -a (яка монтує всі простори підкачки, перелічені у файлі /etc/fstab), а потім перевірити статус вашого розділу підкачки за допомогою swapon -s.

Видалення розділу підкачки

Щоб видалити розділ підкачки, потрібно виконати наступні кроки:

Крок №1: Відключаємо розділ підкачки наступною командою:

$ sudo swappoff /dev/sda5

Або можна відключити взагалі всі розділи підкачки, використовуючи:

$ sudo swappoff -a

Крок №2: Оскільки розділ підкачки керується підсистемою ініціалізації systemd, то при наступному запуску системи він буде знову активований. Щоб назавжди відключити автоматичну активацію виявленого розділу підкачки, необхідно знайти swap-юніт, який відповідає за підкачку:

$ sudo systemctl --all --type swap

Розглянемо детально:

   UNIT (devsda5.swap) — це назва swap-юніта відповідного розділу підкачки.

   LOAD (loaded) — означає, що наш swap-юніт успішно завантажений.

   ACTIVE (inactive) — узагальнений статус юніта. Може приймати значення:

   active — юніт запущено;

   inactive — юніт зупинено.

   SUB (dead) — нижчий рівень юніту. Залежно від типу юніту, може приймати значення:

   running — виконується;

   exited — успішно завершив виконання;

   failed — помилка при виконанні;

   dead — не запущено;

   mounted — змонтований;

   plugged — підключений;

   та інше.

   DESCRIPTION (/dev/sda5) — вказує на шлях до swap-юніту (розділу підкачки).

Крок №3: Відключаємо подальші запуски вибраного юніту за допомогою команди mask:

$ sudo systemctl mask dev-sda5.swap

Крок №4: Перезавантажуємо систему.

Примітка: Якщо ви хочете негайного (без перезавантаження) виконання команди mask, то достатньо додати до неї ключ --now, наприклад:

$ sudo systemctl mask dev-sda5.swap --now

Вищеописані дії відключають використання розділу підкачки системою і не призводять до його фізичного видалення. У цьому можна переконатися, переглянувши список всіх розділів системи за допомогою наступної команди:

$ sudo fdisk -l

Або за допомогою графічної утиліти керування дисками GParted:

Примітка: Якщо у вашій системі відсутній GParted, то ви можете встановити його за допомогою наступної команди:

sudo apt-get install gparted

Для повного видалення розділу підкачки через GParted, необхідно клікнути по ньому ПКМ та вибрати пункт "Удалить":

Або ж скористатися наступною командою в терміналі:

$ sudo fdisk /dev/sda

Потім вам потрібно буде натиснути d (скор. від англ. delete”), щоб потрапити в режим видалення розділу. Після чого вас попросять вказати номер розділу, що видаляється (у мене це sda5, тому я вказав номер 5). Далі натисніть w (скор. від англ. write”), щоб записати внесені зміни до таблиці розділів диска і вийти з fdisk:

Також необхідно перевірити, що у вас закоментовані (символом #) всі згадки розділу підкачки в файлах конфігурації /etc/fstab та /etc/initramfs-tools/conf.d/resume.

На завершення, щоб у момент старту система знала, що такого розділу більше не існує, потрібно виконати наступну команду:

$ sudo update-initramfs -u

Готово! Розділ підкачки видалено!

Файл підкачки

Файл підкачки (англ. “swap file”) — це спеціальний файл, який створюється вручну, для підкачки в нього неактивного вмісту оперативної пам’яті, коли на жорсткому диску недостатньо місця для створення повноцінного розділу підкачки. Файл підкачки можна створювати та монтувати аналогічно розділу підкачки. Перевага файлів підкачки полягає в тому, що вам не потрібно шукати порожній розділ або перероблювати диск, щоб додати додатковий простір підкачки.

Додання файлу підкачки

Щоб додати до системи файл підкачки, потрібно виконати наступні кроки:

Крок №1: Створюємо файл, який використовуватиметься в якості файлу підкачки:

$ sudo fallocate -l 1G /swapfile

Якщо утиліта fallocate відсутня або ж ви отримали повідомлення про помилку типу failed: Operation not supported, то можете використати наступну команду для створення файлу підкачки:

$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

Частина /swapfile — це ім’я файлу підкачки, а count=1048576 — розмір файлу підкачки в кілобайтах (1048576 КБ ≈ 1.05 ГБ).

Крок №2: Тільки root-користувач повинен мати можливість записувати та читати файл підкачки. Для цього необхідно задати правильні права доступу:

$ sudo chmod 600 /swapfile

Крок №3: Необхідно підготувати файл підкачки за допомогою команди mkswap так само, як ми це робили у випадку з розділом, але цього разу використовуємо ім’я файлу підкачки:

$ sudo mkswap /swapfile

Крок №4: І точно так само монтуємо файл підкачки за допомогою команди swapon:

$ sudo swapon /swapfile

Потім потрібно додати запис у файл /etc/fstab для файлу підкачки:

/swapfile       swap    swap    defaults      0       0

Крок №5: Щоб переконатися, що ми активували файл підкачки, використовуємо команду swapon:

$ sudo swapon --show

Або команду free:

$ sudo free –h

Або:

$ sudo cat /proc/swaps

Або:

$ top

Видалення файлу підкачки

Якщо з будь-якої причини ви хочете відключити та видалити файл підкачки, виконайте наступні дії:

Крок №1: Відключаємо підкачку пам’яті за допомогою наступної команди:

$ sudo swapoff -v /swapfile

Крок №2: Видаляємо запис про файл підкачки з файлу /etc/fstab:

/swapfile       swap    swap    defaults      0       0

Крок №3: Видаляємо безпосередньо сам файл підкачки за допомогою команди rm:

$ sudo rm /swapfile

Наскільки великим повинен бути простір підкачки?

Можна запустити Linux-систему і без простору підкачки, система чудово працюватиме, якщо у вас досить великий обсяг оперативної пам’яті. Але якщо вона у вас закінчиться, то у вашій системі може статися критичний збій, тому все ж таки бажано мати простір підкачки, тим паче, що дисковий простір відносно дешевий.

Ключове питання: “Скільки потрібно простору підкачки?”. Старіші версії операційних систем типу Unix вимагали простору підкачки в два-три рази більше фізичної пам’яті. Сучасні Linux-системи застосовують емпіричне правило, сенс якого полягає в наступному:

   Для настільної системи використовуйте простір підкачки вдвічі більше розміру оперативної пам’яті, тому що це дозволить вам запускати велику кількість програм.

   Для сервера майте менший об’єм доступної підкачки (наприклад, половину від фізичної пам’яті), щоб у вас була деяка гнучкість для підкачки, коли це необхідно, але контролюйте обсяг використовуваного простору підкачки і у разі потреби оновлюйте свою оперативну пам’ять.

   Для старих настільних комп’ютерів (які мають, наприклад, лише 128 МБ оперативної пам’яті) по можливості виділяйте від 1 ГБ простору і більше.

Налаштування частоти використання простору підкачки

У ядро Linux 2.6 було додано новий параметр під назвою swappiness, який визначає як часто система використовуватиме простір підкачки. Він може мати значення від 0 до 100. Маленьке значення змусить ядро намагатися уникати операцій підкачки, коли це можливо, тоді як більше значення змусить ядро використовувати простір підкачки “агресивніше”.

Для swappiness значення за замовчуванням дорівнює 60. Ви можете тимчасово змінити його (до наступного перезавантаження), ввівши команду:

$ sudo echo 50 > /proc/sys/vm/swappiness

Або, наприклад, щоб встановити значення swappiness рівним 10 через sysctl, потрібно виконати наступну команду:

$ sudo sysctl vm.swappiness=10

Якщо ви хочете перманентно змінити дане значення, то вам необхідно визначити параметр vm.swappiness в файлі /etc/sysctl.conf.

Оптимальне значення підкачки залежить від робочого навантаження вашої системи та того, як використовується пам’ять. Регулюйте цей параметр невеликими кроками, щоб знайти оптимальне значення.

Висновки

У цій статті ми розглянули використання та роботу пам’яті підкачки, а також її численні переваги. Пам’ять підкачки служить резервним варіантом для оперативної пам’яті, коли в останньої не залишається вільного місця. Однак ми всі знаємо, що у нас не може бути нескінченного обсягу оперативної пам’яті, але у нас має бути достатня її кількість, щоб уникнути збою наших програм.

Крім того, є витрати, пов’язані з (фізичним) додаванням більшого обсягу оперативної пам’яті, тоді як немає витрат на використання пам’яті підкачки. Також часто буває неможливо додати додаткові планки оперативної пам’яті у комп’ютер. Отже, єдиний варіант, який залишається — це використовувати пам’ять підкачки, яка допоможе системі працювати ефективніше без будь-яких додаткових витрат.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (2 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *