
ハードウェアが DMA 転送を通じて 1 秒あたり 300 個のパケットをホスト アプリケーションに送信し、ホスト アプリケーションのメッセージ キューに転送する実装があります。
パケットが高速でアプリケーションに送信されると、アプリケーションがそのようなパケットを1〜2個受信できないことがわかりました。を使用すると、tcpdump
すべてのパケットがホストに送信されることを確認できます。しかし、パケットがドロップされたかどうかはどうすればわかりますか?デバッグ印刷を使用すると、CPU使用率が消費されるため、簡単ではありません。
このメッセージキューで受信されたメッセージの数がわかりますか?リストされた項目を使用ipcs -q commmand
しないでください。
答え1
私のシステムに示されているように、SysVメッセージキューはデフォルトで小さいですipcs -l
。
$ ipcs -l
[...]
------ Messages: Limits --------
max queues system wide = 7890
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384
対応するsysctlエントリは次のとおりです。
kernel.msgmni = 7890
kernel.msgmax = 8192
kernel.msgmnb = 16384
メッセージのサイズによっては、これらの制限が発生する可能性があります。