Elastic Network Adapter (ENA) – Fehlerbehebung - Amazon Elastic Compute Cloud

Elastic Network Adapter (ENA) – Fehlerbehebung

Der Elastic Network Adapter (ENA) soll die Integrität des Betriebssystems verbessern und mögliche langfristige Störungen aufgrund von unerwartetem Hardwareverhalten oder Fehlern verringern. In der ENA-Architektur bleiben Geräte- oder Treiberfehler für das System weitestgehend transparent. Dieses Thema enthält Informationen zur Fehlerbehebung für ENA.

Beginnen Sie mit Abschnitt Fehlerbehebung bei Verbindungsproblemen, wenn Sie keine Verbindung mit Ihrer Instance herstellen können.

Wenn Sie eine Verbindung mit Ihrer Instance herstellen können, können Sie mithilfe der Fehlererkennungs- und Wiederherstellungsmechanismen Diagnose-Informationen sammeln. Ausführliche Informationen zu diesen Mechanismen finden Sie in den weiteren Abschnitten dieses Themas.

Fehlerbehebung bei Verbindungsproblemen

Wenn die Verbindung bei der Aktivierung des Enhanced Networking verloren geht, ist das ena-Modul u. U. nicht mit der Kernelversion Ihrer Instance kompatibel. Dies geschieht z .B. dann, wenn Sie das Modul für eine bestimmte Kernelversion (ohne Befehl dkms oder mit einer falsch konfigurierten dkms.conf-Datei) installieren und Ihr Instance-Kernel anschließend aktualisiert wird. Wenn der beim Start geladene Instance-Kernel nicht über ein richtig installiertes ena-Modul verfügt, erkennt Ihre Instance den Netzwerkadapter nicht und Ihre Instance ist nicht erreichbar.

Wenn Sie Enhanced Networking für eine PV-Instance oder ein AMI aktivieren, kann es ebenfalls vorkommen, dass Ihre Instance nicht erreichbar ist.

Wenn Ihre Instance nach dem Aktivieren von Enhanced Networking mit ENA nicht erreichbar ist, können Sie das Attribut enaSupport für Ihre Instance deaktivieren, damit diese wieder den üblichen Netzwerkadapter nutzt.

So deaktivieren Sie Enhanced Networking mit ENA (EBS-gestützte Instances)

  1. Halten Sie die Instance auf Ihrem lokalen Computer an, indem Sie die Amazon EC2-Konsole oder einen der folgenden Befehle verwenden: stop-instances (AWS CLI), Stop-EC2Instance (AWS-Tools für Windows PowerShell). Wenn Ihre Instance von AWS OpsWorks verwaltet wird, sollten Sie die Instance in der AWS OpsWorks-Konsole anhalten, damit der Instance-Status synchron bleibt.

    Wichtig

    Wenn Sie eine Instance Store-Backed Instance verwenden, können Sie die Instance nicht anhalten. Fahren Sie stattdessen mit So deaktivieren Sie Enhanced Networking mit ENA (Instance Store-Backed Instances) fort.

  2. Deaktivieren Sie auf Ihrem lokalen Computer das Enhanced Networking-Attribut mithilfe des folgenden Befehls:

  3. Starten Sie die Instance auf Ihrem lokalen Computer, indem Sie die Amazon EC2-Konsole oder einen der folgenden Befehle verwenden: start-instances (AWS CLI), Start-EC2Instance (AWS-Tools für Windows PowerShell). Wenn Ihre Instance von AWS OpsWorks verwaltet wird, sollten Sie die Instance in der AWS OpsWorks-Konsole starten, damit der Instance-Status synchron bleibt.

  4. (Optional) Stellen Sie eine Verbindung mit Ihrer Instance her und versuchen Sie, das Modul ena erneut mit Ihrer aktuellen Kernelversion zu installieren, indem Sie die entsprechenden Schritte unter Aktivieren von Enhanced Networking-Funktionen mit dem Elastic Network Adapter (ENA) in Linux-Instances ausführen.

