mondriaan memory protection の調査

29
Mondriaan Memory Prote ction ののの のののの : のののの

Upload: rob

Post on 15-Jan-2016

45 views

Category:

Documents


2 download

DESCRIPTION

Mondriaan Memory Protection の調査. 調べた人 : 前田俊行. 一言でいうと. ハードウェアのメモリ保護を ワード単位にします 理由 : 細粒度メモリ保護が欲しい → でも今のメモリ保護はページ単位で使えない → じゃあワード単位にしよう. 参考文献. E. Witchel, J. Cates and K. Asanovic “ Mondrian Memory Protection ” In proc. of ASPLOS 2002. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Mondriaan Memory Protection の調査

Mondriaan Memory Protectionの調査

調べた人 : 前田俊行

Page 2: Mondriaan Memory Protection の調査

一言でいうと• ハードウェアのメモリ保護を

ワード単位にします

– 理由 :細粒度メモリ保護が欲しい→ でも今のメモリ保護はページ単位で使えない→ じゃあワード単位にしよう

Page 3: Mondriaan Memory Protection の調査

参考文献• E. Witchel, J. Cates and K. Asanovic

“Mondrian Memory Protection”In proc. of ASPLOS 2002.

• E. Witchel and K. Asanovic“Hardware Works, Software Doesn’t: Enforcing Modularity with Mondriaan Memory Protection”In proc. of HotOS 2003.

• E. Witchel, J. Rhee and K. Asanovic“Mondrix: Memory Isolation for Linux using Mondriaan Memory Protection”In proc. of SOSP 2005.

Page 4: Mondriaan Memory Protection の調査

細粒度メモリ保護とは• 1 つのアドレス空間内で

複数のメモリ保護ドメインを持つこと• たいてい 1 スレッドに 1 保護ドメインを割り当てる

Page 5: Mondriaan Memory Protection の調査

なぜ “ Mondriaan” か

• Piet Mondriaan (1872-1944)

Composition with Red, Yellow and Blue (1921)

Page 6: Mondriaan Memory Protection の調査

どうやって実現するか ?

• “Permissions Table” を導入する– Permissions Table

• マッピング情報のないページテーブルのようなもの

• ワード単位でメモリ保護を指定できる• ( 実装方式については後述 )

• 元々の ISA は変わらない– Permissions Table を「付け加える」だけ

Page 7: Mondriaan Memory Protection の調査

MMP (Mondriaan Memory Protection)System 概略図

Page 8: Mondriaan Memory Protection の調査

Sidecar: 保護情報キャッシュ その 1

メモリアクセスに使えるレジスタそれぞれに用意

メモリアクセス時に使った保護情報をキャッシュする

Page 9: Mondriaan Memory Protection の調査

PLB: 保護情報キャッシュ その 2

Protection Lookaside Buffer:TLB のようなもの ( タグ付 )

PLB のタグ

Page 10: Mondriaan Memory Protection の調査

Permissions Table

ページテーブルのようなもの

Page 11: Mondriaan Memory Protection の調査

ここで重要な問題• Permissions Table をどう実装する ?

– この論文が示す方法は 3 つ• SST: Sorted Segment Table• MLPT: Multi-level Permissions Table• MLPT + SST

Page 12: Mondriaan Memory Protection の調査

SST: Sorted Segment Table

• 保護範囲 (= セグメント ) ごとに保護を指定する

Perm の値の意味

0x00000000

0x00100020SST で表すと…

メモリイメージ

Page 13: Mondriaan Memory Protection の調査

SST の利点• Table のサイズが小さくなる (?)

– Table のサイズ = セグメントの数

メモリイメージ

00000000 000100110011000100100010000100

SST

SST で表すと…

Page 14: Mondriaan Memory Protection の調査

SST の欠点• Table の検索がバイナリサーチ (= O(log n))• Table の更新が重い

メモリイメージ

00000000 000100110011000100100010000100

SST

ここに新たなセグメントを追加するには ?

1. まず、該当する

エントリを探す( バイナリサー

チ )

2. 新たなエントリを追加する

1000

これらのエントリをずらさなければならない

Page 15: Mondriaan Memory Protection の調査

MLPT: Multi-level Protection Table

• アドレスごとに保護を指定する

アドレス分解

Table のエントリサイズ = 32 bit

Perm Table Base

1 エントリで指定できる保護 = (32 / 2) 個 = 16 個指定できる保護単位 = (64 / 16) バイト = 4 バイト = 1 ワード

MLPT エントリ

Page 16: Mondriaan Memory Protection の調査

MLPT の利点• Table 検索が速い (= O(1))

