Реализацията на устройства с 12GB RAM в началото на 2019г. отново отвори дискусията – необходима ли е толкова RAM в смартфоните ни? В тази връзка в Gary Sims сподели своето виждане под заглавие “От колко RAM действително се нуждае нашия смартфон през 2019г.?”
Компаниите се стремят да надскочат продукта на конкурентите си, като вложат в актуалния си продукт – “компоненти с по-високи параметри” (независимо дали това носи реална полза на потребителите). Това е т.нар. “война на спесификациите” – “spec battle” или “spec war”, в която пропизводителите напомпват хардуера на теелфоните по отношение на производителност на процесора, възможности на камерите, вътрешна памет и т.н. Според Gary в една област се стига до абсурдност и това е RAM-та.
В зората на Андроид-базираните смартфони е влагана от 512MB дo 1GB RAM. С времето се добавя повече, като през 2014г. върховите устройства имат 3GB, а през 2016г. и 2017г. – 4GB става стандарт. И тогава започва войната. Първо се появяват устройства с 6GB, след това с 8GB …10GB, и днес вече с 12GB?
Ето и трендът – визуализиран графично (в червено е максимална стойност, в оранжево – средната):

При условие, че добавената RAM расте всяко тримесечие – е логично да си зададем въпроса: “Колко RAM всъщност ни е нужна?”
RAM management
Ако има изобилие от ресурси, работата на ядрото е лесна. Ако процесът се нуждае от повече време и процесорът е неактивен, ядрото лесно може да му предостави нужното време за изпълнение. Ако са недостатъчни данните вход / изход (I/O), то те ще бъдат набавени. Ако процесът се нуждае от повече RAM, и RAM има, то ядрото само трябва да следи кой процес кои битове в паметта използва.
Но, ако ресурсите са недостатъчни – тогава става сложно. По отношение на процесорното време и I/O – претоварването рефлектира в производителността. Ако процесорът е претоварен, работата все пак ще се свърши, но по-бавно. С RAM-та, обаче, е различно и тук времето не е фактор. Ако е недостатъчна – колкото и да чакаме – няма да се освободи. Тук ядрото трябва да е проактивно, за да си освободи RAM.
Linux и Android се справят с това по 2 начина. На първо място с идеята за swap размяна – чрез zRAM. Android може да преразпредели част от физическата памет за swap-ване. Swap-ването се прилага в среда Linux – също и на PC-тa и сървъри.
Когато няма достатъчно RAM, Android компресира паметта и я записва обратно, но в раздел zRAM. Ако допуснем, че компресирането е 50%, то 128КВ RAM могат да се редуцират до 64КВ, и съответно да се освободят 64КВ. Това е swap out. Компресираната памет, обаче, не може да се прочете директно, така че първо трябва да се декомпресира, и тогава да се запише обратно. Това е swap-in.
Когато даден процес се нуждае от повече RAM, и такава няма, ядрото се опитва да освободи със swap. В случай, че това не е достатъчно, ядрото трябва да бъде по-агресивно и да започне да „убива“ процеси. Ситуацията за ядрото е странна – то трябва да убие съществуващ процес, за да направи място за друг.
Ключовото тук е, че текущата заявка за памет идва от приложение, което се използва в момента. Ядрото прилага различни тестове и проверки, за да определи кои процеси да бъдат премахнати. Например ако преди 3 дни е стартирана Candy Crush, но не е активиранa повторно, ядрото ще допусне, че едва ли ще се върнем към нея точно сега, и съответно може да прекрати процеса. Така се освобождава памет, и позволява на текущо изпълняваното приложение да продължи да работи.
Всичко това се управляваше от драйвера Low Memory Killer, но при следващите версии на Android е малко различно. Крайният резултат е същият, но „мръсната работа“ вече не се върши от ядрото. От Linux Kernel 4.12 насам, драйверът Low Memory Killer не се използва, и тези задачи се изпълняват от Android Low Memory Killer Daemon (lmkd).
И така, когато стартираме ново приложение, вече активни приложения се премахват, за да се осигури памет за новото. Ако се върнем обратно към тях, те ще се заредят отново, все едно процесите им не са били прекратявани. Изглежда малко брутално, но така е проектиран да работи Android. Всяко приложение получава информация преди да бъде спряно (за да се освободи RAM), и му се дава възможност да съхрани данни за статуса си. Така, че при презареждане – тази информация се зарежда отново, и то стартира от там, където е било прекратено.
Колко памет ползват приложенията?
Ако Low Memory Killer-ът се активира твърде често – няма да ни е съвсем приятно. В най-лошия сценарий, всеки път, когато стартираме ново приложение, това, което сме ползвали до тогава – ще се затваря. Но има и т.нар. “златна среда” (sweet spot), когато се прекратяват процесите на тези приложения, които действително не са ни нужни.
За да установи къде е “златната среда” Gary разработва функционалност чрез Android Debug Bridge (adb), с която следи кои процеси се прекратяват, и колко памет заемат.
Категоризира приложенията в 3 групи: “стандартни” – ползващи между 130МВ и 400МВ RAM. Такива са YouTube и WhatsApp, както и игри като Crossy Road и Candy Crush. Следват “медиа-интензивните“, които зареждат много изображения, и им е нужна повече памет, за да ги визуализират, като Google Photos и Instagram – ползват 400MB – 700MB RAM. И “големите” – игри, като Need for Speed, ползващи 800MB and 1152MB. Тук се нарежда и Chrome с 3 отворени раздела.
По-долу в ляво се вижда информация за ползваната RAM по приложения, а в дясно са представени 3 потребителски профила: типичния, социална пеперуда и геймъра:

