Metonymical Deflection

ゆるく日々のコト・たまにITインフラ

CentOS7でSR-IOV設定

CentOS7でSR-IOV設定を行ったため、その手順を記載しておきます。

1.環境

筐体:ProLiant DL360e Gen8
System ROM:P73 08/02/2014
NIC:Intel X540-AT2 ※1
OS:CentOS7.4
Installed Environment Groups:サーバー (GUI 使用) (graphical-server-environment) ※2

※1
X540-T2として販売されているもので、HP純正ではなくAmazonで購入したOEM提供のものです。
※2
最小限のインストール (minimal)の場合、lspciの追加インストールなどが必要なので、graphical-server-environmentを使用しています。
※3
BIOS上でSR-IOVを有効化する方法はHPガイドを参照してください。なお、私はBIOSでSR-IOVを有効化した後、OSをインストールしています。しかし、OSインストール後に、BIOS上でSR-IOVを有効化しても可能だ、という記事を見つけましたが、真相は確かめていません。

2.物理状態の確認

(1)PCIeのSlot1にX540を挿入していること。
HPガイドの14ページ目にARI(Alternative Routing ID Interpretation)機能がサポートしていないSlot番号が記載されています。ARI機能をサポートしていないPCIeのSlotにX540などSR-IOV対応NICを挿入しても、SR-IOVが有効化できない場合があるため事前に確認しておきましょう。


(2)X540のリンクが10Gbpsでリンクアップしていること。
UTPなので1Gbpsでもリンクアップした状態にすることは可能ですが、SR-IOVの有効化を行うと1Gbpsではダメだというメッセージがdmesgに表示されます。
RJ45の10Gスイッチがすぐに用意できない場合
X540-AT2は10Gポートが2ポートあるため、ループバック接続(X540-AT2の1ポート目と2ポート目をUTPで直結)にて対応しました。

3.NIC状態の確認

(1)NICが認識されていること。

# lspci |grep Eth
02:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.2 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.3 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
08:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
08:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)

(2)10000Mb/s(10Gbps)でリンクアップしていること。

# ethtool ens1f0
Settings for ens1f0:
Supported ports: [ TP ]
Supported link modes: 100baseT/Full
1000baseT/Full
10000baseT/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Advertised link modes: 100baseT/Full
1000baseT/Full
10000baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Speed: 10000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: external
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes

4.iommuの有効化

SR-IOVを有効化する準備として、iommuを有効にします。

vi /etc/sysconfig/grub

以下のようにGRUB_CMDLINE_LINUX=行の最後に、intel_iommu=on iommu=ptを追加

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on iommu=pt"

以下のコマンドでgrub2.cfgに反映

grub2-mkconfig -o /etc/grub2.cfg

出力例

# grub2-mkconfig -o /etc/grub2.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-0b4fb8fdbcf94115af972373627c94dc
Found initrd image: /boot/initramfs-0-rescue-0b4fb8fdbcf94115af972373627c94dc.img
done

5.SR-IOVの有効化設定

起動時にVFがPCIバイスとして認識されるように設定します。

vi /etc/rc.local

最終行に以下の内容を追加

echo 2 > /sys/class/net/ens1f0/device/sriov_numvfs
echo 1 > /sys/class/net/ens1f1/device/sriov_numvfs
exit 0

上記について補足
ens1f0はX540のインターフェース名なので、ご自身の環境に合わせて変更してください。

X540-AT2は2ポートあるため、1ポート目がens1f0、2ポート目がens1f1となります。
上記設定の場合、ens1f0にVFを2ポート、ens1f1にVFを1ポートとする設定となります。

私の環境でmodprobeを行ったところ、以下の結果となってしまったため、上記の設定を行いました。

# modprobe ixgbe max_vfs=2,1
modprobe: ERROR: could not insert 'ixgbe': Invalid argument

