naoki86star

インターネットの片隅でなにかしら書いてみる

vMX(eval)18.2 on eve-ng

 vMX(eval)18.2R1.9をeve-ngで動かしたときのメモです。

 当初、vMX(eval)18.2R1.9をeve-ngで動かそうとしてうまくいかなかったです。どこがか、というと、サービスポートに一番単純なinetの設定をしてpingが飛ばない。show interface ge-0/0/0としてもtxカウンタは反応しているが、対向にlinuxノードつないでtcpdumpしてもなにも入ってこない。rxカウンタはゼロのまま。要はデータプレーンのポートが全然機能していない、と。17.1R1.9はokだったのが、18.2R1.9を使ってみると全然だめ。

 vMXは17.4あたりから複数のfpcで構成できるようになっているらしいです。
ここでまずeve-ngで17.4以降のイメージファイルの配置の仕方を知りました。ここではmultiなvpc+複数のfpcを並べる方法として紹介されてます。自分はシングルのvpc+fpc0オンリーまでしか使わない(使えない)のでvpcのファイルはmetadata-usb-re.imgを使うようにしました。

 自分が成功した、pingレベルを動くようしたアクロバット的な方法:
fpc0のノードにて
1) ブートしたらconsoleでログインする。
2) /var/jnx/card/local/slotというファイルを削除する

Wind River Linux 6.0.0.13 localhost console

localhost login: root
Password:
root@_mpc0:~# rm /var/jnx/card/local/slot
root@_mpc0:~#

このあとで、vcpをブートする。

 なんでこうしたのかというと、うまくいっていない箇所がvfpの初期化の段階で起きていたと考えたからです。dpdkのプロセスが異常終了しているようにみました。vfpの/var/log/messageを追っていて、/home/pfe/riot/start_riot.shというスクリプトにたどり着き*1、そこで/home/pfe/riot/build/riotというコマンドをバックエンドプロセスとして起動しているけども、その動作がうまくいっていない?、というように考えました。このコマンドの起動引数がvmx17のときと違っていたのに着目しました。/var/jnx/card/local/slotが存在するとfabってのを有効にしてるらしいのですけど、そこが17.1と違っていた根本箇所だったなので試してみた次第です。*2

 いろいろ調べてみたけど自分の検索だと直接的な情報を見つけることができなかったです。その代わりお陰でvMXの仕組み周辺ちょっと覚えました。

  • vfpというのはlinuxで動いていてdpdkというものを使っている、だからifconfigでデータプレーンのポートに対応するnicが見えない
  • vcpが文字通りvfpをコントロールするのだけども、初期化のスクリプト+設定データのいくらかはvfpのイメージに格納されているし、いくらかはvcpのほうから送り込まれてくる

 自分のこの方法は、fpc1以降を足すときには明らかにうまくいかない気がします。vfpノードの/var/jnx/card/local/slotというファイルに番号がかかれていて、それがないときはデフォルト0でスクリプトは進んでくれているためです。カード番号を示すファイルを消したらうまくいかないと思います。
 それに、この方法だとeve-ngでノード立ち上げなおすとslotファイルの削除やりなおしです*3

 ちゃんとした方法をとるためにもう一つ試してみたいこと、qemu-kvmの仮想マシンでnuma=2にできるといいのかもしれない、と思ってます。なぜかいうと、”Invalid NUMA socket”というログがfpcの初期化で出力されているので、ソケット1を固定で使うようになっているような推測もしてます。使ったeve-ngではnuma=2で仮想マシンを起動することはできなかったです。*4


 17.1で色々試せていたのですけども、juniperのナレッジサイト通りにしてもいくらか期待通りにいかないケースを、バージョンを上げたらどうだろう、と期待して、18をなんとか試したいと思いやってました。。。

*1:直接ファイル名出力されているわけでなくキーワード頼りにgrepしまくって

*2:他にもあるんでしょうけども。。。

*3:全然格好良くない

*4:optionに-numa 2 ないし-numa=2と渡してみたけどもダメだった