Как раздел / файл подкачки повлияет на систему?


20

Некоторые друзья сказали мне, что их телефоны Android имеют очень мало (<100 МБ) доступной памяти для обычных приложений, потому что ОС и некоторые неубиваемые сервисы занимают большую часть ОЗУ. Например, один телефон с 512 МБ показывает только 90 МБ доступной памяти, поэтому одновременно могут работать только 2-3 приложения.

Мне интересно, поможет ли создание раздела / файла подкачки, но я видел смешанные мнения по всей сети, и я не уверен, что делать. Вот мои вопросы:

(1) Будет ли много страниц памяти, которые редко используются для обмена, особенно в ОС и этих неубиваемых сервисах?

(2) Как замена небольших страниц памяти повлияет на продолжительность жизни флэш-памяти? Вспышка (или SD-карта?) Автоматически выравнивает износ?

(3) Поможет ли подкачка производительности при запуске нескольких приложений? Я предполагаю, что если ответ (1) - да, так и будет.

(4) Будет ли запись на флэш-память слишком медленной и, таким образом, повредит отзывчивости при обмене?

(5) Верно ли, что Android сохраняет механизм подкачки от ядра Linux, поэтому, пока существует раздел / файл подкачки, он будет выполнять подкачку без дополнительной настройки?

Спасибо за прочтение.

Ответы:


8

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

(1) Будет ли много страниц памяти, которые редко используются для обмена, особенно в ОС и этих неубиваемых сервисах?

Вы не можете заменить ядро ​​ОС даже в Desktop Linux, и Android уже убивает сервисы, когда ему требуется больше оперативной памяти. Если поставщик вашего устройства настаивает на том, что вам необходимо постоянно запускать бесполезные службы, то выполните рутирование вашего устройства.

(2) Как замена небольших страниц памяти повлияет на продолжительность жизни флэш-памяти? Вспышка (или SD-карта?) Автоматически выравнивает износ?

Даже если SD-карта выравнивает износ, подкачка сильно повредит.

(3) Поможет ли подкачка производительности при запуске нескольких приложений? Я предполагаю, что если ответ (1) - да, так и будет.

Не в контексте Android. В отличие от традиционных ОС, которые будут пытаться загружать процессы так, как вы их просили, Android принудительно уничтожит старые, неиспользуемые процессы и освободит их память; это убивает быстро, так как приложения уже сохранят свое состояние при переключении задач.

(4) Будет ли запись на флэш-память слишком медленной и, таким образом, повредит отзывчивости при обмене?

Вероятно, вероятно нет. Для этого понадобятся тесты.

(5) Верно ли, что Android сохраняет механизм подкачки от ядра Linux, поэтому, пока существует раздел / файл подкачки, он будет выполнять подкачку без дополнительной настройки?

Я не знаю, поддерживает ли Android механизм подкачки, но даже если он это делает (или если вы компилируете свое собственное ядро), вам все равно понадобятся некоторые конфигурации. Обычно это просто наличие fstabфайла, который указывает на файл подкачки и выполнение swapon -a.

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


Спасибо за ответ. У меня все еще есть вопросы. На Samsung Fascinate 10 неубиваемых сервисов занимают около 110 миллионов памяти. Работает 22 других убиваемых сервиса, но «Запущенное приложение» показывает, что приложение не запущено. Это телефон моей подруги, и я не знал, что именно она делала раньше, но, похоже, вполне возможно, что многие службы / приложения могут работать одновременно. Я не думаю, что все эти фоновые службы / приложения используют все страницы, которые им нужны, когда они начали. Кроме того, сохранение состояния приложения + перезагрузка и перезапуск приложения + состояние восстановления также будет медленным.
вечнозеленые

Еще один способ решения этой проблемы заключается в следующем: предположим, что срок службы флэш-памяти не является проблемой, должен ли Android выполнять обмен? Если нет, то в чем заключается ключевое различие между приложениями для Android и настольными приложениями, которое делает свопинг бесполезным на Android? Я не думаю, что Android Life Cycle работает для настольных / серверных приложений.
вечнозеленый

@evergreen: состояние приложения сохраняется, когда приложение переходит в фоновый режим (например, когда пользователь нажимает кнопку home для переключения задачи). Позже, когда некоторым другим приложениям потребуется память, старые приложения или фоновые службы будут принудительно убиты (FK практически не тратит время). Это означает, что уничтожение задачи происходит немедленно, поскольку состояние приложения уже давно сохранено. Когда вы перезагрузите приложение, которое уже находится в памяти, вы получите самое быстрое время перезагрузки; но если приложение уже выгружено, то приложение должно выполнить полную перезагрузку (что аналогично ситуации с подкачкой)
Lie Ryan

@evergreen: если вы используете убийцу задач, вы заставите приложения выгружаться, и вам всегда придется выполнять полную перезагрузку вместо быстрой перезагрузки, когда приложение остается в памяти. Если вы используете файл / раздел подкачки, (старые) приложения будут выгружены, а восстановление займет почти столько же времени, сколько полная перезагрузка. За исключением: с полной перезагрузкой разработчик приложения отделил постоянные данные от временных данных и может оптимизировать, что сохранять, а что не улучшать хранилище. В то время как при восстановлении свопа вы не оставляете разработчику приложения ничего сказать и меняете все.
Ли Райан

