switch-monitor で datapath_id が表示されない

とりあえず直りました。@chibacchie ありがとう!

事象

  • trema examples の switch_monitor を実行するが、datapath_id が表示されない
  • OS を再起動しても再現する
$ sudo trema run switch-monitor.rb -c switch-monitor.conf 
All switches = 
All switches = 
All switches = 
All switches = 

機材

$ uname -a
Linux dev01 3.5.0-28-generic #48~precise1-Ubuntu SMP Wed Apr 24 21:42:24 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ trema version
trema version 0.3.19
$ 

switch_monitor プログラムとコンフィグ

アドバイス@chibacchie

  • "trema killall" してみる
  • $TREMA_HOME/tmp/pid か $TREMA_TMP/pid に pid ファイル残ってないか確認して、残ってたら当該プロセス殺すとか
  • "killall switch" とかで switch daemon 皆殺ししてみるとか

実行

再起動後、trema run するが、datapath_id が表示されない

$ sudo trema run switch-monitor.rb -c switch-monitor.conf 
All switches = 
All switches = 
All switches = 
All switches = 

killall switch, trema killall 後、再度 trema run するが、datapath_id 表示されない

$ sudo killall switch
switch: no process found
$ ps aux | egrep 'trema|swi'
root      1043  2.0  7.7 190780 78548 tty7     Ss+  00:35   0:20 /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none
root      3032  0.0  0.0   9140   860 ?        Ss   00:45   0:00 /var/lib/gems/1.8/gems/trema-0.3.19/objects/openvswitch/bin/ovs-openflowd --detach --out-of-band --fail=closed --inactivity-probe=180 --rate-limit=40000 --burst-limit=20000 --pidfile=/var/lib/gems/1.8/gems/trema-0.3.19/tmp/pid/open_vswitch.0x1.pid --verbose=ANY:file:dbg --verbose=ANY:console:err --log-file=/var/lib/gems/1.8/gems/trema-0.3.19/tmp/log/openflowd.0x1.log --datapath-id=0000000000000001 --unixctl=/var/lib/gems/1.8/gems/trema-0.3.19/tmp/sock/ovs-openflowd.0x1.ctl netdev@vsw_0x1 tcp:127.0.0.1:6633
root      3037  0.0  0.0   9140   868 ?        Ss   00:45   0:00 /var/lib/gems/1.8/gems/trema-0.3.19/objects/openvswitch/bin/ovs-openflowd --detach --out-of-band --fail=closed --inactivity-probe=180 --rate-limit=40000 --burst-limit=20000 --pidfile=/var/lib/gems/1.8/gems/trema-0.3.19/tmp/pid/open_vswitch.0x2.pid --verbose=ANY:file:dbg --verbose=ANY:console:err --log-file=/var/lib/gems/1.8/gems/trema-0.3.19/tmp/log/openflowd.0x2.log --datapath-id=0000000000000002 --unixctl=/var/lib/gems/1.8/gems/trema-0.3.19/tmp/sock/ovs-openflowd.0x2.ctl netdev@vsw_0x2 tcp:127.0.0.1:6633
root      3042  0.0  0.0   9140   868 ?        Ss   00:45   0:00 /var/lib/gems/1.8/gems/trema-0.3.19/objects/openvswitch/bin/ovs-openflowd --detach --out-of-band --fail=closed --inactivity-probe=180 --rate-limit=40000 --burst-limit=20000 --pidfile=/var/lib/gems/1.8/gems/trema-0.3.19/tmp/pid/open_vswitch.0x3.pid --verbose=ANY:file:dbg --verbose=ANY:console:err --log-file=/var/lib/gems/1.8/gems/trema-0.3.19/tmp/log/openflowd.0x3.log --datapath-id=0000000000000003 --unixctl=/var/lib/gems/1.8/gems/trema-0.3.19/tmp/sock/ovs-openflowd.0x3.ctl netdev@vsw_0x3 tcp:127.0.0.1:6633
tetchi    3065  0.0  0.0  14556   908 pts/1    S+   00:51   0:00 egrep --color=auto trema|swi
$ sudo trema killall
$ ps aux | egrep 'trema|swi'
root      1043  2.0  7.7 190780 78548 tty7     Ss+  00:35   0:20 /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none
tetchi    3115  0.0  0.0  14556   908 pts/1    S+   00:52   0:00 egrep --color=auto trema|swi
$ sudo trema run switch-monitor.rb -c switch-monitor.conf
All switches = 
All switches = 
All switches = 
^C
terminated

terminated
error: exit
$ 

復旧!

  • $TREMA_HOME/tmp/pid/*.pid を別ディレクトリに移動したところ復旧
$ cd /var/lib/gems/1.8/gems/trema-0.3.19/
$ cd tmp/
$ cd pid/
$ ls
LearningSwitch.pid  open_vswitch.lsw.pid  phost.host1.pid  phost.host2.pid  switch.0xabc.pid  switch_manager.pid  tremashark.pid
$ mkdir org
$ mv *.pid org
$ ls
org
$ sudo trema run switch-monitor.rb -c switch-monitor.conf 
Switch 0x1 is UP
Switch 0x2 is UP
Switch 0x3 is UP
All switches = 0x1, 0x2, 0x3
All switches = 0x1, 0x2, 0x3
^C
terminated

terminated
$ 

考察・課題

  • 何で直ったのかは別途確認
  • 事象が発生する直前に learning-switch と TremaShark で遊んでいたので、これらが関係していると思われる
  • Trema 本の TremaShark の解説が理解できないので要勉強。何かわかるかも
    • イベントコレクタ、USR2 シグナル、IPC イベント等

追記 2013/05/18

  • trema run 前は $TREMA_HOME/tmp/pid の中に pid ファイルがないのが正常と思われる
  • 各 pid ファイルは vswitch や vhost の起動時に作成され、終了時に削除される
  • pid ファイルには起動中の vswitch や vhost の pid が記載される
    • 各プロセスの pid は ps コマンドで確認できる
  • trema run 中に pid ファイルを削除すると、trema kill をしても起動中の各プロセスは終了しない
    • このとき、vswitch や vhost は手動で kill する
  • learning-switch や TremaShark と dpid が見えなくなった事象は恐らく関係ない
    • trema run したまま、ノート PC のハイバネーション失敗 > 再起動 > pid ファイル残ってる、みたいなことがあったのではないか、と
  • IPC(Inter Process Communication)、プロセス間通信
  • USR2 シグナルはまだ調べてない