Якої шкали чи міри дотримується «тиск пам’яті» Mavericks 'та Yosemite?


57

Монітор активності Mavericks (а також Yosemite's) показує нову схему, тиск у пам'яті . На жаль, його довідковий текст лише смутно пояснює, що саме він вимірює. Як обчислюється тиск пам'яті?

Mavericks Activity Monitor - пам'ять

Записи зображень переходять до цієї відповіді з опитувального питання про найкращу нову функцію Mavericks.

Відповіді:


51

Тиск пам’яті не простий показник відсотка вільної пам’яті і, схоже, графік від 0 до 100%. sysctlЗначення vm.memory_pressureрозраховуються по відношенню до обчисленого мішені , яка відстежує співвідношення між вільною і неактивними сторінками пам'яті до дротових і активним сторінкам. Абсолютні лічильники переглядаються за vm_statдопомогою інструменту командного рядка для перевірки детального розподілу віртуальної пам'яті. Джонатан Левін має чудову документацію на веб-сайті http://newosxbook.com/articles/MemoryPressure.html, яка охоплює як віртуальну пам’ять macOS, так і iOS і те, як вони обчислюють тиск у пам'яті, а також дії, що виконуються, коли індекс тиску високий.

Відповідна віртуальна пам'ять (vm), яка подає обчислення vm.memory_pressure:

  • vm.page_free_count - абсолютна кількість безкоштовних сторінок
  • vm.vm_page_free_target - розрахункова ціль або мета для ситуації "без тиску"
  • vm.page_free_wanted - що система vm хотіла б звільнити для зменшення поточного розрахованого показника тиску

Отже - якщо ви відстежуєте тиск пам’яті за допомогою монітора активності (або моєї перевірки значень sysctl програмно або в оболонці командного рядка), ви добре будете переглянути ці чотири значення:

sysctl -a vm | egrep "page_free|pressure"

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

результати моніторингу активності <code> sudo memory_pressure -l попереджаю </code>

Інструмент виділено близько 4 ГБ пам'яті на інструмент , як графік тиску постійно збільшується до такого стану , де , по- видимому графічний «Попередження» , рівень: sudo memory_pressure -l warn. Як бачите, система до тиску використовувала 5,9 ГБ, а після - до 7,99 Гбайт, що навіть не потрібно складати через заміну та стиснення.

Подивившись, як vm_stat 15показали результат попередження у відсутності вимірювальної підкачки, я вийшов з інструменту (Control-C) і потім запустив інструмент, щоб зробити тиск у пам'яті критичним:sudo memory_pressure -l critical

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

результати моніторингу активності <code> sudo memory_pressure -l критичний </code>

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


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

@MuhammadHassan Відповідь нижче охоплює хороший зворотний інженерний підсумок алгоритму та вказує, де шукати у xnuвідкритому коді для внутрішніх справ . Я витягнув 4 охоплені значення, які є найбільш релевантними для відображення тиску на графічному інтерфейсі.
bmike

30

Щоб дещо уточнити і зробити це здогад більш точним: тиск у пам'яті - це метрика, що використовується ядром (xnu) з виділеною ниткою під назвою memory_status (раніше відома як Jetsam). Цей потік відповідає за виявлення, коли доступна оперативна пам’ять є низькою - що в OS X може змусити переключитися, а в iOS вбиває найвищу пам’ять, що споживає пам'ять (оскільки немає заміни). У Mavericks дві ОС є ближче один до одного. Memorystatus видає ноту ядра, яку час виконання Obj-C переводить на додаток appDidReceiveLowMemoryWarning. Програми повинні очищати невикористану або сторонню пам'ять (наприклад, кеші). Darwin libC також очищає пам'ять автоматично.

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

Ви можете переглянути події тиску на Mavericks, використовуючи Process Explorer для OS X - завантажуваний з http://newosxbook.com/index.php?page=downloads . Це і показує вам "манометр", а також події тиску.


Цей веб-сайт також має детальну статтю - newosxbook.com/articles/MemoryPressure.html - детально описує тиск пам’яті та обробку в OS X та iOS
user61711

Дивовижна деталь про схожість та відмінності між Mavericks та ядром iOS. Дякуємо за посилання на Process Explorer.
bmike

14

Тиск пам'яті визначається двома лічильниками, які Мах зберігає всередині:

  • vm_page_free_count: Скільки сторінок оперативної пам’яті зараз безкоштовні
  • vm_page_free_target: Скільки сторінок оперативної пам’яті, як мінімум, має бути оптимально вільним.

Ви можете легко їх побачити за допомогою sysctl:

morpheus@Zephyr (~/Documents) % sysctl -a vm | grep page_free
vm.vm_page_free_target: 2000
vm.page_free_wanted: 0
vm.page_free_count: 73243

якщо кількість безкоштовних сторінок опуститься нижче цільової кількості - у нас ситуація тиску.


З http://newosxbook.com/articles/MemoryPressure.html

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