@evergreen: даже если предположить, что жизнь флэш-памяти не является проблемой, Android не должен менять местами, потому что жизненный цикл приложения работает лучше. Жизненный цикл Android разработан для среды с ограниченным объемом памяти, в среде настольных компьютеров и серверов, у вас гигантский объем памяти, и пользователи выполняют многозадачность гораздо больше, и они не ожидают, что ОС уничтожит фоновые программы. Слабость Android Life Cycle в том, что он требует поддержки приложений. Приложение должно быть готово к уничтожению в любое время и должно сохранять состояние в предопределенных точках. Такая сложность посторонняя для настольных приложений.
Ли Райан

5

Обмениваться, безусловно, выгодно, несмотря на то, что все остальные в Интернете скажут вам. Попробуйте и убедитесь сами. Опытным путем, на G1 или другом телефоне с низким объемом памяти, подкачка заставляет телефон работать лучше и быстрее.

Да, в Android встроено управление жизненным циклом, но это не очень хорошо. Он обычно убивает процессы, когда ему не хватает памяти, и приложения должны сохранять свое состояние, используя « Связки », чтобы при перезапуске они перезапускались в том же состоянии, в котором они были последними.

Как только Android решает, что ему нужно удалить процесс, он делает это жестоко, просто убивая его. Затем ядро ​​может немедленно вернуть все ресурсы, необходимые для процесса, не полагаясь на то, что приложение хорошо написано и реагирует на вежливый запрос на выход. Позволяя ядру немедленно восстанавливать ресурсы приложения, намного легче избежать серьезных нехваток памяти.

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

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

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

Я предполагаю, что люди, которые довольны стоковой системой, по-разному используют свои телефоны.

Должен ли я использовать раздел подкачки с Cyanogenmod?


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

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

@LieRyan - «Вернитесь в Браузер с моей последней страницей, на которой все загружено на месте». Ваш браузер восстанавливает позицию прокрутки на открытых страницах после перезагрузки? Это то, что Chrome не делает (хотя мне очень нравится этот браузер), что очень прискорбно, когда вы перестали читать на середине какой-то довольно лог-страницы, прежде чем переключиться, скажем, на вызов ...
керим

2

У меня есть Spice mi-435 (продается только в Индии), который имеет оперативную память только 340M. Черт возьми, файлы подкачки очень помогают. Мой телефон работает на ICS с таким низким объемом оперативной памяти и определенно вошел во многие состояния памяти, и там файл подкачки очень помогает. Все состояния приложения передаются для замены, когда они не используются активно. Это дает моему телефону больше места для приложений и приложений, требующих оперативной памяти, для бесперебойной работы с гораздо меньшими задержками, чем раньше. Хотя возникает проблема, когда я открываю приложение, которое я использовал раньше. Требуется время, чтобы загрузить его состояние, так как SD намного медленнее, чем высокоскоростное ОЗУ на борту. Но вариант подкачки лучше для меньшего количества оперативной памяти. Я бы порекомендовал поменять местами раздел для оперативной памяти менее 512M, но не более 512M.

Надеюсь, это полезно.


1

Файл подкачки помогает даже в системах с большим объемом оперативной памяти. Мой четырехъядерный 1-гигабайтный 7-дюймовый планшет получил многозадачность благодаря переходу на 2-гигабайтную карту micro-sd uhs-1. И, конечно же, цена памяти быстро падает, и даже при постоянной записи nand flash рассчитан на несколько лет.

Я в основном придерживаюсь мнения, потому что разница в производительности настолько радикальна, что, вероятно, это должен делать любой, у кого объем памяти меньше, чем действительно. На самом деле это должно быть стандартная опция в Android (наряду с большими кешами приложений и интернет-кешами надлежащего размера).

Я имею в виду, что у вас есть микро-sd 64-128 ГБ (uhs-1), или даже uhs-2, который вышел в этом году, плюс внутренний nand 16-64 ГБ, часто «быстрый» nand, который является своего рода примитивным ssd или даже SSD, которые используются на Windows SlateS - вы не совсем заполняете все это высокоскоростное пространство большим количеством. Скорость на самом деле вступает в игру только с видео или загрузкой приложений в память - и это именно то, что нужно.

Конечно, в идеале производители должны уделять больше внимания оперативной памяти, чем разрешению или дополнительным ядрам, поскольку очевидно, что скорость системы значительно выигрывает от более высокой оперативной памяти - и им, вероятно, также следует повысить скорость внутренней памяти (например, переход на системы с полным ssd-типом) или, по крайней мере, «быстрый» nand. Но в то же время, в то время как высокие разрешения имеют тенденцию вызывать некий дефицит оперативной памяти на всех устройствах, файл подкачки и кэширование на достаточно быстрых внешних дисках имеют большой смысл.

Действительно, было бы неплохо видеть, что некоторые браузеры также поддерживают более полное кэширование, большинство браузеров либо медленные, либо имеют низкую функциональность, редко бывают быстрыми и полнофункциональными - и это отчасти потому, что пространство для кэша приложения на внутреннем диске мало. Они предназначены для работы в условиях нехватки памяти и хранения, и вся эта история меняется. Даже если оперативная память не нарезает столько, сколько нужно, хранилище, безусловно, есть, и оно может быть чертовски быстрым по стандартам UHS-1 (или uhs-2, выпущенным в этом году), даже если это не так " быстро "или ssd.

И стоимость внешней памяти, это действительно арахис, даже для большей емкости UHS-1. По крайней мере, 64 ГБ UHS-1 является вполне доступным (50 баксов, где я, но это будет меньше USD), гораздо дешевле, чем устройство, и 32 ГБ и ниже, в основном, пара теннеров.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.