So deaktivieren Sie Enhanced Networking mit ENA (Instance Store-Backed Instances)

Wenn es sich bei Ihrer Instance um eine Instance Store-Backed Instance handelt, müssen Sie ein neues AMI wie unter Erstellen eines Instance Store-Backed Linux-AMI beschrieben erstellen. Vergewissern Sie sich, dass Sie das Enhanced Networking-Attribut enaSupport deaktivieren, wenn Sie das AMI registrieren.

  • register-image (AWS CLI)

    $ aws ec2 register-image --no-ena-support ...
  • Register-EC2Image (AWS-Tools für Windows PowerShell)

    C:\> Register-EC2Image -EnaSupport $false ...

Keep-Alive-Mechanismus

Das ENA-Gerät sendet Keep-Alive-Ereignisse in einem bestimmten Zeitintervall (i. d. R. einmal pro Sekunde). Der ENA-Treiber implementiert einen Überwachungsmechanismus, der regelmäßig nach allen Keep-Alive-Nachrichten sucht. Wenn eine oder mehrere Nachrichten vorhanden sind, wird der Überwachungsmechanismus wieder aktiviert. Andernfalls geht der Treiber davon aus, dass ein Gerätefehler vorliegt, und ergreift folgende Maßnahmen:

  • Er legt seine aktuellen Statistiken unter syslog ab.

  • Er setzt das ENA-Gerät zurück.

  • Er setzt den ENA-Treiberstatus zurück.

Der obige Zurücksetzungsvorgang kann kurzzeitig zu einem Traffic-Verlust führen (TCP-Verbindungen können i. d. R. wiederhergestellt werden), der aber keine weiteren Auswirkungen für den Benutzer haben sollte.

Das ENA-Gerät fordert u. U. indirekt eine Gerätezurücksetzung an, indem keine Keep-Alive-Benachrichtigung gesendet wird, z. B. wenn das ENA-Gerät nach dem Laden einer nicht wiederherstellbaren Konfiguration in einen unbekannten Status versetzt wird.

Hier ist ein Beispiel für den Zurücksetzungsvorgang angegeben:

[18509.800135] ena 0000:00:07.0 eth1: Keep alive watchdog timeout. // The watchdog process initiates a reset [18509.815244] ena 0000:00:07.0 eth1: Trigger reset is on [18509.825589] ena 0000:00:07.0 eth1: tx_timeout: 0 // The driver logs the current statistics [18509.834253] ena 0000:00:07.0 eth1: io_suspend: 0 [18509.842674] ena 0000:00:07.0 eth1: io_resume: 0 [18509.850275] ena 0000:00:07.0 eth1: wd_expired: 1 [18509.857855] ena 0000:00:07.0 eth1: interface_up: 1 [18509.865415] ena 0000:00:07.0 eth1: interface_down: 0 [18509.873468] ena 0000:00:07.0 eth1: admin_q_pause: 0 [18509.881075] ena 0000:00:07.0 eth1: queue_0_tx_cnt: 0 [18509.888629] ena 0000:00:07.0 eth1: queue_0_tx_bytes: 0 [18509.895286] ena 0000:00:07.0 eth1: queue_0_tx_queue_stop: 0 ....... ........ [18511.280972] ena 0000:00:07.0 eth1: free uncompleted tx skb qid 3 idx 0x7 // At the end of the down process, the driver discards incomplete packets. [18511.420112] [ENA_COM: ena_com_validate_version] ena device version: 0.10 //The driver begins its up process [18511.420119] [ENA_COM: ena_com_validate_version] ena controller version: 0.0.1 implementation version 1 [18511.420127] [ENA_COM: ena_com_admin_init] ena_defs : Version:[b9692e8] Build date [Wed Apr 6 09:54:21 IDT 2016] [18512.252108] ena 0000:00:07.0: Device watchdog is Enabled [18512.674877] ena 0000:00:07.0: irq 46 for MSI/MSI-X [18512.674933] ena 0000:00:07.0: irq 47 for MSI/MSI-X [18512.674990] ena 0000:00:07.0: irq 48 for MSI/MSI-X [18512.675037] ena 0000:00:07.0: irq 49 for MSI/MSI-X [18512.675085] ena 0000:00:07.0: irq 50 for MSI/MSI-X [18512.675141] ena 0000:00:07.0: irq 51 for MSI/MSI-X [18512.675188] ena 0000:00:07.0: irq 52 for MSI/MSI-X [18512.675233] ena 0000:00:07.0: irq 53 for MSI/MSI-X [18512.675279] ena 0000:00:07.0: irq 54 for MSI/MSI-X [18512.772641] [ENA_COM: ena_com_set_hash_function] Feature 10 isn't supported [18512.772647] [ENA_COM: ena_com_set_hash_ctrl] Feature 18 isn't supported [18512.775945] ena 0000:00:07.0: Device reset completed successfully // The reset process is complete

