add Test programs for Issue#1029

This commit is contained in:
Ken Sato
2018-01-10 11:22:05 +09:00
parent 0fa88f513f
commit 38bbb4e390
6 changed files with 384 additions and 0 deletions

View File

@ -0,0 +1,69 @@
【Issue#1029 動作確認】
Issue#1029が解決され、既存機能にも影響がないことをストレステスト用いた確認1項目と、
schedule()の基本動作確認12項目の計13項目のテストによって確認した。
①ストレステストを用いた確認
以下のコマンドを実行し、Issue#1029で報告された事象が発生せず、テストがパスすることを確認した。
# ./mck-mcexec.sh ./killit -np 16 -nosignal - ./signalonfutex
②schedule()の基本動作確認
schedule()実行時のコンテキストスイッチ前thread(prev)と、
runqに積まれている実行待ちthreadの状態の組み合わせで、12項目のテストを実施した。
基本動作確認の詳細を以下に示す。
1. ファイルの説明
1029.patch 動作確認用デバッグプリントを追加するパッチファイル
sched_test.c 修正対象のschedule()の動作を確認するプログラム
複数の子プロセスをfork()し、それぞれの子プロセスでsched_setaffinity()を行う
go_test.c schedule()の動作確認テストを実施するプログラム
sched_testプログラムを並列実行する
result.log go_testプログラムの実行結果
2. テストの実行方法
以下の手順でテストを実行する
1. 1029.patch をMcKernelのソースコードに適用し、ビルドとインストールを行う
2. MakefileのMCK_DIR変数の内容を、McKernelがインストールされているディレクトリに変更する
3. McKernelを起動する
4. sh make test を実行する
3. テスト項目
schedule()実行時のコンテキストスイッチ前thread(prev)と、
runqに積まれている実行待ちthreadの状態の以下の組み合わせで、
schedule()が想定どおりの動作をすることを確認する。
◆prevがidleのケース
CT_001: runqが空
⇒ コンテキストスイッチを行わない
CT_002: runqに実行開始前のthreadが存在する
⇒ 非idleのthreadにスイッチする
CT_003: runqに実行開始前のthreadが存在しない
⇒ 非idleのthreadにスイッチする
◆schedule時点で当該CPUのCPU_FLAGS_NEED_MIGRATEが活性化しているケース
CT_004: runqが空
⇒ idleにスイッチする
CT_005: runqに実行開始前のthreadが存在する
⇒ idleにスイッチする
CT_006: runqに実行開始前のthreadが存在しない
⇒ idleにスイッチする
◆prevがidle以外で、statusがPS_EXITED以外
CT_007: runqが空
⇒ idleにスイッチする
CT_008: runqに実行開始前のthreadが存在する
⇒ 非idleのthreadにスイッチする
CT_009: runqに実行開始前のthreadが存在しない
⇒ 非idleのthreadにスイッチする
◆prevがidle以外で、statusがPS_EXITED
CT_010: runqが空
⇒ idleにスイッチする
CT_011: runqに実行開始前のthreadが存在する
⇒ idleにスイッチする
CT_012: runqに実行開始前のthreadが存在しない
⇒ idleにスイッチする
4. 結果
テストプログラムの実行結果はresult.log に出力される。
上記12項目で[OK]が出力されていることを確認した。