ESXi 6.7 以降の vmxnet3 を利用している仮想マシンの上でTrexを動かす
要は、Trexが依存しているライブラリ等のバージョン問題の話なので、TrexがDPDK20.05を取り込んだら賞味期限切れの記事になります。
これの動作確認を試そうと思いましたが、ESXi 6.7 以降のvmxnet3では、2020/07/25時点でのlatestのTrex (v2.82) では動作しなかったので、動かせるようにするための記事です。
ESXi 6.7 以降の vmxnet3 を利用している仮想マシンの上でTrexなぜ動かないのか?
バージョンを記載しておくと、自分の手元の環境では、ESXi 7.0, Trex 2.82 の組み合わせで動いてません。
Trexというのは、DPDK を利用しています。このDPDKはDPDKに対応しているNICのドライバを持っています。
今日時点でのTrexはv2.82, Trexがベースとして利用しているDPDKのバージョンは20.02です。 DPDKの最新版は20.05みたいです。
vmxnet3 というのはESXiを利用しているとおなじみの仮想NICです。 vSphere 6.7 で vmxnet3 v4 というのがリリースされています。 (なので、記事のタイトルはESXi 6.7以降と書いています。)
問題点としては、(おそらく) DPDKがvmxnet3 v4 対応してからこのコミット (2020/03/08に取り込まれているので、多分DPDK20.05に入っている修正) までDPDK側にバグがあり、 DPDKが用意するドライバとNICを紐付けることができませんでした。
Trexのフォーラムなどでも投稿されています が以下のようなメッセージが発生し、Trexが起動しません。
./t-rex-64 -i ... vmxnet3_v4_rss_configure(): Set RSS fields (v4) failed: 1 vmxnet3_dev_start(): Failed to configure v4 RSS vmxnet3_dev_start(): Device activation: UNSUCCESSFUL
修正方法
要は、上記のcommitをTrexに適用して、ビルドできればOKです。
Trexのビルド方法はwikiに記載があるのでソレに従います。なるべく新し目のgccと、依存ライブラリをインストールしたうえで作業すると良いと思います。
$ mkdir /opt $ cd /opt $ git clone https://github.com/DPDK/dpdk.git $ cd dpdk $ git checkout 52ec00fd1474e8f99f3da705b7efe95ba994b352 $ git clone https://github.com/cisco-system-traffic-generator/trex-core.git -b v2.82 $ cd trex-core $ \cp -fa ../dpdk/drivers/net/vmxnet3 src/dpdk/drivers/net/ $ cd linux_dpdk $ ./b configure $ ./b build $ cd ../linux $ ./b configure $ ./b build
ビルドできたら
ビルドに成功したら、 trex-core ディレクトリ配下にscriptsというディレクトリができると思います。scripts配下ではリリースされたものと同じようなことができます。
$ cd /opt/trex-core/scripts $ ./t-rex-64 -i
T-Rex自体の動作確認などは、以下のページなどを参考に動作確認を実施してみると良いと思います。