Timeout für Registerlesevorgänge

Bei der ENA-Architektur kommt es nur zu einer begrenzten Nutzung von im Speicher abgebildeten E/A-Lesevorgängen (MMIO). Der ENA-Treiber greift nur während seines Initialisierungsvorgangs auf MMIO-Register zu.

Wenn die Treiberprotokolle (verfügbar in der dmesg-Ausgabe) Fehler bei Lesevorgängen ausgeben, kann die Ursache ein nicht kompatibler oder falsch kompilierter Treiber, ein ausgelastetes Hardwaregerät oder einen Hardwarefehler sein.

Intermittierende Protokolleinträge, die auf Fehler bei Lesevorgängen hinweisen, stellen i. d. R. kein Problem dar. Der Treiber führt dafür in diesem Fall einen neuen Versuch durch. Eine Reihe von Protokolleinträgen mit Lesefehlern deuten jedoch auf ein Treiber- oder Hardwareproblem hin.

Nachfolgend finden Sie ein Beispiel für einen Treiber-Protokolleintrag, der auf einen Lesevorgangsfehler aufgrund eines Timeouts hindeutet:

[ 47.113698] [ENA_COM: ena_com_reg_bar_read32] reading reg failed for timeout. expected: req id[1] offset[88] actual: req id[57006] offset[0]  [ 47.333715] [ENA_COM: ena_com_reg_bar_read32] reading reg failed for timeout. expected: req id[2] offset[8] actual: req id[57007] offset[0]  [ 47.346221] [ENA_COM: ena_com_dev_reset] Reg read32 timeout occurred

Statistiken

Falls eine unzureichende Netzwerkleistung oder Latenzprobleme auftreten, sollten Sie die Gerätestatistiken aufrufen und überprüfen. Diese Statistiken können Sie mithilfe des Befehls ethtool wie folgt aufrufen:

[ec2-user ~]$ ethtool –S ethN NIC statistics: tx_timeout: 0 io_suspend: 0 io_resume: 0 wd_expired: 0 interface_up: 1 interface_down: 0 admin_q_pause: 0 queue_0_tx_cnt: 4329 queue_0_tx_bytes: 1075749 queue_0_tx_queue_stop: 0 ...

Unten sind die folgenden Befehlsausgabeparameter beschrieben:

tx_timeout: N

Gibt an, wie oft der Netdev-Überwachungsmechanismus aktiviert wurde.

io_suspend: N

Nicht unterstützt. Dieser Wert sollte immer Null sein.

io_resume: N

Nicht unterstützt. Dieser Wert sollte immer Null sein.

wd_expired: N

Gibt an, wie oft der Treiber in den letzten drei Sekunden kein Keep-Alive-Ereignis empfangen hat.

interface_up: N

Gibt an, wie oft die ENA-Schnittstelle aufgerufen wurde.

interface_down: N

Gibt an, wie oft die ENA-Schnittstelle heruntergefahren wurde.

admin_q_pause: N

Die Admin-Warteschlange ist instabil. Dieser Wert sollte immer Null sein.

queue_N_tx_cnt: N

