EthtoolでのNICリングバッファサイズの管理は簡単です。たとえば、
ethtool -G eth0 rx 4096 tx 4096
(または、eth0
を、管理する必要のあるインターフェースに置き換えます。)
このライブは簡単です。
問題は、結合されたインターフェースの一部である各スレーブインターフェースでこれを行うと、結合を台無しにすることです。 (アグリゲーターIDは、多くの場合、以前のように後で一致しません。)編集:これは予期された動作ではないことを学びました。 (私が観察した場合になぜそれが起こったのかについてもっと知るときに更新するかもしれません。)
RHEL 7では、ETHTOOL_OPTS
の/etc/sysconfig/network-scripts/ifcfg-eth0
の値を(たとえば)ETHTOOL_OPTS="-G ${DEVICE} rx 4096 tx 4096"
に設定することにより、ブート時にリングバッファーサイズを設定できます( Red Hatの記事にアクセスしてください )。 (警告:これにより、上記のアグリゲーターIDの不一致が実際に回避されるかどうかはテストしていません。)
ただし、Ubuntu 18.04の場合、そのような明確で見やすい場所はありません。
ネットプランのドキュメント、systemdネットワークのドキュメント、networkd-dispatcherについて詳しく調べました。
私の同僚はseemsが機能するnetworkd-dispatcherを使用するソリューションを思い付きましたが、それだけhappensになるような競合状態がまだあるかどうかは明らかではありませんguaranteedの代わりに機能し、インターフェイスボンドが設定される前にリングバッファサイズを設定します。これは後で(後で)投稿しますが、正解かどうかはわかりません。 (また、systemdのドキュメントには記載されていません。)
だから問題は:
イーサネットインターフェイスが結合される前の起動時にイーサネットインターフェイスのリングバッファサイズを管理するsystemdネイティブの方法は何ですか?
パラメータを設定するsystemdネイティブの方法は、.link
ファイルを使用することです( systemd.linkのマンページ を参照)。ただし、現在、リングバッファパラメータを設定する方法です。つまり、これを行うネイティブのsystemd方法はありません。これは、 ワイルドカードの機能リクエスト はRxBufferSize
およびTxBufferSize
オプション付きでリリースされています。
実際に/etc/network/interfaces
を使用して構成している場合は、そこでpre-up
コマンドを使用するだけです。これは、systemd-networkdに煩わされるのではなく、私の好みです。
デバイスが表示されるときに一致するようにいくつかのudevルールを設定し、そこでethtoolを実行できます。これは、systemdがデバイスについて通知される前に実行する必要があります(デバイスで何かを実行する前に実行されます)。
Systemdサービス(タイプoneshot、ただexec ethtool)をセットアップして、ボンドデバイスをセットアップするサービスの前とデバイスが表示された後に実行し、それを使用することができます。 systemdは、イーサネットデバイス用に.device
ユニットを作成します。 systemctl list-units | grep sys-subsystem-net
を使用して適切なものを見つけます(サービスをウォンツ/アフターサービスにすることができます)。
Ubuntu 18で機能するudevルールは次のとおりです。
ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="eth*|en*", RUN+="/sbin/ethtool -G $name rx 4096 tx 4096"
これを/etc/udev/rules.d/59-net.ring.rules
であり、起動プロセスの早い段階で有効になります。