Energetyzujący problem macOS

Mój MacBookPro, którego używam, nie należy do najnowszych (Late-2013), to mimo tego nadal jego bateria jest na poziomie 95% żywotności (przy 270 cyklach ładowania), co po ponad 5-latach użytkowania jest naprawdę dobrym wynikiem (wg coconutBattery).

Mimo tego, od momentu macOS Mojave (po macOS Catalina) zacząłem obserwować, że w momencie klapnięcia pokrywy laptopa, podczas gdy przechodzi on w trym uśpienia, poziom naładowania baterii spada.

Wszystko wydaje się normalne, gdyż RAM, który wykorzystywany jest na etapie hibernacji potrzebuje energii, aby podtrzymać przechowane w nim informacje. O ile nie zauważałem tego, gdy pozostawiałem komputer podłączony pod ładowarkę na noc, to w momencie, gdy zacząłem zostawiać go bez źródła zasilania, naładowanie baterii spadało o ok. 10-15% w przeciągu ok. 8 godzin.

Taka utrata energii dała mi co nieco do myślenia.

Najpierw zainteresowałem się tym, ile tak naprawdę pamięci RAM wykorzystuję. Do tego celu użyłem darmową wersję programu Memory Clean 2.

Przy normalnym użytkowaniu pamięć RAM wykorzystywana jest praktycznie w 85%. W momencie uśpienia komputera rzadko zostawia włączone programy, inne niż Safari. Przeważnie zamykam wszystko przed zakończeniem pracy.

Mimo tego, macOS pozostawia część danych w pamięci RAM na przyszłość, przez co więcej danych musi zostać podtrzymana przy użyciu energii zgromadzonej w naszej baterii.

O ile najnowszy system macOS Catalina, wg moich obserwacji, zarządza pamięcią nieco sprawniej, to nadal nie widzę potrzeby zostawiania wszystkiego w pamięci RAM na następny dzień.

Zacząłem więc szukać rozwiązania i natrafiłem na ciekawą informację o różnych metodach hibernacji i uśpienia stosowanych w systemach Apple.

Otóż w systemach macOS wyróżnia się 2 rodzaje uśpienia/hibernacji.

  • Tryb uśpienia (Sleep mode) – standardowy trym uśpienia stosowany w komputerach typu iMac. W momencie uśpienia większość danych zostaje zapisana w RAM, a sama pamięć pozostaje pod ciągłym zasilaniem. Pozytywnym elementem tego rozwiązania jest to, że komputer startuje z uśpienia niemal natychmiast.
  • Hibernacja/Bezpieczne uśpienie (Safe sleep) – rozwiązanie hybrydowe (wykorzystywane w obecnych komputerach) polegające na pozostawienie części informacji w pamięci RAM oraz zapisanie kopii na dysku twardym. Start komputera jest natychmiastowy z danych przechowanych w pamięci RAM (RAM pozostaje zasilany w momencie uśpienia). W przypadku utraty zasilania (rozładowania baterii), a jednocześnie utraty danych z pamięci RAM, dane są przywracane z dysku, pozwalający w sposób bezpieczny na przywrócenie pracy do stanu sprzed uśpienia.

Sam tryb hibernacji różni się w zależności od typu komputera jaki używamy. W przypadku komputerów stacjonarnych (iMac), w momencie uśpienia przechowywane są w pamięci RAM z pominięciem zapisywania na dysku twardym (Tryb 1).

Dla urządzeń przenośnych wyróżnione jest rozwiązanie hybrydowe opisane powyżej (Tryb 3).

Apple wprowadził jednak dodatkowe rozwiązanie (Tryb 25), które nie jest domyślnie używane, a do którego będę chciał zachęcić. Polega on na zapisaniu zawartości pamięci RAM (tylko tych najważniejszych danych) na dysku twardym w momencie uśpienia. W momencie zakończenia hibernacji pamięć RAM odcięta jest od zasilania i w rezultacie wyczyszczona. Gdy komputer startuje ponownie, zapisana część danych przywracana jest z dysku do pamięci.

O ile to rozwiązanie wpływa pozytywnie na baterię (nie rozładowuje się przez noc), o tyle jest ono wolniejsze, dla tego też nie zostało domyślnie wprowadzone w obecnych komputera. Jako że zapis pomiędzy RAM a dyskiem i z powrotem może chwilkę zająć, powoduje to poniekąd wolniejszy start.

