Zmierz moc komponentu

Możesz określić pobór mocy poszczególnych komponentów, porównując prąd pobierany przez urządzenie, gdy komponent znajduje się w pożądanym stanie (np. włączony, aktywny, skanowanie) i gdy jest wyłączony. Zmierz średni chwilowy prąd pobierany przez urządzenie przy napięciu znamionowym, korzystając z zewnętrznego monitora zasilania, takiego jak zasilacz laboratoryjny lub specjalistyczne narzędzia do monitorowania akumulatora (takie jak oprogramowanie Monsoon Solution Inc. Power Monitor i Power Tool).

Producenci często podają informację o prądzie pobieranym przez dany element. Użyj tej informacji, jeśli dokładnie odzwierciedla ona prąd pobierany z akumulatora urządzenia w praktyce. Zanim jednak użyjesz tych wartości w profilu mocy urządzenia, sprawdź wartości podane przez producenta.

Kontroluj zużycie energii

Podczas pomiaru upewnij się, że urządzenie nie jest podłączone do zewnętrznego źródła ładowania, takiego jak połączenie USB z hostem programistycznym używanym podczas uruchamiania Android Debug Bridge (adb). Testowane urządzenie może pobierać prąd z hosta, obniżając w ten sposób pomiary na akumulatorze. Unikaj połączeń USB On-The-Go (OTG), ponieważ urządzenie OTG może pobierać prąd z testowanego urządzenia.

Wyłączając mierzony komponent, system powinien pracować przy stałym poziomie zużycia energii, aby uniknąć niedokładnych pomiarów spowodowanych zmianami w innych komponentach. Do działań systemu, które mogą wprowadzić niepożądane zmiany w pomiarach mocy zalicza się:

  • Aktywność odbierania, przesyłania i skanowania przez sieć komórkową, Wi-Fi i Bluetooth . Jeśli nie mierzysz mocy radia komórkowego, ustaw urządzenie w tryb samolotowy i włącz Wi-Fi lub Bluetooth, jeśli to konieczne.
  • Włączanie/wyłączanie ekranu . Kolory wyświetlane, gdy ekran jest włączony, mogą wpływać na pobór mocy w przypadku niektórych technologii ekranowych. Wyłącz ekran podczas pomiaru wartości elementów niebędących ekranem.
  • Zawieszenie/wznowienie systemu . Stan wyłączenia ekranu może spowodować zawieszenie systemu, powodując przejście części urządzenia w stan niskiego poboru mocy lub wyłączenie. Może to mieć wpływ na pobór mocy mierzonego komponentu i powodować duże różnice w odczytach mocy, gdy system okresowo wznawia wysyłanie alarmów itp. Aby uzyskać szczegółowe informacje, zobacz Sterowanie zawieszaniem systemu .
  • Procesory zmieniające prędkość i wchodzące/wychodzące ze stanu bezczynności harmonogramu o niskim poborze mocy . Podczas normalnej pracy system często dostosowuje szybkość procesora, liczbę rdzeni procesora w trybie online i inne stany rdzenia systemu, takie jak szybkość magistrali pamięci i napięcia szyn zasilających procesorów i pamięci. Podczas testowania te regulacje wpływają na pomiary mocy:
    • Operacje skalowania szybkości procesora mogą zmniejszyć skalowanie zegara i napięcia szyn pamięci i innych podstawowych komponentów systemu.
    • Czynności związane z planowaniem mogą wpływać na procent czasu spędzanego przez procesory w stanach bezczynności o niskim poborze mocy. Aby uzyskać szczegółowe informacje na temat zapobiegania występowaniu tych korekt podczas testowania, zobacz Kontrolowanie szybkości procesora .

Na przykład Joe Droid chce obliczyć wartość screen.on dla urządzenia. Włącza tryb samolotowy na urządzeniu, uruchamia urządzenie przy stabilnym stanie bieżącym, utrzymuje stałą prędkość procesora i używa częściowego wakelocka, aby zapobiec zawieszeniu systemu. Następnie Joe wyłącza ekran urządzenia i dokonuje pomiaru (200 mA). Następnie Joe włącza ekran urządzenia z minimalną jasnością i dokonuje kolejnego pomiaru (300 mA). Wartość screen.on wynosi 100 mA (300 - 200).

Uwaga : w przypadku komponentów, które nie mają płaskiego kształtu fali zużycia prądu, gdy są aktywne (takich jak radio komórkowe lub Wi-Fi), zmierz średni prąd w czasie za pomocą narzędzia do monitorowania mocy.

W przypadku korzystania z zewnętrznego źródła zasilania zamiast baterii urządzenia, w systemie mogą wystąpić problemy z powodu niepodłączonego termistora baterii lub pinów zintegrowanego wskaźnika poziomu paliwa (tzn. nieprawidłowy odczyt temperatury baterii lub pozostałej pojemności baterii może spowodować wyłączenie jądra lub systemu Android) . Fałszywe akumulatory mogą dostarczać sygnały na stykach termistora lub wskaźnika poziomu paliwa imitujące odczyty temperatury i stanu naładowania w normalnym systemie, a także mogą zapewniać wygodne przewody do podłączenia do zewnętrznych zasilaczy. Alternatywnie możesz zmodyfikować system tak, aby ignorował nieprawidłowe dane z brakującej baterii.

Zawieszenie układu sterowania

W tej sekcji opisano, jak uniknąć stanu zawieszenia systemu, jeśli nie chcesz, aby zakłócał on inne pomiary, oraz jak zmierzyć pobór mocy w stanie zawieszenia systemu, jeśli chcesz to zmierzyć.

Zapobiegaj zawieszaniu systemu

Zawieszenie systemu może wprowadzić niepożądane różnice w pomiarach mocy i umieścić komponenty systemu w stanach niskiego poboru mocy, nieodpowiednich do pomiaru zużycia mocy czynnej. Aby zapobiec zawieszaniu się systemu, gdy ekran jest wyłączony, użyj tymczasowej częściowej blokady wakelock. Za pomocą kabla USB podłącz urządzenie do hosta programistycznego, a następnie wydaj następujące polecenie:

adb shell "echo temporary > /sys/power/wake_lock"

W trybie wake_lock stan wyłączenia ekranu nie powoduje zawieszenia systemu. (Pamiętaj, aby przed pomiarem zużycia energii odłączyć kabel USB od urządzenia.)

Aby usunąć wakelock:

adb shell "echo temporary > /sys/power/wake_unlock"

Zmierz zawieszenie systemu

Aby zmierzyć pobór mocy w stanie zawieszenia systemu, zmierz wartość cpu.idle w profilu zasilania. Przed pomiarem:

  • Usuń istniejące wakelocki (jak opisano powyżej).
  • Przełącz urządzenie w tryb samolotowy, aby uniknąć jednoczesnej aktywności radia komórkowego, które może działać na procesorze innym niż części SoC kontrolowane przez zawieszenie systemu.
  • Upewnij się, że system jest w stanie zawieszenia poprzez:
    • Potwierdzenie, że bieżące odczyty ustalają się na stałą wartość. Odczyty powinny mieścić się w oczekiwanym zakresie zużycia energii w stanie zawieszenia SoC oraz zużycia energii przez komponenty systemu, które pozostają zasilane (takie jak USB PHY).
    • Sprawdzanie danych wyjściowych konsoli systemowej.
    • Obserwuj zewnętrzne wskaźniki stanu systemu (takie jak dioda LED wyłączająca się, gdy system nie jest w stanie zawieszenia).

Kontroluj prędkość procesora

Aktywne procesory można przełączać w tryb online lub wyłączać, zmieniać ich taktowanie i powiązane z nimi napięcia (prawdopodobnie wpływając również na szybkość magistrali pamięci i inne stany zasilania rdzenia systemu), a także mogą przechodzić w stany bezczynności z niższym poborem mocy, gdy znajdują się w pętli bezczynności jądra. Podczas pomiaru różnych stanów zasilania procesora dla profilu mocy należy unikać odchyleń w poborze mocy podczas pomiaru innych parametrów. Profil mocy zakłada, że ​​wszystkie procesory mają te same dostępne prędkości i charakterystykę 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 trybu online (np. jeden procesor musi być online, a reszta offline/podłączona podczas pracy). Utrzymanie wszystkich procesorów z wyjątkiem jednego w harmonogramie bezczynności może dawać akceptowalne wyniki. Zatrzymanie środowiska Androida za pomocą adb shell stop może zmniejszyć aktywność planowania systemu.

Musisz określić dostępne prędkości procesora dla swojego urządzenia w profilu zasilania cpu.speeds . Aby uzyskać listę dostępnych prędkości procesora, uruchom:

adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state

Prędkości te 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ć konieczna modyfikacja sterownika cpufreq lub gubernatora platformy. Większość platform obsługuje kontrolowanie szybkości procesora za pomocą zarządcy cpufreq w przestrzeni użytkownika i używania interfejsów sysfs do ustawiania szybkości. Na przykład, aby ustawić prędkość na 200 MHz w systemie z tylko 1 procesorem lub wszystkimi procesorami korzystającymi ze wspólnej polityki cpufreq, użyj konsoli systemowej lub powłoki adb, aby uruchomić następujące 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 cpufreq na platformie.

Polecenia te zapewniają, że nowa prędkość nie wykracza poza dozwolone granice, ustawiają nową prędkość, a następnie wyświetlają prędkość, z jaką faktycznie pracuje procesor (w celu weryfikacji). Jeśli bieżąca minimalna prędkość przed wykonaniem jest wyższa niż 200 000, może być konieczne odwrócenie kolejności pierwszych dwóch wierszy lub ponowne wykonanie pierwszego wiersza, aby zmniejszyć prędkość minimalną przed ustawieniem prędkości maksymalnej.

