Swap (Українська)
Стан перекладу: На цій сторінці представлений переклад статті Swap. Дата останньої синхронізації: 3 лютого 2024 року. Ви можете допомогти синхронізувати переклад, якщо в англійській версії відбулися зміни.
На цій сторінці представлено введення в простір підкачки та підкачки сторінок в GNU/Linux. Вона охоплює створення та активацію файлів та розділів підкачки.
Linux ділить свою фізичну оперативну пам'ять на шматочки пам'яті, які називаються сторінками. Підкачка (swapping) — це процес, коли сторінки пам'яті копіюються на попередньо налаштований простір на жорсткому диску, званий простір підкачки (swap space), щоб звільнити ці сторінки в оперативній пам'яті. Сумарний розмір оперативної пам'яті та простору підкачування – це кількість доступної віртуальної пам'яті.
Робота з підкачуванням забезпечується ядром Linux і інструментами з пакета util-linux в просторі користувача.
Простір підкачування
Простір підкачки може бути розділом диска чи файлом. Користувачі можуть створити простір підкачки під час встановлення або пізніше в будь-який час. Простір підкачки може бути використаний для двох цілей: розширення доступної віртуальної пам'яті і збереження даних під час переходу в сплячий режим.
Чи є сенс розширювати віртуальну пам'ять за допомогою підкачування, залежить від обсягу встановленої фізичної пам'яті. Якщо він менший, ніж обсяг пам'яті, необхідний для запуску всіх потрібних програм, то додавання підкачування може виявитися корисним.Це дозволить уникнути стану нестачі пам'яті (out of memory) і спрацьовування OOM killer в ядрі, який спробує звільнити пам'ять шляхом вбивства процесів.
Найбільший недолік використання підкачки - зниження продуктивності; дивіться розділ #Продуктивність.
Перевірити статус підкачки можна командою:
Переглянути використання фізичної пам'яті та підкачування:
Розділ підкачки
Розділ підкачки може бути створений в більшості інструментів для розмітки.
Щоб створити простір підкачки на місці потрібного розділу, використовуйте команду mkswap(8) :
Щоб задіяти його:
Щоб автоматично підключати цей розділ підкачування під час завантаження системи, додайте запис до /etc/fstab :
UUID=UUID_пристрою none swap defaults 0 0
Де UUID_пристрою — це UUID розділу, який використовується як простір підкачки.
Синтаксис файлу описано у статті fstab (Українська).
Примітка: Додавання запису до fstab необов'язково, якщо розділ підкачки знаходиться на пристрої з розміткою GPT;
Важливо: Увімкнення discard у RAID установці з використанням mdadm призведе до блокування системи під час завантаження та під час виконання, якщо використовувати swapon.
Активація за допомогою systemd
systemd може автоматично активувати розділи підкачки, використовуючи два різних механізми. , який зчитує файл fstab і з його вмісту генерує systemd-юніти, в тому числі юніти для підкачування Другий - systemd-gpt-auto-generator , який сканує кореневий диск для створення юнітів. докладнішу інформацію.
Вимкнення підкачки
Щоб деактивувати певний простір підкачування:
# swapoff /dev/sdxy
Також можна використовувати ключ -a, щоб деактивувати всі місця підкачування.
Оскільки підкачкою керує systemd, вона знову буде активована при наступному старті системи. .swap юнітів та замаскуйте ті юніти, які ви хочете відключити.
Файл підкачування
Замість створення цілого розділу можна використовувати файл підкачки. Він дає можливість змінювати свій розмір на льоту, а також набагато легше повністю видалити. Це може бути особливо важливо, якщо місце на диску обмежене (наприклад, невеликі SSD).
Створення файлу підкачки
Примітка: Для файлової системи Btrfs дотримуйтесь інструкцій з розділу Btrfs (Українська)#Файл підкачки замість наведених нижче кроків.
Використовуйте команду dd для створення файлу підкачки потрібного вам розміру.
# dd if=/dev/zero of=/swapfile bs=1M count=8k status=progress
Примітка: Використання команди dd для створення файлу підкачки - найуніверсальніше рішення; докладніше дивіться swapon(8) § Files with holes .
Встановіть правильні права доступу (файл підкачки, доступний для читання всім, це величезна локальна вразливість):
Після створення потрібного розміру файлу відформатуйте його як підкачку:
# mkswap -U clear /swapfile
Активуйте файл підкачування:
Нарешті, додайте запис для файлу підкачки у файл fstab:
/swapfile none swap defaults 0 0
Синтаксис файлу описано у статті fstab (Українська).
Примітка: Необхідно вказати саме шлях до файлу підкачки у файловій системі, а не UUID чи LABEL.
Видалення файлу підкачки
Перед видаленням файлу підкачки спочатку вимкніть його:
# swapoff / swapfile # rm -f / swapfile
Не забудьте видалити відповідний рядок /etc/fstab .
Стиснутий блоковий пристрій у ОЗУ
zswap використовується за замовчуванням, якщо ви використовуєте файл або розділ підкачки, але ви можете обійтися взагалі без файлу або розділу підкачки і замість нього створити стислий блоковий пристрій в оперативній пам'яті за допомогою zram. Інформація про відмінності між використанням zram та zswap описана у розділі Збільшення продуктивності #zram або zswap.
Шифрування підкачування
Продуктивність
Операції з підкачуванням зазвичай виконуються значно повільніше, ніж прямий доступ до даних у ОЗП. Повне відключення підкачки для підвищення продуктивності іноді може призвести до її погіршення, оскільки зменшується обсяг пам'яті, доступної для кеша віртуальної файлової системи (VFS), що призводить до більш частих дорогих звернень до накопичувача.
Значення підкачування можна налаштувати, щоб допомогти продуктивності:
Swappiness
Коли використання пам'яті досягає певного порогу, ядро починає переглядати активну пам'ять і дивитися, що можна звільнити. перед розвантаженням.
Примітка: Є поширена помилка, що swappiness впливає на поріг пам'яті або запобігає використанню підкачки, але насправді він впливає тільки на описану вище перевагу.
Щоб перевірити поточне значення swappiness:
Також можна переглянути файл /sys/fs/cgroup/memory/memory.swappiness (специфічний для cgroup v1) або /proc/sys/vm/swappiness .
Щоб тимчасово встановити значення swappiness:
# sysctl -w vm.swappiness=10
Щоб зробити зміну постійною, створіть файл налаштувань sysctl.d(5) , наприклад:
/etc/sysctl.d/99-swappiness.conf
Щоб значення swappiness задало завантажувач під час завантаження ядра, додайте параметр ядра, наприклад sysctl.vm.swappiness=10 .
Щоб перевірити і більше дізнатися, чому воно так працює, перегляньте цю статтю.
VFS cache pressure
Ще один sysctl параметр, що впливає на продуктивність підкачки, — vm.vfs_cache_pressure . 1]. Більш детальна інформація є у документації ядра. Linux.
Пріоритет
Якщо у вас кілька файлів або розділів підкачки, можна надати їм пріоритети (від 0 до 32767). Система використовуватиме простору підкачування з високим пріоритетом перед використанням просторів з низьким пріоритетом. Наприклад, якщо у вас є швидкий диск ( /dev/sda ) і повільний ( /dev/sdb ), призначте високий пріоритет для підкачування на швидкому пристрої. Пріоритет можна задати у файлі fstab за допомогою параметра pri:
/dev/sda1 none swap defaults, pri=100 0 0 /dev/sdb2 none swap defaults, pri=10 0 0
Або за допомогою параметра --priority у команді swapon:
# swapon --priority 100 /dev/sda1
Якщо кілька підкачувань будуть мати однаковий пріоритет і він буде найвищим з доступних пріоритетів, то сторінки розподілятимуться по колу між цими підкачками.
Чергування
Немає необхідності використовувати RAID для підвищення продуктивності підкачування. Ядро самостійно може чергувати підкачування на кількох пристроях, якщо ви надаєте їм однаковий пріоритет у /etc/fstab . Докладніше дивіться The Software-RAID HOWTO.
Дивіться також
Створення, редагування та видалення SWAP у Linux
У системі Лінукс для розміщення віртуальної пам'яті можна виділити окремий розділ жорсткого диска або використовувати звичайний файл. Лінукс дозволяє комбінувати ці два способи. За замовчуванням в Unix системах застосовується розділ SWAP. Продуктивність окремого SWAP розділу жорсткого диска вище, ніж продуктивність віртуальної пам'яті, розміщеної у файлі. Єдиним мінусом розділу SWAP є складність його редагування.
Якщо Ви до експлуатації сервера знаєте якої ємності потрібна область SWAP, то обов'язково використовуйте окремий розділ жорсткого диска.Якщо навантаження на SWAP область поки невідома, краще розмістити віртуальну пам'ять у файлі, після чого визначивши потреби системи, створити розділ потрібного розміру.
Система Linux дозволяє одночасно використовувати кілька SWAP розділів та SWAP файлів. Це дозволяє гнучкіше підійти до питання розширення віртуальної пам'яті у разі нестачі розміру SWAP області на сервері. Найчастіше, на працюючому сервері з існуючим розділом SWAP з'ясовується, що поточного розміру віртуальної пам'яті вже не вистачає. Доцільніше додати тестовий файл підкачки для визначення навантаження на SWAP область, а вже після збільшення розміру розділу.
Створення, редагування та видалення будь-яких розділів з під завантаженої в даний момент операційної системи не безпечне, тому створення SWAP розділу замість SWAP файлу робиться тільки з використанням LiveCD. Стаття на тему безпечного редагування розділів буде написана у майбутній час.
У Windows віртуальна пам'ять розміщена лише у окремому файлі – pagefile.sys (для Windows 2000 і вище) і win386.swp (для Windows 9x).
Для будь-якої операційної системи, якщо використовується режим сну (Hebernation), розмір віртуальної пам'яті слід робити не менше обсягу оперативної пам'яті. У загальних випадках найбільше ефективно використовувати розмір віртуальної пам'яті кратний 4 (1024 Мб, 2048 Мб і т.д.), так як ядро системи здійснює обмін сторінками з пам'яттю по 4 Кб у кожній. Розмір віртуальної пам'яті легко порахувати від обсягу оперативної пам'яті *2, *3. Область підкачування варто розміщувати на найшвидшому жорсткому диску ближче до початку.
Хочу звернути Вашу увагу, що наведені нижче інструкції стосуються лише зміни розміру ФАЙЛА ВІРТУАЛЬНОЇ ПАМ'ЯТІ , а не зміна розміру окремої директорії SWAP .
Нижче наведено покрокові інструкції, які дозволять створити, змінити та видалити файл SWAP .
Створення файлу SWAP
Створюємо файл необхідного розміру для swap області, де /home/swap-tmp – це ім'я та шлях файлу, а count=1024K його розмірів, у разі – 1024 Мб):
[user@localhost user]#sudo dd if=/dev/zero of=/home/swap-tmp bs=1024 count=1024K
1048576+0 записів раховано
1048576+0 записів написано
скопійовано 1073741824 байти (1,1 GB), 137,509 c, 7,8 MB/c
[user@localhost user]# sudo mkswap /home/swap-tmp
Встановлюється простір для свопінгу версії 1, розмір = 1073737 кБ
без мітки, UUID =54c60583-e61a-483a-a15c-2f1be966db85
Для перегляду результату переглядаємо всі об'єкти, які використовуються для розміщення віртуальної пам'яті:
echo "UUID=54c60583-e61a-483a-a15c-2f1be966db85 swap swap defaults 0 0" | sudo tee -a /etc/fstab
Видалення файлу SWAP
Переглядаємо всі об'єкти, які використовуються для розміщення віртуальної пам'яті
Якщо Ви раніше додавали рядок до fstab, для автоматичного завантаження SWAP файлу при старті операційної системи, слід видалити її. Виводимо файл /etc/fstab для редагування на екран:
Редагування розміру файлу SWAP
Дії редагування обсягу SWAP файлу зводяться до видалення вже створеного файлу SWAP і створення нового файлу необхідного розміру. Тобто потрібно спочатку зробити пункт 3, а потім пункт 2.
Парашутист зі стажем. Багато читаю та слухаю подкасти. Люблю посиденьки біля багаття, пісні під гітару і дедлайни, що наближаються. Люблю мандрувати.