Gibt die Anzahl der übertragenen Pakete für die Warteschlange N an.

queue_N_tx_bytes: N

Gibt die Anzahl von übertragenen Bytes für die Warteschlange N an.

queue_N_tx_queue_stop: N

Gibt an, wie oft die Warteschlange N vollständig gefüllt war und angehalten wurde.

queue_N_tx_queue_wakeup: N

Gibt an, wie oft die Warteschlange N nach dem Anhalten wieder gestartet wurde.

queue_N_tx_dma_mapping_err: N

Fehleranzahl für direkten Speicherzugriff. Wenn dieser Wert nicht 0 ist, weist dies auf einen niedrigen Stand der Systemressourcen hin.

queue_N_tx_napi_comp: N

Gibt an, wie oft der napi-Handler napi_complete für die Warteschlange N aufgerufen hat.

queue_N_tx_poll: N

Gibt an, wie oft der napi-Handler für die Warteschlange N geplant war.

queue_N_tx_doorbells: N

Gibt die Anzahl der Übertragungs-Doorbells für die Warteschlange N an.

queue_N_tx_linearize: N

Gibt an, wie oft die SKB-Linearisierung für die Warteschlange N versucht wurde.

queue_N_tx_linearize_failed: N

Gibt an, wie oft die SKB-Linearisierung für die Warteschlange N fehlgeschlagen ist.

queue_N_tx_prepare_ctx_err: N

Gibt an, wie oft ena_com_prepare_tx für die Warteschlange N fehlgeschlagen ist. Dieser Wert sollte immer 0 sein. Überprüfen Sie die Treiberprotokolle, wenn dies nicht der Fall ist.

queue_N_tx_missing_tx_comp: codeN

Gibt die Anzahl der nicht abgeschlossenen Pakete für die Warteschlange N an. Dieser Wert sollte immer Null sein.

queue_N_tx_bad_req_id: N

Ungültige req_id für Warteschlange N. Die gültige req_id ist 0, minus queue_size und minus 1.

queue_N_rx_cnt: N

Anzahl der empfangenen Pakete für die Warteschlange N.

queue_N_rx_bytes: N

Anzahl der empfangenen Bytes für die Warteschlange N.

queue_N_rx_refil_partial: N

Gibt an, wie oft der Treiber erfolglos versucht hat, den leeren Teil der Warteschlange rx mit den Puffern für die Warteschlange N wieder aufzufüllen. Ist dieser Wert nicht 0, weist dies auf einen niedrigen Stand der Speicherressourcen hin.

queue_N_rx_bad_csum: N

Gibt an, wie oft die Warteschlange rx eine fehlerhafte Prüfsumme für die Warteschlange N ermittelt hat (nur wenn rx-Prüfsummenabladung unterstützt wird).

queue_N_rx_page_alloc_fail: N

Gibt an, wie oft die Seitenzuordnung für die Warteschlange N fehlgeschlagen ist. Ist dieser Wert nicht 0, weist dies auf einen niedrigen Stand der Speicherressourcen hin.

queue_N_rx_skb_alloc_fail: N

Gibt an, wie oft die SKB-Zuordnung für die Warteschlange N fehlgeschlagen ist. Wenn dieser Wert nicht 0 ist, weist dies auf einen niedrigen Stand der Systemressourcen hin.

queue_N_rx_dma_mapping_err: N

Fehleranzahl für direkten Speicherzugriff. Wenn dieser Wert nicht 0 ist, weist dies auf einen niedrigen Stand der Systemressourcen hin.

queue_N_rx_bad_desc_num: N

Zu viele Puffer pro Paket. Wenn dieser Wert nicht 0 ist, weist dies auf die Verwendung von sehr kleinen Puffern hin.

queue_N_rx_small_copy_len_pkt: N

Optimierung: Für Pakete, die kleiner als dieser Grenzwert (per sysfs festgelegt) sind, wird das Paket direkt in den Stack kopiert, um die Zuordnung einer neuen Seite zu verhindern.

ena_admin_q_aborted_cmd: N

