Interfaceの設定方法に加えて、SR-IOVを使用した場合について記載しました。SR-IOVの使用方法として、KVMとLXC/LXDのそれぞれについてもまとめました。SR-IOVを使用する場合の注意点についても記載しました。内部ネットワーク的な疎通可否についても記載しました。構成図上に(1)~(21)までの番号を割り振りました。(1)~(10)については過去記事を参照してください。metonymical.hatenablog.com(11)~(21)については主にVLANやIPの設定となります。各VLANとIPは以下の通りです。(11)(13)(16)(19)Untag:192.168.30.22x/24(12)(14)(18)(21)VLAN301:192.168.31.22x/24(15)Untag:192.168.31.222/24*1SR-IOVを使用する場合、仮想マシンやコンテナを起動する前にVFを予めアタッチした後*2、起動させます。アタッチ方法については、nmcliコマンドではできないため、適時解説します。各仮想マシンやコンテナは以下の通りです。c750~c753:KVM上の仮想マシンlxc754:LXC/LXD上のコンテナスイッチ側の設定は以下となります。~コマンドのみ~以下のコマンドを投入していきます。やりたいことが既に決まっている方は、構成図とコマンドの内容を見るだけでもよいと思います。show(1)~(10)の詳細は省略し、以下は(11)から解説します。全ての出力結果を表示させると不要な設定も記載することになるため、一部省略します。2.c750のEthernet&VLAN+IP物理とVLANインターフェースを作成しIPをアサインします。forever3.c751のEthernet&VLAN+IP物理とVLANインターフェースを作成しIPをアサインします。異なる点は、IPアドレスの第4オクテットが221となります。4.c752のEthernet+IP物理インターフェースを作成しIPをアサインします。異なる点は、IPアドレスの第4オクテットが222となります。5.c753のBonding&VLAN+IP仮想マシン起動前にVFをアタッチします。Hardwareを実施し以下の画面のようにアタッチしてください。上記画面の場合、VFのBus:Device(Slot).function番号が0000:04:10:0となっていますが、以下のようにPFとVFのBus:Device(Slot).function番号は対応しています。04:10:3または、ホストOS上のvirshでアタッチする場合は、以下のように設定してください。domain=の行がVFのBus:Device(Slot).function番号に対応しています。</hostdev>上記設定が完了した後、仮想マシンを起動して以下の設定を仮想マシン上で行ってください。BondingインターフェースとVLANインターフェースを作成します。~]#6.lxc754のBonding&VLAN+IPコンテナ起動前にVFを仮想マシンにアタッチします。ホストOS上で以下のように設定してください。lxc754上記設定が完了した後、コンテナを起動して以下の設定をコンテナ上で行ってください。NetworkManagerを実施しておいてください。BondingとVLANインターフェースを作成します。異なる点は、IPアドレスの第4オクテットが224となります。以下3つの注意点があります。先に結論だけ書きますと、以下の通りとしてください。VFのMACアドレスについて:固定設定は実施しないBlackListについて:ixgbevfはBlackListに含めないVFIO-PCIについて:固定設定は実施しない8-1.VFのMACアドレスについてVFのMACアドレスは固定設定とせずに、オール0(ゼロ)のままの状態にしておいてください。通常、VFのMACアドレスを明示的に固定設定とする場合、/etc/rc.localに以下のように記載しますが、全てコメントアウトしてください。0MACアドレスをKVMやLXC/LXD側で動的にアサインさせないと、Bondingが機能しなくなる*4ためです。8-2.BlackListについてBlackListを使用した場合、LXC/LXDでVFをコンテナにアタッチしようする際、エラーで弾かれます。このため、BlackListからixgbevfはコメントアウト、または削除してください。ixgbevf8-3.VFIO-PCIについてこれも理由は8-2.と同様です。KVMの場合、仮想マシン起動時に動的にVFIO-PCIを使用してくれるため、明示的に設定しなくても良いようです。options行を削除してください。ids=8086:10edvfio_pci行を削除してください。/etc/modules-load.d/vfio_pci.confvfio_pci上記8-1~8-2の設定が完了したら、ホストOSを一旦再起動してください。見ながら、以下のマトリックスを見てください。VLAN300:192.168.30.0/24VLAN301:192.168.31.0/24今回は(11)~(21)にIPアドレスをアサインしました。そこからPing疎通できた箇所にはRTTを記載しました。*6Ping疎通できなかった箇所はNGと記載しています。上記の表より、疎通NGだった箇所*7について記載したいと思います。9-1.VLAN300:192.168.30.0/24の表について以下2つのフローが疎通NGでした。Dst:(19)PF(ens1f0)⇔VF間におけるEtherフレームの受け渡しがうまくいっていないようでした。replayが見えず。replayを返送していました。replayが見えない点が怪しいものの解決に至らず。9-2.VLAN301:192.168.31.0/24の表について以下2つのフローが疎通NGでしたが、疎通不可な理由は9-1に記載した事象と同一です。Dst:(21)以下の通信が全滅でした。Dst:ALL原因は、戻りのEtherフレームにVLAN301のタグが付いていることにより、(3)から(9)へ転送されてしまうためです。実際、(9)や(15)でPcapしたところ、(14)宛てのVLANタグ付きフレームが受信できました。9-3.RTTから見えてくるもの宛先がSWになっているRTTを見てください。概ね1~2ms程度です。自分自身にPingを打った場合のRTTは、おおむね100μs(0.100ms)以下となっています。それ以外のRTTは概ね900~200μs(0.9~0.2ms)程度です。Bridgeを使用したインターフェースのRTTと比較して、SR-IOVを使用したインターフェースのRTTは全体的に短時間(500μs程度)となっています。加えて、SR-IOVを使用した者同士のRTTはさらに短時間(200~300μs程度)となっています。「6.lxc754のBonding&VLAN+IP」に記載したアタッチ方法の場合、VFを自動的にアサインしてくれますが、今回紹介したKVMでの方法は手動設定を行いました。理由は、KVMによるVF自動アサインを行った結果、(16)(17)を作成した際にens5がLinkUpしなかったためです。仮想マシン上でBondingしない場合は有用な設定方法だと思いますので、補足として記載しておきます。以下のようにxmlの定義ファイルを作成し、virshコマンドで定義ファイルを読み込ませます。以下の画面にて、Autostartにチェックを入れApplyをクリック。左下の再生ボタン*8をクリック。network」を選択することができるようになります。これにより、ens1f0から自動的にVFがアサインされるようになります。1つのPF上でVFを8個や16個など作成した場合には管理が煩雑となるため、どのVFを使用しているかを意識せずに設定することが可能となります。10.最後にLinuxBridge*9とSR-IOVを駆使したネットワーク構成としては、概ね網羅できたと思います。vSwitchによる分散仮想スイッチ*10の構成になると考えています。パフォーマンス面ではDPDKを使用する*11ことに加え、足回りを全てSR-IOVにすることにより、ようやく最下層における基礎/基盤の部分が構成できるようになります。その上で、あるホストから別のホストへトラフィック*12を転送する際に、MPLSやVxLANでトラフィックを識別し、対向スイッチ上では、MP-BGPやEVPNを使用することにより、Overlayネットワークが構成できるようになります。SDN/NFVという言葉だけがあちこちに溢れていますが、最下層の仕組みを理解せずに上物だけをやってしまうのは、とても怖い気がしています。*1:¥(9)にてVLAN301を付与しているためUntagとなります。*2:厳密には、KVMとLXC/LXDでVFのアタッチ方法が異なります。詳しくは補足に記載します。*3:補足で解説しますが、LXC/LXDの場合、PF=ens1f0やens1f1を指定するだけで、自動的に空いているVFをアタッチしてくれます。*4:見かけ上の設定では上手くいったように見えますが、IP疎通性が無くなる場合があります。BondingインターフェースのSlaveのうちの一つがLinkUpしてくれないといった状態になります。*5:つまり、ホストOS上でixgbevfがmodprobeされる状態にしておいてください。*6:送信元:スイッチに関しては、min/avg/maxRTTの表記となっています。月別アーカイブはてなブログをはじめよう!metonymicalさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。