This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
【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]が出力されていることを確認した。