但し、RedhatのDocを読む限り、上記設定はよろしくないそうなので、別な方法を模索しています。
理由は、systemctlになってからOS起動時に各種サービスなどが並列で実行されるらしく、rc.localも例外ではないそうなので、X540のドライバが読み込まれる前にrc.localが実行されると予期せぬエラーを引き起こす可能性があるため、だそうです。

6.rc.localに実行権限を付与

Defaultでは実行権限がないため、起動時に実行されるよう権限を付与します。

chmod +x /etc/rc.d/rc.local

7.ここで一旦再起動

reboot
もしくは
shutdown -r now

8.再びNIC状態の確認

Virtual Functionが追加表示されていればOK
★の付いてる行がVF(Virtual Function)

# lspci |grep Eth
02:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.2 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.3 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
08:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
08:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
08:10.0 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) ★1
08:10.1 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) ★2
08:10.2 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) ★3

上記出力だけだと、どのVFが、どのPCIバス、スロット、ファンクション番号に紐づいているかがわからないため、★の横に数字を記載しています。
また後述するMACアドレス固定の項も併せて参照してください。

上記について補足

再起動後にVFが作成されなかった場合、dmesg上に以下のエラーが出力されている可能性があります。
 kernel: igb 0000:02:00.1: not enough MMIO resources for SR-IOV

このときの対処方法

vi /etc/sysconfig/grub

以下のようにGRUB_CMDLINE_LINUX=行の最後に、pci=reallocを追加して再起動。

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on iommu=pt pci=realloc"

本来、BIOSがVF用リソース割り当てを行うそうなのですが、BIOSNICの組み合わせによって、うまくいかない場合があるそうです。このため上記設定を行うことによりカーネルがVF用リソース割り当てを行えるようになるそうです。

9.modprobeのblacklistへの追加

ixgbevfを外すことによりホストOS上でVFがNICとして認識されるのを防ぎます。
但し、ホストOS上ではPCIバイスとして認識しているため、ゲストOSにアタッチすることは可能です。

vi /lib/modprobe.d/dist-blacklist.conf

最終行に以下の内容を追加

# ixgbevf driver
blacklist ixgbevf

10.VFのMACアドレス固定設定

上記9.の設定を実施するとVFのMACアドレスはオール0(00:00:00:00:00:00)となります。
このため、任意の被らないMACアドレスを指定します。

vi /etc/rc.d/rc.local

最終行に以下の内容を追加

ip link set ens1f0 vf 0 mac 00:11:22:33:44:55
ip link set ens1f0 vf 1 mac 00:11:22:33:44:56
ip link set ens1f1 vf 0 mac 00:11:22:33:44:57

上述した通り、VFとPCIバス番号などの紐付きがわからないため、
以下に紐づきがわかるよう★の横に記載しておきます。

ip link set ens1f0 vf 0 mac 00:11:22:33:44:55 ★1 08:10.0
ip link set ens1f0 vf 1 mac 00:11:22:33:44:56 ★3 08:10.2
ip link set ens1f1 vf 0 mac 00:11:22:33:44:57 ★2 08:10.1

今のところ、これを把握するには、VFをゲストOSにアタッチ後、ゲストOS上にてip link showなどでMACアドレスを確認する以外、方法はないのかな?と悩んでいます。

最後に

SR-IOV設定のHow toサイトは色々見て回ったのですが、H/WとOSの環境情報が詳細に記載されているサイトが少なかったため、環境をしっかりと記載してみました。一度でも成功すれば、どうってことない事だったりするものですが、一度も成功したことが無いときは、何が原因なのか?切り分けがつかない場合があるため、環境情報も大切だなと実感しています。

お勉強Lab

何もかかないと、いつ頃、どんなことをやってたか忘れてしまうので書き残しておきます。

社内のお勉強用として、自腹でLabを作りました。

このLabでMVNEを想定した社員一人一台EPCを提供できるようなネットワークやらサーバやら、まるっとごりっとインフラ(NW,Srv,Storageとか一々区分けする意味がない)を構築しています。

