Заміна, очевидно, сталася тоді, коли неактивні сторінки ОЗУ були дійсно активними.
( Оновлення: як було уточнено в коментарі, це не ваш випадок. Тож люди з тією ж проблемою можуть перейти до горизонтального правила .)
Тобто у вас було запущено багато програм і ядро замінило кілька сторінок. Потім ви вийшли з деяких програм. Ядро позначає свої сторінки ОЗУ як неактивні. Але вони не повертаються до оперативної пам’яті, поки ці сторінки не знадобляться. Це призводить до появи неактивних сторінок та сторінок, що їх заміняють.
Чому б не попередньо поміняти сторінки? Тому що це було б на ставку проти шансів: у довгостроковій перспективі ви програєте. Давайте розглянемо спрощений приклад: дві програми A і B, які не вміщуються в ОЗП одночасно. Програма A все ще працює, і всі замінені сторінки належать А. Програма B закрилася, а всі неактивні сторінки належать B.
Якщо ядро попередньо заміняє сторінки A і негайно після:
- Програма A потребує доступу до її сторінок -> Ви виграєте - сторінки вже є в ОЗУ.
- ви знову запускаєте B -> Ви втрачаєте - ви "оплачували" витрати на приведення сторінок в оперативну пам'ять, і тепер вам доведеться їх відправити назад.
- ви запускаєте іншу програму C -> Ви програєте, якщо A і C одночасно не вміщуються в ОЗУ. Якщо вони підходять, ви рівні.
Також врахуйте, що заміна (запис на диск) дорожча за обмін (читання з диска). Що робить цю "ставку" ще непривабливішою.
Якщо коротко: довіряйте своєму ядру і не намагайтеся його перехитрити.
Оновлення:
виявляється, що неактивна пам'ять не працює, оскільки користувач Монітор активності для читання статті системної пам'яті змусив багатьох людей повірити, що це працює. Визначення в статті для неактивної пам'яті є правильним:
Ця інформація є в оперативній пам’яті, але вона активно не використовується, її нещодавно використовували.
Але наступний приклад є абсолютно оманливим і надто спрощеним (як, наприклад, відвертий мій приклад):
Наприклад, якщо ви використовували пошту, а потім закрили її, оперативна пам’ять, яку використовувала пошта, позначається як неактивна пам'ять. Неактивна пам'ять доступна для використання іншим додатком, як і вільна пам'ять. Однак якщо ви відкриєте Mail перед тим, як її неактивну пам'ять використовує інший додаток, програма Mail відкриється швидше, оскільки її неактивна пам'ять перетворюється на активну пам'ять, а не завантажує її з повільніше диска.
Я шукав більше інтернет-ресурсів і потрапив до цієї теми в списку розсилки ядра darwin, який є досить інформативним. Цитуючи Джима Мегі (від команди Дарвіна - я думаю):
Коротше кажучи, система VM ядра при роботі з тиском пам’яті сканує на сторінках, що використовуються, і намагається підтримувати їх в балансі між активними та неактивними маркуваннями. Неактивні сторінки скануються для повторного використання, а позначаються як неактивні. Якщо вони були повторно використані, вони позначаються як активні, і якась інша сторінка повинна перейти з активного в неактивний стан, щоб виявити, чи вона активно використовується. Отже, неактивний - це неправильне значення. Це скорочення для "можливо неактивного, давайте спробуємо це перевірити".
Як ви виявили, внутрішній баланс, до якого ми прагнемо (наразі), становить приблизно 2/3 активних проти 1/3 неактивних ...
Це пояснює поведінку, яку ви спостерігаєте. Тобто неактивні сторінки, які ви бачите, належать до запущених програм, які нещодавно не використовувалися. Отже, коли ви запускаєте нову програму, неактивні сторінки витісняються. У той же час сторінки інших програм позначаються як неактивні для підтримки співвідношення 2/1 між активними та неактивними.
Нитка також містить деякі пропозиції , щоб дізнатися більше про внутрішній Дарвін. Також є кілька пропозицій на випадок, якщо ви почали досліджувати використання пам'яті через проблеми з пляжним балом (які зазвичай мало стосуються цього).
Висновок залишається тим самим: довіряйте своєму ядру і не намагайтеся його перехитрити. :-)