Отключить dynamic_pager на Mac?

Отключить dynamic_pager на Mac?

Я прочитал эту запись в блоге об управлении памятью в Mac OS X:http://workstuff.tumblr.com/post/20464780085/что-то-глубоко-сломано-в-управлении-памятью-os-x

Мне бы хотелось узнать ваше мнение по этому вопросу.

У меня «всего» 4 ГБ памяти, поэтому существует вероятность возникновения паники ядра.

У меня есть вращающийся диск (в отличие от SSD), и я время от времени вижу «пляжные мячи», иногда даже раскручиваю свой внешний жесткий диск, прежде чем продолжить.

экран монитора активности

Там написано, что в данный момент своп не используется, значит ли это, что отключение dynamic_pager ничего не даст? У него есть некоторые входы страниц.

Насколько безопасно просто попробовать? Я мог бы написать скрипт, который снова включит пейджер, когда память заканчивается?

[обновление]: В конце дня объем подкачки составил 26 МБ, гораздо больше загрузок и выгрузок страниц и много неактивной памяти.

решение1

У OS X есть три проблемы, которые этому способствуют:

  1. По умолчанию любые данные, записанные на диск или считанные с него, кэшируются в оперативной памяти с более высоким приоритетом, чем недавние данные программы. Приложения могут отключить это на основе каждого дескриптора с помощью параметра F_NOCACHE, fcntl()но немногие это делают. В результате большие объемы дисковой активности приводят к тому, что память, которая не используется в данный момент, выгружается. Это создает большую дисковую активность как для выгрузки, так и для чтения этой памяти обратно в последующие мгновения, поверх исходной дисковой активности.

  2. HFS+ не очень хорошо справляется с одновременным доступом к файлам. В частности, открытие и закрытие множества разных файлов одновременно создает огромную конкуренцию, и в один момент времени может происходить практически только одна операция открытия/закрытия.

  3. Многие приложения OS X распределяют доступ к диску между множеством небольших файлов.

В результате, когда два или более приложений пытаются получить доступ к большому количеству файлов одновременно, нагрузка на дисковый ввод-вывод возрастает экспоненциально, поскольку активность подкачки конкурирует с приложениями за ввод-вывод.

Отключение динамического пейджера может предотвратить раннюю часть этой экспоненциальной кривой, исключив возможность отправки личных/грязных страниц приложений на диск. Вместо этого система, скорее всего, будет очищать страницы из общедоступных/чистых сопоставленных файлов (исполняемых файлов, библиотек и т. д.) и из кэшированных данных файлов, которые, вероятно, не должны были кэшироваться изначально. Улучшит ли это производительность или нет, будет во многом зависеть от того, какие приложения вы используете. Например, Safari крайне плохо справляется с управлением своим дисковым вводом/выводом, поэтому я думаю, что это поможет.

Проблема возникнет, если объем необходимой оперативной памяти фактически превысит объем доступной: панический сбой — это очень резкий способ закончить день. Но если вы не редактируете большие файлы или не делаете иных вещей, требующих большого объема памяти, это может быть достаточно редким, чтобы рассмотреть возможность риска.

Кстати, вы можете использовать lsofкоманду , чтобы увидеть, какие файлы открыты какими процессами, и команду , fs_usageчтобы увидеть запущенный журнал файловых операций. Обе работают лучше, если запущены как root или через sudo.

Связанный контент