
Ubuntu Intel NUCでイーサネットリンクがダウンして再び表示される問題を発見しました。これは、NICが4秒間オフになってから12秒間オンになってから4秒間オフになる通常モードです。
これ可能物理的な損傷がある可能性がありますが、ネットワークカードが一体型なので交換できません。明らかに高価な部品を交換する前にこれを確認したいと思います。
カーネルモジュールを削除して再挿入すると、kern.logに次の出力が表示されます。これは最後の数行を除いて正常な現象です。
kernel: [ 1299.003606] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
kernel: [ 1299.003608] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
kernel: [ 1299.004140] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
kernel: [ 1299.216578] e1000e 0000:00:1f.6 0000:00:1f.6 (uninitialized): registered PHC clock
kernel: [ 1299.288105] e1000e 0000:00:1f.6 eth0: (PCI Express:2.5GT/s:Width x1) 94:c6:91:a7:78:3f
kernel: [ 1299.288112] e1000e 0000:00:1f.6 eth0: Intel(R) PRO/1000 Network Connection
kernel: [ 1299.288256] e1000e 0000:00:1f.6 eth0: MAC: 13, PHY: 12, PBA No: FFFFFF-0FF
kernel: [ 1299.293482] e1000e 0000:00:1f.6 eno1: renamed from eth0
kernel: [ 1304.424541] e1000e 0000:00:1f.6 eno1: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
kernel: [ 1304.424696] IPv6: ADDRCONF(NETDEV_CHANGE): eno1: link becomes ready
kernel: [ 1325.609674] e1000e 0000:00:1f.6 eno1: NIC Link is Down
kernel: [ 1330.702483] e1000e 0000:00:1f.6 eno1: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
私が試したこと:
- ケーブルの交換
- 接続されたハブのポートを変更しました。 (同じハブの他のコンピュータに問題はありませんでした。)
- BIOSアップデート
- 前のカーネルに戻る
- デバッグパラメータを使用してモジュールをロードしてみてください。
モジュール情報を見ると、$ modinfo e1000e
出力にデバッグパラメータを表示できます。
parm: debug:Debug level (0=none,...,16=all) (int)
ただし、たとえばmodprobeまたはinsmodを実行します。$ sudo modprobe e1000e debug=16
kern.log には追加情報は生成されません。これは私が期待するものです。
次はどこに行くのか分からない。誰かがモジュールからデバッグ情報を取得できない理由を教えてもらえれば、良いスタートになり、追加情報も大いに感謝します。
答え1
新しいカーネルをインストールしましたが、良いニュースはそうする必要はありません。デバッグ情報を取得する方法についていくつかの矛盾する情報がありますが、その秘密は動的デバッグを正しく設定することです。
まず、e1000eの各デバッグメッセージをカーネルdebugFSにダンプします。
echo "module e1000e +flmpt" > /sys/kernel/debug/dynamic_debug/control
モジュールがロードされた後にこれを行う必要があることがわかりました。 /sys/kernel/debug/dynamic_debug/control を使用して、このコマンドに基づいて変更される方法を確認できます。バラよりhttps://www.kernel.org/doc/html/v4.11/admin-guide/dynamic-debug-howto.htmlより多くの情報を知りたい場合
この方法でカーネルロギングを有効にすることもできますが、上記の
echo 8 > /proc/sys/kernel/printk
動的デバッグ制御設定を変更するまで、この機能は機能しないようです。この方法は、モジュールがロードされたときに情報も提供すると考えられますが、まだ見ていません。
これにより、2 つのデバッグ情報セットが生成されます。 kern.logには現在多くのデバッグ情報があり、両方cat /proc/kmsg
とも同じ情報を表示しているようです。
答え2
本当にカーネルコードをデバッグしたい場合は、
ディストリビューションでカーネルをコンパイルする方法、または少なくともディストリビューションで特定のモジュールをコンパイルする方法を学びます。
モジュールのソースコードを読んでください(デバッグ機能がどのように機能するかを教えてください)。
必要に応じて((2)を実行した後にわかります)、コンパイル時にカーネル設定を変更してデバッグを有効にします。
$ sudo modprobe e1000e debug=16
kern.log には追加情報は生成されません。これは私が期待するものです。
潜在的なトラップ:実際に試す前に古いモジュールを削除しましたか?削除されました。つまり、自動的に再ロードされませんか?
NICは4秒間オフになり、12秒間回復した後、4秒間再びオフになりました。
推測:ファームウェア(またはハードウェア)に問題があり、ファームウェアがプライベートソースであり、ハードウェア仕様がないため、デバッグできません。
答え3
試してみるには2つあります。
カーネルパラメータとして追加して
pcie_aspm=off
PCIEを無効にするTSO、GSO、およびGROを無効にするには、一緒に使用します
ethtool -K eth0 gso off gro off tso off
(詳細については、以下を参照してください)。このバグレポート)。
どちらも以前のスレッドから取得されていますが、まだ有効である可能性があります。