6~7年くらい前は自宅にクラウドを作って喜んでいましたが、これから自宅にEPCを作って、EAP-AKAの検証がしたいです笑

そろそろ

大学卒業も決まったみたいなので、
こちらもそろそろ再開しようかなと思います。

ずっと、ツイッターだったし!

140文字だと表現しきれないこともあったから、
実はちょいフラストレーション溜まってたし!

数日書いてみてツイッターやFBと連携するかを
検討してみたいと思います。

今は大学で所属してる音楽サークルの
追いコン(追い出しコンサート)の準備で
ちょいちょい忙しかったりするのですが、
そういったことも含めて色々書けたらなと思っています。

遊び半分と遊び感覚の違い

遊び半分
遊び半分とは、中途半端な状態である。


噛み砕いて解釈すると。。。


何かの半分であって、もう半分は遊んでいる状態。


とはいえ、ブレーキにも多少の遊びが必要なように
物事には遊びが必要な場合が往々にしてあると思う。


しかしながら、その遊びが半分を占めているのはあまり頂けない。


所謂、「箸にも棒にもならない」っていう状態に陥りかねない。


まぁ、1人で2〜3人分の才能がある方であれば、
1/2〜1/3までの遊びなら常人と同程度で、
何事もこなせちゃうんでしょうけど(笑)


遊び感覚
遊び感覚とは、集中した状態である。


噛み砕いて解釈すると。。。


自分の好きなことを時間を忘れるくらい
夢中で且つ超真剣にやっているときの感覚


とするならば、極めて集中した状態であると言える。


すごい勢いでイマジネーションが湧いてきたり、
所謂、「天が降ってくる」ような状態だと言える。


まぁ、拡大解釈とも言えるけど(笑)


人によっては「遊び感覚でやれること」を仕事にすると、
愉しくて仕方ないという状態を得られるかもしれない。


もちろん、そうではないことを仕事にした方が、
性に合っているという方も居る。


なので、決して「良し悪しのこと」を言っているわけではない。


ちなみにオレはどちらかと言えば、前者の方が好きかなぁ。


なぜかというと、孫正義さんの言葉を借りるなら、
「引きちぎれるくらい夢中になる(没頭する)」
ってことに、とても魅力を感じるから。


引きちぎれるくらい夢中になっている自分に対して、
『「オレは生きている!」と感じられるんじゃね〜の?』
って、オレは思う。

厳しくする事と見放す事の違い

厳しくする事
即ち、相手のことを考えているということ。
相手の成長過程におけるハードルをあえて設けることにより、
その相手の成長を促す行為ともいえる。


見放す事
即ち、相手のことなど全く考えなくなったということ。
全く考えない以上、相手がどうなろうと知ったことではない。
ようするに無関心であるといえる。


受け手からは、「辛いな」と捉えられることであっても、
送り手からは、微妙に異なることがある。


前者であれば、
次のステップにおいても同様に師事することも可能だが、
後者であれば、
即刻、離反すべきだといえる。


その見極めができる眼を養うことが重要だよね。

絶対の絶対度

日々、色んなことをおもう。


こういう余裕があると「生きている」って実感できるから好き。
今は生き急ぐようなことはしない。


もちろん大学の予習復習や課題で忙殺されているんだけど、
オレ自身以外の責任が伴わないから仕事と比べると楽ですw


