Proxmoxで疎通断が発生するので調べたらtcp segment offloadが原因だった
ProxmoxのホストとVMに繋がらなくなる
知り合いから古いNUC(NUC5i5RYH)を譲っていただき、Proxmoxをインストールして遊んでいました。
3日~7日ぐらい起動するとどうもVMどころかホスト機にも疎通できなくなる現象が発生していました。
問題の概要
発生していた症状
- 疎通断の発生
- 3~7日ぐらいで不定
- OSがハングしていたわけではない
- ホスト機のネットワークサービスを再起動すると疎通できるようになる
環境
- Proxmox VE 8.4.6
- Intel NUC5i5RYH
- 物理ネットワークアダプタ: Intel® Ethernet Connection I218-V
調査
最初は10年前のNUCなのでOSがハングしているのかなと思いましたが、別にそういうわけではなかったです。 コンソール接続を行ったところ、普通に操作ができました。
試しにホスト機のnetworking.serviceを再起動してみると疎通が取れるようになったので、ホスト機のネットワーク系の何かしらが原因というところまでわかりました。
ボケーっとdmesg
叩いたら
Detected Hardware Unit Hang
という出力がされていたので、適当にググったところ、TCP Segmentation Offload
という機能が悪さしていそうだなというところまで判明しました。
原因の特定
TCP Segment Offload(TSO)とは
- ネットワークカードがTCPセグメンテーションをハードウェアで処理する機能
- パフォーマンス向上が期待されるが、環境によっては問題を引き起こす
解決方法
TSOの無効化
TSOを無効化すればよいです。パフォーマンスは多少下がりますがハングアップするよりかはマシです。 どうせHome Assistantなど内向きのサービスしか立てない予定なので、パフォーマンスなんかどうでもいいというのもあります。
ethtool -K eth0 tso off
永続的な設定
ethtoolだけでは設定の永続化ができないので、interfacesに直接書いてあげます。 post-upで起動ごとに無効化します。 もう少しいい感じの設定はないんだろうか。
root@euphoria:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback
iface enp0s25 inet manual
post-up /usr/sbin/ethtool -K enp0s25 tso off gso off gro off
auto vmbr0
iface vmbr0 inet static
address 192.168.1.190/24
gateway 192.168.1.1
bridge-ports enp0s25
bridge-stp off
bridge-fd 0
iface wlp2s0 inet manual
source /etc/network/interfaces.d/*
root@euphoria:~#
まとめ
2週間ほど放置してみましたが、問題なさそうなのでこれで運用することにします。 Proxmox基盤つくって思ったけど、メモリー無限にほしいな。