高度なGoスケジューラのチューニング: HFTワークロードのためのゴルーチンをOSスレッドに固定する
GoのHFTシステムにおいて、goroutineをOSスレッドに固定することは、NUMAペナルティとロック競合を大幅に減少させることができます。この記事では、runtime.LockOSThread()を活用し、スレッドのアフィニティを管理し、マルチソケットアーキテクチャ向けにGoコードを最適化する方法を探ります。 NUMAの悪夢 goroutineの固定の詳細に入る前に、HFTシステムにとってNUMA(非均一メモリアクセス)アーキテクチャがなぜ厄介なのかを簡単に振り返りましょう: * メモリアクセスのレイテンシは、どのCPUコアがどのメモリバンクにアクセスするかによって異なります * Goのスケジューラは、デフォルトではgoroutineのスケジューリング時にNUMAトポロジーを考慮しません * これにより、頻繁なクロスソケットメモリアクセスが発生し、パフォーマンスが低下する可能性があります HFTの世界では、ナノ秒単位の違いが利益と損失を分けることがあります。しかし、心配しないでください。この問題を解決するためのツールがあります! Goroutineの固定:秘密...