コンピュータサイエンスにおいて、大群問題とは、あるイベントが発生したときに、そのイベントを待っている多数のプロセスまたはスレッドが起動されるが、そのイベントを処理できるプロセスは 1 つしかない場合に発生します。プロセスが起動すると、それぞれがイベントの処理を試みますが、処理に成功するのは 1 つだけです。すべてのプロセスがリソースを奪い合い、大群が再び落ち着くまで、コンピューターがフリーズする可能性があります。[1]
緩和
Linuxカーネルは、単一のファイル記述子への要求に対する応答をシリアル化するため、1つのスレッドまたはプロセスのみが起動されます。[2] Linuxカーネルのバージョン4.5のepoll()では、EPOLLEXCLUSIVEフラグが追加されました。これにより、複数のepollセット(異なるスレッドまたは異なるプロセス)が同じリソースを待機し、1つのセットのみが起動されます。特定のワークロードでは、このフラグにより処理時間が大幅に短縮されます。[3]
同様に、Microsoft Windowsでは、I/O完了ポートは、イベントが発生したときに完了ポートで待機しているスレッドのうちの1つだけが起動されるように構成できるため、サンダーリング・ハード問題を軽減できます。[4]
バックオフ メカニズム (例:指数バックオフ) に依存するシステムでは、クライアントは連続する再試行の間に特定の時間待機することで、失敗した呼び出しを再試行します。サンダーリング ハード問題を回避するために、クライアント間の同期を中断して衝突を回避するために、意図的にジッターを導入することができます。このアプローチでは、再試行間の待機間隔にランダム性が追加され、クライアントが同期されなくなります。
参照
参考文献
- ^ 「Thundering Herd Problem」。The Jargon File (バージョン 4.4.7) 。2019年7 月 9 日閲覧。
- ^ 「Linux には Thundering Herd 問題はもう存在するのか」。stackoverflow.com。2019年7 月 9 日閲覧。
- ^ Madars, Vitolins (2015-12-05). 「EPOLLEXCLUSIVE Linux カーネル パッチ テスト」mvitolin . 2020 年 8 月 11 日閲覧。
- ^ 「IO 完了ポート — Matt Godbolt のブログ」xania.org 。 2019 年 1 月 23 日閲覧。
外部リンク
- Linuxにおけるこの観察についての議論
- 指数バックオフとジッターによる再試行の改善
