SunVTS 4.4 テストリファレンスマニュアル

第 37 章 キャッシュ整合性テスト (mpconstest)

mpconstest は、1 つ以上のキャッシュラインに対して競合を作ることによって、マルチプロセッサ環境でキャッシュの整合性が保たれていることを検証します。このテストにはいくつかのサブテストがあり、その各々が、キャッシュラインに対して異なる種類の競合を作るように設計されています。各サブテストは様々な方法を使用して、共有メモリーバッファー、ストライドサイズ、中間格納または読み込みをテストします。

mpconstest は起動されると、共有メモリーバッファーを作成します。次に、システム上の CPU の数を判定します。それぞれの CPU に対して、次の手順でテストを実行します。

  1. スレッドをフォークし、CPU にバインドします。

  2. 選択したサブテストをスレッドで実行します。

  3. 各 CPU に、1 〜 n の ID 番号を割り当てます。ID 1 が割り当てられた CPU が、マスターとみなされます。

上記の手順が、サブテストのそれぞれについて繰り返されます。1 度に選択できるのは、1 つのサブテストだけです。

このテストは、スケーラブルテストではありません。

mpconstest テストの条件

このテストでは、テスト対象のシステムに少なくとも 2 つの CPU が必要です。この条件が満たされていないと、このテストはオプションとして表示されません。

mpconstest は、SPARC CPU ハードウェアアーキテクチャーの v8plus 規格をサポートするマシンでだけ実行できます。v8plus 命令がサポートされていない場合は、mpconstest はテスト選択 GUI に表示されません。マシンが v8plus 規格をサポートするかどうかを判定するには、そのマシンのコマンドプロンプトで、次のように入力します。

% isalist

sparcv9+vis sparcv9 sparcv8plus+vis sparcv8plus sparcv8


注 -

この一連のテストは、マシンの動作による影響を非常に受けやすいので、他のテストと同時に実行しないでください。


mpconstest のサブテスト

表 37-1 mpconstest のサブテスト

テスト 

説明 

cons1 

各 CPU は、バイト、ハーフワード、またはフルワードのストライドサイズで、連続した位置に書き込みを行います。このサブテストは、単一のキャッシュラインに対して競合を作成します。共有メモリーへの書き込みが継続して行われる間、他の読み込みや格納は実行されません。 

cons2 

各 CPU は、最後の書き込み位置から cachesize バイト分離れた位置から、読み取りを実行します。読み取りのたびに、直前に書き込まれたラインが書き戻されます。このテストは、キャッシュ内のすべてのラインを CPU がアクセスするまで継続します。

cons3 

各ラインのただ 1 つのダブルワードがアクセスされること以外は、cons1 と同様です。このサブテストは、単一のキャッシュラインではなく複数のキャッシュラインに対して同時競合を作成します。 

cons4 

各 CPU が CPU ID の検出と次の CPU ID の書き込みの間に、1 つの store byte (storeb) 操作と 1 つの load byte (loadb) 操作を行うこと以外は、cons2 と同様です。storeb 操作と loadb 操作の対象は、CPU が読み取ったばかりのライン内の固有な 1 バイトです。この対象は、共有ラインの cachesize バイト内の異なるダブルワードとして認識されます。

cons5 

各 CPU が CPU ID の検出と次の CPU ID の書き込みの間に、1 つの storeb 操作と 1 つの loadb 操作を行うこと以外は、cons3 と同様です。storeb 操作の対象は、CPU が CPU ID から読み取ったばかりのライン内の次のダブルワードの固有な 1 バイトです。storeb 操作のデータは各 CPU に対して一意であり、対象ラインのアドレスが変わるたびに変わります。

cons6 

各ラインのただ 1 つのダブルワードがアクセスされること以外は、cons1 と同様です。このサブテストは、単一のキャッシュラインではなく複数のキャッシュラインに対して同時競合を作成します。 

cons7 

各 CPU が CPU ID の検出と次の CPU ID の書き込みの間に、2 つの storeb 操作と 1 つの loadh 操作を行うこと以外は、cons3 と同様です。storeb 操作と loadh 操作の対象は、ID を含んでいる共有メモリーバッファの一部になっていない、共有ライン内のダブルワードの 2 つの連続したバイトです。対象となる storeb 命令と loadh 命令のアドレスは、一定に保たれます。最初の storeb 命令がキャッシュラインの所有権を取得し、2 番目の storeb 命令は書き込みヒットとして実行されます。この動作は、その他の CPU が ID を含む共有ラインの読み取りと書き込みを実行している間に同時に行われます。

