彈性網路轉接器 (ENA) 故障診斷 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

彈性網路轉接器 (ENA) 故障診斷

彈性網路轉接器 (ENA) 設計旨在提高作業系統運作狀態,並減少由於預料之外硬體行為及/或故障而導致長期中斷之可能性。ENA 架構盡可能使裝置或驅動程式的故障對系統保持透明。本主題提供 ENA 的故障診斷資訊。

如果您無法連線至您的執行個體,請由 疑難排解連線問題 章節開始。

如果您在遷移到第六代執行個體類型後遇到效能降低的情況,請參閱將 EC2 執行個體遷移到第六代執行個體之前,我需要執行哪些動作,以確保獲得最大的網路效能? 在 AWS 知識中心。

如果您能夠連線至您的執行個體,則可以使用本主題後面章節中說明的故障診斷和復原機制來收集診斷資訊。

疑難排解連線問題

如果您在啟用增強聯網時失去連線,則 ena 模組可能與您的執行個體目前執行之核心不相容。如果您為特定核心版本 (不含 dkms 或具有設定不正確的 dkms.conf 檔案) 安裝模組並更新執行個體核心,則可能會發生此情況。如果在開機階段載入的執行個體核心沒有正確安裝 ena 模組,則您的執行個體將無法識別網路轉接器,且將無法連接到您的執行個體。

如果您為 PV 執行個體或 AMI 啟用增強聯網,也可能導致無法連接到您的執行個體。

如果您的執行個體在啟用增強聯網與 ENA 後即無法連接,您可以為您的執行個體停用 enaSupport 屬性,以將其回復到原始網路轉接器。

停用增強聯網與 ENA (EBS 後端執行個體)
  1. 在本機電腦上,使用 Amazon EC2 主控台或下列其中一個命令停止執行個體:停止執行個體 (AWS CLI)、Stop-EC2Instance(AWS Tools for Windows PowerShell)。如果您的執行個體由管理 AWS OpsWorks,您應該在 AWS OpsWorks 主控台中停止執行個體,讓執行個體狀態保持同步。

    重要

    如果您使用執行個體後端執行個體,則無法停止該執行個體。請改為繼續執行 停用增強聯網與 ENA (執行個體後端執行個體)

  2. 在本機電腦上使用下列命令停用增強聯網屬性。

  3. 從您的本機電腦,使用 Amazon EC2 主控台或下列其中一個命令啟動執行個體:啟動執行個體 (AWS CLI)、Start-EC2Instance(AWS Tools for Windows PowerShell)。如果您的執行個體由管理 AWS OpsWorks,您應該在 AWS OpsWorks 主控台中啟動執行個體,讓執行個體狀態保持同步。

  4. (選用) 請連線到您的執行個體,並嘗試遵循 ena 中的步驟使用目前核心版本來重新安裝 在 Linux 執行個體上使用彈性網路轉接器 (ENA) 以啟用增強型網路 模組。

停用增強聯網與 ENA (執行個體後端執行個體)

如果您的執行個體為執行個體後端執行個體,請建立新的 AMI,如 建立執行個體存放區後端 Linux AMI 中所述。請確保在註冊 AMI 時停用增強聯網 enaSupport 屬性。

  • register-image (AWS CLI)

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

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

保持有效機制

ENA 裝置以固定速率張貼保持有效事件 (通常每秒一次)。ENA 驅動程式實作監視程式機制,該機制會檢查這些保持有效訊息的存在。如果有訊息存在,監視程式會重新啟動,否則驅動程式會認為裝置出現故障並執行下列作業:

  • 傾印目前統計資料至 syslog

  • 重設 ENA 裝置

  • 重設 ENA 驅動程式狀態

上述重設程序可能會在短時間內導致一些流量遺失 (TCP 連線應該能夠復原),但不應影響使用者。

ENA 裝置也可以透過不傳送保持有效通知來間接請求裝置重設程序,例如,如果 ENA 裝置在載入無法恢復的組態之後成為未知狀態。