Gibt die Anzahl der abgebrochenen Admin-Befehle an. Dies passiert normalerweise während des automatischen Wiederherstellungsverfahrens.

ena_admin_q_submitted_cmd: N

Gibt die Anzahl der Doorbells für die Admin-Warteschlange an.

ena_admin_q_completed_cmd: N

Gibt die Anzahl der Abschlüsse für die Admin-Warteschlange an.

ena_admin_q_out_of_space: N

Gibt an, wie oft der Treiber versucht hat, einen neuen Admin-Befehl zu senden, während die Warteschlange ausgelastet war.

ena_admin_q_no_completion: N

Gibt an, wie oft der Treiber für einen Befehl keinen Admin-Abschluss erhalten hat.

Treiberfehlerprotokolle im syslog

Der ENA-Treiber schreibt während des Systemstarts Protokollnachrichten in das syslog. Wenn Sie entsprechende Probleme feststellen, können Sie diese Protokolle auf Fehler überprüfen. Nachfolgend finden Sie ein Beispiel für Informationen, die vom ENA-Treiber während des Systemstarts im syslog protokolliert wurden, sowie einige Anmerkungen zu ausgewählten Nachrichten.

Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 478.416939] [ENA_COM: ena_com_validate_version] ena device version: 0.10 Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 478.420915] [ENA_COM: ena_com_validate_version] ena controller version: 0.0.1 implementation version 1 Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.256831] ena 0000:00:03.0: Device watchdog is Enabled Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.672947] ena 0000:00:03.0: creating 8 io queues. queue size: 1024 Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.680885] [ENA_COM: ena_com_init_interrupt_moderation] Feature 20 isn't supported // Interrupt moderation is not supported by the device Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.691609] [ENA_COM: ena_com_get_feature_ex] Feature 10 isn't supported // RSS HASH function configuration is not supported by the device Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.694583] [ENA_COM: ena_com_get_feature_ex] Feature 18 isn't supported //RSS HASH input source configuration is not supported by the device Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.697433] [ENA_COM: ena_com_set_host_attributes] Set host attribute isn't supported Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.701064] ena 0000:00:03.0 (unnamed net_device) (uninitialized): Cannot set host attributes Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.704917] ena 0000:00:03.0: Elastic Network Adapter (ENA) found at mem f3000000, mac addr 02:8a:3c:1e:13:b5 Queues 8 Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 480.805037] EXT4-fs (xvda1): re-mounted. Opts: (null) Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 481.025842] NET: Registered protocol family 10

Welche Fehler kann ich ignorieren?

Folgende Warnungen, die u. U. in den Fehlerprotokollen Ihres Systems auftauchen, können für den Elastic Network Adapter ignoriert werden:

Set host attribute isn't supported

Host-Attribute werden für dieses Gerät nicht unterstützt.

failed to alloc buffer for rx queue

Dies ist ein umkehrbarer Fehler, der darauf hinweist, dass beim Auslösen des Fehlers eine starke Speicherbelastung vorgelegen hat.

Feature X isn't supported

Die angegebene Funktion wird vom Elastic Network Adapter nicht unterstützt. Mögliche Werte für X sind:

  • 10: Konfiguration der RSS Hash-Funktion wird für dieses Gerät nicht unterstützt.

  • 12: Konfiguration der RSS Indirection-Tabelle wird für dieses Gerät nicht unterstützt.

  • 18: RSS Hash Input-Konfiguration wird für dieses Gerät nicht unterstützt.

  • 20: Interrupt Moderation wird für dieses Gerät nicht unterstützt.

  • 27: Der Elastic Network Adapter-Treiber unterstützt keine Abfrage der Ethernet-Kapazitäten von snmpd.

Failed to config AENQ

Der Elastic Network Adapter unterstützt keine AENQ-Konfiguration.

Trying to set unsupported AENQ events

Dieser Fehler weist darauf hin, dass versucht wurde, eine AENQ-Ereignisgruppe festzulegen, die vom Elastic Network Adapter nicht unterstützt wird.