Чому частково повна оперативна пам’ять викликає відставання?


53

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

Я помічаю, що на мобільному телефоні більше, ніж на ПК, оскільки він має меншу оперативну пам'ять, наприклад, мій мобільний має 2 ГБ оперативної пам’яті; коли у мене менше 1 ГБ оперативної пам’яті, це дуже відстає! Чому це трапляється, хоча він досі має ~ 1 Гб?


28
Я підозрював, що ви припускаєте, що наявна оперативна пам'ять не використовується. Тож ви бачите доступну 20% оперативної пам’яті і думаєте, що використовується лише 80% оперативної пам’яті. Це неправильно, оперативна пам’ять може бути як використана, так і доступна. (Наприклад, машина, якою я зараз користуюся, має 32 ГБ оперативної пам’яті та 21,1 ГБ доступна, але лише 1,8 ГБ безкоштовно.)
Девід Шварц

2
Ви маєте на увазі мій вільний простір на жорсткому диску з моєю оперативною пам’яттю? похмурий ні.
Мухаммед Нурелдін

3
Їх можна точно замінити. Але це матиме величезний негативний вплив на продуктивність - саме так, як ви бачите. Якщо робочий набір перевищує оперативну пам’ять, продуктивність буде жахливою, незалежно від кількості оперативної пам’яті.
Девід Шварц

3
Чому ви думаєте, що саме відсоток оперативної пам’яті змушує пристрій відставати?
енкриптор

4
@MohammedNoureldin Я думаю, що повинна бути причина, чому ваша оперативна пам'ять зайнята (ряд процесів працює і щось робить). Це може бути тією ж причиною, чому пристрій відстає. Завантаження оперативної пам’яті може бути лише симптомом, а не самою причиною.
енкриптор

Відповіді:


70

Тут багато залучено, але я спробую пояснити це настільки просто, наскільки я можу, і таким чином, що стосується практично будь-якої ОС.

Тут є два основних принципи:

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

  2. Частота використання блоків пам'яті далеко не випадкова, але її можна передбачити зі значною точністю. Пам'ять поділяється на блоки, найчастіше 4 К байт. До деяких блоків звертаються багато разів за секунду, а інші не отримували доступу протягом багатьох хвилин, годин, днів або навіть тижнів, якщо система була достатньо довгою. Між цими двома крайнощами існує широкий спектр використання. Менеджер пам'яті знає, до яких блоків було доступно недавно, а до яких - не. Це обґрунтоване припущення, що найближчим часом знову знадобиться блок пам'яті, до якого звертався доступ. Пам'ять, до якої недавно не було доступно, ймовірно, не буде потрібна найближчим часом. Багаторічний досвід довів це як дійсний принцип.

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

Коли оперативної пам’яті багато, цей балансуючий акт простий. Значна частина не так давно використаних даних може зберігатися в оперативній пам'яті. Це гарна ситуація.

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

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

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


1
Ваша відповідь мені дуже допомогла, дякую! Це memory mangerчастина мого OSправа? тож якщо я маю справу з покажчиками та цими речами на дуже низькому рівні, чи все-таки вдасться зробити пейджинги?
Мухаммед Нурелдін

7
Менеджер пам'яті є частиною ОС. Пейджинг - це основна функція диспетчера пам'яті і настільки ж важливий для роботи, як і дихання для вас і я. Її неможливо зупинити.
LMiller7

2
@MohammedNoureldin: Коли ви пишете програми для користувальницького простору (чиї види пам’яті ізольовані від огляду ядра та інших процесів), ви не можете отримати доступ до фізичної пам'яті безпосередньо . Все, до чого можна отримати доступ, - це перегляд пам’яті, якою керує - ви здогадалися - менеджер пам’яті з усіма її функціями (можливо), включаючи підказка. Покажчики пам’яті стосуються лише точок у адресних просторах перегляду пам’яті. Вони являють собою мовну концепцію, яка використовується як у коді простору ядра, так і у користувальницькому просторі, але це не означає, що два представлення пам'яті однакові. Не плутайте управління пам’яттю процесу з ядром MM!
Девід Фоерстер

