6

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

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

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

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

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

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

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

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

1 ответ1

8

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

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

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .