Tryb niskiego opóźnienia w sieci Wi-Fi

Android 10 rozszerza interfejs Wi-Fi Lock API, aby umożliwić aplikacjom wrażliwym na opóźnienia skonfigurowanie Wi-Fi w trybie niskiego opóźnienia. Tryb niskiego opóźnienia włącza się, gdy spełnione są wszystkie te warunki:

  • Sieć Wi-Fi jest włączona, a urządzenie ma dostęp do internetu.
  • Aplikacja utworzyła i uzyskała blokadę Wi-Fi i działa na pierwszym planie.
  • Ekran jest włączony.

Aby obsługiwać tryb niskiego opóźnienia na urządzeniach, producenci urządzeń muszą zaktualizować sterownik WLAN i HAL dostawcy. W trybie niskiego opóźnienia oszczędzanie energii (znane też jako stan uśpienia w standardzie IEEE 802.11) jest wyraźnie wyłączone przez platformę. Parametry skanowania i roamingu w warstwach sterownika i oprogramowania można zoptymalizować, aby jeszcze bardziej zmniejszyć opóźnienie Wi-Fi. Dokładne optymalizacje zależą od konkretnej implementacji.

Android ma tryb blokady Wi-Fi o wysokiej wydajności (wprowadzony na poziomie interfejsu API 12), który jest oddzielony od trybu o niskim opóźnieniu.

Implementacja

Aby obsługiwać funkcję trybu niskiego opóźnienia Wi-Fi, udostępnij implementacje tych funkcji IWifiChip.

W AIDL HAL:

  • int getFeatureSet()
  • void setLatencyMode(in LatencyMode mode)

W HIDL HAL (wersja 1.3 lub nowsza):

  • getCapabilities_1_3() generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities)
  • setLatencyMode(LatencyMode mode) generates (WifiStatus status)

Implementację referencyjną znajdziesz w tym miejscu:wifi_legacy_hal.cpp z tymi funkcjami:

  • wifi_error wifi_get_supported_feature_set(wifi_interface_handle iface, feature_set *set)
  • wifi_error wifi_set_latency_mode(wifi_interface_handle handle, wifi_latency_mode mode)

W trybie niskiego opóźnienia oszczędzanie energii jest jawnie wyłączone przez WifiLockManager w ramach Androida. Aby to umożliwić, sterownik WLAN musi obsługiwać polecenie NL80211, NL80211_CMD_SET_POWER_SAVE, które włącza i wyłącza oszczędzanie energii. Gdy oszczędzanie energii Wi-Fi jest wyłączone, system Wi-Fi musi pozostawać w stanie aktywnym i być gotowy do wysyłania lub odbierania pakietów z minimalnym opóźnieniem.

Wyłącz funkcję

Aby wyłączyć tryb niskiego opóźnienia, zaktualizuj kod bazowy getFeatureSet() w przypadku interfejsu AIDL HAL lub getCapabilities_1_3() w przypadku interfejsu HIDL HAL, tak aby capabilities & SET_LATENCY_MODE = 0, gdzie SET_LATENCY_MODE jest zdefiniowane w definicji IWifiChip AIDL lub HIDL. Gdy ta funkcja jest wyłączona, platforma wyłącza oszczędzanie energii tylko wtedy, gdy aktywny jest tryb niskiego opóźnienia.

Weryfikacja

Aby sprawdzić, czy tryb niskiego opóźnienia działa po włączeniu, uruchom te testy automatyczne i ręczne testy opóźnienia ping.

Automatyczne testowanie

Uruchom te testy VTS i CTS:

Testy ręczne

Wymagany sprzęt testowy i środowisko

W przypadku testowania ręcznego wymagana jest ta konfiguracja:

  • Punkt dostępu Wi-Fi
  • Telefon testowany i komputer testowy

    • Testowane urządzenie musi być połączone z punktem dostępu przez Wi-Fi.
    • Komputer testowy musi być połączony z punktem dostępu przez Wi-Fi lub Ethernet.
    • Komputer testowy musi być połączony z DUT za pomocą kabla USB.
  1. Włącz tryb niskiego opóźnienia.

    adb root
    adb shell cmd wifi force-low-latency-mode enabled
  2. Sprawdź, czy komputer jest połączony z telefonem za pomocą ADB. W powłoce ADB pinguj bramę nieprzerwanie przez 3 godziny w odstępach 1-sekundowych.

  3. Zapisz wyniki testu w pliku tekstowym i użyj arkusza kalkulacyjnego lub skryptu w języku Python, aby wygenerować histogram wyników testu opóźnienia ping.

  4. Powtórz kroki 1–3 z wyłączonym trybem opóźnienia.

    adb root
    adb shell cmd wifi force-low-latency-mode disabled
  5. Porównaj wyniki testu, aby sprawdzić, czy średnia wartość opóźnienia ping jest mniejsza, gdy włączony jest tryb niskiego opóźnienia.

  1. Włącz tryb niskiego opóźnienia.

    adb root
    adb shell cmd wifi force-low-latency-mode enabled
  2. W wierszu poleceń komputera testowego pinguj adres IP telefonu przez 3 godziny w 1-sekundowych odstępach.

  3. Zapisz wyniki testu w pliku tekstowym i użyj arkusza kalkulacyjnego lub skryptu w języku Python, aby wygenerować histogram wyników testu opóźnienia ping.

  4. Powtórz kroki 1–3 z wyłączonym trybem opóźnienia.

    adb root
    adb shell cmd wifi force-low-latency-mode disabled
  5. Porównaj wyniki testu, aby sprawdzić, czy średnia wartość opóźnienia ping jest mniejsza, gdy włączony jest tryb niskiego opóźnienia.

Inne testy

Powtórz powyższe testy w różnych środowiskach. na przykład w domu lub w biurze.