この記事は、インテル® デベロッパー・ゾーンに公開されている「Benefits of Intel(R) Cache Monitoring Technology in the Intel(R) Xeon(TM) Processor E5 v3 Family」 (https://software.intel.com/en-us/blogs/2014/06/18/benefit-of-cache-monitoring) の日本語参考訳です。
この記事の PDF 版はこちらからご利用になれます。
はじめに
新しいプロセッサーにはより多くのコアが搭載されています。コア数の増加に伴い、同時に実行可能なワークロードの種類も増えています。ワークロードはシングルスレッドまたはマルチスレッドのアプリケーションで、仮想環境またはネイティブ OS 環境で実行できます。スレッド、アプリケーション、または仮想マシン (VM) を同時に実行する場合、それぞれに必要な共有リソース (キャッシュ領域やメモリー帯域幅など) は異なります。例えば、いくつかの VM (それぞれが多数のアプリケーションを実行している) がプロセッサー上のコアを共有する場合、最終レベル (L3) キャッシュも共有されます。そのため、キャッシュが効率良く利用されなかったり、アプリケーションのパフォーマンスが低下または不定になることがあります。インテル® Xeon® プロセッサー E5 2600 v3 製品ファミリーには、最終レベルキャッシュ (LLC) の利用状況をモニタリングし、これらの問題の特定に役立つハードウェア機能があります。
インテルのキャッシュ・モニタリング・テクノロジー (CMT) とは?
CMT は、オペレーティング・システム (OS) またはハイパーバイザー/仮想マシンモニター (VMM) が、実行しているアプリケーションのキャッシュの利用状況を特定できるようにする新機能です。現在、L3 キャッシュ (ほとんどのサーバー・プラットフォームの最終レベルキャッシュ) のモニタリングに対応しています。
CMT は次の機能を提供します。
- プラットフォームでこのモニタリング機能が利用可能かどうかを確認します (CPUID を使用)。
- OS または VMM で、コアで実行する各アプリケーションまたは VM にソフトウェア定義の ID を割り当てます。この ID はリソース・モニタリング ID (RMID) と呼びます。
- RMID ごとのキャッシュの占有状況をモニタリングします。
- OS または VMM で、特定の RMID の LLC 占有状況を読み取ります。
CMT の仕組み
まず、プラットフォームと OS/VMM がこのモニタリング機能をサポートしている必要があります。CPUID でこの機能がサポートされていることを確認したら、スレッドと VM に RMID を割り当てます。スレッドへの割り当てには、スレッドごとのモデル固有レジスター (MSR) を利用します。MSR を利用することで、OS/VMM は特定のスレッドに RMID 値を設定できます。スレッドと RMID を関連付けたら、ソフトウェアを実行し、ハードウェアで占有状況を追跡します。システム・ソフトウェアは、MSR インターフェイスを利用して、特定の RMID (つまり、特定のスレッド、アプリケーション、VM、またはこれらの組み合わせ) のイベントデータをいつでも読み取ることができます。MSR インターフェイスは 2 つのレジスターで構成されています。1 つは対象 RMID とイベントコードを指定し、もう 1 つはデータを提供し、エラーの有無を示します。
CMT の利用方法
この機能を利用して、システム全体のパフォーマンスを最適化する方法はいくつかあります。
- キャッシュ階層の特定のレベルを過度に占有しているアプリケーションを特定し、必要に応じて別のソケットに移動することができます。
- 各アプリケーションで利用可能な共有キャッシュの量を最適化し、キャッシュミスを回避するため、ソケットレベルでアプリケーションの組み合わせを調整できます。
- データセンター環境で、システム管理者がキャッシュの利用状況データを使用して、VM ごとのリソースの利用状況と競合を把握し、スケジュール・ポリシーを調整できるようにします。
- 場合によっては、アプリケーションのパフォーマンスの履歴を記録し、利用可能なキャッシュ領域とアプリケーション・パフォーマンスの最適なバランスを追跡できます。そして、特定のパフォーマンスを達成する必要がある場合に、キャッシュを考慮したスケジュールにより、そのパフォーマンスに必要なキャッシュ容量を確保するようにできます。
CMT と Xen
Xen でキャッシュ・モニタリングを使用する方法は、オンラインの記事が参考になります。いくつかのステップがありますが、最初にシステムでキャッシュ・モニタリング機能がサポートされているかどうかと初期化方法を確認します。次に、全般および各ドメイン RMID でこの機能を有効にします。すべてのソケットからキャッシュ・モニタリング情報を収集することが重要です。ゲスト OS を設定し実行する場合は、キャッシュ・モニタリング・サービスを動的にアタッチ/デタッチするための記事 (英語) が非常に役立ちます。
まとめ
CMT を利用して、OS/VMM でスレッド、アプリケーション、VM のキャッシュの利用状況をモニタリングすることができます。キャッシュの利用状況を分析することで、OS/VMM はシステム全体のパフォーマンスを向上するようにスケジュール・ポリシーを最適化できます。キャッシュ・モニタリングにより、同時に実行中の個々のスレッド、アプリケーション、VM のキャッシュの利用状況を実行時に追跡し、高度な最適化手法をリアルタイムに適用することが可能です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください