Скільки памяті потрібно виділити під LinuxСкільки памяті потрібно виділити під Linux

0 Comment

Скільки памяті потрібно виділити під Linux

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

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

Віртуальна пам’ять: в двох словах

Ефективне тому, що пам’ять коштує гроші. Іноді Вам може її не вистачати для тощо, щоб вмістити всі запущені програми, особливо якщо ви використовуєте великі програми, як, наприклад, сучасні графічні стільниці. Для того, щоб обійти це, Юнікс використовує так звану віртуальну пам’ять. Він і не пробує помістити в оперативку всі програми, які Ви запустили. Він утримує в пам’яті тільки ті дані, які використовуються в цей момент. Всі інші залишаються у спеціальному місці на вашому диску, що називається обмінник^2 .

Зверніть увагу, що колись формулювання «іноді» з попереднього абзацу читалось як «майже завжди». На сучасних комп’ютерах можна запустити Х-сервер та типовий набір програм практично не використовуючи обмінник, тому що всі вони легко помістяться в оперативній пам’яті.

Віртуальна пам’ять: детальне пояснення

Фактично, у попередньому параграфі реальний стан речей дещо занадно спрощено. Так, програми бачать більшість оперативної пам’яті, як один великий плоский банк адрес, зазвичай більший, ніж сумарна кількість фізично наявної оперативної пам’яті. Цього операційна система досягає задопомогою обмінника на твердому диску, а також шляхом об’єднаня спільних блоків пам’яті, що містять один і той сам виконуваний код. Проте насправді Ваш комп’ютер має не менше 5 різних типів пам’яті і різниця між ними може мати дуже велике значення, коли з’явиться потреба налаштувати певні програми на максимальну швидкодію. Для того, щоб справді зрозуміти, що відбувається у Вашій машині, Ви повинні знати принципи роботи їх усіх.

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

Наведемо список швидкостей для типового домашнього комп’ютера, типового для початку 2000-х. І хоча швидкості і об’єми зростатимуть, а ціни падатимуть, співвідношення між ними, найвірогідніше, зберігатиметься, і саме це співвідношення формує ієрархію пам’яті.

  • Диск : Розмір: 10 ГБайт, доступ: 100 кБ/сек.
  • Оперативна пам’ять : Розмір: 256 МБайт, доступ: 100 МБ/сек.
  • Зовнішній кеш : Розмір: 512 кБайт, доступ: 250 МБ/сек.
  • Внутрішній кеш : Розмір: 32 кБайт, доступ: 500 МБ/сек.
  • Регістри процесора : Розмір: 28 байт^8 , доступ: 1ГБ/сек.

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

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

Те, наскільки віртуальна пам’ять є повільнішою за фізичну залежить від алгоритмів обміну операційної системи і того, наскільки вони підходять тій чи іншій програмі. На щастя, операції зчитування та запису пам’яті, котрі відбуваються близько в часі, мають тенденцію кластеризуватись (групуватись) в просторі пам’яті. Ця тенденція називається локальністю^3 , або, точніше, локальністю звертань^4 . Завдяки цьому ядру значно легше пересувати сторінки пам’яті між диском і оперативною пам’яттю. Якщо ж звернення до віртуальної пам’яті відбуваються в різних, розкиданих по пам’яті місцях, багато потрібної в конкретний момент пам’яті може знаходитись в обміннику на диску, і для таких зверненнь віртуальна пам’ять може стати такою ж повільною, як і диск. Але насправді програми зберігають щільне розташування своєї робочої пам’яті, тому операційна система не повинна буде здійснювати надто багато звертань до диска.

Як показує досвід, найбільш ефективний метод використання пам’яті для більшості програм є дуже простим; він називається LRU^5 . Коли якійсь програмі потрібно виділити пам’ять для роботи але фізична пам’ять уже зайнята, ядро переносить найдавніше вживані блоки інших програм (або навіть тієї самої програми) з оперативної пам’яті на диск, і програма отримує щойно звільнене місце в швидкій оперативній пам’яті для своєї роботи, в той час як пам’ять, котра зараз не обробляється «відпочиває» в обміннику на диску. Всі Юнікси та більшість інших систем, що мають функцію віртуальної пам’яті, використовують різні варіації саме цього методу.

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

Точно так, як оперативну пам’ять можна уявити вікном на обмінну область диску, зовнішня кеш-пам’ять є свого роду вікном на оперативну пам’ять. Вона є швидшою та меншою за основну пам’ять. Метод LRU реалізовується апаратно, контролером пам’яті Вашого комп’ютера. Тільки одиниця кеш-пам’яті, з історичних причин, називається не стооінкою, а рядком^6 .

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

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

Модуль керування пам’яттю

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

Ця таблиця використовується для передачі команд до спеціалізованої апаратної одиниці, що називається модуль керування пам’яттю або MMU^7 . У сучасних процесорах цей модуль вмонтований всередину самих процесорів. Він має специфічну властивість виставляти «огорожі» навколо використовуваних ділянок пам’яті, отож недозволені запити програм у чужі ділянки пам’яті натикаються на ці огорожі, і MMU генерує перепин.

Якщо Ви коли-небудь бачили повідомлення «Segmentation fault» або «core dumped» після того, як котрась із програм «зависла», відбулось саме те, про що ішлося — звертання програмою у пам’ять поза межами її власного сегменту. Це свідчить про помилку у програмі — перед тим, як використовувати пам’ять потрібно попросити про новий сегмент у ядра.

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

Визначення залишкового місця на диску

Ви можете визначити, скільки вільного місця лишилося на диску, за допомогою програм Аналізатор використання диска , Системний монітор та Використання .

Перевірка диска за допомогою «Аналізатора використання диска»

Щоб визначити розмір вільного місця на диску та місткість диска за допомогою програми Аналізатора використання диска , виконайте такі дії:

  • Відкрийте вікно програми Аналізатор використання диска з панелі огляду Діяльності . У вікні буде показано список місць зберігання файлів, а також дані щодо їхньої заповненості та місткості.
  • Клацніть на одному з пунктів у списку для перегляду докладного резюме щодо використання відповідного сховища даних. Натисніть кнопку меню, потім виберіть пункт Просканувати теку… для сканування іншого місця зберігання даних.

Буде показано відповідні відомості щодо даних Тека , Розмір , Вміст і момент, коли дані було востаннє Змінено . Докладніший опис можна знайти у підручнику з Аналізатора використання диска .

Перевірка за допомогою «Системного монітора»

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

  1. Відкрийте вікно програми Системний монітор з панелі огляду Діяльності .
  2. Перейдіть на вкладку Файлові системи , щоб переглянути розділи системи та дані щодо використання простору на диску. Буде показано відомості щодо об’єму Загалом , Вільно , Доступно і Використано .

Перевірка за допомогою «Використання»

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

  1. Відкрийте вікно програми Використання з панелі огляду Діяльності .
  2. Перейдіть на вкладку Сховище даних , щоб переглянути загальні дані щодо Використаного і Доступного місця на диску, а також місця, яке використано Операційною системою і типовими каталогами користувачів.

За допомогою позначення пункту поряд із назвою каталогу можна звільнити місце на диску від каталогів і підкаталогів користувача.

Що робити, якщо диск переповнено?

Якщо диск переповнено, вам слід

  • Вилучити файли, які не є важливими, або файли, якими ви більше не користуєтеся.
  • Створіть резервні копії важливих файлів, які вам тимчасово непотрібні, і вилучіть їх з жорсткого диска.

Докладніше

You can choose the displayed language by adding a language suffix to the web address so it ends with e.g. .html.en or .html.de.
If the web address has no language suffix, the preferred language specified in your web browser’s settings is used. For your convenience:
[ Change to English Language | Change to Browser’s Preferred Language ]

The material in this document is available under a free license, see Legal for details.
For information on contributing see the Ubuntu Documentation Team wiki page. To report errors in this documentation, file a bug.

Управління пам’яттю в Linux. Фізична та Віртуальна пам’ять

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

Що таке фізична пам’ять?

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

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

Що таке віртуальна пам’ять?

Віртуальна пам’ять (або логічна пам’ять”) — це метод управління пам’яттю, який здійснюється операційною системою та дозволяє програмам задіяти значно більше пам’яті, ніж (фактично) встановлено на комп’ютері. Наприклад, якщо обсяг фізичної пам’яті комп’ютера становить 4 ГБ, а віртуальної 16 ГБ, то програмі може бути доступний обсяг віртуальної пам’яті до 16 ГБ.

Фізична пам’ять vs. Віртуальна пам’ять

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

Фізична пам’ять Віртуальна пам’ять
Безпосередньо встановлена на комп’ютері оперативна пам’ять.Метод управління пам’яттю, за допомогою якого для програм створюється ілюзія наявності у системі більшого обсягу фактично встановленої (фізичної) пам’яті.
Працює швидше.Працює повільніше.
Обмежена розміром чіпу оперативки.Обмежена розміром жорсткого диску.
Може напряму звертатися до процесора.Не може напряму звертатися до процесора.
Використовує swapping.Використовує paging.

#1: Тип пам’яті:

Фізична пам’ять є фактичною пам’яттю.

Віртуальна пам’ять є логічною пам’яттю.

#2: Швидкість:

Фізична пам’ять швидше віртуальної пам’яті.

Фізична пам’ять обмежена розміром чіпу оперативки.

Віртуальна пам’ять обмежена розміром жорсткого диску.

Фізична пам’ять може напряму звертатися до процесора, тоді як віртуальна пам’ять — ні.

#5: Методи, які лежать в основі:

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

Віртуальна пам’ять використовує paging. Paging — це спосіб виділення пам’яті, у якому різним несуміжним блокам пам’яті призначається фіксований розмір. Розмір зазвичай становить 4 КБ. Paging завжди виконується між активними сторінками (pages).

Команди управління пам’яттю в Linux

Давайте розглянемо деякі команди управління пам’яттю в Linux.

Файл /proc/meminfo

Файл /proc/meminfo містить всю інформацію, пов’язану з пам’яттю. Для перегляду даного файлу використовується команда cat:

Ця команда виводить багато параметрів, пов’язаних із пам’яттю. Щоб отримати інформацію про фізичну пам’ять із файлу /proc/meminfo, використовуйте:

$ grep MemTotal /proc/meminfo

Щоб отримати інформацію про віртуальну пам’ять із файлу /proc/meminfo, використовуйте:

$ grep VmallocTotal /proc/meminfo

Команда top

Команда top дозволяє відслідковувати процеси та використання системних ресурсів у Linux у режимі реального часу. Коли ви запустите команду, то помітите, що значення вихідних даних продовжують змінюватися з деяким невеликим інтервалом:

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

Команда free

Команда free відображає обсяг вільної та використовуваної пам’яті в системі.

Значення для кожного поля вказані в кібібайтах (КіБ).

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

Команда vmstat

Команда vmstat — це інструмент моніторингу продуктивності в Linux, який надає корисну інформацію про процеси, пам’ять, операції вводу-виводу, підкачку, диск і планування процесора, а також наводить статистику використання віртуальної пам’яті вашої системи.