CentOS6.6の拡張ネットワーキングの有効化について

基本的にはAWSの VPC 内の Linux インスタンスでの拡張ネットワーキングの有効化 を参照すれば良いのだが、RHEL(CentOS)の手順は簡略化されていたので、補足の意味合いで残します。

 

まずは、前提として拡張ネットワーキングを使う下記要件を満たして下さい。

要件

  1. Linux カーネルバージョン 2.6.32 以上である事
  2. VPC内で稼働しているHVM インスタンスである事
  3. 拡張ネットワーキングがサポートされているインスタンスタイプ (詳細)である事
  4. SR-IOVドライバが組み込まれている事
  5. インスタンスの拡張ネットワーキング属性が設定されている事

 

ハマったところ

 

CentOS6.6 + ixgbevf 2.14.2 の組み合わせでは dkmsでビルドに失敗したところ

※dkms を使う理由はkernel のバージョンアップ後にも自動でモジュールをビルドさせるため

 

こんな感じでビルドに失敗する

 $ sudo dkms build -m ixgbevf -v 2.14.2

Kernel preparation unnecessary for this kernel. Skipping...

Building module:
 cleaning build area...
 cd src/; make BUILD_KERNEL=2.6.32-504.30.3.el6.x86_64...(bad exit status: 2)
 Error! Bad return status for module build on kernel: 2.6.32-504.30.3.el6.x86_64 (x86_64)
 Consult /var/lib/dkms/ixgbevf/2.14.2/build/make.log for more information.
 $

 

バージョンを変えるため、add したモジュールを remove する

$ sudo dkms status
ixgbevf, 2.14.2: added
$
$ sudo dkms remove ixgbevf/2.14.2 --all

------------------------------
Deleting module version: 2.14.2
completely from the DKMS tree.
------------------------------
Done.
$
$ sudo dkms status
$

 

ixgbevf-2.16.1 をダウンロードして、/usr/src/ixgbevf-2.16.1/ に再配置。

dkms.conf の中身もバージョンを合わせて作成


$ cat /usr/src/ixgbevf-2.16.1/dkms.conf
PACKAGE_NAME="ixgbevf"
PACKAGE_VERSION="2.16.1"
CLEAN="cd src/; make clean"
MAKE="cd src/; make BUILD_KERNEL=${kernelver}"
BUILT_MODULE_LOCATION[0]="src/"
BUILT_MODULE_NAME[0]="ixgbevf"
DEST_MODULE_LOCATION[0]="/updates"
DEST_MODULE_NAME[0]="ixgbevf"
AUTOINSTALL="yes"
$

 

あとはビルドし直す

$ sudo dkms add -m ixgbevf -v 2.16.1
$ sudo dkms build -m ixgbevf -v 2.16.1
$ sudo dkms install -m ixgbevf -v 2.16.1

ビルドが完了したら、カーネルモジュールの依存解決とinitramfs の更新

$ sudo depmod
$ cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
$ dracut -f

 

ネットワークインターフェイス名が変わる可能性があるかどうかを確認して、問題ないバージョンだったので特に作業はなし

※systemd または udev のバージョン 197 以上 の場合は必ずAWSのドキュメントに従い、デバイス名が変わらないようにしてください。

$ rpm -qa | grep -e '^systemd-[0-9]\+\|^udev-[0-9]\+'
udev-147-2.57.el6.x86_64

インスタンス停止後にインスタンスの拡張ネットワーキング属性を変更

$ aws ec2 modify-instance-attribute --instance-id i-xxxxxxxx --sriov-net-support simple
{
    "InstanceId": "i-xxxxxxxx",
    "SriovNetSupport": {
        "Value": "simple"
    }
}

インスタンスを起動し、ログインして確認

$ ethtool -i eth0
driver: ixgbevf
version: 2.16.1
firmware-version: N/A
bus-info: 0000:00:03.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no
$

これで完了。

 

おまけ

ネットで調べてたら、RHEL6.7のAMIはデフォルトでSR-IOV対応したという記事を見つけた。
参考:RHEL6.7 AMIがデフォルトでSR-IOV対応した

 

MarketPlace のCentOS6 HVM AMI(ami-13614b12)

[root@ip-172-31-2-95 ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@ip-172-31-2-95 ~]#
[root@ip-172-31-2-95 ~]# modinfo ixgbevf
filename: /lib/modules/2.6.32-431.29.2.el6.x86_64/kernel/drivers/net/ixgbevf/ixgbevf.ko
version: 2.7.12-k
license: GPL
description: Intel(R) 82599 Virtual Function Driver
author: Intel Corporation, <linux.nics@intel.com>
srcversion: E75203124BB105EC871944F
alias: pci:v00008086d00001515sv*sd*bc*sc*i*
alias: pci:v00008086d000010EDsv*sd*bc*sc*i*
depends:
vermagic: 2.6.32-431.29.2.el6.x86_64 SMP mod_unload modversions
parm: debug:Debug level (0=none,...,16=all) (int)
[root@ip-172-31-2-95 ~]#
[root@ip-172-31-2-95 ~]# rpm -qf /lib/modules/2.6.32-431.29.2.el6.x86_64/kernel/drivers/net/ixgbevf/ixgbevf.ko
kernel-2.6.32-431.29.2.el6.x86_64
[root@ip-172-31-2-95 ~]#

yum update したらRHEL6.7と同一のドライババージョンにアップデートされたみたい。


# cat /etc/redhat-release
CentOS release 6.5 (Final)
#
# yum update -y
# reboot

# cat /etc/redhat-release
CentOS release 6.6 (Final)
#
# modinfo ixgbevf
filename: /lib/modules/2.6.32-504.30.3.el6.x86_64/kernel/drivers/net/ixgbevf/ixgbevf.ko
version: 2.12.1-k
license: GPL
description: Intel(R) 82599 Virtual Function Driver
author: Intel Corporation, <linux.nics@intel.com>
srcversion: A23048DE274E66B4D22EF60
alias: pci:v00008086d00001515sv*sd*bc*sc*i*
alias: pci:v00008086d000010EDsv*sd*bc*sc*i*
depends:
vermagic: 2.6.32-504.30.3.el6.x86_64 SMP mod_unload modversions
parm: debug:Debug level (0=none,...,16=all) (int)
#
# rpm -qf /lib/modules/2.6.32-504.30.3.el6.x86_64/kernel/drivers/net/ixgbevf/ixgbevf.ko
kernel-2.6.32-504.30.3.el6.x86_64
#

・・・あれ?もしかして、無駄な作業だった?

※ixgbevf 2.12.1-k が最新バージョンまで backport されたかどうか未確認

コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.