1

すべての管理対象ホストに ping を実行するステータス ポーリング機能があるネットワーク管理アプリケーションで受信 ICMP パケットをリッスンするために、recv(2)を使用しています。

実稼働環境では、管理対象ホストの数が非常に多くなる可能性があり (1,000 以上)、現時点では、上記のステータス ポーリングが実行されると、すべての ping 要求が遅延なく順次送信されます。

明らかに、これにより多くの ping 応答がほぼ同時に返されることになり、ディスパッチ ルーチンが追いつかないようです。これにより、パケットがドロップされ、ping 応答がアプリケーションによって実際に受信されないように思われます。多くのホストが「使用不可」であると誤って検出されているためです。

ディスパッチャは、着信応答をある種の「受信ボックス」に追加する以外には何もしません。これは後で別のスレッドによって処理されます。つまり、それほど時間はかからず、おそらくこれ以上最適化することはできません。

recv によって使用される内部パケット バッファ (カーネル内? ネットワーク ハードウェア内?) がいっぱいになり、パケットのドロップを開始する可能性はありますか? もしそうなら、安全に実行できる同時pingの合理的な最大量を決定する良い方法はありますか(つまり、OSからそのバッファサイズを取得することによって)?

4

0 に答える 0