– 最悪でも 3 回のメモリアクセスでエントリが必ず得られる

Perm Table Base

Page 17: Mondriaan Memory Protection の調査

MLPT の欠点• 無駄な table 検索が増える

メモリイメージ

SST の場合

MLPT の場合

0x01000

0x08000

こことここにアクセスすると…

検索回数 : 2 回 ( 同じセグメントに 2 回アクセスしたことがわからない )

検索回数 : 1 回 ( 最初のアクセス結果が PLB にキャッシュされる )

Page 18: Mondriaan Memory Protection の調査

SST と MLPT の比較• SST

– サイズが小さい (?)

– 検索回数が少ない

– 検索が遅い( バイナリサーチ )

– 更新が重い

• MLPT– 無駄なエントリが多い

– 検索回数が多い

– 検索が速い(O(1))

– 更新が軽い

Page 19: Mondriaan Memory Protection の調査

MLPT + SST( 例によって ) おいしいとこどりを目指す

• SST– サイズが小さい (?)

– 検索回数が少ない

– 検索が遅い( バイナリサーチ )

– 更新が重い

• MLPT– 無駄なエントリが多い

– 検索回数が多い

– 検索が速い(O(1))

– 更新が軽い

Page 20: Mondriaan Memory Protection の調査

MLPT + SST

• MLPT のエントリに SST を取れるようにするmini-SST エントリ

Perm Table Base

Page 21: Mondriaan Memory Protection の調査

MLPT with mini-SST の利点• 検索回数が減る

– エントリがアドレス範囲外のセグメントの情報も持てるため

• (PLB にキャッシュされやすくなる )

mini-SST エントリ

Page 22: Mondriaan Memory Protection の調査

MLPT with mini-SST の欠点• Table の更新が複雑

– 1 つのセグメントの情報が複数エントリに存在するため

mini-SST エントリ

ここに新たにセグメン

トを作るには ?

Page 23: Mondriaan Memory Protection の調査

性能評価実験• MMP によるオーバヘッドを評価した

– ベンチマークプログラムの実行オーバヘッドを測定した– 2 種類の実験 :

• 従来の保護を MMP で再現したときのオーバヘッド測定» Read-only text, read-only data, read-write data and stacks

• 細粒度保護を MMP で実現したときのオーバヘッド測定» malloc で確保したメモリごとにセグメントを作る

( 正確には確保したメモリの周りにもう 2 つ無効セグメントを作る )

– ハードウェアがないのでシミュレータ上で実験した• MIPS アーキテクチャ上に実現

Page 24: Mondriaan Memory Protection の調査

ベンチマークの種類

Refs : メモリアクセス回数 (load & store)Segments : 作られるセグメント数 ( = malloc 回数 ×2)Refs/Update: メモリアクセス回数 / Table 更新の回数Cs : 従来の保護で実行したときのセグメント数

Page 25: Mondriaan Memory Protection の調査

従来の保護を MMP で再現したときのオーバヘッド

X-ref : Table へのアクセス回数 / プログラムのメモリアクセス回数Space : Table のサイズ / プログラム終了時の有効メモリ領域のサイズl/k : Table 検索時のメモリアクセス回数 / Table 検索回数

Page 26: Mondriaan Memory Protection の調査

細粒度保護を MMP で実現したときのオーバヘッド

SST vs. MLTP with mini-SST

Space : Table のサイズ / プログラム終了時の有効メモリ領域のサイズX-ref : Table へのアクセス回数 / プログラムのメモリアクセス回数upd : Table 更新時のメモリアクセス回数 / Table 検索 & 更新時のメモリアクセス回数ld/lk : Table 検索時のメモリアクセス回数 / Table 検索回数

Page 27: Mondriaan Memory Protection の調査

細粒度保護を MMP で実現したときのオーバヘッド

MLPT vs. MLPT with mini-SST

Space : Table のサイズ / プログラム終了時の有効メモリ領域のサイズX-ref : Table へのアクセス回数 / プログラムのメモリアクセス回数upd : Table 更新時のメモリアクセス回数 / Table 検索 & 更新時のメモリアクセス回数ld/lk : Table 検索時のメモリアクセス回数 / Table 検索回数

Page 28: Mondriaan Memory Protection の調査

その他• MMP を使って Linux を改造した (Mond

rix)– Linux のバグを 1 つ見つけた

• ( これは x86 シミュレータで , SOSP 2005)

Page 29: Mondriaan Memory Protection の調査

まとめ• Mondriaan Memory Protection は

ワード単位で保護を指定できるハードウェアメモリ保護機構です