W przypadku komputerów z dyskiem SSD ta różnica nie jest znacząca. W przypadku mojego MBP zauważalne jest 1-2 sekundy opóźnienia od momentu otwarcia pokrywy do momentu pojawienia się ekranu logowania.

Jak dla mnie to rozwiązanie wcale mi to nie przeszkadza, a jednocześnie znalazłem jego dodatkową zaletę. O ile używałem Memory Clean 2 do opróżnienia niepotrzebnych śmieci z pamięci RAM, o tyle te śmieci są automatycznie opróżnione w momencie uśpienia bez zbędnych programów.

W momencie uśpienia posiadałem 2GB wolnej pamięci (z 8GB w moim komputerze) to po przebudzeniu miałem już prawie 5GB (czasami nawet 6GB). Nie zauważyłem żadnych negatywnych stron tego rozwiązania póki co więc dlaczego by przy tym nie zostać.

Nie znaczy to, że wywalam od razu Memory Clean 2. Wręcz przeciwnie. Lubię wiedzieć od czasu do czasu jak bardzo wykorzystuję pamięć w komputerze, a wskaźnik w górnym pasku mi to ładnie pokazuje.


Oto jak sprawdzić, jaki tryb uśpienia/hibernacji używamy oraz jak zmienić go na Tryb 25 opisany powyżej.

Najpierw odpalamy Terminal i wpisujemy następującą komendę:

pmset -g | grep hibernatemode

W większości wypadków będziemy mieli:

hibernatemode        3

Poszczególne tryby są następujące:

  • hibernatemode 0 – standardowe uśpienie.
  • hibernatemode 1 – hibernacja.
  • hibernatemode 3 – bezpieczne uśpienie (Safe Sleep).
  • hibernatemode 25 – inny rodzaj hibernacji (opisany powyżej)

Poniższe komendy wykonujemy z wykorzystaniem podwyższonych uprawnień po podaniu hasła do naszego konta (zakładając, że jesteśmy administratorem komputera).

Aby zmienić tryb (w poniższym przykładzie na Tryb 25) wystarczy następująca komenda:

sudo pmset -a hibernatemode 25

Oprócz tej komendy warto użyć dodatkowej komendy związanej z tym, jak szybko nasz komputer będzie przechodził w stan hibernacji po uśpieniu.

Najpierw za pomocą poniższej komendy możemy sprawdzić nasze ustawienia:

pmset -g

I tak pozycja standby powinna być włączona – czyli 1. W przypadku komputerów przenośnych jest duża szansa że już tak jest, a jeżeli nie, wystarczy poniższa komenda:

sudo pmset -a standby 1

Sama komenda standby nie określa, jak szybko komputer przejdzie z trybu uśpienia (które potrzebuje energii) do trybu hibernacji (który nie potrzebuje energii). Łopatologicznie mówiąc, po jakim czasie same zostaną zapisane z pamięci RAM na dysk twardy. Do tego dodajemy następujące komendy:

sudo pmset -a standbydelaylow 60
sudo pmset -a standbydelayhigh 60

Czas 60 sekund możecie dostosować do własnych potrzeb. Jeżeli potrzebujecie przenieść komputer z miejsca na miejsce, wówczas nie potrzebujecie, aby przeszedł on w stan hibernacji za szybko. W tym przypadku można ten czas wydłużyć. Domyślnie jest 4200 sekund, co jest prawie 70 minut!. Myślę, że 300 sekund (5 minut) powinno być waszym maksimum.

Jeszcze dla wyjaśnienia czym różni się standbydelaylow od standbydelayhigh.

Otóż standbydelayhigh określa, jak szybko komputer przejdzie do hibernacji gdy poziom baterii naszego komputera jest powyżej 50%. Analogicznie standbydelaylow gdy nasza bateria jest poniżej 50%. Gdy mamy pełną baterię, rozsądnie jest wydłużyć czas, a gdy na wyczerpaniu, przejść w hibernację (która nie potrzebuje zasilania) jak najszybciej.

Półap 50% określony jest w highstandbythreshold.
W razie potrzeby można go zmienić:

sudo pmset -a highstandbythreshold 25

Ktoś może powiedzieć że przez to rozwiązanie nasz dysk SSD szybciej się zużyje. O tyle dodam, że wg programu SSDReporter, mój dysk po ponad 5 latach jest na poziomie 94% (6% zużycia) więc możecie sobie sami odpowiedzieć na powyższe pytanie/stwierdzenie.

Pozdrawiam


Strony źródłowe warte polecenia: