見出し画像

TWRMON:32ビットの世界から64ビットの世界への移植で苦労する

浦和レッズ 今年最後の試合も引き分けでした。次はワールドカップ!
さて、古いPCのHDDから復刻したRMONプローブの開発の続きです。
昨日の時点で2つ問題がありました。

  • 起動するとCPUを100%近く使い、時間と共に動作が重くなっていく

  • TWSNMPシリーズからアクセスするとエラーになる

1つ目の問題はパケット単位でRMON MIBの情報を変更する処理でMIBのテーブルを検索する処理が遅いことが原因であることがわかりました。
時間とともに見つけたホストやプロトコルが多くなるほど、処理が重くなっていきます。GO言語で開発していればmapの利用や並列処理で解決できそうですがC言語だと、ちょっと難しいので手抜きですが、パケットの解析のレベルを下げるオプションを付けました。データリンク層(Ethernet)のレベル、ネットワーク層(IP)のレベル、アプリケーション層のレベルまで解析するオプションの3段階です。低いレベルなら今使っているCPUでも取得できるようになりました。

2つ目の問題は、テストで使ったLinuxが64ビットOSであることに起因する問題でした。15年前のソースコードなので、NET-SNMPで自動生成した部分が32ビットOSを想定したものになっていました。long型が4バイトとして扱うコードになっていたということです。数値の型をすべて見直して64ビットOSでも動作するようにしました。
とりあえず、TWSNMP FCでもエラーなく取得できるようになりました。

しかし、スキャンレベルを上げるとRMONエージェントの処理が重くなってSNMPの応答ができなくなるようです。これは、1つ目の問題と同じ原因だと思います。もう少し処理を改善する必要がありそうです。

明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。