Merge branch 'postk_topic-contiguous_pte' into development

* Merge cd7ab307fae9bc8aa49d23b32becf37368a1603e
* Merge commit is changed to one commit for gerrit

Change-Id: I75f0f4cf6b8b3286284638ac2c7816c5257551e4
This commit is contained in:
Dominique Martinet
2019-01-31 11:03:46 +09:00
parent 7f1c17fc4c
commit 6d38c34993
55 changed files with 2757 additions and 17 deletions

170
test/contiguous_pte/README Normal file
View File

@@ -0,0 +1,170 @@
===================
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