NIC 自發在 100 和 1000 Mbit 之間切換
我的雙 NIC MSI 主機板最近開始在 100 到 1,000 Mbit 之間跳躍,導致長達幾秒鐘的連接失去,這在這些在家工作的影片會議期間至關重要。該問題在系統執行 Fedora Linux 時存在,但在啟動 Windows 10 時會消失。嘗試了多個電纜、交換機甚至其他 NIC 均無濟於事。
這似乎取決於負載。
嘗試 r8169 適配器時的日誌輸出。結果相同,但在使用板載 NIC 時措辭略有不同。
[ 192.520815] r8169 0000:05:00.0 enp5s0: Link is Up - 100Mbps/Full - flow control off [ 229.044928] r8169 0000:05:00.0 enp5s0: Link is Down [ 232.641128] r8169 0000:05:00.0 enp5s0: Link is Up - 1Gbps/Full - flow control off [ 309.081390] r8169 0000:05:00.0 enp5s0: Link is Down [ 312.684481] r8169 0000:05:00.0 enp5s0: Link is Up - 100Mbps/Full - flow control off [ 449.145256] r8169 0000:05:00.0 enp5s0: Link is Down [ 452.927153] r8169 0000:05:00.0 enp5s0: Link is Up - 1Gbps/Full - flow control off [ 539.187973] r8169 0000:05:00.0 enp5s0: Link is Down
- 作業系統:Fedora 32
- 平台:X86_64
- 主機板:MSI Mag Z390 Tomahawk
- 嘗試的板載網卡:Intel I219-V(igb 驅動程序)、Intel I211(e2000e 驅動程序)
- 嘗試的備用網卡:英特爾 CT 桌面適配器(e2002 驅動程序)、LogiLink PC0029A(r8169 驅動程序)
- 嘗試過的開關:EdgeSwitch 24、HP ProCurve
- 嘗試過的電纜:各種 CAT5 到 CAT6 電纜
目標:擁有一個不會在 100 Mbit 和 1,000 Mbit 之間自發切換的 Linux 系統,因此像 Teams 和 Slack 這樣的應用程序不會因為失去的連接而崩潰。
在給我的同事找了很多藉口之後,我測試了一堆硬體(包括一堆最近購買的,但有點便宜的 Realtek NIC),查看了 MB 的日誌文件並閱讀了核心參數,我找到了罪魁禍首。
確定這可能與軟體有關,我以單使用者模式啟動系統並從 Ookla執行命令行版本的**speedtest 。**它反映了我的 ISP 宣傳的頻寬——大約 500/500Mbit。它從未回落到 100 Mbit。
再次以多使用者模式啟動,問題又回來了。單獨放置幾分鐘後,NIC 將回落到 100 Mbit。再次執行 speedtest 時,NIC 會在測試大約 2-5 秒後將鏈路重新協商到 1,000 Mbit。測試完成後大約一分鐘,NIC 恢復到 100 Mbit。
在systemctl stop的幫助下,我開始一一檢查系統上執行的守護程序。最後我發現了隱藏在我係統中的 gremlin:tuned
當我停止調整時,問題已解決。經過仔細檢查,似乎我在某些時候啟用了調整中的最大省電選項:
$ tuned-adm --debug active Current active profile: powersave
我想將其設置為不那麼激進的東西也可以解決問題,但現在我完全關閉了它:
$ tuned-adm off
作為一個實際的例子,考慮一個典型的辦公室工作站。大多數時候,乙太網網路介面非常不活躍。每隔一段時間只有幾封電子郵件進出,或者可能會載入一些網頁。對於這些類型的負載,網路介面不必像預設情況下那樣一直全速執行。Tuned 有一個用於網路設備的監控和調整外掛,可以檢測到這種低活動,然後自動降低該介面的速度,通常會降低功耗。如果界面上的活動在較長時間內增加,例如因為正在下載 DVD 圖像或打開帶有大附件的電子郵件,tuned 會檢測到這一點並將界面速度設置為最大在活動水平如此之高時提供最佳性能。這個原理也適用於CPU和硬碟的其他外掛。
學習:
- 當我啟用這樣的東西時,我真的應該記住它。
- 當守護程序像這樣調整硬體時,多一點(多於沒有)冗長會很可愛。
- 在跑到五金店之前,我應該進行更多測試。
- 這並不總是核心的錯;-)