Files
mckernel/test/mng_mod/issues/1029
2018-01-10 11:22:05 +09:00
..
2018-01-10 11:22:05 +09:00
2018-01-10 11:22:05 +09:00
2018-01-10 11:22:05 +09:00
2018-01-10 11:22:05 +09:00
2018-01-10 11:22:05 +09:00
2018-01-10 11:22:05 +09:00

This file contains ambiguous Unicode characters

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]が出力されていることを確認した。