WLAN-Modus mit geringer Latenz

Android 10 erweitert die Wi-Fi-Sperr-API, um latenzempfindlichen Apps die Konfiguration von Wi-Fi in einem Modus mit geringer Latenz zu ermöglichen. Der Modus mit geringer Latenz startet, wenn alle der folgenden Bedingungen erfüllt sind:

  • WLAN ist aktiviert und das Gerät verfügt über Internetzugang.
  • Die App hat eine WLAN-Sperre erstellt und erworben und wird im Vordergrund ausgeführt.
  • Der Bildschirm ist eingeschaltet.

Um den Niedriglatenzmodus auf Geräten zu unterstützen, müssen Gerätehersteller den WLAN-Treiber und die Hersteller-HAL aktualisieren. Im Niedriglatenzmodus wird der Energiesparmodus (im IEEE 802.11-Standard auch als Ruhezustand bezeichnet) vom Framework explizit deaktiviert. Die Scan- und Roaming-Parameter in den Treiber- und Firmware-Ebenen können optimiert werden, um die WLAN-Latenz weiter zu reduzieren. Die genauen Optimierungen sind Implementierungsspezifisch.

Android verfügt über einen leistungsstarken Wi-Fi-Sperrmodus (eingeführt in API-Level 12), der vom Modus mit geringer Latenz getrennt ist.

Implementierung

Um die Wi-Fi-Funktion für den Modus mit niedriger Latenz zu unterstützen, stellen Sie Implementierungen für die folgenden IWifiChip Funktionen bereit.

Im AIDL HAL:

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

Im HIDL HAL (1.3 oder neuer):

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

Eine Referenzimplementierung finden Sie in wifi_legacy_hal.cpp mit den folgenden Funktionen:

  • 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)

Im Niedriglatenzmodus wird der Energiesparmodus durch WifiLockManager im Android-Framework explizit deaktiviert. Um dies zu unterstützen, muss der WLAN-Treiber den NL80211-Befehl NL80211_CMD_SET_POWER_SAVE unterstützen, um den Energiesparmodus zu aktivieren und zu deaktivieren. Wenn der Wi-Fi-Energiesparmodus deaktiviert ist, muss das Wi-Fi-System im Wachzustand bleiben und bereit sein, Pakete mit minimaler Verzögerung zu senden oder zu empfangen.

Deaktivieren der Funktion

Um die Funktion für den Modus mit niedriger Latenz zu deaktivieren, aktualisieren Sie den zugrunde liegenden Code von getFeatureSet() für die AIDL-HAL oder getCapabilities_1_3() für die HIDL-HAL, sodass capabilities & SET_LATENCY_MODE = 0 ist, wobei SET_LATENCY_MODE in der IWifiChip AIDL- oder HIDL-Definition definiert ist . Wenn diese Funktion deaktiviert ist, deaktiviert das Framework den Energiesparmodus nur, wenn der Modus mit geringer Latenz aktiv ist.

Validierung

Um zu testen, ob der Modus mit niedriger Latenz funktioniert, wenn er aktiviert ist, führen Sie die folgenden automatisierten Tests und manuellen Ping-Latenztests aus.

Automatisierte Tests

Führen Sie die folgenden VTS- und CTS-Tests aus:

Manuelles Testen

Erforderliche Testausrüstung und Umgebung

Für manuelle Tests ist die folgende Einrichtung erforderlich:

  • WLAN-Zugangspunkt (AP)
  • Zu testendes Telefon (DUT) und Testcomputer

    • Der Prüfling muss über WLAN mit dem Access Point verbunden sein.
    • Der Testcomputer muss über WLAN oder Ethernet mit dem Access Point verbunden sein.
    • Der Testcomputer muss über USB mit dem Prüfling verbunden sein.
  1. Aktivieren Sie den Modus mit geringer Latenz.

    adb root
    adb shell cmd wifi force-low-latency-mode enabled
    
  2. Stellen Sie sicher, dass Ihr Computer über ADB mit dem Telefon verbunden ist. Pingen Sie das Gateway von der ADB-Shell aus kontinuierlich 3 Stunden lang in 1-Sekunden-Intervallen an.

  3. Speichern Sie die Testausgabe in einer Textdatei und erstellen Sie mithilfe einer Tabellenkalkulation oder eines Python-Skripts ein Histogramm der Ergebnisse des Ping-Latenztests.

  4. Wiederholen Sie die Schritte 1 bis 3 mit deaktiviertem Latenzmodus.

    adb root
    adb shell cmd wifi force-low-latency-mode disabled
    
  5. Vergleichen Sie die Testergebnisse, um sicherzustellen, dass der durchschnittliche Ping-Latenzwert reduziert wird, wenn der Modus mit niedriger Latenz aktiviert ist.

  1. Aktivieren Sie den Modus mit geringer Latenz.

    adb root
    adb shell cmd wifi force-low-latency-mode enabled
    
  2. Pingen Sie über die Befehlszeile des Testcomputers 3 Stunden lang ununterbrochen im Abstand von 1 Sekunde die IP-Adresse des Telefons an.

  3. Speichern Sie die Testausgabe in einer Textdatei und erstellen Sie mithilfe einer Tabellenkalkulation oder eines Python-Skripts ein Histogramm der Ergebnisse des Ping-Latenztests.

  4. Wiederholen Sie die Schritte 1 bis 3 mit deaktiviertem Latenzmodus.

    adb root
    adb shell cmd wifi force-low-latency-mode disabled
    
  5. Vergleichen Sie die Testergebnisse, um sicherzustellen, dass der durchschnittliche Ping-Latenzwert reduziert wird, wenn der Modus mit niedriger Latenz aktiviert ist.

Andere Tests

Wiederholen Sie die oben genannten Tests in verschiedenen Umgebungen. Zum Beispiel zu Hause oder im Büro.