Aby zmierzyć prąd pobierany przez procesor pracujący z różnymi prędkościami, użyj konsoli systemowej i umieść procesor w pętli powiązanej z procesorem, używając polecenia:

# while true; do true; done

Wykonaj pomiar w trakcie wykonywania pętli.

Niektóre urządzenia mogą ograniczać maksymalną prędkość procesora podczas dławienia termicznego ze względu na pomiar wysokiej temperatury (to znaczy po długotrwałej pracy procesorów z dużą szybkością). Uważaj na takie ograniczenia, korzystając z danych wyjściowych konsoli systemowej podczas wykonywania pomiarów lub sprawdzając dziennik jądra po dokonaniu pomiaru.

Dla wartości cpu.awake zmierz pobór mocy, gdy system nie jest w stanie zawieszenia i nie wykonuje zadań. Procesor powinien znajdować się w pętli bezczynności harmonogramu o niskim poborze mocy, prawdopodobnie wykonując instrukcję ARM Wait For Event lub w specyficznym dla SoC stanie niskiego poboru mocy z szybkim opóźnieniem wyjścia odpowiednim do bezczynności.

Dla wartości cpu.active zmierz moc, gdy system nie znajduje się w trybie wstrzymania i nie wykonuje zadań. Jeden procesor (zwykle główny procesor) powinien wykonywać zadanie, podczas gdy wszystkie pozostałe procesory powinny znajdować się w stanie bezczynności.

Zmierz moc ekranu

Podczas pomiaru ekranu przy włączonym zasilaniu upewnij się, że inne urządzenia normalnie włączone, gdy ekran jest włączony, również są włączone. Na przykład, jeśli ekran dotykowy i podświetlenie wyświetlacza normalnie byłyby włączone, gdy ekran jest włączony, upewnij się, że te urządzenia są włączone 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 mocy znacznie się różnią w zależności od tego, co jest wyświetlane na ekranie w momencie pomiaru. Podczas pomiaru upewnij się, że ekran wyświetla coś, co ma charakterystykę mocy realistycznego ekranu. Celuj pomiędzy skrajnościami całkowicie czarnego ekranu (który zużywa najmniej energii w przypadku niektórych technologii) a całkowicie białym ekranem. Częstym wyborem jest widok harmonogramu w aplikacji kalendarza, który zawiera mieszankę białego tła i elementów innych niż białe.

Zmierz ekran po włączeniu zasilania przy minimalnej i maksymalnej jasności wyświetlacza/podświetlenia. Aby ustawić minimalną jasność:

  • Użyj interfejsu użytkownika Androida (niezalecane). Ustaw suwak Ustawienia > Jasność wyświetlacza na minimalną jasność wyświetlacza. Interfejs Androida pozwala jednak ustawić jasność jedynie na minimum 10-20% możliwej jasności panelu lub podświetlenia i nie pozwala na ustawienie jasności na tak niskim poziomie, że ekran mógłby nie być widoczny bez większego wysiłku.
  • Użyj pliku sysfs (zalecane). Jeśli to możliwe, użyj pliku sysfs, aby kontrolować jasność panelu aż do minimalnej jasności obsługiwanej przez sprzęt.

Dodatkowo, jeśli plik sysfs platformy umożliwia włączanie i wyłączanie panelu LCD, podświetlenia i ekranu dotykowego, za pomocą pliku można dokonywać pomiarów przy włączonym i wyłączonym ekranie. W przeciwnym razie ustaw częściową blokadę wakelock, aby system się nie zawieszał, a następnie włącz i wyłącz ekran przyciskiem zasilania.

Zmierz moc Wi-Fi

Wykonuj pomiary Wi-Fi w stosunkowo cichej sieci. Unikaj wprowadzania dodatkowej pracy przetwarzającej duże ilości ruchu rozgłoszeniowego, który nie jest powiązany z mierzoną aktywnością.

Wartość wifi.on mierzy energię zużywaną, gdy Wi-Fi jest włączone, ale nie transmituje ani nie aktywnie odbiera. Często mierzy się to jako różnicę pomiędzy poborem prądu w stanie zawieszenia (uśpienia) systemu z włączoną a wyłączoną siecią Wi-Fi.

Wartość wifi.scan mierzy energię zużywaną podczas skanowania Wi-Fi w poszukiwaniu punktów dostępu. Aplikacje mogą uruchamiać skanowanie Wi-Fi za pomocą interfejsu API startScan() klasy WifiManager. Możesz także otworzyć Ustawienia > Wi-Fi, które co kilka sekund skanuje punkty dostępu i powoduje wyraźny skok zużycia energii, ale od tych pomiarów należy odjąć moc ekranu.

Uwaga : Użyj kontrolowanej konfiguracji (takiej jak iperf ), aby wygenerować ruch odbierający i przesyłający w sieci.