cons8 

各 CPU が CPU ID の検出と次の CPU ID の書き込みの間に、1 つのstoreb 操作と 1 つの loadb 操作を行うこと以外は、cons3 と同様です。storeb 操作と loadb 操作の対象は、そのライン番号が ID を含むライン番号と同一である、専用 (非共有) ラインのダブルワードの 1 つの固有なバイトです。storeb 操作のデータは各 CPU に対して一意であり、ID を含むラインのアドレスが変わるたびに変わります。

cons9 

storeb 操作と loadb 操作の対象が、そのアドレスがテスト全体を通じて変わらない、専用ラインのダブルワードの 1 つの固有なバイトであること以外は、cons8 と同様です。

cons10 

2 つのstoreb 操作と 2 つの loadb 操作が専用 (非共有) ラインに対して行われること以外は、cons9 と同様です。2 番目の storeb 操作の対象は、最初の storeb 操作の対象から cachesize バイト分離れた位置にあります。直接マップキャッシュでは、この操作で、最初の storeb 操作で書き込まれた非共有データが書き戻されます。loadb 操作は、書き戻しが正しく行われることを保証するために storeb 操作の後に実行されます。

cons11 

storeb 操作と loadb 操作の対象が専用ラインではなく、共有ラインに対してであること以外は、cons10 と同様です。

cons12 

storeb 操作と loadb 操作の代わりに、2 つの store double (stored) 操作と load double (loadd) 操作が使用されること以外は、cons7 と同様です。stored 操作と loadd 操作の対象は、共有ラインの連続する 2 ダブルワードです。このテストは、ID を含むラインの共有と所有の状態が変化している間にも、ダブルワード操作が正しく行われることを検証するように設計されています。

cons13 〜 cons17 

これらのテストは、中間操作、ストライドサイズなどを少し変えたもので、新たなインタフェースは何も必要ありません。 

mpconstest のオプション

次のダイアログボックスを表示するには、システムマップにあるテスト名を右クリックし、Test Parameter Options を選択します。システムマップにこのテスト名が表示されない場合は、グループツリーを展開すると表示される場合があります。展開しても表示されない場合は、このテストに合ったデバイスがシステムに含まれていない可能性があります。詳細は、『SunVTS 4.4 ユーザーマニュアル』を参照してください。

図 37-1 mpconstest のテストパラメータオプションダイアログボックス

Graphic

表 37-2 mpconstest のオプション

オプション 

説明 

Test Name 

実行するサブテストを選択します。 

Number of Timeout Iterations 

タイムアウトまでにテストを実行できる回数を設定します。デフォルトは 1 です。各タイムアウトは、前回のタイムアウトよりもかなり時間が経過した後に発生することに注意してください。つまり、最初のタイムアウトが T 時間単位後に発生したとすると、2 回目は T の後 2T で、3 回目は 2T の後 3T で発生します。

Lock Buffer 

メモリー内のバッファをロックします。デフォルトではロックなしです。メモリー内のバッファをロックすると、COMA (Cache Only Memory Architecture) が使用不可になります。 

Atomic Mode 

不可分な命令スワップを使用します。デフォルトでは使用不可になっています。 

Byte Mode 

バイト命令を使用して読み込みと格納を行います。デフォルトでは使用不可になっています。 

Immediate Mode 

cons1、cons2、cons3、cons15、cons16、cons17 以外のすべてのサブテストをサポートします。 

Random Mode 

ランダムモードを使用可能にします。 

Reverse Mode 

共有メモリーバッファーを逆方向にトラバースします。デフォルトでは使用不可になっています。 

Prefetch Mode 

読み取りと書き込みにプリフェッチを設定します。デフォルトでは使用不可になっています。 

CoreFile 

コアファイルを生成します。予期しないシグナルの場合は終了します。デフォルトでは使用不可になっています。 

Ecache Disable 

外部キャッシュを使用不可にします。デフォルトでは使用可能になっています。 

