This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
===================
Advance preparation
===================
1) install IHK/McKernel
2) set up configuration file
$ cp <mckernel>/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 <mckernel>/test/contiguous_pte
$ patch -p1 < arm64_4KB_setting.patch (4KB granule only)
$ make
==========
How to run
==========
$ cd <mckernel>/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: <p - PAGE_SIZE, p + PAGE_SIZE>
#201: <p + PAGE_SIZE, p + PAGE_SIZE>
#202: <p - PAGE_SIZE, p - PAGE_SIZE>
#203: <p + PAGE_SIZE, p>
#204: <p, p>
#205: <p - PAGE_SIZE, p>
#206: <p, p + PAGE_SIZE>
#207: <p + PAGE_SIZE, p - PAGE_SIZE>
#208: <p, p - PAGE_SIZE>
[mremapテスト]
mremapでContiguous PTEでマップされた領域[a, b]に含まれるメモリ範囲[p ,q]をmremapした際に、
対象領域と、その前後のPTEが期待通りになっているかを確認する。
以下、<開始アドレス、終了アドレス>の形式で設定の組み合わせを示す。
#300: <p - PAGE_SIZE, p + PAGE_SIZE>
#301: <p + PAGE_SIZE, p + PAGE_SIZE>
#302: <p - PAGE_SIZE, p - PAGE_SIZE>
#303: <p + PAGE_SIZE, p>
#304: <p, p>
#305: <p - PAGE_SIZE, p>
#306: <p, p + PAGE_SIZE>
#307: <p + PAGE_SIZE, p - PAGE_SIZE>
#308: <p, p - PAGE_SIZE>
#309: <p, p>
移動先アドレスが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