6
Це "очевидно" або "добре відомо", але, можливо, все ж слід додати у цій відповіді: пам'ять (оперативної пам'яті) в порядку 1000 разів швидше, ніж на жорсткому диску (ну, залежить від багатьох речей, наприклад, ssd / ide / сата тощо). ОС виконує код з оперативної пам'яті (+ кеш), а не з диска. Коли об'єм пам’яті зменшується, і ОС потребує «заміни» частини («невикористаного») коду з пам’яті на диск, щоб звільнити оперативні пам’ятки, щоб виконати щось інше, це займе «багато» часу (заміни), і якщо це трапляється часто (наприклад, у вас багато програм, кожна з них потребувала своп, щоб завантажити свій код у пам'ять), це значно сповільнить роботу.
Олів'є Дулак

3
Зазвичай ми не використовуємо термін "swap" для позначення завантаження коду в пам'ять. Зазвичай це називається "помилка". Зазвичай термін "swap" використовується лише для інформації, яку потрібно записати на диск, перш ніж вона може бути вилучена з оперативної пам'яті.
Девід Шварц

29

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


11
Насправді, додаткам не потрібно «очищати» кеш. Вони просто вимагають оперативної пам’яті від ОС. ОС, побачивши, що у неї немає невикористаної оперативної пам’яті, очистить частину кеш-файлів і надасть додатковій нульовій оперативній пам’яті додаток. Програма не може сказати, звідки ця оперативна пам'ять.
MSalters

5
@MSalters Так, я згоден, програма запитує оперативну пам’ять і ОС очищає кеш при необхідності. Я намагався зробити це просто.
Майк Скотт

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

4

Ця відповідь в основному була переписана, щоб реорганізувати структуру та зробити повідомлення зрозумілішим. Я також відкрив це як відповідь у вікі спільноти; Не соромтеся редагувати.

Пейджинг - це схема управління пам'яттю, за допомогою якої блоки пам'яті фіксованого розміру мають призначені їм процеси. Коли використання пам'яті піднімається до високого рівня (тобто 80% ємності), підказка починає поширюватися з ОЗУ в vRAM (віртуальна ОЗУ).

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

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

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

Це, однак, спричиняє лише незначний вплив на продуктивність. Коли швидкість здійснення пейджингу на vRAM різко зростає (коли виділена оперативна пам'ять наближається до потужності), відбувається обмолот.

Обмолот - це практика швидкого та швидкого перенесення сторінок пам'яті у вашу віртуальну пам'ять. Це вимагає величезних витрат на продуктивність, оскільки потрібно витратити більше часу на отримання даних та адреси даних.

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

Дізнайтеся більше про таління тут !

Велика подяка учасникам цієї відповіді, включаючи Даніеля Б , ксеноїда та Джона Бентлі .


3
Це не так, як молотити це навмисно. Це лише побічний ефект пейджингу та змагання за фізичну пам'ять. Також віртуальна пам'ять не "створюється" переміщенням сторінок на диск.
Даніель Б

Обмолот - це побічний продукт, правда, але він надзвичайно корисний у часи, коли процеси перебігають, що допомагає запобігти відключенню. І так, віртуальна пам'ять зайнята, а не створена. Я буду редагувати що.
Буде чи

8
Ні, ви плутаєте сміття та підкачки. Тріскання просто підкачки стає патологічним.
ксеноїд

@xenoid Paging - схема управління пам'яттю; Це як би сказати, що я плутаю удари оленя зі своїм автомобілем та системою шосе. Обмолот - це процес, який спричиняє таке зниження продуктивності; Я, однак, погоджуюся з вами, що це результат системи підкачки.
Буде чи

1
Коментарі, включені у відповідь на вікі, не соромтесь редагувати.
Буде чи

1

Це тому, що ОС повинна робити багато підказок (завантаження частин активних програм) та заміни (переміщення даних в оперативній пам’яті на HD і навпаки), щоб тримати ваше програмне забезпечення. Коли потрібно завантажувати нові сторінки, які можуть потребувати більше місця, ніж доступні 20%, ОС доведеться замінювати наявні сторінки в оперативній пам’яті, які, на його думку, є менш ймовірними, що будуть використані незабаром. Особливо при запуску інших програм. Заміна та повернення сторінок займає багато часу і різко уповільнює продуктивність ваших ПК, оскільки ви зараз працюєте зі швидкістю HD, а не ОЗУ.

Це трохи допомагає на жорсткому диску створити спеціальний розділ на вашому HD- диску та призначити його як виділений простір "swap" (не використовуйте його для "реальних" файлів), так що на заміщення менше впливає фрагментація HD- дисків .


ПЗУ - це просто номенклатура для HD, коли ми говоримо про кешування, підкачки тощо. Все, що не є робочою пам'яттю. І ПЗУ, як правило, повільніше, ніж оперативна пам'ять, майже завжди були. Старі комп'ютери копіювали дані з ПЗУ в ОЗУ (ROM Shadowing) під час завантаження, оскільки це працювало швидше.
Жиль Лесіре

1
Звичайно, але ROM та оперативна пам’ять також використовуються як енергонезалежна та енергонезалежна пам'ять? BTW ROM зазвичай повільніше, ROM копіюється в оперативну пам'ять (ROM Shadowing) під час завантаження для підвищення продуктивності. Але впевнено, я зміню одну посилання, щоб виправити ваше попитання. ;)
Жиль Лесіре

1

Пам'ятайте, що жорсткі диски на порядок повільніше, ніж оперативна пам’ять, а сама оперативна пам’ять - не все так швидко (в загальній архітектурі). Порядок швидкості доступу (де кожен виступ є на порядок меншим, ніж вище)

  1. Реєстри процесорів - На практиці регістри доступні протягом 1 циклу процесорів . Зважаючи на те, що процесори роблять мільярди циклів в секунду (3 ГГц = 3 мільярди циклів в секунду), це шалено швидко.
  2. Кеш процесора - Залежить від рівня, але вони все ще досить швидкі (3-5 циклів доступності для кешу L1).
  3. Пам'ять із випадковим доступом (ОЗП) - Довільна частина означає, що ви не знаєте, в якому стані знаходиться, коли отримуєте доступ до нього. Подумайте про доставку пакету, який повинен зупинитися, забрати пакет, підійти до дверей і задзвонити дзвінок у двері і чекати відповіді. Можливо, ви зовсім не чекаєте, або, можливо, ви чекаєте хвилину-дві, щоб місіс Сміт підсунулася до дверей у задній частині будинку. На практиці ми говоримо десь від 14-27 циклів (залежно від того, у якому стані була оперативна пам'ять, коли ми отримали доступ до неї).
  4. Жорсткий диск - тут є фізичний процес, і хоча це відбувається як можна швидше, ви чекаєте, коли голови будуть рухатися, а сліди рухатись під цими головами. На практиці твердий диск із 7200 об / хв може завершити оберти приблизно за 4 мс , або десь близько 750 000 циклів для процесора 3 ГГц . Це повільно.

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

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