Trigger 

1 つのプロセッサが障害を検出した場合に、すべてのプロセッサに割り込みシグナルを送信します。デフォルトでは使用不可になっています。 

Offset 

継続した書き込みと書き込みの間の、ラインサイズのオフセットを指定します。デフォルトでは使用不可になっています。 

CPU Wait Count 

CPU の数が cpucount より少ない場合、最初に CPU 1 が書き込みを行うようにします。デフォルトでは使用不可になっています。

サブテストの cons15、cons16、および cons17 では、このオプションはサポートされていません。 

Number of Loops 

テストループの数を選択します。デフォルトは 5 です。 

Number of Passes 

パスの数を選択します。パスの数が多いほど、システムの負担が大きくなります。パスの数を 0 に設定すると、永久ループでテストが実行されます。パスを 0 に設定できるのは、コマンド行モードでだけです。GUI からは設定できません。デフォルトは 1 です。 

Memory Size 

共有メモリーバッファーのサイズをメガバイト単位で選択します。デフォルトは 128 です。 

Random Mode Seed 

乱数シードをユーザーの指定値に設定します。デフォルトでは乱数がシード値に選ばれます。 

mpconstest のテストモード

表 37-3 mpconstest のテストモード

テストモード 

サポート 

説明 

接続テスト 

× 

サポートされていません。 

機能テスト 

(オフライン) 

○ 

フルテストを実行します。

mpconstest のコマンド行構文

/opt/SUNWvts/bin/mpconstest 標準引数 -o tst=Cons1|Cons2,itm=数値,lck,a,b,c,e,h,loops=数値,memsize=メモリーサイズ, wait=cpucount,passes=パス,r,t,x,y,i,q,seed=数値

表 37-4 mpconstest のコマンド行構文

引数 

説明 

tst=Cons1|Cons2|Cons3|Cons4| Cons5|Cons6| Cons7|Cons8| Cons9|Cons10| Cons11|Cons12| Cons12|Cons13| Cons14|Cons15| Cons16|Cons17

選択肢の範囲は、サブテスト cons1 〜 cons17 の間で利用できます。 

itm=数値

タイムアウトまでにテストを実行できる回数を設定します。デフォルトは 1 です。各タイムアウトは、前回のタイムアウトよりもかなり時間が経過した後に発生することに注意してください。つまり、最初のタイムアウトが T 時間単位後に発生したとすると、2 回目は T の後 2T で、3 回目は 2T の後 3T で発生します。

lck

メモリー内のバッファをロックします。デフォルトではロックなしです。メモリー内のバッファをロックすると、COMA (Cache Only Memory Architecture) が使用不可になります。 

a

不可分モードにします。不可分命令スワップを使用します。 

b

バイトモードにします。バイト命令を使用して読み込みと格納を行います。 

c

コアファイルを生成します。予期しないシグナルの場合は終了します。 

e

外部キャッシュを使用不可にします。 

h

使用法メッセージを出力します。 

loops=数値

反復のループ数を設定します。デフォルトは 5 です。 

memsize=メモリーサイズ

共有メモリーバッファーのサイズをメガバイト単位で選択します。デフォルトは 128 です。 

wait=cpucount

CPU の数が cpucount より少ない場合、最初に CPU 1 が書き込みを行うようにします。

passes=パス

パスの数を選択します。パスの数が多いほど、システムの負担が大きくなります。パスの数を 0 に設定すると、永久ループでテストが実行されます。パスを 0 に設定できるのは、コマンド行モードでだけです。GUI からは設定できません。デフォルトは 1 です。 

r

反転モードを使用可能にします。共有メモリーバッファーを逆方向にトラバースします。 

t

トリガーを使用可能にします。1 つのプロセッサが障害を検出した場合に、すべてのプロセッサに割り込みシグナルを送信します。 

x

プリフェッチを可能にします。読み取りと書き込みをプリフェッチで行います。 

y

オフセットを使用可能にします。継続した書き込みと書き込みの間の、ラインサイズのオフセットを指定します。 

i

即時モードを使用可能にします。サブテストの cons1、cons2、cons3、cons15、および cons17 は、サポートされていません。 

q

ランダムモードを使用可能にします。 

seed

乱数シード値をユーザーの指定値に設定します。