以下是重設程序的範例:

[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

註冊讀取逾時

ENA 架構暗示記憶體映射之 I/O (MMIO) 讀取操作的限量使用。ENA 裝置驅動程式僅在其初始化程序中存取 MMIO 註冊。

如果驅動程式日誌 (在 dmesg 輸出中可用) 指出讀取操作失敗,則可能是由不相容或編譯錯誤的驅動程式、忙碌的硬體裝置或硬體故障引起的。

表示讀取操作失敗的間歇日誌項目不應視為問題;驅動程式會在此情況下將其重試。但是,包含讀取失敗的一系列日誌項目則會指出驅動程式或硬體問題。

以下是驅動程序日誌項目的範例,指出由於逾時而導致的讀取操作失敗:

[ 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

統計資料

如果您遇到網路效能不足或延遲問題,則應擷取並檢查裝置統計資料。您可以使用 ethtool 來獲得這些統計資料,如下所示。

[ec2-user ~]$ ethtool -S ethN NIC statistics: tx_timeout: 0 suspend: 0 resume: 0 wd_expired: 0 interface_up: 1 interface_down: 0 admin_q_pause: 0 bw_in_allowance_exceeded: 0 bw_out_allowance_exceeded: 0 pps_allowance_exceeded: 0 conntrack_allowance_available: 450878 conntrack_allowance_exceeded: 0 linklocal_allowance_exceeded: 0 queue_0_tx_cnt: 4329 queue_0_tx_bytes: 1075749 queue_0_tx_queue_stop: 0 ...

以下說明下列命令輸出參數:

tx_timeoutN

Netdev 監視程式啟用的次數。

suspendN

驅動程式執行暫停操作的次數。

resumeN

驅動程式執行繼續操作的次數。

wd_expiredN

驅動程式在前 3 秒內未收到保持有效事件的次數。

interface_upN

ENA 介面出現的次數。

interface_downN

ENA 介面關閉的次數。

admin_q_pauseN

在執行中狀態下找不到管理員佇列的次數。

bw_in_allowance_exceededN

因傳入的彙總頻寬超過執行個體的上限而排入佇列或丟棄的封包數目。

bw_out_allowance_exceededN

因傳出的彙總頻寬超過執行個體的上限而排入佇列或丟棄的封包數目。

pps_allowance_exceededN

因雙向 PPS 超過執行個體的上限而排入佇列或丟棄的封包數目。

conntrack_allowance_availableN

在達到該執行個體類型的追蹤連線限額之前,執行個體可建立的追蹤連線數目。僅適用於 Nitro 型執行個體。不支援 FreeBSD 執行個體或 DPDK 環境。

conntrack_allowance_exceededN

因為連線追蹤超過執行個體的上限且無法建立新的連線,而丟棄的封包數目。這可能會導致傳送或傳回執行個體流量的封包遺失。

linklocal_allowance_exceededN

由於本機代理伺服器服務的流量 PPS 超過網路介面上限而丟棄的封包數目。這會影響 DNS 服務、執行個體中繼資料服務和 Amazon Time Sync Service 的流量。

queue_N_tx_cntN

此佇列的已傳輸封包數目。

queue_N_tx_bytesN

此佇列的已傳輸位元組數目。

queue_N_tx_queue_stopN

佇列 N 已滿並停止的次數。

queue_N_tx_queue_wakeupN

佇列 N 在停止後恢復的次數。

queue_N_tx_dma_mapping_errN

直接記憶體存取錯誤計數。如果此值為 0,則指出系統資源不足。

queue_N_tx_linearizeN

此佇列的 SKB 線性化嘗試次數。

queue_N_tx_linearize_failedN

此佇列的 SKB 線性化失敗次數。

queue_N_tx_napi_compN

napi 處理常式為此佇列呼叫 napi_complete 的次數。

queue_N_tx_tx_pollN

napi 處理常式為此佇列排程的次數。

queue_N_tx_doorbellsN

此佇列的傳輸門鈴數目。

queue_N_tx_prepare_ctx_errN

此佇列的 ena_com_prepare_tx 失敗次數。

queue_N_tx_bad_req_idN

此佇列的無效 req_id。有效的 req_id 為零,減去 queue_size,減去 1。

queue_N_tx_llq_buffer_copyN

其標頭大小大於此佇列 llq 項目的封包數目。

queue_N_tx_missed_txN

此佇列未完成的封包數目。

queue_N_tx_unmask_interruptN

此佇列 tx 中斷取消遮罩的次數。

queue_N_rx_cntN

此佇列接收的封包數目。

queue_N_rx_bytesN

此佇列接收的位元組數目。

queue_N_rx_rx_copybreak_pktN

此佇列的 rx 佇列接收到小於 rx_copybreak 封包大小之封包的次數。

queue_N_rx_csum_goodN

此佇列的 rx 佇列接收到檢查總和已檢查且正確之封包的次數。

queue_N_rx_refil_partialN

驅動程式未成功以此佇列緩衝區重新填滿 rx 佇列之空白部分的次數。如果值不為 0,則指出記憶體資源不足。

queue_N_rx_bad_csumN

rx 佇列對此佇列有不良檢查總和的次數 (僅當支援 rx 檢查總和卸載時)。

queue_N_rx_page_alloc_failN

此佇列頁面配置失敗的次數。如果值不為 0,則指出記憶體資源不足。

queue_N_rx_skb_alloc_failN

此佇列 SKB 配置失敗的次數。如果值不為 0,則指出系統資源不足。

queue_N_rx_dma_mapping_errN

直接記憶體存取錯誤計數。如果此值為 0,則指出系統資源不足。

queue_N_rx_bad_desc_numN

每個封包的緩衝區過多。如果值不為 0,則表示使用非常小的緩衝區。

queue_N_rx_bad_req_idN

此佇列的 req_id 無效。有效的 req_id 是從 [0, queue_size - 1 ] 開始。

queue_N_rx_empty_rx_ringN

此佇列的 rx 佇列為空白的次數。

queue_N_rx_csum_uncheckedN

此佇列的 rx 佇列接收到檢查總和尚未檢查之封包的次數。

queue_N_rx_xdp_abortedN

XDP 封包歸類為 XDP_ABORT 的次數。

queue_N_rx_xdp_dropN

XDP 封包歸類為 XDP_DROP 的次數。

queue_N_rx_xdp_passN

XDP 封包歸類為 XDP_PASS 的次數。

queue_N_rx_xdp_txN

XDP 封包歸類為 XDP_TX 的次數。

queue_N_rx_xdp_invalidN

封包的 XDP 傳回碼無效的次數。

queue_N_rx_xdp_redirectN

XDP 封包歸類為 XDP_REDIRECT 的次數。

queue_N_xdp_tx_cntN

此佇列的已傳輸封包數目。

queue_N_xdp_tx_bytesN

此佇列的已傳輸位元組數目。

queue_N_xdp_tx_queue_stopN

此佇列已滿並停止的次數。

queue_N_xdp_tx_queue_wakeupN

此佇列在停止後恢復的次數。

queue_N_xdp_tx_dma_mapping_errN

直接記憶體存取錯誤計數。如果此值為 0,則指出系統資源不足。

queue_N_xdp_tx_linearizeN

此佇列的 XDP 緩衝區線性化嘗試次數。

queue_N_xdp_tx_linearize_failedN

此佇列的 XDP 緩衝區線性化失敗次數。

queue_N_xdp_tx_napi_compN

napi 處理常式為此佇列呼叫 napi_complete 的次數。

queue_N_xdp_tx_tx_pollN

napi 處理常式為此佇列排程的次數。

queue_N_xdp_tx_doorbellsN

此佇列的傳輸門鈴數目。

queue_N_xdp_tx_prepare_ctx_errN

此佇列的 ena_com_prepare_tx 失敗次數。此值應始終為 0;如不是,請查看驅動程式日誌。

queue_N_xdp_tx_bad_req_idN

此佇列的 req_id 無效。有效的 req_id 是從 [0, queue_size - 1 ] 開始。

queue_N_xdp_tx_llq_buffer_copyN

此佇列使用 llq 緩衝區複本複製其標頭的封包數目。

queue_N_xdp_tx_missed_txN

tx 佇列項目錯過此佇列完成逾時的次數。

queue_N_xdp_tx_unmask_interruptN

此佇列 tx 中斷取消遮罩的次數。

ena_admin_q_aborted_cmdN

管理命令中止次數。此情況通常發生在自動復原程序中。

ena_admin_q_submitted_cmdN

管理佇列門鈴數目。

ena_admin_q_completed_cmdN

管理佇列完成數目。

ena_admin_q_out_of_spaceN

驅動程式嘗試提交新管理命令但佇列已滿的次數。

ena_admin_q_no_completionN

驅動程式未取得命令的管理完成之次數。

syslog 中的驅動程式錯誤日誌

在系統開機期間,ENA 驅動程式會將日誌訊息寫入至 syslog。如果您遇到問題,可以檢查這些日誌以尋找錯誤。以下是系統開機時,ENA 驅動程式在 syslog 中記錄的資訊,以及選取訊息的一些註釋範例。

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
我可以忽略哪些錯誤?

彈性網路轉接器可以忽略下列可能出現在系統錯誤日誌中的警告:

Set host attribute isn't supported

此裝置不支援主機屬性。

failed to alloc buffer for rx queue

此為可復原的錯誤,指出在錯誤拋出時可能存在記憶體壓力問題。

Feature X isn't supported

參考的功能不受彈性網路轉接器支援。X 可能的值包括:

  • 10:此裝置不支援 RSS 雜湊功能組態。

  • 12:此裝置不支援 RSS 間接資料表組態。

  • 18:此裝置不支援 RSS 雜湊輸入組態。

  • 20:此裝置不支援中斷管制。

  • 27:彈性網路轉接器驅動程式不支援從 snmpd 中輪詢乙太網路功能。

Failed to config AENQ

彈性網路轉接器不支援 AENQ 組態。

Trying to set unsupported AENQ events

此錯誤指出嘗試設定彈性網路轉接器不支援的 AENQ 事件群組。

非最佳化組態通知

ENA 裝置會偵測驅動程式中您可以變更的非最佳化組態設定。裝置會通知 ENA 驅動程式,並將警告記錄到主控台。下列範例顯示警告訊息的格式。

Sub-optimal configuration notification code: 1. Refer to AWS ENA documentation for additional details and mitigation options.

下列清單顯示通知程式碼詳細資訊,以及非最佳化組態調查結果的建議動作。

  • 程式碼 1:不建議使用帶寬 LLQ 組態的 ENA Express

    ENA Express ENI 設定有寬 LLQ。此組態不是最佳化的,可能會影響 ENA Express 的效能。我們建議您在使用 ENA Express ENI 時停用寬 LLQ 設定,如下所示。

    sudo rmmod ena && sudo modprobe ena force_large_llq_header=0

    如需 ENA Express 最佳化組態的詳細資訊,請參閱 在 Linux 執行個體上使用 ENA Express 改善網路效能

  • 代碼 2:不建議使用具有次佳 Tx 佇列深度的 ENA Express ENI

    設定 ENA Express ENI 為具有次佳 Tx 佇列深度。此組態可能會影響 ENA Express 的效能。使用 ENA Express ENI 時,建議您將所有 Tx 佇列擴大至網路介面的最大值,如下所示。

    取得 Tx 佇列最大深度的方法如下:

    ethtool -g interface

    將 Tx 佇列擴大至最大深度的方法如下:

    ethtool -G interface tx depth

    如需 ENA Express 最佳化組態的詳細資訊,請參閱 在 Linux 執行個體上使用 ENA Express 改善網路效能