仮にミスったからといって損害賠償とか請求されることはないし。
ようするに、胃がキリキリと痛むような切迫感は皆無に等しい。
漠然とした不安は残っているけどね(^^;


なので、何か取りとめのないことをつらつら書こうと思う。
「論」にまでは昇華できないけど「おもう」ことはあるので、
ツイートで流れないようにするためにも、きちんと残しておきたいのね。


ってことで、最初のお題は「絶対の絶対度」


ちょっとした会話の中で登場するような

  A「明後日までにレポート仕上がるかな?」
  B「それって絶対無理じゃね?」

的な言葉。


湯川秀樹(敬称付けるなら「様」だよね)が放った

  『核兵器は「絶対」悪である』

って言葉。


同じ「絶対」でも、「絶対の度合い」はちょっと違うと思う。

 
自分でも気を付けるようにしてるけど、
ついつい使ってしまう「絶対」という言葉。
でも、エンジニアとしてはあんまり乱用したくはない。


だから「絶対」ってことについて考えてみた。


『この世に「絶対」なんてことは、何1つ存在しない。』と
言い切って良いものかは、また別な議論になりそうだけど、
恐らく間違いなさそうな気がしているのも確かなんだよね。


もう少し厳密に言うと、

  『前提条件が存在しない「絶対」なんてことは、何1つ存在しない。』

になるのかなぁ。


なぜならば、

  「認識」

もしくは

  「モノサシ(尺度)」

もしくは

  「定義」

といったような概念が人間社会にある以上、
「絶対」と言い切れるモノは、相当限られてくるだろうと思う。


例えば、
時間であればセシウム原子時計などを用いた「1秒」の定義が必要になる。
でも「定義」された時点で、それと同時に「絶対」ではないことを証明している。


なぜなら

  「絶対」とは定義の必要が無いこと

だから。


この時点で既に論理が破綻していることは自分でも
認識しているんだけど続けることにしよう(笑)
ようするに卵と鶏の話に限りなく近づいてきたってこと。


『「絶対」とは定義の必要が無いこと』と定義した時点で、
「絶対」というモノが限られる(≒存在しない)と言えると思う。


高校のとき物理の先生からこんな質問をされたことがある。

  先生「ガラスは、固体か?液体か?」
  オレ「固体です」
  先生「本当に?絶対?何でそう言い切れるの?」
  オレ「絶対です。(窓ガラスをコンコン叩いて)だって、これ固体じゃないですか?」
  先生「今はね。確かに固体に見えてるよね。」
  オレ「えぇ。」
  先生「じゃあ、数万年とか数十万年という尺度でも同じことが言えるの?」
  オレ「いやぁ(汗)」
  先生「その窓ガラスが10万年後にそこにあるとしたら融け出して床に落ちてるよ。」
  オレ「そうなんですか?」
  先生「そう。君の回答には前提条件が抜けている。もし絶対と言いたいなら、前提条件が必要と考えておいて間違いはないよ。」


17〜18歳くらいのオレには「何言ってんだよ?」としか思えなかったんだが、
今なら「おっしゃる通りでございます。」って思う(^^;


エンジニアをやってて「絶対」って言葉の絶対度は
人によって異なるということが理解できるようになってきた。
もちろん「絶対」って言葉の危険度も充分承知した。


少なくても自分の中での認識が相手と一致しているとは限らない以上、
「絶対」という言葉だけが独り歩きすることがあるということを痛感している。


だからこそ、エンジニアなら「絶対」という言葉を使わずに起こり得る事象に対して、
きちんとした対応なり説明なりができるようになりたいわけですよ。

緊張感

取引先の企業さんから連絡があり、客先Mtgがあるとのことで、
久しぶりにスーツを着てお仕事をさせて頂いた。


法人同士のMtgっていうのは、
お金の話になると金額がデカいこともあったり、
騙し合いや馬鹿し合いがあったりetcなので、
正直、半年ぶりくらいに良い意味ですごく緊張した。
あぁ、前の会社を退職してから、もう半年も経つのか?と。


でも、この緊張感が好き! 


大学では決して経験できない感覚があるから。


スーツを着て、ネクタイを締める時、
オレは学生からNWエンジニア(社会人)への
スイッチが切り替わることを改めて認識した。


オレはNWエンジニアだ!


でも、学生だけど(笑)


さて、週末は水風船を使った電波やアンテナのレクチャーのお仕事がある。
これを乗り越えれば、良い感じで学生生活の流れに乗れそうな気がしている。


ちょっと、しんどいけど、あともう一息ってところだから、がんばんろう!!!


予習復習の時間配分と、ノートアレンジっていうか、ノートデザインは引き続き模索中。