LMDE の NIC ドライバーを Kernel 内蔵の r6189 ドライバーから手動でインストールする r8168-dkms ドライバーに差し替えてみました。
きっかけ
こちらの記事で r8169 ドライバーが non-free であるためカーネルドライバーから外される?と思い、「そう言えば r8168-dkms というドライバーもあったよね」というのがきっかけです。
GNU Linux-libre 6.12-gnu Continues Dealing With More Blobs In The Kernel
これまでは
実は以前にも r8168-dkms ドライバーを試したことがあったのですが、自分でもスッカリ忘れていました。
Linux Mint で r8168-dkms ドライバーを試してみた
その後はしばらく r8169 ドライバーを使っていて、いつの間にかサスペンドからの復帰で困るケースがなくなっていたのでした。
Ubuntu ベースの Linux Mint から Debian ベースのLMDE に移行したり、TCP/IP の設定をチューニングしたり、Linux Kernel をカスタムビルドするようになったり、という点が以前と違っていますが、もしかすると Linux Kernel のバージョンが上がったことで解消したのかもしれません。
【LMDE】TCP/IP 通信のパフォーマンスをチューニングしてみた
まずは準備
Linux Kernel は 6.11 を使っています。そして r8169 ドライバーを使っています。
$ lsmod | grep -i r81 r8169 139264 0 mdio_devres 12288 1 r8169 libphy 241664 3 r8169,mdio_devres,realtek
NIC は Realtek の RTL8118 というチップです。
$ lspci | grep -i ethe 03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 16)
続いて、LMDE で利用可能な r8168-dkms ドライバーのバージョンを確認してみます。
通常のリポジトリでは 8.051 というバージョンで、不安定リポジトリでは 8.054 というバージョンが利用可能なようです。
8.054 は Linux Kernel 6.11 でテストされているようです。
パッケージ: r8168-dkms (8.054.00-1)
8.051 は「変更履歴」というページに進むと、どうやら Linux Kernel 6.1 までの対応のようです。
パッケージ: r8168-dkms (8.051.02-2)
そうすると、Linux Kernel 6.11 でテストされている 8.054 をインストールする必要がありそうです。
やってみた
では、testing リポジトリから r8168-dkms 8.054 をインストールしてみましょう。
$ apt install -t testing r8168-dkms パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています... 完了 状態情報を読み取っています... 完了 以下の追加パッケージがインストールされます: dkms 提案パッケージ: menu 以下のパッケージが新たにインストールされます: r8168-dkms 以下のパッケージはアップグレードされます: dkms アップグレード: 1 個、新規インストール: 1 個、削除: 0 個、保留: 1828 個。 173 kB のアーカイブを取得する必要があります。 この操作後に追加で 1,559 kB のディスク容量が消費されます。 続行しますか? [Y/n] 取得:1 http://ftp.riken.jp/Linux/debian/debian testing/main amd64 dkms all 3.0.13-1 [53.8 kB] 取得:2 http://ftp.riken.jp/Linux/debian/debian testing/non-free amd64 r8168-dkms all 8.054.00-1 [119 kB] 173 kB を 0秒 で取得しました (1,010 kB/s) (データベースを読み込んでいます ... 現在 636714 個のファイルとディレクトリがインストールされています 。) .../archives/dkms_3.0.13-1_all.deb を展開する準備をしています ... dkms (3.0.13-1) で (3.0.10-8+deb12u1 に) 上書き展開しています ... 以前に未選択のパッケージ r8168-dkms を選択しています。 .../r8168-dkms_8.054.00-1_all.deb を展開する準備をしています ... r8168-dkms (8.054.00-1) を展開しています... dkms (3.0.13-1) を設定しています ... 新バージョンの設定ファイル /etc/dkms/framework.conf をインストールしています ... 新バージョンの設定ファイル /etc/kernel/header_postinst.d/dkms をインストールしています ... 新バージョンの設定ファイル /etc/kernel/postinst.d/dkms をインストールしています ... 新バージョンの設定ファイル /etc/kernel/prerm.d/dkms をインストールしています ... r8168-dkms (8.054.00-1) を設定しています ... Loading new r8168-8.054.00 DKMS files... Building for 6.11.5-zen3 6.11.5+bpo-amd64 Building initial module for 6.11.5-zen3 Done. r8168.ko.xz: Running module version sanity check. - Original module - No original module exists within this kernel - Installation - Installing to /lib/modules/6.11.5-zen3/updates/dkms/ depmod.... Building initial module for 6.11.5+bpo-amd64 Done. r8168.ko.xz: Running module version sanity check. - Original module - No original module exists within this kernel - Installation - Installing to /lib/modules/6.11.5+bpo-amd64/updates/dkms/ depmod..... man-db (2.11.2-2) のトリガを処理しています ... initramfs-tools (0.142+deb12u1) のトリガを処理しています ... update-initramfs: Generating /boot/initrd.img-6.11.5-zen3
普段に使っている Kernel は -zen3 というカスタムカーネルです。エラーなくインストールできたようです。
以前に r8168-dkms ドライバーを試した時と同様に /etc/modprobe.d に r8169-dkms.conf が作成されていました。
$ cat dkms.conf # modprobe information used for DKMS modules # # This is a stub file, should be edited when needed, # used by default by DKMS. tadayoshi@lemon:/etc/modprobe.d$ cat r8168-dkms.conf # settings for r8168-dkms # map the specific PCI IDs instead of blacklisting the whole r8169 module alias pci:v00001186d00004300sv00001186sd00004B10bc*sc*i* r8168 alias pci:v000010ECd00008168sv*sd*bc*sc*i* r8168 # if the aliases above do not work, uncomment the following line # to blacklist the whole r8169 module #blacklist r8169
では、PC を再起動してみます。
$ lsmod | grep -i r81 r8168 679936 0
PC の再起動後は無事に r8168 ドライバーが使用されているようです。
さて、気になるサスペンド時の動作確認です。以前に r8168-dkms ドライバーを試した時はサスペンドに突入する時に 5 秒ほどの待ち時間が 100% で発生していたのですが、今回は待たされることなく瞬時にサスペンドが完了しました。スバラシイ。
もしかすると、以前に試した時はドライバーのバージョンと Kernel の対応バージョンに差があったために謎の待ち時間が発生していたのかもしれません。
そしてサスペンドからの復帰ですが、1 回目は問題なく処理できていました。復帰後すぐに Firefox でインターネットとの通信が再開できていました。こちらはもう少し様子見が必要です。