23.2. システムトポロジーの種類
現代のコンピューティングにおいて、単一の CPU という考え方は誤解を招くものです。現代のほとんどのシステムは、複数のプロセッサーを搭載しているためです。システムのトポロジーとは、これらのプロセッサーを相互に、また他のシステムリソースにどのように接続するかという接続形態のことです。これは、システムとアプリケーションのパフォーマンス、およびシステムのチューニングに関する考慮事項に影響を及ぼす可能性があります。
現代のコンピューティングで使用されるトポロジーの主なタイプを以下に示します。
- Symmetric Multi-Processor (SMP) トポロジー
- SMP トポロジーにより、すべてのプロセッサーが同時にメモリーにアクセスできるようになります。ただし、共有および同等のメモリーアクセスは、本質的にすべての CPU からのメモリーアクセスをシリアライズするため、SMP システムのスケーリング制約が一般的に許容できないものとして表示されます。このため、最近のサーバーシステムはすべて NUMA マシンです。
- Non-Uniform Memory Access (NUMA) トポロジー
NUMA トポロジーは、SMP トポロジーよりも最近開発されました。NUMA システムでは、複数のプロセッサーが 1 つのソケット上で物理的にグループ化されます。各ソケットには専用のメモリー領域があります。そのソケット上のプロセッサーはこのメモリーにローカルにアクセスできます。ソケット、そのメモリー、および関連するプロセッサーを合わせたものが、ノードと呼ばれます。同じノード上のプロセッサーは、そのノードのメモリーバンクには高速でアクセスできますが、他のノードのメモリーバンクへのアクセスはより低速になります。
そのため、ローカル以外のメモリーにアクセスするとパフォーマンスが低下します。したがって、NUMA トポロジーを使用するシステム上のパフォーマンスに敏感なアプリケーションは、アプリケーションを実行するプロセッサーと同じノードにあるメモリーにアクセスする必要があり、可能な限りリモートメモリーにアクセスしないようにしてください。
パフォーマンスに敏感するマルチスレッドアプリケーションは、特定のプロセッサーではなく特定の NUMA ノードで実行されるように設定することで、メリットが得られます。これが適切なかどうかは、システムやアプリケーションの要件によって異なります。
- 複数のアプリケーションスレッドが同じキャッシュされたデータにアクセスする場合、同じプロセッサーでこれらのスレッドを実行するように設定することが適切な場合があります。
-
異なるデータにアクセスしてキャッシュする複数のスレッドが同じプロセッサー上で実行される場合、各スレッドが前のスレッドによってアクセスされたキャッシュデータを追い出す可能性があります。これは、各スレッドがキャッシュを '失い'、メモリーからデータをフェッチし、これをキャッシュで置き換えていることを意味します。
perfツールを使用して、過剰な数のキャッシュミスをチェックします。