2019-01-29, 19:18:16
Новините за излизането на пазара на устройства с 12GB RAM отново отваря дискусията - необходимо ли ни е толкова, и имаме ли реална ползва от толкова RAM в смартфоните си? В тази връзка вчера в https://www.androidauthority.com Gary Sims сподели своето виждане под заглавие "От колко RAM действително се нуждае нашия смартфон през 2019г?" Разбира се - това е неговата гледна точка, и вероятно всеки си има своето мнение. Но считам, че темата може да намери място тук, в този раздел, където обсъждаме новите устройства, и отчитаме надпреварата на производителите да напомпат телефона с повече и повече от вече излезлия смартфон на конкуренцията, което Гари нарича "война на спесификациите".
В публикацията прави кратка историческа ретроспекция - как във времето се е изменяло количеството влагана RAM, пояснява в общи линии как работи RAM мениджмънта, колко RAM е нужна на приложенията и респективно на потребителите. Оптималният диапазон за него е 6GB-8GB, като над тези стойности - счита за безсмислено да се влага.
Ето цялата публикация => https://www.androidauthority.com/how-muc...19-944920/
И видеото в нея:
Авторът започва с т.нар. война между компаниите - да надскочат продукта на конкуренцията, като вложат в актуалния си продукт - "компоненти с по-високи параметри" (независимо дали това носи реална полза на потребителите). Нарича я -"война на спесификациите" - "spec battle" или "spec war". В случая визира производителност на процесора, възможности на камерите, вътрешна памет и т.н. Но според него - в една област се стига до абсурдност и това е 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-та на HDD, и паметта, която са заемали, става свободна за други процеси. Ако тази „прехвърлена“ (swapped-out) памет по-късно е необходима отново, то съхранената информация се прочита от диска, и се връща обратно в паметта (swapped-in).
Изготвил е видео - как се управлява паметта:
Андроид компресира паметта и я записва обратно в паметта, но в раздел zRAM. Ако допуснем, че компресирането е 50%, то 128КВ RAM могат да се редуцират до 64КВ, и съответно да се освободят 64КВ. Това е еквивалентно на споменатото по-горе swap-out към диска. Компресираната памет, обаче, не може да се прочете директно, така, че първо трябва да се декомпресира, и тогава да се запише обратно. Това съответства на swap-in.
Когато даден процес се нуждае от повече RAM, и такава няма, ядрото се опитва да освободи със swap. В случай, че това не е достатъчно, ядрото трябва да бъде по-агресивно и да започне да „убива“ процеси. Ситуацията за ядрото е странна – то трябва да убие съществуващ процес, за да направи място за друг. Ключовото тук е, че текущата заявка за памет идва от приложение, което се използва в момента. Ядрото прилага различни тестове и проверки, за да определи кои процеси да бъдат премахнати. Например ако преди 3 дни е стартирана Candy Crush, но не е активиранa повторно, ядрото ще допусне, че едва ли ще се върнем към нея точно сега, и съответно може да прекрати процеса. Така се освобождава памет, и позволява на текущо изпълняваното приложение да продължи да работи.
Всичко това се управляваше от драйвера Low Memory Killer, но при следващите версии на Андроид е малко различно. Крайният резултат е същият, но „мръсната работа“ вече не се върши от ядрото. От Linux Kernel 4.12 насам, драйверът Low Memory Killer не се използва, и тези задачи се изпълняват от Android Low Memory Killer Daemon (lmkd).
И така, когато стартираме ново приложение, вече активни приложения се премахват, за да се осигури памет за новото. Ако се върнем обратно към тях, те ще се заредят отново, все едно процесите им не са били прекратявани. Изглежда малко брутално, но така е проектиран да работи Андроид. Всяко приложение получава информация преди да бъде спряно (за да се освободи RAM), и му се дава възможност да съхрани данни за статуса си. Така, че при презареждане - тази информация се зарежда отново, и то стартира от там, където е било прекратено.
Колко памет ползват приложенията?
Ако Low Memory Killer-ът се активира твърде често - няма да ни е съвсем приятно. В най-лошия сценарий, всеки път, когато стартираме ново приложение, това, което сме ползвали до тогава - ще се затваря. Но има и т.нар. "златна среда" (sweet spot), когато се прекратяват процесите на тези приложения, които действително не са ни нужни.
За да установи къде е "златната среда" той разработва функционалност чрез 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?
Прехвърлим ли 8GB, според Гари навлизаме в "Страната на безсмислието", където живее г-н Глупчо ( “Nonsense” land, where Mr. Silly lives). Дори с 3GB, като при неговия Mate 8 - ние не коментираме колко приложения могат да се стартират, а колко да се поддържат в паметта. При 4GB е работещо, при 6GB e сладко (златната среда), при 8GB граничи с безсмислието, но все още е в "златната среда". Но 10GB, 12GB, 16GB е просто глупаво. Само се вдига цената няма реална полза за потребителя.
В публикацията прави кратка историческа ретроспекция - как във времето се е изменяло количеството влагана RAM, пояснява в общи линии как работи RAM мениджмънта, колко RAM е нужна на приложенията и респективно на потребителите. Оптималният диапазон за него е 6GB-8GB, като над тези стойности - счита за безсмислено да се влага.
Ето цялата публикация => https://www.androidauthority.com/how-muc...19-944920/
И видеото в нея:
Авторът започва с т.нар. война между компаниите - да надскочат продукта на конкуренцията, като вложат в актуалния си продукт - "компоненти с по-високи параметри" (независимо дали това носи реална полза на потребителите). Нарича я -"война на спесификациите" - "spec battle" или "spec war". В случая визира производителност на процесора, възможности на камерите, вътрешна памет и т.н. Но според него - в една област се стига до абсурдност и това е 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-та на HDD, и паметта, която са заемали, става свободна за други процеси. Ако тази „прехвърлена“ (swapped-out) памет по-късно е необходима отново, то съхранената информация се прочита от диска, и се връща обратно в паметта (swapped-in).
Изготвил е видео - как се управлява паметта:
Андроид компресира паметта и я записва обратно в паметта, но в раздел zRAM. Ако допуснем, че компресирането е 50%, то 128КВ RAM могат да се редуцират до 64КВ, и съответно да се освободят 64КВ. Това е еквивалентно на споменатото по-горе swap-out към диска. Компресираната памет, обаче, не може да се прочете директно, така, че първо трябва да се декомпресира, и тогава да се запише обратно. Това съответства на swap-in.
Когато даден процес се нуждае от повече RAM, и такава няма, ядрото се опитва да освободи със swap. В случай, че това не е достатъчно, ядрото трябва да бъде по-агресивно и да започне да „убива“ процеси. Ситуацията за ядрото е странна – то трябва да убие съществуващ процес, за да направи място за друг. Ключовото тук е, че текущата заявка за памет идва от приложение, което се използва в момента. Ядрото прилага различни тестове и проверки, за да определи кои процеси да бъдат премахнати. Например ако преди 3 дни е стартирана Candy Crush, но не е активиранa повторно, ядрото ще допусне, че едва ли ще се върнем към нея точно сега, и съответно може да прекрати процеса. Така се освобождава памет, и позволява на текущо изпълняваното приложение да продължи да работи.
Всичко това се управляваше от драйвера Low Memory Killer, но при следващите версии на Андроид е малко различно. Крайният резултат е същият, но „мръсната работа“ вече не се върши от ядрото. От Linux Kernel 4.12 насам, драйверът Low Memory Killer не се използва, и тези задачи се изпълняват от Android Low Memory Killer Daemon (lmkd).
И така, когато стартираме ново приложение, вече активни приложения се премахват, за да се осигури памет за новото. Ако се върнем обратно към тях, те ще се заредят отново, все едно процесите им не са били прекратявани. Изглежда малко брутално, но така е проектиран да работи Андроид. Всяко приложение получава информация преди да бъде спряно (за да се освободи RAM), и му се дава възможност да съхрани данни за статуса си. Така, че при презареждане - тази информация се зарежда отново, и то стартира от там, където е било прекратено.
Колко памет ползват приложенията?
Ако Low Memory Killer-ът се активира твърде често - няма да ни е съвсем приятно. В най-лошия сценарий, всеки път, когато стартираме ново приложение, това, което сме ползвали до тогава - ще се затваря. Но има и т.нар. "златна среда" (sweet spot), когато се прекратяват процесите на тези приложения, които действително не са ни нужни.
За да установи къде е "златната среда" той разработва функционалност чрез 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?
Прехвърлим ли 8GB, според Гари навлизаме в "Страната на безсмислието", където живее г-н Глупчо ( “Nonsense” land, where Mr. Silly lives). Дори с 3GB, като при неговия Mate 8 - ние не коментираме колко приложения могат да се стартират, а колко да се поддържат в паметта. При 4GB е работещо, при 6GB e сладко (златната среда), при 8GB граничи с безсмислието, но все още е в "златната среда". Но 10GB, 12GB, 16GB е просто глупаво. Само се вдига цената няма реална полза за потребителя.
Над силата е само умението да я владеем!