Jak przyspieszyć Maka? Garść doświadczeń z optymalizacją macOS na MacBooku Pro
Ponieważ moje ostatnie publikacje poświęcone problemom z systemem macOS (a wcześniej OS X) spotykają się z uroczym zarzutem, że to hejt i herezja, pomyślałem że dla odmiany popełnię coś bardziej konstruktywnego. Oczywiście, jeśli problemów z wydajnością Maka i prędkością działania nie widzicie, czytać dalej nie musicie, ale jeśli chcielibyście jednak żeby działał lepiej, to poniżej zbiór moich doświadczeń. Jest to wynik eksperymentów organoleptycznych, znaczy przestawiam i patrzę, czy działa lepiej. Wyczucie zwykle mam dość celne, ale oczywiście jest też możliwe, że część z tych sztuczek ma właściwości efektu placebo. Oceńcie sami, poniżej lista tego, z czym sam się zmagałem, żeby system chodził bardziej płynnie.
05.10.2016 | aktual.: 07.10.2016 14:31
Interfejs użytkownika
Brak płynności w animacjach elementów interfejsu to jedna z tych rzeczy, które najbardziej mi przeszkadzają. Poprawić to można w Preferencje systemowe -> Dostępność -> Ekran. Są tam trzy opcje, przy czym największy efekt daje włączenie Zmniejsz przeźroczystość. Wygląd bardzo na tym nie traci (mi nawet podoba się bardziej), a przyspieszenie jest widoczne. Jest też opcja Zredukuj ruch, przez którą tracimy już część atrakcyjnych wizualnie wodotrysków, ale okienka aplikacji pojawiają się i przełączają znacznie szybciej. Pewną poprawę daje też włączenie opcji Zwiększ kontrast, ale jak dla mnie zbyt mocno zmienia ona wygląd interfejsu, żeby warto było z niej korzystać.
Alternatywą dla opcji Zredukuj ruch jest skorzystanie z programu OnyX do modyfikacji opcji systemu niedostępnych z poziomu standardowego interfejsu. W zakładce Parameters -> General jest opcja Show graphic effects when opening a window oraz w zakładce Parameters -> Dock jest opcja Show when opening applications. Zmieniają one sposób działania systemu w dużo mniejszy sposób niż Zredukuj ruch, a efekt przyspieszenia i większej płynności działania interfejsu jest spory.
System, aplikacje i maszyny wirtualne
Po pierwsze, moje obserwacje w korzystaniu z notebooka (i to nie tylko z Maków) są takie, że elementy interfejsu użytkownika zaczynają chodzić tym wolniej, im częściej hibernujemy komputer zapisując pamięć RAM na dysk twardy. Wyłączenie opcji hibernacji skraca czas, przez który komputer może pozostawać w stanie zwykłego uśpienia na baterii, ale jest to kompromis, który przynajmniej dla mnie jest akceptowalny. Jeśli potrzebuję przechować komputer na dłuższy czas bez żyłowania baterii wyłączam go, a nie hibernuję.
Stan parametrów hibernacji można sprawdzić wpisując w wierszu poleceń pmset -g custom. Wyłączenie hibernacji wykonuje się poleceniami pmset -a standby 0 oraz pmset -a autopoweroff 0. Jeśli macie wątpliwości, to polecam man pmset. Tym poleceniem można też wyłączyć korzystanie ze zintegrowanej, słabszej karty graficznej (jeśli posiadamy odpowiedniego notebooka) poleceniem pmset -g gpuswitch 1.
Jeśli korzystacie z maszyn wirtualnych lub narzędzi wykonujących spore operacje w tle, warto spróbować włączyć opcję server performance mode. Szczegóły jej działania nie są niestety dobrze udokumentowane, wiadomo tylko że zmienia między innymi parametry jądra systemu optymalizując je do pracy z wieloma aplikacjami działającymi równolegle lub w tle. W przypadku maszyn wirtualnych na VMware Fusion ja zauważyłem różnicę. Jeśli nie macie żadnych niestandardowych parametrów startu systemu, wystarczy wpisać sudo nvram boot-args="serverperfmode=1" i zrestartować system.
Warto spróbować też wyłączyć opcję App Nap dla wszystkich aplikacji w systemie poleceniem defaults write NSGlobalDomain NSAppSleepDisabled -bool YES.
Sieć, VPN i SMB
Działanie warstwy sieciowej, w szczególności połączeń VPN oraz protokołu SMB, to ewidentnie pięta achillesowa Maków. Póki co nie znalazłem dobrego rozwiązania, a jedynie półśrodki, które niestety stanowią też kompromis pomiędzy wydajnością oraz bezpieczeństwem. Prędkość transferu plików z serwerów SMB można poprawić dodając do pliku konfiguracyjnego Samby znajdującego się w lokalizacji /etc/nsmb.conf następujące parametry:
[default] signing_required=no read_async_cnt=16 write_async_cnt=16 dir_cache_async_cnt=20 dir_cache_max_cnt=8192
Wnikliwi mogą sprawdzić, co konkretnie wprowadzają te zmiany w dokumentacji man nsmb.conf. Trzeba tylko mieć świadomość, że wyłączenie podpisywania pakietów osłabia bezpieczeństwo i nasze połączenia do serwera SMB muszą być po bezpiecznej, najlepiej szyfrowanej trasie.
Świetny przewodnik po optymalizacji warstwy sieciowej znaleźć można na blogu Rolande's Ramblings. Niestety jest już mocno zdezaktualizowany i wiele domyślnych ustawień najnowszej wersji macOS Sierra jest już zgodna z tym, co kilka lat temu sugerował Scott. Jest to lektura dla zaawansowanych użytkowników, gorąco polecam nie tyle przekopiowanie jego zestawu ustawień, co przeczytanie ze zrozumieniem, za co odpowiadają poszczególne parametry i jakie byłyby najlepsze dla naszego środowiska. Potrzebny jest do tego długi weekend, ale warto, tym bardziej że ciężko tu o uniwersalną receptę dla każdego. Przykładowo, jeśli chcecie zoptymalizować połączenia do serwerów SMB lub AFP za pośrednictwem VPN, ustawienia net.inet.tcp.win_scale_factor oraz net.inet.tcp.slowstart_flightsize mogą zależeć od prędkości Waszego połączenia WAN.
Google Chrome
Optymalizacja przeglądarki to osobny i długi jak rzeka temat. Pod Makami oczywiście najlepiej chodzi Safari i żadna inna przeglądarka nie zapewnia choćby zbliżonej płynności przeglądania stron. Jeśli jednak nie możecie przeprosić się z Safari, polecam kanał kompilacji deweloperskich Google Chrome. Mimo okazjonalnych błędów, najnowsze wersje Chrome po tuningu chodzą już dość przyzwoicie. Po jakim tuningu, spytacie?
Polecam otworzyć stronę chrome://flags. Jest tam wiele opcji, z którymi można eksperymentować i wiele zależy od tego, jaki efekt chcemy uzyskać. Mnie osobiście nie interesuje wydajność przeglądarki w grach wykorzystujących 3D, natomiast oczekuję że przewijanie stron będzie działać szybko i płynnie, podobnie jak animacje w elementach interfejsu stron. Obecnie korzystam z włączonych nastepujących opcji:
#enable-fast-unload #enable-ignition #enable-gpu-rasterization -> włączone, nie wymuszone #enable-scroll-prediction #touch-events #v8-cache-options #v8-cache-strategies-for-cache-storage #passive-listener-default -> wymuś wszędzie #document-passive-event-listeners #passive-event-listeners-due-to-fling #enable-loading-ipc-optimization-for-small-resources #enable-font-cache-scaling
Ten zestaw parametrów powoduje, że Chrome 55.0.2873.4 dev (64-bit) działa całkiem znośnie. Największą zagadką jest dla mnie opcja #touch-events, bo przecież MacBook nie ma ekranu dotykowego, niemniej jej włączenie powoduje że przewijanie skomplikowanych stron jest jakby płynniejsze. Czemu? Nie wiem. Możliwe też, że tylko tak mi się wydaje, sprawdźcie sami. Są też inne opcje, niemniej w zależności od wersji Google Chrome (eksperymentuję z tymi parametrami juz od dłuższego czasu) przynoszą one różne i czasem odwrotne efekty:
#enable-experimental-canvas-features #enable-canvas-2d-dynamic-rendering-mode-switching #enable-javascript-harmony #enable-asm-webassembly #enable-webassembly
Czy to działa? A może macie swoje obserwacje?
Po pierwsze zaznaczam, że ten zbiór pomysłów, obserwacji i sugestii to ciągłe eksperymenty (tym bardziej, że zmieniają się wersje oprogramowania). Nie gwarantuję, że zauważycie kolosalną różnicę, choć ja po tych zmianach czuję, że system pracuje zauważalnie szybciej i płynniej. Musicie też pamiętać, że część z tych modyfikacji może wywołać nieprzewidywalne skutki i jeśli w wyniku eksperymentów zepsujecie system lub stracicie dane to nie mówcie, że nie uprzedzałem. Tego typu eksperymenty zawsze robi się na własne ryzyko, najlepiej z kopią zapasową pod ręką.
No i w końcu, bardzo interesuje mnie, czy może macie jakieś swoje pomysły na podniesienie wydajności systemu macOS. Jeśli tak, podzielcie się nimi w komentarzach! Ciągle szukam publikacji, dyskusji i komentarzy na ten temat i nie przestaję wpadać na nowe pomysły, więc temat z całą pewnością daleki jest od wyczerpania.