Чем больше памяти используется, тем лучше? —— Краткий обзор виртуальной памяти Android (Linux)

Оригинальная ссылка:https://www.coolapk.com/…

— В разных постах мы часто видим комментарии вроде: «Нормально использовать больше памяти; память предназначена для этого. Почему у тебя осталось столько памяти для оптимизации?» Это его замечание. Эти заявления более-менее лишены строгости. Ниже я постараюсь использовать более простое описание, чтобы дать вам представление о себеМобильные телефоныУправление памятью(В основном виртуальная память) У меня есть базовое понимание, и это мой первый опыт, когда я пишу для новичкаПопулярная наукаЕсли есть ошибки, пожалуйста, указывайте на них в комментариях

————— разделительная линия—————

Примечание: Вся «память», упомянутая в этой статье, относится к тому, что обычно называют «работающей памятью», то есть «оперативной памяти», а не к месту для хранения!

————— разделительная линия—————

Сначала давайте познакомимся с понятиями и техническими терминами

1. Виртуальная память:

Виртуальная память — это тип управления памятью, широко используемый в современных операционных системахТехнологииВ настоящее время распространённым методом является управление виртуальной памятью на основе страниц, основанное на страницах (обычно4KB) Управляет выделением, переработкой и заменой памяти с минимальной детализацией.

2.SWAP:

SWAP — это часть технологии виртуальной памяти, которая делит пространство на жёстком диске для обмена страницами памяти — проще говоря, перемещение данных из памяти на жёсткий диск для освобождения физической памяти. В Windows также есть похожая функция под названием «Пагинированный файл». Но в отличие от Linux, Windows сильно зависит от страницированных файлов, и если её выключить, это вызоветБольшие проблемы, Для подробностей см. дополнительную главу в конце этой статьи.

3.ZRAM:

ZRAM — это ещё одна реализация SWAP. Вместо использования места на жестком диске она напрямую разделяет пространство памяти для обмена страницами памяти, используя алгоритмы сжатия, такие как LZ4/ZSTD, для сжатия данных памяти с целью освобождения физической памяти.

4.ZRAM Writeback

ZRAM Writeback — это расширение ZRAM. Как и SWAP, он создаёт файлы обмена на жёстком диске для обмена страницами памяти. Разница в том, что ZRAM Writeback обменивается сжатыми данными памяти. Логика управления написанием работает на пользовательском уровне, а не на ядре, и конкретная стратегия определяется поставщиком системы, поэтому в этой статье это обсуждать не будет.

5. Прямая переработка и асинхронная переработка

Существует два типа рекультивации памяти: асинхронный сбор работает на фоне потока и не влияет на текущий процесс, что мало влияет на производительность и плавность, но скорость сбора медленная; Прямая рекультивация происходит быстро, но блокирует текущий процесс, в результате чего интерфейс программного обеспечения зависает на короткий (обычно очень короткий), что существенно влияет на производительность и плавность.

————— разделительная линия—————

Сначала ответим на вопрос из заголовка: «Чем больше памяти вы используете, тем лучше?» Это утверждение верно? Да, но не полностью.

Память действительно используется, но важно понимать, что память используется не только операционной системой и пользовательским программным обеспечением; ещё одним важным фактором является кэширование файлов. Почти все операционные системы имеют механизмы кэширования файлов. Файлы, читаемые с жёстких дисков или флеш-хранилища, кэшируются в памяти, поэтому в следующий раз, когда вы вызовете кэш файлов напрямую без чтения с жёсткого диска/флэш-памяти, чтобы ускорить процесс. Когда памяти недостаточно, файловые кэши быстро освобождаются для выделения, поэтому и быстровосстанавливаемая память, и свободная память рассматриваются ядром как «доступная память». Но то, что вы видите в системном интерфейсе и различных программных обеспечениях (например, DEV Check), — это не «свободная память», а скорее «доступная память», рассчитанная ядром или собственными алгоритмами программного обеспечения.

Как показано на изображении, ядро находится в MEmiВ NFO «доступная память» ≠ «свободная память»: «свободная память» означает невыделенную память, которая фактически не занята процессами или файлами, а «доступная память» — память, которую можно выделить (её размер — это оценка, в основном определяемая по части кэша файлов и свободной памяти выше низкой водяной метки и других элементов памяти, которые можно быстро восстановить)

6688c8671d820c441abb2b04fb7b9daf0124e934

Источник данных: /proc/meminfo

Так что даже если вы видите много памяти в системном фоне или в разных приложениях, это не значит, что память полностью используется. Вместо этого её упростилиОптимизацияДля таких людей, как и я, я стремлюсь сократить использование памяти системы, чтобы освободить больше памяти для пользователейПрименениеЭто не противоречит взгляду, что «использование большего количества памяти — это нормально; память предназначена для использования».

————— разделительная линия—————

ВперёдОбучающий материал— Контроль за переработкой памяти и инициативами ZRAM:

ОдержимостьROOTВы можете изменить параметры ядра ниже, чтобы управлять восстановлением памяти и активностью ZRAM.

1. vm.watermark_scale_factor:

Контролируйте интервал между линиями уровня воды памяти с диапазоном корректировки 1~1000 (что соответствует 0,01%–10% от общего объёма памяти). Если значение слишком низкое, это часто приводит к прямой переработкеЛагЕсли значение слишком большое, память будет потрачена. Рекомендуется установить его на 100 (1% от общей памяти).

Ядро определяет три линии водяного знака: min/low/high. Когда свободная память (примечание: «свободная память» вместо «доступная память») падает ниже низкого водяного знака, ядро просыпается в kswap, чтобы асинхронно восстанавливать память (переключая данные в ZRAM/SWAP и восстанавливая кэши файлов), пока свободная память не превысит высокий водяной отметку; Когда память в простое падает ниже минимального уровня воды, запускается прямое восстановление. Значение минимальной линии уровня воды вычисляется ядром на основе общего размера памяти и расчёта vm.min_free_kbytes. Не рекомендуется изменять этот параметр и сохранять значение по умолчанию.

2. vm.extra_free_kbytes:

Дополнительная зарезервированная память будет иметь установленное значение между минимальным и низким водяными знаками. Если значение слишком низкое, это часто вызывает прямую рекультивацию и задержку; если слишком большая — память теряется. Рекомендуется установить 1~2% от общего объёма памяти, измеряемого в КБ.

3. vm.swappiness:

Когда память ядра недостаточна (ниже низкого порога), смещение между страницей обмена и ZRAM/SWAP и восстановленным кэшом файлов варьируется от 0~200 и от 0~100 для старых ядер. Чем меньше значение, тем выше вероятность сбора файлов кэша; чем больше значение, тем выше вероятность использования ZRAM/SWAP.

Приведённые выше параметры ядра доступныSceneВы также можете использовать корневые привилегии для выполнения следующих команд для его изменения:

echo 100 >/proc/sys/vm/watermark_scale_factor

echo 131072 >/proc/sys/vm/extra_free_kbytes

echo 100 >/proc/sys/vm/swappiness

033b71c32ad792c6d350fc9a9eba667ccdba5b14

– Если вы хотите сохранить больше бэкенда, можно снизить ценность extra_free_kbytes и watermark_scale_factor и умеренно увеличить ценность сваппинга.

– Если хотите повысить плавность, можно увеличить значения extra_free_kbytes и watermark_scale_factor, при этом настроив swappiness на более сбалансированное значение.

– Если хотите и то, и другое, берите телефон с большей памятью

————— разделительная линия—————

LMK и Backstage Killing:

Начиная с Android 9, Google начала отказываться от встроенного ядра LMK в пользу LMKD, которое работает как демон для системы. Таким образом, фоновые убийства приложений и само ядро мало связаны с подходом каждого производителяКонфигурацияLMKD/Введены другие механизмы удаления фона. По этому поводуMIUIПомимо настройки LMKD, есть код для фонового уничтожения как в «Battery and Performance», так и в «Framework System Framework». Если вы не хотите использовать дополнительный механизм фоновых выключаний, введённый производителем, и хотите настроить LMKD самостоятельно, то это хороший вариантLSPosedМодуль «AppRetention» блокирует механизм устранения фонового конца поставщика.

9d81077744f85a683960c178d78a3f3519e465b8

Затем настройте LMKD согласно документации Google:Посмотреть ссылку

0051b630293a33fa77802e7e31a72ca679f1a637

————— разделительная линия—————

Дополнительный раздел — Дополнительные знания о Pagefile.sys страницирования файлов Windows и выделении адресов виртуальной памяти:

Windows использует двухступенчатое выделение памяти (зарезервировано + фиксация), и на этапе фиксации необходимо обеспечить отметку физических адресов (физической памяти или файлов страницирования). Файлы по страницам входят в лимиты по отправке данных системы и напрямую определяют общий объём виртуальной памяти, которую система может поддерживать (на странице карты памяти диспетчера задач Windows есть элемент данных под названием «Коммитировано»; левая часть косой черты — сумма всех запрошенных программой размеров памяти, а правая — общий размер виртуальной памяти с значениями = размер физической памяти + размер файла страницы, где файл страницы динамически разбивается системой).

55fbb2ccf8dcaa9b5eacde40d4500ea06489ae2e

Информация о памяти для диспетчера задач Windows

Можно просто предположить, что когда программа позволяет определённому объёму памяти в Windows, система выделяет соответствующий размер физического адреса программе. После выделения другие программы не могут использовать это пространство памяти, и выделяемая программой памяти обычно превышает реальную потребность. Поэтому при закрытии файлов страницы могут быть случаи, когда физической памяти остаётся много, но при открытии новой программы всё равно будет сказано, что память недостаточна. Однако у Linux такой проблемы нет. Linux использует стратегию отложенного выделения, выделяя физические адреса памяти только тогда, когда процессы действительно обращаются к памяти. Что касается памяти, запрошенной программой, Linux выделяет «реальные» виртуальные адреса, а пределы адресов виртуальной памяти определяются параметрами ядра «vm.overcommit_memory». На Android-телефонах, которые мы используем, лимит выделения виртуальной памяти — «overcommit_memory». Значение по умолчанию — 1, что игнорирует ограничения по виртуальной памяти и позволяет выделить всю физическую память.

На странице управления SWAP в Scene вы можете увидеть, что все процессы на моём телефоне запросили до 208 ГБ памяти! Но физическая память не использовалась, так что я всё ещё мог открыть новое программное обеспечение.

54adfd909d6eaf857d40dca9428b9f075a4a65ed

Что касается того, почему Windows не меняется на тот же или похожий механизм, что и Linux, я не знаю; Могу только предположить, что это связано с тем, что Windows несёт слишком много исторического бремени (что соответствует легендарной совместимости WIN).

#HyperOS##HyperOS2##玩机技巧 #

© Уведомление об авторском праве
THE END
Если вам нравится, пожалуйста, поддержите
Палец вверх1 Поделиться
Связанные рекомендации
Комментарий Борьба за диван

Пожалуйста, войдите в систему и оставьте комментарий

    Пока комментариев нет