Możesz określić zużycie energii poszczególnych komponentów, porównując prąd pobierany przez urządzenie, gdy komponent jest w pożądanym stanie (np. włączony, aktywny, skanujący) i gdy jest wyłączony. Zmierz średni prąd chwilowy pobierany przez urządzenie przy nominalnym napięciu, używając zewnętrznego monitora zasilania, takiego jak zasilacz laboratoryjny lub specjalistyczne narzędzia do monitorowania baterii (np. oprogramowanie Power Monitor i Power Tool firmy Monsoon Solution Inc.).
Producenci często podają informacje o prądziarliwości poszczególnych komponentów. Użyj tych informacji, jeśli w praktyce odzwierciedlają one prąd pobierany z baterii urządzenia. Przed użyciem wartości podanych przez producenta w profilu zasilacza urządzenia sprawdź, czy są one prawidłowe.
Zarządzanie zużyciem energii
Podczas pomiaru upewnij się, że urządzenie nie jest połączone z zewnętrznym źródłem zasilania, np. przez połączenie USB z hostem programistycznym używanym podczas uruchamiania Android Debug Bridge (adb). Urządzenie będące przedmiotem testu może pobierać prąd z hosta, co powoduje obniżenie wartości pomiarów na baterii. Unikaj połączeń USB On-The-Go (OTG), ponieważ urządzenie OTG może pobierać prąd z testowanego urządzenia.
Pomijając komponent, którego dotyczy pomiar, system powinien działać z niezmiennym poziomem poboru mocy, aby uniknąć niedokładnych pomiarów spowodowanych zmianami w innych komponentach. Aktywności systemu, które mogą powodować niechciane zmiany w pomiarach zużycia energii:
- Aktywność odbierania, przesyłania lub skanowania sieci komórkowej, Wi-Fi i Bluetooth. Gdy nie mierzysz mocy sygnału radiowego sieci komórkowej, ustaw urządzenie w tryb samolotowy i włącz Wi-Fi lub Bluetooth.
- Włączanie i wyłączanie ekranu. Kolory wyświetlane na ekranie mogą wpływać na pobór mocy w przypadku niektórych technologii ekranów. Wyłącz ekran podczas pomiaru wartości komponentów niebędących ekranem.
- Zawieszanie i wznawianie systemu. Wyłączenie ekranu może spowodować zawieszenie systemu, co spowoduje przejście niektórych części urządzenia w stan niskiego poboru energii lub wyłączenie. Może to wpływać na zużycie energii przez mierzony komponent i powodować duże różnice w wartościach odczytów, ponieważ system okresowo wznawia działanie, aby wysyłać alarmy itp. Więcej informacji znajdziesz w sekcji Kontrolowanie zawieszania systemu.
- Zmiana prędkości procesora i przechodzenie do stanu bezczynności harmonogramu oszczędzającego energię lub wyjście z tego stanu.
Podczas normalnej pracy system często dostosowuje szybkości procesorów, liczbę aktywnych rdzeni procesora i inne stany rdzenia systemu, takie jak szybkość magistrali pamięci i napięcia szyn zasilających związane z procesorami i pamięcią. Podczas testowania te korekty mają wpływ na pomiary mocy:
- Operacje skalowania szybkości procesora mogą zmniejszyć skalowanie zegara i napięcia magistrali pamięci oraz innych kluczowych komponentów systemu.
- Planowanie aktywności może wpływać na odsetek czasu, w którym procesory znajdują się w stanie bezczynności o niskim poborze mocy. Szczegółowe informacje o zapobieganiu tym zmianom podczas testowania znajdziesz w artykule Kontrolowanie szybkości procesora.
Na przykład Joe Droid chce obliczyć wartość screen.on
dla urządzenia. Włącza tryb samolotowy na urządzeniu, utrzymuje urządzenie w stabilnym stanie, utrzymuje stałą szybkość procesora i używa częściowego wakelocka, aby zapobiec zawieszeniu systemu. Następnie Joe wyłącza ekran urządzenia i wykonuje pomiar (200 mA). Następnie Joe włącza ekran urządzenia przy minimalnej jasności i wykonuje kolejne pomiary (300 mA). Wartość screen.on
to 100 mA (300–200).
Uwaga: w przypadku komponentów, które nie mają płaskiej fali sygnału prądu w stanie aktywnym (np. radio komórkowe lub Wi-Fi), zmierz średni prąd w czasie za pomocą narzędzia do monitorowania zasilania.
Jeśli zamiast baterii urządzenia używasz zewnętrznego źródła zasilania, system może mieć problemy z niepołączonym termistorem baterii lub zintegrowanymi pinami wskaźnika poziomu paliwa (np. nieprawidłowe odczyty temperatury baterii lub pojemności baterii mogą spowodować wyłączenie jądra lub systemu Android). Fałszywe baterie mogą wysyłać sygnały na piny termistora lub czujnika poziomu paliwa, które naśladują odczyty temperatury i stanu naładowania w normalnym systemie. Mogą też mieć wygodne przewody do podłączania zewnętrznych źródeł zasilania. Możesz też zmodyfikować system, aby ignorował nieprawidłowe dane z brakującej baterii.
Zawieszanie systemu sterowania
Z tej sekcji dowiesz się, jak uniknąć stanu uśpienia systemu, gdy nie chcesz, aby zakłócał on inne pomiary, oraz jak zmierzyć pobór mocy w stanie uśpienia systemu, gdy chcesz go zmierzyć.
Zapobieganie zawieszaniu systemu
Zawieszanie systemu może powodować niepożądane różnice w pomiarach zużycia energii i umieszczać komponenty systemu w stanach niskiego poboru mocy, które nie nadają się do pomiaru aktywnego zużycia energii. Aby zapobiec zawieszaniu systemu, gdy ekran jest wyłączony, użyj tymczasowego częściowego Wakelocka. Podłącz urządzenie do hosta programistycznego za pomocą kabla USB, a potem uruchom to polecenie:
adb shell "echo temporary > /sys/power/wake_lock"
W trybie wake_lock
wyłączenie ekranu nie powoduje zawieszenia systemu.
(Pamiętaj, aby przed pomiarem poboru mocy odłączyć kabel USB od urządzenia).
Aby usunąć wakelock:
adb shell "echo temporary > /sys/power/wake_unlock"
Zawieszenie systemu pomiarowego
Aby zmierzyć pobór mocy w stanie uśpienia systemu, zmierz wartość cpu.idle
w profilu zasilania. Przed pomiarem:
- Usuń istniejące blokady budzenia (jak opisano powyżej).
- Ustaw urządzenie w trybie samolotowym, aby uniknąć jednoczesnej aktywności radia komórkowego, które może działać na procesorze oddzielnie od części SoC kontrolowanych przez zawieszenie systemu.
- Upewnij się, że system jest w stanie zawieszenia:
- Sprawdź, czy bieżące odczyty osiągnęły stały poziom. Wyniki powinny mieścić się w oczekiwanym zakresie zużycia energii w stanie zawieszenia SoC oraz zużycia energii przez komponenty systemu, które pozostają pod napięciem (np. przez PHY USB).
- Sprawdzanie danych wyjściowych konsoli systemowej.
- obserwowanie zewnętrznych wskaźników stanu systemu (np. wyłączania diody LED, gdy urządzenie nie jest w trybie zawieszenia).
Kontrolowanie szybkości procesora
Aktywne procesory mogą być włączane i wyłączane, a ich częstotliwości zegara i powiązane napięcia mogą być zmieniane (co może również wpływać na częstotliwości magistrali pamięci i inne stany zasilania rdzenia systemu). Mogą też przechodzić w stany niskiego poboru mocy podczas pętli bezczynności jądra. Podczas pomiaru różnych stanów mocy procesora w profilu energetycznym unikaj zmienności poboru mocy podczas pomiaru innych parametrów. Profil mocy zakłada, że wszystkie procesory mają te same dostępne prędkości i charakterystyki mocy.
Podczas pomiaru mocy procesora lub utrzymywania mocy procesora na stałym poziomie w celu wykonania innych pomiarów utrzymuj stałą liczbę procesorów podłączonych do sieci (np. jeden procesor podłączony do sieci, a pozostałe offline lub odłączone). Utrzymanie wszystkich procesorów oprócz jednego w stanie bezczynności może przynieść zadowalające wyniki. Zatrzymanie platformy Android za pomocą funkcji adb shell stop
może zmniejszyć aktywność harmonogramu systemu.
W profilu zasilania
cpu.speeds
musisz określić dostępne szybkości procesora dla urządzenia. Aby uzyskać listę dostępnych prędkości procesora, uruchom:
adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
Te prędkości odpowiadają odpowiednim pomiarom mocy w wartości cpu.active
.
W przypadku platform, na których liczba rdzeni podłączonych do sieci znacząco wpływa na zużycie energii, może być konieczne zmodyfikowanie sterownika cpufreq lub sterownika sterownika platformy. Większość platform umożliwia sterowanie prędkością procesora za pomocą sterownika procesora w przestrzeni użytkownika i ustawianie prędkości za pomocą interfejsów sysfs. Aby na przykład ustawić szybkość 200 MHz w systemie z 1 procesorem lub wszystkimi procesorami używającymi wspólnej zasady cpufreq, użyj konsoli systemowej lub powłoki adb, aby uruchomić te polecenia:
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
Uwaga: dokładne polecenia różnią się w zależności od implementacji platformy cpufreq.
Te polecenia sprawdzają, czy nowa szybkość nie wykracza poza dozwolone granice, ustawiają nową szybkość, a następnie drukują szybkość, z jaką procesor rzeczywiście działa (w celu weryfikacji). Jeśli bieżąca minimalna prędkość przed wykonaniem jest większa niż 200 000, konieczne może być odwrócenie kolejności pierwszych 2 wierszy lub ponowne wykonanie pierwszego wiersza, aby obniżyć minimalną prędkość przed ustawieniem maksymalnej prędkości.
Aby zmierzyć prąd pobierany przez procesor pracujący z różnymi prędkościami, użyj konsoli systemowej, aby umieścić procesor w pętli zależnej od procesora, używając tego polecenia:
# while true; do true; done
Wykonaj pomiar podczas wykonywania pętli.
Niektóre urządzenia mogą ograniczać maksymalną prędkość procesora podczas stosowania ograniczania temperatury ze względu na wysoką temperaturę pomiaru (czyli po długotrwałym działaniu procesorów z wysoką prędkością). Sprawdź, czy takie ograniczenie występuje, korzystając z wyjścia konsoli systemowej podczas pomiarów lub sprawdzając dziennik jądra po pomiarach.
W przypadku wartości cpu.awake
zmierz zużycie energii, gdy system nie jest zawieszony i nie wykonuje zadań. Procesor powinien znajdować się w trybie pauzy
niskoenergetycznego harmonogramu, być może wykonując instrukcję ARM Wait For Event lub w stanie niskiego zużycia energii specyficznym dla SoC z krótkim czasem wyjścia odpowiednim do nieużywania.
W przypadku wartości cpu.active
zmierz moc, gdy system nie jest w trybie zawieszenia i nie wykonuje zadań. Zadanie powinno być wykonywane przez 1 procesor (zwykle główny), a pozostałe procesory powinny być w stanie bezczynności.
Pomiar mocy ekranu
Podczas pomiaru ekranu na zasilaniu upewnij się, że inne urządzenia są włączone, gdy ekran jest włączony. Jeśli na przykład ekran dotykowy i podświetlenie ekranu są zwykle włączone, gdy ekran jest włączony, włącz je podczas pomiaru, aby uzyskać realistyczny przykład zużycia energii przez ekran.
Niektóre technologie wyświetlania różnią się zużyciem energii w zależności od wyświetlanych kolorów, co powoduje, że pomiary zużycia energii mogą się znacznie różnić w zależności od tego, co jest wyświetlane na ekranie w momencie pomiaru. Podczas pomiaru upewnij się, że na ekranie wyświetla się coś, co ma parametry odpowiadające rzeczywistemu ekranowi. Ustaw coś pomiędzy ekstremalnymi wartościami, czyli czarnym ekranem (który zużywa najmniej energii w przypadku niektórych technologii) i białym ekranem. Popularnym wyborem jest widok harmonogramu w aplikacji kalendarza, który zawiera mieszankę białego tła i elementów w kolorze innym niż biały.
Zmierz jasność ekranu przy minimalnej i maksymalnej jasności wyświetlacza/podświetlenia. Aby ustawić minimalną jasność:
- Użyj interfejsu Androida (niezalecane). Przesuń suwak w sekcji Ustawienia > Jasność wyświetlacza do minimalnej jasności. Interfejs Androida pozwala jednak ustawić jasność tylko na poziomie 10–20% możliwej jasności panelu lub podświetlenia i nie pozwala ustawić jasności tak niskiej, aby ekran był niewidoczny bez dużego wysiłku.
- Użyj pliku sysfs (zalecane). Jeśli to możliwe, użyj pliku sysfs do sterowania jasnością panelu aż do minimalnej jasności obsługiwanej przez sprzęt.
Jeśli plik sysfs platformy umożliwia włączanie i wyłączanie panelu LCD, podświetlenia i ekranu dotykowego, użyj tego pliku do pomiarów z włączonym i wyłączonym ekranem. W przeciwnym razie ustaw częściowe blokowanie dostępu do systemu, aby nie zawieszał się on, a następnie włącz i wyłącz ekran za pomocą przycisku zasilania.
Pomiar mocy Wi-Fi
Wykonuj pomiary Wi-Fi w stosunkowo cichej sieci. Unikaj wprowadzania dodatkowej pracy związanej z przetwarzaniem dużych ilości danych z transmisji, które nie mają związku z mierzoną aktywnością.
Wartość wifi.on
mierzy zużycie energii, gdy Wi-Fi jest włączone, ale nie przesyła ani nie odbiera danych. Jest on często mierzony jako różnica między bieżącym poborem prądu w stanie zawieszenia (uśpienia) systemu z włączonym i wyłączonym Wi-Fi.
Wartość wifi.scan
mierzy ilość energii zużytej podczas skanowania sieci Wi-Fi w celu znalezienia punktów dostępu. Aplikacje mogą uruchamiać skanowanie sieci Wi-Fi za pomocą klasy WifiManager w ramach interfejsu API
startScan()
. Możesz też otworzyć Ustawienia > Wi-Fi, które co kilka sekund wykonuje skanowanie punktu dostępu z wyraźnym skokiem zużycia energii, ale z tych pomiarów musisz odjąć zużycie energii ekranu.
Uwaga: aby generować ruch sieciowy do odbioru i przesyłania, użyj kontrolowanej konfiguracji (np. iperf).