Linux

有沒有辦法從“Detected Tx Unit Hang”網路錯誤中恢復?

  • October 19, 2021

從掛起喚醒後,我的 Ubuntu 21.04 系統出現了網路問題。我猜大約 50% 的 IP 套接字失敗了。這包括ssh和的失敗ping。“失敗”是指連接嘗試阻塞,然後最終超時。(旁白:也許ping不使用套接字?)我相信所有嘗試網路訪問的程序都遇到了相同的失敗率。

幾個星期以來,我每晚都在暫停系統。今天是我複工後第一次遇到問題。

我重新啟動了系統,這似乎已經解決了問題(至少在它再次發生之前)。

重新啟動後,我在syslog.

我在每次掛起時看到以下兩行:

Sep  4 09:00:18 hostname kernel: [896165.908582] igc 0000:b0:00.0: no suspend buffer for PTM
Sep  4 09:00:18 hostname kernel: [896165.908589] igc 0000:af:00.0: no suspend buffer for PTM

(旁白:雖然上述行指的是掛起之前發生的事件,但我相信日誌條目是在系統恢復後才創建的。因此,這些事件實際上發生在指定時間之前的幾個小時。)

每份簡歷上都有兩條相同的行:

Sep  4 09:00:18 hostname kernel: [896166.257107] igc 0000:af:00.0: no suspend buffer for PTM
Sep  4 09:00:18 hostname kernel: [896166.257177] igc 0000:b0:00.0: no suspend buffer for PTM

(旁白:可能是因為系統有兩個內置網卡,所以有兩條線?)

以下是僅在我最近的簡歷中出現的日誌條目,也就是網路問題開始的時候:

Sep  4 09:00:19 hostname kernel: [896168.214463] igc 0000:b0:00.0 enp176s0: Register Dump
Sep  4 09:00:19 hostname kernel: [896168.214467] igc 0000:b0:00.0 enp176s0: Register Name   Value
Sep  4 09:00:19 hostname kernel: [896168.214478] igc 0000:b0:00.0 enp176s0: CTRL            081c0641
Sep  4 09:00:19 hostname kernel: [896168.214481] igc 0000:b0:00.0 enp176s0: STATUS          40380401
Sep  4 09:00:19 hostname kernel: [896168.214483] igc 0000:b0:00.0 enp176s0: CTRL_EXT        10000040
Sep  4 09:00:19 hostname kernel: [896168.214486] igc 0000:b0:00.0 enp176s0: MDIC            18017949
Sep  4 09:00:19 hostname kernel: [896168.214488] igc 0000:b0:00.0 enp176s0: ICR             00000001
Sep  4 09:00:19 hostname kernel: [896168.214490] igc 0000:b0:00.0 enp176s0: RCTL            04408022
Sep  4 09:00:19 hostname kernel: [896168.214497] igc 0000:b0:00.0 enp176s0: RDLEN[0-3]      00001000 00001000 00001000 00001000
Sep  4 09:00:19 hostname kernel: [896168.214504] igc 0000:b0:00.0 enp176s0: RDH[0-3]        00000000 00000000 00000000 00000000
Sep  4 09:00:19 hostname kernel: [896168.214511] igc 0000:b0:00.0 enp176s0: RDT[0-3]        000000ff 000000ff 000000ff 000000ff
Sep  4 09:00:19 hostname kernel: [896168.214518] igc 0000:b0:00.0 enp176s0: RXDCTL[0-3]     02040808 02040808 02040808 02040808
Sep  4 09:00:19 hostname kernel: [896168.214525] igc 0000:b0:00.0 enp176s0: RDBAL[0-3]      2e35d000 51576000 337b2000 29a5b000
Sep  4 09:00:19 hostname kernel: [896168.214532] igc 0000:b0:00.0 enp176s0: RDBAH[0-3]      00000001 00000001 00000002 00000001
Sep  4 09:00:19 hostname kernel: [896168.214534] igc 0000:b0:00.0 enp176s0: TCTL            a50400fa
Sep  4 09:00:19 hostname kernel: [896168.214541] igc 0000:b0:00.0 enp176s0: TDBAL[0-3]      2e35d000 51576000 337b2000 29a5b000
Sep  4 09:00:19 hostname kernel: [896168.214548] igc 0000:b0:00.0 enp176s0: TDBAH[0-3]      00000001 00000002 00000001 00000001
Sep  4 09:00:19 hostname kernel: [896168.214555] igc 0000:b0:00.0 enp176s0: TDLEN[0-3]      00001000 00001000 00001000 00001000
Sep  4 09:00:19 hostname kernel: [896168.214562] igc 0000:b0:00.0 enp176s0: TDH[0-3]        00000007 00000009 00000004 00000000
Sep  4 09:00:19 hostname kernel: [896168.214568] igc 0000:b0:00.0 enp176s0: TDT[0-3]        0000000d 00000011 00000004 00000001
Sep  4 09:00:19 hostname kernel: [896168.214575] igc 0000:b0:00.0 enp176s0: TXDCTL[0-3]     02100108 02100108 02100108 02100108
Sep  4 09:00:19 hostname kernel: [896168.214576] igc 0000:b0:00.0 enp176s0: Reset adapter

然後有很多(超過 19,000 個)條目,如下所示:

Sep  4 09:01:22 hostname kernel: [896231.189109] igc 0000:b0:00.0 enp176s0: Detected Tx Unit Hang
Sep  4 09:01:22 hostname kernel: [896231.189109]   Tx Queue             <1>
Sep  4 09:01:22 hostname kernel: [896231.189109]   TDH                  <9>
Sep  4 09:01:22 hostname kernel: [896231.189109]   TDT                  <9>
Sep  4 09:01:22 hostname kernel: [896231.189109]   next_to_use          <9>
Sep  4 09:01:22 hostname kernel: [896231.189109]   next_to_clean        <9>
Sep  4 09:01:22 hostname kernel: [896231.189109] buffer_info[next_to_clean]
Sep  4 09:01:22 hostname kernel: [896231.189109]   time_stamp           <10d596f4c>
Sep  4 09:01:22 hostname kernel: [896231.189109]   next_to_watch        <000000002b25478e>
Sep  4 09:01:22 hostname kernel: [896231.189109]   jiffies              <10d59ad90>
Sep  4 09:01:22 hostname kernel: [896231.189109]   desc.status          <0>

我的問題是,除了完全重新啟動系統之外,還有什麼方法可以從命令行手動重置/重新啟動網路介面?

該系統是一個桌面工作站,所以我可以使用鍵盤。

重新啟動後,我意識到也許我應該嘗試重新掛起並重新喚醒系統。但我只是在完全重啟後才想到這一點。

我從睡眠中醒來後再次遇到網路錯誤。這一次,我沒有重新啟動,而是嘗試了以下(相當明顯)的解決方案:

sudo  ifconfig  enp176s0  down
sudo  systemctl  stop   systemd-networkd
sudo  systemctl  start  systemd-networkd

我的網路又開始工作了!

如果遇到問題:

替換enp176s0為您的網路介面的名稱。

您的網路管理員可能不是systemd-networkd.

如果您使用圖形桌面環境,那麼您可以通過桌面工具欄上的菜單簡單地禁用然後重新啟用網路,而不是上述環境。

引用自:https://unix.stackexchange.com/questions/667685