1
Так, менеджер пам'яті - азартний гравець, але це дуже легко можна зрозуміти. Якби доступ до пам’яті був справді випадковим, тоді менеджер пам’яті помилявся б так часто, як правильно, і вся система зламається. Але програми, як правило, демонструють сильну орієнтацію. Тобто більшість доступів до пам'яті, як правило, локалізуються на відносно невеликій площі пам'яті. Вони рухаються, але досить повільно, щоб система працювала. Шанси складаються в користь менеджерів пам'яті, а помилки швидко виправляються. Це було доведено десятиліттям досвіду
LMiller7

Випадкова пам'ять у випадковому доступі означає, що ви можете отримати доступ до будь-якого з них випадковим чином. (На відміну від необхідності чекати, коли дані пройдуть під головами для читання, як на жорсткому диску чи стрічках, а потім отримуйте доступ до даних послідовно.)
Філ

0

Молодь відповідає, як ніби це. Якщо ви можете, ви можете мінімізувати, наскільки швидко це відбувається, зменшивши свобідність (на скільки оперативної здатності система дозволить використовуватись перед тим, як переміщувати речі для заміни місця). Мені подобається встановлювати системи, щоб вони не були заміненими, доки операційний сервер не досягне 99% для серверних додатків, оскільки за замовчуванням це фактично означатиме, що мені потрібно буде кодувати речі, щоб використовувати лише 80% оперативної пам'яті, щоб скористатися кешуванням, не будучи штрафованим за натискання система в обмінний простір.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.