Pojemność to łączna ilość zasobów (procesora, karty graficznej itp.), do których urządzenie ma dostęp w danym czasie. Z tej strony dowiesz się, jak wykrywać i rozwiązywać problemy z płynnością związane z pojemnością.
Gubernator reaguje z opóźnieniem
Aby uniknąć zacięć, sterownik częstotliwości procesora musi być w stanie szybko reagować na nagłe obciążenia. Większość aplikacji UI opiera się na tym samym podstawowym schemacie:
- Użytkownik czyta ekran.
- Użytkownik dotyka ekranu: klika przycisk, przewija itp.
- Ekran przewija się, zmienia aktywność lub animuje w jakimś stopniu w odpowiedzi na dane wejściowe.
- System przechodzi w stan bezczynności, gdy wyświetlane są nowe treści.
- Użytkownik wraca do czytania ekranu.
Urządzenia Pixel i Nexus implementują funkcję touch boost, aby modyfikować zachowanie sterownika (i planisty) częstotliwości procesora po dotknięciu. Aby uniknąć powolnego zwiększania częstotliwości zegara (co może powodować utratę klatek na urządzeniach dotykowych), funkcja Touch Boost zwykle ustawia minimalną częstotliwość procesora, aby zapewnić dużą wydajność procesora w przypadku dotyku. Floor trwa przez pewien czas po dotknięciu (zazwyczaj około 2 sekund).
Pixel korzysta też z grupy schedtune cgroup udostępnianej przez mechanizm Energy Aware Scheduling (EAS) jako dodatkowego sygnału zwiększania szybkości działania dotykiem: najpopularniejsze aplikacje otrzymują dodatkowy priorytet za pomocą schedtune, aby mieć wystarczającą moc procesora do szybkiego działania. Nexus 5X i 6P mają znacznie większą różnicę w wydajności między małymi i dużymi klastrami procesora (odpowiednio A53 i A57) niż Pixel z procesorem Kryo. Okazało się, że mały klaster procesora nie zawsze zapewnia płynne renderowanie interfejsu użytkownika, zwłaszcza biorąc pod uwagę inne źródła jittera na urządzeniu.
W związku z tym na Nexusach 5X i 6P funkcja Touch Boost modyfikuje działanie harmonogramu, aby zwiększyć prawdopodobieństwo przeniesienia aplikacji na pierwszym planie na duże rdzenie (jest to działanie podobne do progu częstotliwości procesora). Bez zmiany harmonogramu, która zwiększa prawdopodobieństwo przeniesienia aplikacji na pierwszy plan, aplikacje na pierwszym planie mogą mieć niewystarczającą moc procesora do renderowania, dopóki harmonogram nie zrównoważy obciążenia wątku na dużym rdzeniu procesora. Zmiana zachowania planisty podczas wzmocnienia dotykowego zwiększa prawdopodobieństwo, że wątek interfejsu użytkownika będzie od razu uruchamiany na dużym rdzeniu, co pozwoli uniknąć zacięcia, a nie spowoduje wymuszania uruchamiania go zawsze na dużym rdzeniu, co mogłoby mieć poważny wpływ na zużycie energii.
Ograniczanie ze względu na temperaturę
Ograniczenie ze względu na temperaturę występuje, gdy urządzenie musi zmniejszyć ogólną moc cieplną, co zwykle odbywa się przez zmniejszenie zegara procesora, karty graficznej i pamięci DRAM. Nie powinno to dziwić, ponieważ często powoduje to zakłócenia, ponieważ system może nie mieć wystarczającej ilości zasobów do renderowania w danym przedziale czasowym. Jedynym sposobem na uniknięcie ograniczenia ze względu na temperaturę jest zmniejszenie poboru mocy. Istnieje kilka sposobów na to, ale na podstawie naszych doświadczeń z poprzednich SOC mamy kilka zaleceń dla dostawców systemów.
Najpierw, podczas tworzenia nowego SOC z heterogeniczną architekturą procesora, upewnij się, że krzywe wydajności/W klastrów procesora nakładają się. Ogólna krzywa wydajności/W w przypadku całego procesora powinna być ciągłą linią. Przerwy w krzywej wydajność/W zmuszają planistę i regulator częstotliwości do zgadywania, czego potrzebuje obciążenie. Aby zapobiec zacięciam, planista i regulator częstotliwości dają obciążeniu więcej zasobów, niż są mu potrzebne. W efekcie zużywa ono zbyt dużo energii, co prowadzi do ograniczenia przepustowości ze względu na temperaturę.
Wyobraź sobie hipotetyczny SOC z 2 grupami procesorów:
- Klaster 1, czyli mały klaster, może zużywać 100–300 mW i osiągać wyniki 100–300 w benchmarku przepustowości w zależności od zegarów.
- Klaster 2, czyli duży klaster, może zużywać od 1000 do 1600 mW i w ramach tego samego testu wydajności uzyskuje wyniki od 800 do 1200 w zależności od zegarów.
W tym teście wyższa wartość oznacza szybsze działanie. Chociaż nie jest to bardziej pożądane niżwolniejsze, szybsze = większe zużycie energii.
Jeśli algorytm szeregowania uzna, że obciążenie związane z interfejsem wymaga wyniku równego 310 w przypadku tego testu przepustowości, najlepszym sposobem na uniknięcie zacięcia jest uruchomienie dużego klastra z najniższą częstotliwością, co wiąże się ze znacznym zużyciem energii. (Zależność ta zależy od zachowania cpuidle i konkurencji w trybie bezczynności. SOC z ciągłymi krzywą wydajności/W jest łatwiej optymalizować).
Po drugie, użyj cpusetów. Upewnij się, że masz włączone cpusety w jądrze i w BoardConfig.mk
. Musisz też skonfigurować przypisania cpuset w specyficznych dla urządzenia plikach init.rc
. Niektórzy dostawcy wyłączają tę opcję w swoich BSP, mając nadzieję, że mogą używać innych wskazówek, aby wpływać na działanie harmonogramu. Uważamy, że nie ma to sensu. cpusets są przydatne do zapewnienia równoważenia obciążenia między procesorami w sposób, który odzwierciedla to, co użytkownik robi na urządzeniu.
Menedżer aktywności przypisuje aplikacje do różnych zestawów procesora na podstawie ich względnego znaczenia (najważniejsze, na pierwszym planie, w tle), a bardziej istotne aplikacje mają większy dostęp do rdzeni procesora. Pomaga to zapewnić jakość usług w przypadku aplikacji na pierwszym planie i najpopularniejszych aplikacji.
cpusets są przydatne w przypadku jednorodnych konfiguracji procesora, ale nie należy wysyłać urządzenia z niejednorodną konfiguracją procesora bez włączonych cpusets. Nexus 6P to dobry model, który pokazuje, jak używać cpusetów w różnorodnej konfiguracji procesora. Możesz go użyć jako podstawy do konfiguracji własnego urządzenia.
cpusets zapewniają też korzyści związane z oszczędzaniem energii, ponieważ zapewniają, że wątki w tle, które nie są krytyczne dla wydajności, nigdy nie są równoważone pod względem obciążenia na dużych rdzeniach procesora, gdzie mogłyby zużywać znacznie więcej energii bez żadnej korzyści dla użytkownika. Pomoże to też uniknąć ograniczenia ze względu na temperaturę. Ograniczenie temperatury to problem z pojemnością, ale poprawa jittera ma ogromny wpływ na wydajność interfejsu podczas ograniczania temperatury. Ponieważ system będzie działał bliżej swojej zdolności do renderowania 60 FPS, wystarczy mniejsze drżenie, aby spowodować utratę klatki.