ept と tlb でしくじった話

16
EPT TLB でしくじった話 @deep_tkkn 2016.10.08 Kernel/VM 探検隊

Upload: takaaki-fukai

Post on 20-Jan-2017

513 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: EPT と TLB でしくじった話

EPT と TLB でしくじった話@deep_tkkn

2016.10.08 Kernel/VM 探検隊

Page 2: EPT と TLB でしくじった話

自己紹介

•氏名: 深井貴明

•所属: TKB大学

• Twitter: @deep_tkkn

• BitVisor であれこれしてる人

2

Page 3: EPT と TLB でしくじった話

今日のお話

• EPT と TLB 周りでハマって時間溶けて悲しかったお話

•新規性はないと思う• 理屈としては教科書にも載ってそう

• 同じような経験したことある人いると思う

• しかし,実際起きるとどれくらい悲しいか伝えたい

3

EPT, TLB, マルチコア,ウッ頭が

Page 4: EPT と TLB でしくじった話

事の始まり

• BitVisor でライブマイグレーションを実装

• シングルコアでは動いたマルチコア対応

4

ライブマイグレーション!

移動元の物理マシン 移動先の物理マシン

Page 5: EPT と TLB でしくじった話

マイグレーションってどうやるの?

VMを構成するハードウェアの状態をすべて転送

• CPU

• メモリ

• デバイス

5

Page 6: EPT と TLB でしくじった話

マイグレーションってどうやるの?

VMを構成するハードウェアの状態をすべて転送

• CPU

• メモリ

• デバイス

メモリ転送には時間がかかる

“ライブ” にするには,OSのバックグラウンドでメモリ転送

6

Page 7: EPT と TLB でしくじった話

バックグラウンドでメモリ転送

7

Src RAM Dst RAM転送

OS がメモリ更新

Dirty page を再送

Dirty page を再送

OS がメモリ更新

・・・

Page 8: EPT と TLB でしくじった話

Dirty pages をどうやって追うか

• VT-xのメモリ管理機能 (EPT) の機能の一部を使う• EPT: ゲスト物理アドレスマシン物理アドレスへ変換するページング機構

• 挙動は普通のページングとほぼ同じ

• EPT エントリ (EPTE) にも Dirty bit がある• 該当ページが更新されると立つビット

8

Page 9: EPT と TLB でしくじった話

9

Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3C:System Programming Guide, Part 3 Order Number: 326019-048US

Page 10: EPT と TLB でしくじった話

何も考えずに実装してみた

• メモリ転送は1コアでやる (並列にやるとロックがうざい)

• Dirty bit の操作も 1 コアでやる• Dirty page 送りきったら,すべてのコアの EPTE を走査

• Dirty bit が立ってるページを記録

10

Page 11: EPT と TLB でしくじった話

何が起きたか

11

20% の確率でエラー && エラーログが毎回違う

2~3カ月くらい

Page 12: EPT と TLB でしくじった話

TLB と EPT の落とし穴

• TLB(Table Lookaside Buffer): アドレス変換のキャッシュ• 毎回ページテーブルを引くと遅いから

• EPT による変換も TLB に載る

• Dirty Bit の情報も TLBに載る• たぶん EPTE がキャッシュに載るイメージ

• TLB はHW がコア間でコヒーレンシー取られない• CPU のデータキャッシュとは違う

12

Page 13: EPT と TLB でしくじった話

何が起きていたのか?

• あるコアでほかのコアの EPT エントリを読む

• Dirty bit を読む

•一部の情報はTLBに載ってて古い• 該当ページを書き換えたのに dirty bit が立ってないように見える

• Dirty ページを見逃す

• 一部のページだけ古い状態でマイグレーション

13

Page 14: EPT と TLB でしくじった話

修正版の実装

• EPTE 読む前に全コアで TLB shootdownする

• ちゃんと動く

• コードとしては数行の変更

• これに2,3カ月取られたと思うと…

14

Page 15: EPT と TLB でしくじった話

大事なこと

•負けないこと投げ出さないこと逃げ出さないこと

• メモリ周りの挙動が怪しければ TLB も疑おう

• 思い当たれば気付けるし直せる

• 知らない & 周りに知ってる人がいないと祈るしかない

• 知る者と知らざる者の差

15

Page 16: EPT と TLB でしくじった話

まとめ

• EPTE は TLB に載る

• TLB はハードウェアがコヒーレンシ―取らない

• データキャッシュみたいな感覚だと痛い目を見る

• TLB 絡みのバグはつらい

• メモリが微妙に壊れる

• メモリ周りの挙動が怪しいときは TLB を疑う

16