Tryb niskiego opóźnienia Wi-Fi

Android 10 rozszerza interfejs API blokady Wi-Fi, aby umożliwić aplikacji wrażliwych na opóźnienia, aby skonfigurować sieć Wi-Fi małe opóźnienie . Tryb małego opóźnienia uruchamia się, gdy są spełnione wszystkie te warunki:

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

Aby obsługiwać tryb małego opóźnienia na urządzeniach, producenci muszą zaktualizować sterownika WLAN i kod HAL dostawcy. W trybie niskiego opóźnienia funkcja oszczędzania energii (znane też jako w standardzie IEEE 802.11) jest wyraźnie wyłączone przez platformę. Parametry skanowania i roamingu w warstwie sterownika i oprogramowania układowego mogą być zoptymalizowane pod kątem dalszego zmniejszenia opóźnień Wi-Fi. Dokładne optymalizacje to konkretnego wdrożenia.

Android ma tryb wysokiej wydajności blokady Wi-Fi (opublikowane w interfejsie API na poziomie 12), który działa oddzielnie od trybu małego opóźnienia.

Implementacja

Aby zapewnić obsługę funkcji Wi-Fi w trybie niskiego opóźnienia, zaimplementuj takie tych funkcji IWifiChip.

W menu HAL AIDL:

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

W HAL HIDL (w wersji 1.3 lub nowszej):

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

Implementację referencyjną znajdziesz tutaj: 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 z platformy Android. Aby było to możliwe, sterownik WLAN musi obsługiwać polecenie NL80211, NL80211_CMD_SET_POWER_SAVE, by włączyć lub wyłączyć oszczędzanie energii. Gdy zasilanie Wi-Fi zapisywanie jest wyłączone, system Wi-Fi musi pozostawać w stanie uśpienia i być gotowy do wysyłania lub odbierania pakietów z minimalnym opóźnieniem.

Wyłącz funkcję

Aby wyłączyć tryb małego opóźnienia, zaktualizuj źródłowy kod getFeatureSet() dla AIDL HAL lub getCapabilities_1_3() dla HIDL HAL, tak, aby capabilities & SET_LATENCY_MODE = 0, gdzie SET_LATENCY_MODE jest zdefiniowany w definicji AIDL lub HIDL IWifiChip. Gdy ta funkcja jest wyłączona, platforma wyłącza oszczędzanie energii tylko wtedy, gdy włączony jest tryb małego opóźnienia.

Weryfikacja

Aby sprawdzić, czy tryb niskiego opóźnienia działa, gdy jest włączony, uruchom następujące automatyczne polecenia testów i ręcznych testów opóźnienia ping.

Automatyczne testowanie

Przeprowadź te testy VTS i CTS:

Testy ręczne

Wymagany sprzęt i środowisko testowe

Aby przeprowadzić testy ręczne, musisz skonfigurować tę funkcję:

  • Punkt dostępu Wi-Fi
  • Telefon i komputer testowy w trakcie testowania urządzenia

    • Urządzenie DUT 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ć podłączony do urządzenia DUT przez USB.
  1. Włącz tryb niskiego opóźnienia.

    adb root
    adb shell cmd wifi force-low-latency-mode enabled
    
  2. Upewnij się, że komputer jest połączony z telefonem przez ADB. Od powłoce ADB, ciągłym pingiem bramy przez 3 godziny co 1 sekundę interwały.

  3. Zapisz wyniki testu w pliku tekstowym i użyj arkusza kalkulacyjnego lub języka Python aby wygenerować histogram wyników testu czasu oczekiwania na ping.

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

    adb root
    adb shell cmd wifi force-low-latency-mode disabled
    
  5. Porównaj wyniki testu, aby się upewnić, że średni czas oczekiwania na ping wynosi gdy włączony jest tryb małego opóźnienia.

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

    adb root
    adb shell cmd wifi force-low-latency-mode enabled
    
  2. Z wiersza poleceń komputera testowego wyślij ping do adresu IP telefonu. przez 3 godziny w 1-sekundowych odstępach.

  3. Zapisz wyniki testu w pliku tekstowym i użyj arkusza kalkulacyjnego lub języka Python aby wygenerować histogram wyników testu czasu oczekiwania na ping.

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

    adb root
    adb shell cmd wifi force-low-latency-mode disabled
    
  5. Porównaj wyniki testu, aby upewnić się, że średni czas oczekiwania na ping wynosi gdy włączony jest tryb małego opóźnienia.

Inne testy

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