8.5. マルチキャストにおける留意点

複数のアプリケーションがマルチキャストグループをリッスンする際は、個別のソケットのネットワークデータを故意に複製するために、マルチキャストフレームを扱うカーネルコードが必要になります。この複製は時間がかかり、softirq コンテキストで発生します。
このため、一つのマルチキャストグループに複数のリスナーを追加すると、softirq コンテキストの実行時間に直接影響します。マルチキャストグループにリスナーを加えると、カーネルがそのグループ向けに受信された各フレームに新たなコピーを作成する必要性が生まれます。
トラフィックボリュームとリスナー数が少ない場合は、この影響は限られたものです。しかし、複数のソケットがトラフィックの多いマルチキャストグループをリッスンすると、softirq コンテキストの実行時間が長くなり、ネットワークカードとソケットキューの両方でフレームドロップが発生します。softirq ランタイムが長くなると、アプリケーションが高負荷のシステムで稼働する機会が少なくなるので、高ボリュームのマルチキャストグループをリッスンするアプリケーションの数が増えればマルチキャストフレームが失われる割合が高くなります。
「ソケットキュー」 または 「NIC ハードウェアバッファー」 の説明にあるように、ソケットキューと NIC ハードウェアバッファーを最適化することで、このフレームの損失を解決できます。別の方法としては、アプリケーションのソケットの使用を最適化することもできます。これを行うには、アプリケーションが単一ソケットを制御するように設定し、受信したネットワークデータを迅速に別のユーザースペースのプロセスに配布します。