2013年2月24日日曜日

NIC の ifup の際に eth パラメータを調整したい

CentOS 6 において、サーバ起動時の eth0 初期化時に、ethtool による調整を行いたいのですが、/etc/sysconfig/network-scripts/ifcfg-eth0 に指定可能な ETHTOOL_OPTS は、ethtool -s に対応しており、それ以外の ethtool 調整には対応していません。今回、ethtool -G による調整を行いたかった為、その方法について調べてみました。
真っ先に思いつく方法は、rc.local に書いてしまえばいいということなんですが、/sbin/ifup の内容を読んでみると、ローカルな設定を行えるようにする仕掛けがありました。次は、ifup から抜粋です。
...

if [ -x /sbin/ifup-pre-local ]; then
    /sbin/ifup-pre-local ${CONFIG} $2
fi

OTHERSCRIPT="/etc/sysconfig/network-scripts/ifup-${DEVICETYPE}"

if [ ! -x ${OTHERSCRIPT} ]; then
    OTHERSCRIPT="/etc/sysconfig/network-scripts/ifup-eth"
fi

exec ${OTHERSCRIPT} ${CONFIG} $2

ということは、自分で /sbin/ifup-pre-local を用意すれば、所望の設定が出来そうです。次のような具合。
#!/bin/bash

DEV=${1/ifcfg-/}

if [ "$DEV" = "eth0" ] ; then
    ethtool -G $DEV rx 4096 tx 4096 2>/dev/null
fi
これで、うまくいきました。
# ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:  4096
RX Mini: 0
RX Jumbo: 0
TX:  4096
Current hardware settings:
RX:  4096
RX Mini: 0
RX Jumbo: 0
TX:  4096

この黄色の部分を調整したかった。

2013-02-26追記
匿名さま、コメント(Bugzilla情報)をありがとうございました。ifcfg-eth0 に次のように指定すれば、ethtool -G も指定可能だったのですね。確認足りませんでした。orz
ETHTOOL_OPTS="-G \$REALDEVICE rx 4096 tx 4096"

2013-02-27追記
匿名さま、たびたびコメントを頂きありがとうございました。network-functions を見てみたら、ご指摘のとおり、eval のアイデアは取り込まれておりませんでした。というわけで、こうなってしまうのですね。
ETHTOOL_OPTS="-G eth0 rx 4096 tx 4096"
コピーして間違いを犯しそうではありますが。。
人気ブログランキングへ にほんブログ村 IT技術ブログへ