須崎さんによるBitVisor Summit 5まとめ
BitvisorSummitが始まる。bitvisor.org/summit5/ 場所はComSysと同じ法政大学BT棟 26F スカイホールでとても眺めがよい。
2016-11-30 13:03:21BitvisorSummit一つ目。品川先生からは東大に導入されたvThrii(BitVisor)の説明。現状の問題としてはnested対応していないので、VMwareなどの仮想化が使えないこと。
2016-11-30 13:26:42BitvisorSummit二つ目。榮樂さんから今年度の変更点。Gビットイーサのためにvirtio-netの変更が必要だった。PCIへの割り込みにINTx (PC互換)あるいはMSI/MSX-Xがあるが、NICによって違う。I219-LM (Skylake世代)INTは使えない。
2016-11-30 13:54:01BitvisorでのNested Pagingにおいて2MiBページによる性能改善。 EPT violation/ NPF VMexitの回数削減。
2016-11-30 13:54:24バグ修正。mm_lockレースコンディションの問題があった。UEFIスタックアライメントの問題があり。16バイトアライメントを合わせる。
2016-11-30 13:54:37二つのシステムコールBitvisor三つ目。立命館大学のAlkanetを改良して、発行されたシステムコールがマルウェアのコードからか、オリジナルのコードかをBTS (Branch Trace Store)により特定する。
2016-11-30 14:20:16BTS を制御するにはAPIC内のLVT(Local Vector Table)を変更する必要がある。実装としてはBitvsior内の関数を用いたMMIOフックか、Intel VTのVirtualize APIC accessを用いてフックがあり、双方を実装して性能を比較。
2016-11-30 14:21:23Virtualize APIC access のためにTPR (Task Priority Register)Shadowを作成した。これにより割り込みを減らし、性能向上したはず。現状では完全な起動ができていない。
2016-11-30 14:21:35Bitvisor五つ目。OSを2つ動作させることのできる,BitVisorベースのハイパーバイザであるTinyVisor( ja.osdn.net/projects/tinyv… BitVisor summit2で発表されたもの)で体験したエラーの解説。開発が続いており11/3に1最新版
2016-11-30 15:55:28TinyVisorではNetBSDのAML: ACPI Machine Languageを使い、二つ目のMのGuest BIOSにはSeaBIOSを使う。
2016-11-30 15:56:29TinyVisorはNehalem シリーズでは動かない。unrestricted guest(注:VMでリアルモードをサポートする機能)をサポートしないため。
2016-11-30 15:57:18BitvisorSummit五つ目。Windowsのシステムコールログを取るAlkanetはIEEE1394ベースで送っていたが、対応ボードがなくなるのでNICで送るようにする。BitVisor内蔵のlwIPを活用して実装。NICをゲストOSから隠ぺいするなどチューニングを行った
2016-11-30 16:52:10BitvisorSummit六つ目。BitVisor と KVM の性能比較の落とし穴。KVM Clockが遅く、性能評価した時に想定外に悪くなる。メモリがスワップアウトするのでSwapoffにする。KVMはホストOSが64bitだとゲスト32bitにしても早くなる。
2016-11-30 17:05:33SpeedStepはBIOSで切る。Idleをpollingにする。turbostatコマンドで確認できる。 KVMは割り込みをソフトウェア的に散らしてくれるので問題ないが、BitVisorだけ割り込みが集中するマザーボードがある。
2016-11-30 17:08:55割り込みをコアごとの散らす話はReceive Side Scaling(RSS)でした。 Windowsではデフォルトで同様の機能SNP(Scalable Networking Pack)を切れという記事がありました。 itpro.nikkeibp.co.jp/article/COLUMN…
2016-11-30 17:31:53メモ:最近のLinuxでは起動時にPCIDを確認するのでInvalid PCIDで落ちる。 Linuxで起動時にパニくったときはearly printk を使う。
2016-11-30 17:48:05INVPCID命令ですね。CR4の読み書きによるflushよりINVPCID命令の方が217ns速いのでLinux起動時にINVPCID命令を呼ぶようになったけど、BitVisorはINVPCID命令に対応してなかったので落ちたという話だそうです。 twitter.com/KuniSuzaki/sta…
2016-12-01 16:50:08