С колко RAM разполагаме?
Всеки смартфон е с фиксирано количество RAM, и то не може да се надгражда. Pixel 3 разполага с 4GB, Note 9 (128GB) – 6GB, а OnePlus 6T – 8GB. OnePlus 6T McLaren edition е с 10GB, а Lenovo Z5 Pro GT с 12GB. Както е важно да знаем колко RAM има в телефона, толкова е важно да знаем и с каква част от нея е разполагаме за приложенията. Android и Linux също използват RAM. По-долу представя информация за устройства, с които разполага – инсталираната RAM и достъпната памет – за стартиране на нови приложения без swap-ване.

Mate 8, Pixel 3 XL, и Note 8 предоставят около 50% от инсталираната RAM за приложения. Делът се покачва, и при Note 9 и OP6T стига до 66%.
Интересно е да се отбележи и колко zRAM се предвижда за ползване. При Mate 8 е 0.5GB за swap, Note 8 е конфигуриран да използва 2.5GB! OnePlus са толкова уверени във вложените 8GB в OP6T, че не предвиждат swap изобщо.
Устройство, като Pixel 3 XL може да поддържа поне 5 “стандартни” приложения в паметта без да swap-ва. Това означава, че спокойно можем да превключваме между YouTube, WhatsApp, Spotify, Candy Crush и Google Play.
Ако стартираме повече приложения, то Pixel 3 XL ще започне да използва компресирано swap пространство по-агресивно, за да освободи още памет. По този начин ще стартираме 8 „стандартни“ приложения, и ще ги поддържаме в цялата памет + swap-пространството. Ако включим приложение, което е swapped out, то то ще се върне (swap in), и това няма да е забележимо. Най-често в swap пространството първо заминават процесите на заден фон. Ако стартираме повече от 8 „стандартни“ приложения, някое от най-рано отворените ще бъде премахнато от паметта.
Note 8 и Note 9 имат 6GB RAM, с около 2.5GB на разположение на потребителя при Note 8, и 3.5GB при Note 9. И двете устройства имат поне 2GB за swap. Това означава, че можем да превключваме между тежка игра или Chrome, медиа-интензивни приложения, като Instagram и поне 5 или повече “стандартни” приложения – и всичко ще остава в паметта. Ако стартираме повече, телефонът ще ползва swap пространство. Това ще увеличи дипълнително броя на приложенията в паметта.
При тези 6GB телефони, можем да се превключваме между 12 или повече приложения, включително тежки, без презареждане. И тук е началото на “златната среда” (sweet spot). Приложенията остават в паметта за дълго и multi-tasking-ът върви гладко.
“Златната среда” продължава и при 8GB устройства. При тях можем да поддържаме в паметта поне 12 приложения, без презареждане, включително големи, като PUBG и Google Photo. Превключването между тях е гладко. С времето по-старите ще се премахват от паметта, за да направят място на нови. И вероятно приложенията няма да са отваряни с дни, преди да се премахнат. Тук свършва „златната среда“. В OnePlus 6T не е предвидено swap пространство, и вероятно средният потребител трудно би направил разлика между 6GB устройство със swap и 8GB устройство без.
Забележка: Дискусията е опростена относно това кога се ползва swap пространство. Не е просто, когато не достига памет, доста по динамично и сложно е.
Повече от 8GB RAM?
Прехвърлим ли 8GB, според Гари навлизаме в “Страната на безсмислието”, където живее г-н Глупчо ( “Nonsense” land, where Mr. Silly lives). Дори с 3GB, като при неговия Mate 8 – ние не коментираме колко приложения могат да се стартират, а колко да се поддържат в паметта. При 4GB е работещо, при 6GB e сладко (златната среда), при 8GB граничи с безсмислието, но все още е в “златната среда”. Но 10GB, 12GB, 16GB е просто глупаво. Само се вдига цената няма реална полза за потребителя.
