=================== Advance preparation =================== 1) install IHK/McKernel 2) set up configuration file $ cp /mck_test_config.sample ~/.mck_test_config $ emacs ~/.mck_test_config $ cat ~/.mck_test_config # Config file for McKernel tests : ${BIN:=/opt/ppos/bin} : ${SBIN:=/opt/ppos/sbin} : ${OSTEST:=} : ${LTP:=} : ${BOOTPARAM:=-c 4-7 -m 8192M -e anon_on_demand} : ${MCKERNEL_VERSION:=1.5.0} 3) compile test program $ cd /test/contiguous_pte $ patch -p1 < arm64_4KB_setting.patch (4KB granule only) $ make ========== How to run ========== $ cd /test/contiguous_pte $ sh ./go_contiguous_pte_test.sh | tee result.log ========== テストが確認する内容は以下の通り。 [基本動作] ContiguousPTEの基本的な動作を確認する。 #0: shmgetのflagにContiguousPTEのサイズが指定可能なこと。 サイズはSHM_HUGE_FIRST_CONT_BLOCKを指定する。   * 64KiBページサイズにおいては、     ARMv8.2-LPA環境の時のみ有効なテスト。 ARMv8.2-LPA環境では無いときは、     TP実行結果がNGになることが期待動作となる。 #1: shmgetのflagにContiguous PTEのサイズが指定可能なこと。 サイズはSHM_HUGE_SECOND_CONT_BLOCKを指定する。 #2: shmgetのflagにContiguous PTEのサイズが指定可能なこと。 サイズはSHM_HUGE_THIRD_CONT_BLOCKを指定する。 #3: mapのflagにContiguous PTEのサイズが指定可能なこと。 サイズはMAP_HUGE_FIRST_CONT_BLOCKを指定する。   * 64KiBページサイズにおいては、     ARMv8.2-LPA環境の時のみ有効なテスト。 ARMv8.2-LPA環境では無いときは、     TP実行結果がNGになることが期待動作となる。 #4: mmapのflagにContiguous PTEのサイズが指定可能なこと。 サイズはMAP_HUGE_SECOND_CONT_BLOCKを指定する。 #5: mmapのflagにContiguous PTEのサイズが指定可能なこと。 サイズはSHM_HUGE_THIRD_CONT_BLOCKを指定する。 #6: ContiguousPTEが割当てられたプロセスがfork可能なこと。 #7: ページテーブルの登録状況が確認できない状況でも、 上位のページテーブルの状態をチェックして、 ContiguousPTEのサイズでメモリを割り当てること。 #8: shmgetのTHPでContiguous PTEのメモリ確保が出来ること。 * shmgetは拡張THPが使えないのでNGとなる(Issue #1241) #9: mmaptのTHPでContiguous PTEのメモリ確保が出来ること。 [メモリ割当て動作] フラグ指定のmmapでContiguous PTEが割当て動作を確認する。 (mmapはmnumap,mremapのテストの初期化処理にてメモリ確保動作を確認) (shmgetはmadviseテストの初期化処理にてメモリ確保動作を確認) #100: 次の条件の下で、ContiguousPTEの割当が行えること。 対象テーブル: lv2、隣接PTE: 割り当て無し、端数: なし    * 対象ページテーブルのContiguousPTEページサイズよりも 大きな空きメモリが無い環境ではTPがSIGSEGVでNGになることが     期待動作となる。 #104: 次の条件の下で、ContiguousPTEの割当が行えないこと。 対象テーブル: lv3、隣接PTE: 割当てあり(head位置)、端数: なし #105: 次の条件の下で、ContiguousPTEの割当が行えないこと。    対象テーブル: lv3、隣接PTE: 割当てあり(tail位置)、端数: なし #106: 次の条件の下で、ContiguousPTEの割当が行えないこと。    ContiguousPTEのサイズでアラインされているVA/PAだが、    割当てページ数(メモリサイズ)が、ContiguousPTEの枚数に満たない。    対象テーブルはlv2。 #107: 次の条件の下で、ContiguousPTEの割当が行えないこと。 ContiguousPTEのサイズでアラインされているVA/PAだが、 割当てページ数(メモリサイズ)が、ContiguousPTEの枚数に満たない。 対象テーブルはlv3。 [munmapテスト] munmapでContiguous PTEでマップされた領域[a, b]に含まれるメモリ範囲[p ,q]をunmapした際に、 対象領域と、その前後のPTEが期待通りになっているかを確認する。 以下、<開始アドレス、終了アドレス>の形式で設定の組み合わせを示す。 #200:

#201:

#202:

#203:

#204: #205:

#206: #207:

#208: [mremapテスト] mremapでContiguous PTEでマップされた領域[a, b]に含まれるメモリ範囲[p ,q]をmremapした際に、 対象領域と、その前後のPTEが期待通りになっているかを確認する。 以下、<開始アドレス、終了アドレス>の形式で設定の組み合わせを示す。 #300:

#301:

#302:

#303:

#304: #305:

#306: #307:

#308: #309: 移動先アドレスがContiguousPTEのサイズにアラインされないようにし、    ContiguousPTEが解除されることが#304と異なる。 [madvise(MADV_REMOVE)テスト] madviseでContiguous PTEでマップした領域を無効化できることを確認する。 * MADV_REMOVEを使うプログラムを流すと   McKはプログラムの連続実行が出来なくなり再起動が必要 #400 Contiguous PTEを無効化できること #409 Contiguous PTEを中抜きするMADV_REMOVEができないこと    Contiguous PTEのhead PTEのアドレスを対象とする。 #410 Contiguous PTEを中抜きするMADV_REMOVEができないこと    Contiguous PTEのtail PTEのアドレスを対象とする。 -- README COPYRIGHT FUJITSU LIMITED 2018