SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
MMIO ON VT-X
                  @syuu1228




13年4月13日土曜日
よくこんな風に説明しますね
              単純なエミュレーション:ゲストOSのプログラムの全命令を
              ソフトウェアエミュレーションして実行→すごい遅い

              VT-x以前の仮想化:ゲストOSのプログラムをそのままCPUで実行
              するとホストOSのステートが壊れる
              →実行してはならない命令を動的に置き換えてネイティブに実行
              (VMwareのBinary Translation)

              VT-xを用いた仮想化:CPUをゲストモードへ切り替え、ゲストOS
              のプログラムをネイティブに実行(置き換え不要)


13年4月13日土曜日
ゲストOSのプログラムを
              そのまま実行できる!




13年4月13日土曜日
ゲストOSの命令は全部ネイティブに実行される
       から、ハイパーバイザは介入しないんだよね!




13年4月13日土曜日
( ゚д゚)ハッ! こんな所に
                       BHyVeのソースコードが…
              int
              vmm_emulate_instruction(void *vm, int vcpuid, uint64_t gpa, struct vie *vie,
                              mem_region_read_t memread, mem_region_write_t memwrite,
                              void *memarg)
              {
                   int error;

                     if (!vie->decoded)
                            return (EINVAL);
                                                                命令エミュレーションっぽい

                     switch (vie->op.op_type) {
                                                                  コードが有るんですけど…
                     case VIE_OP_TYPE_MOV:
                          error = emulate_mov(vm, vcpuid, gpa, vie,
                                        memread, memwrite, memarg);
                          break;
                     case VIE_OP_TYPE_AND:
                          error = emulate_and(vm, vcpuid, gpa, vie,
                                        memread, memwrite, memarg);
                          break;



13年4月13日土曜日
VT-Xなハイパーバイザで
      命令エミュレーション必要なの…?




13年4月13日土曜日
_人人人人人人_

              > 必要です <

               ̄Y^Y^Y^Y^Y ̄

13年4月13日土曜日
何故?




13年4月13日土曜日
VT-xなハイパーバイザの
                      ライフサイクル
                                                      guest
                      /usr/sbin/bhyve
                                                     userland

                              ioctl(VM_RUN)
                                                  VMExit
                           BSD                        guest
                                    vmm.ko
                          kernel                      kernel
                                        VMEntry

                             Host mode              Guest mode


              ホストOSのカーネルからゲストモードへ切替(VMEntry)

              ハードウェアへのアクセスなどハイパーバイザの介入が必要な処理
              が実行されたらゲストモードを停止、ホストOSへ戻る(VMExit)


13年4月13日土曜日
IO命令によるVMExit
              IO命令が実行された時点でVMExitが発生

              VMExitの詳細情報(Exit Qualification)から以下のような情報を取得

               アクセスサイズ(1,2,4 bytes)

                IN方向かOUT方向か

               String命令(INS)か

               REP prefixが付いているか

               IOポート番号はイミディエイト値か、DXレジスタ参照か

               IOポート番号(イミディエイト値)


13年4月13日土曜日
IO命令のエミュレーション
              Exit Qualificationの情報に基いてIO命令をエミュレーション出来る

               IN命令(イミディエイト値):EAX = ioport_read(imm)

               OUT命令(イミディエイト値):ioport_write(imm, EAX)

               IN命令(DX参照):EAX = ioport_read(DX)

               OUT命令( DX参照):ioport_write(DX, EAX)

               INS命令:*(ES:EDI) = ioport_read(DX)

               OUTS命令:ioport_write(DX, *(ES:EDI))


13年4月13日土曜日
MMIOによるVMExit

              MMIOは通常のメモリアクセスと同じ命令を用いる
              →IO命令と違って命令で判別してVMExit出来ない

              アクセスしたアドレスで判別可能
              →MMIO領域に該当するページにアクセスした時に
              VMExit(EPT violation)が起きるようにEPTを設定
              (read/write共に拒否)


13年4月13日土曜日
MMIOでのVMExit時に
                                  得られる情報
              EPT violation時のVMExit Qualification

                どの種類のアクセス権違反でVMExitが起きたか

                ページに設定された権限

              ゲストOSがアクセスしたアドレス(論理・物理)

              アクセスしたアドレスとアクセス方向(読み・書き)は分かる

              書き込み元・読み込み先の情報(アドレス or レジスタ)とアクセス幅
              が分からない
              どんな命令が実行されたのか分からない


13年4月13日土曜日
情報が足りない状態でMMIOを
                 エミュレートするには

              ゲストEIPの指すアドレスの命令をデコードして、
              オペコード・オペランドを取得

              オペコード通りの動作をエミュレート

              アクセス先アドレスがMMIO領域ならデバイスの挙動
              をエミュレート



13年4月13日土曜日
情報が足りない状態でMMIOを
                 エミュレートするには

              ゲストEIPの指すアドレスの命令をデコードして、
              オペコード・オペランドを取得

              オペコード通りの動作をエミュレート

              アクセス先アドレスがMMIO領域ならデバイスの挙動
              をエミュレート



13年4月13日土曜日
_人人人人人人人人人人人人_

               > 命令エミュレーション <

               ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄




13年4月13日土曜日
( ゚д゚)ハッ! これがそうだったのか
              int
              vmm_emulate_instruction(void *vm, int vcpuid, uint64_t gpa, struct vie *vie,
                              mem_region_read_t memread, mem_region_write_t memwrite,
                              void *memarg)
              {
                   int error;

                     if (!vie->decoded)
                            return (EINVAL);

                     switch (vie->op.op_type) {
                     case VIE_OP_TYPE_MOV:
                          error = emulate_mov(vm, vcpuid, gpa, vie,
                                        memread, memwrite, memarg);
                          break;
                     case VIE_OP_TYPE_AND:
                          error = emulate_and(vm, vcpuid, gpa, vie,
                                        memread, memwrite, memarg);
                          break;



13年4月13日土曜日
なんでCPUがやってくれないのか
                         (想像)

              x86アーキテクチャでは、メモリアクセス可能な命令
              やアドレッシングモードの種類が非常に多い

              そもそもEPT violationはページへのアクセス権限エラー
              を知らせるVMExitであって、MMIOを知らせるVMExit
              ではない



13年4月13日土曜日
しんどい
               デバイス                                    guest
                       /usr/sbin/bhyve
                                                      userland
              エミュレータ
                               ioctl(VM_RUN)
                                                   VMExit
                            BSD                        guest
                                     vmm.ko
                           kernel                      kernel
                                         VMEntry

                              Host mode              Guest mode


              ただでさえMMIO領域に触れる度にVMExitするのに、
              更にデバイスエミュレータがユーザランドに居るので
              コンテキストスイッチが発生


13年4月13日土曜日
Local APIC仮想化支援
              Local APICは割り込み周りで頻繁にアクセスされる
              が、MMIOを使っており準仮想化にも馴染みづらいデ
              バイス

              この領域のMMIOだけVT-xが特別扱い
              専用のVMExit ReasonとExit Qualificationを用意
              →命令エミュレーションが不要に

              レジスタ・条件によってはVMExit自体省略

13年4月13日土曜日
Coalesced MMIO (KVM)
              MMIO領域の中には読み書きによる副作用が無く、
              単純なメモリ読み/書きに置き換えられる部分が存在

               VGAボードのピクセルデータの領域とか

              VMExitが発生したらカーネル内で命令エミュレーション
              を実行、メモリ読み/書きを実施
              ユーザランドでのデバイスエミュレーションを省略

              e1000ドライバ(NIC)のパフォーマンスが9.7%向上

13年4月13日土曜日
まとめ
              ハードウェア仮想化支援機構といっても、なんでもや
              ってくれるわけじゃない

              最後はソフト屋が頑張るしかない

              根性とバッドノウハウ・転んでも泣かない

              すげぇ頑張ったのに新しいハード出るとハード出来る
              ようになってたりすることもある(VT-x自体がそう)


13年4月13日土曜日

Más contenido relacionado

La actualidad más candente

coma Study Room vol.2 Arduino Workshop
coma Study Room vol.2 Arduino Workshopcoma Study Room vol.2 Arduino Workshop
coma Study Room vol.2 Arduino WorkshopEto Haruhiko
 
Effective Hyper-V - 久しぶりエディション
Effective Hyper-V - 久しぶりエディションEffective Hyper-V - 久しぶりエディション
Effective Hyper-V - 久しぶりエディションKuninobu SaSaki
 
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 sandai
 
Iot2017 0304-センサネットワークのセンサ端末群をインターネット上のWikiページで制御する IoTシステムの試作
Iot2017 0304-センサネットワークのセンサ端末群をインターネット上のWikiページで制御する IoTシステムの試作Iot2017 0304-センサネットワークのセンサ端末群をインターネット上のWikiページで制御する IoTシステムの試作
Iot2017 0304-センサネットワークのセンサ端末群をインターネット上のWikiページで制御する IoTシステムの試作Takashi Yamanoue
 
neobundle.vimについて+おまけ
neobundle.vimについて+おまけneobundle.vimについて+おまけ
neobundle.vimについて+おまけShougo
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門sandai
 
いいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory Primerいいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory PrimerYuto Hayamizu
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門sandai
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくばHirotaka Kawata
 
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -Go Saito
 
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1Hirotaka Kawata
 
Mruby jitプレゼン
Mruby jitプレゼンMruby jitプレゼン
Mruby jitプレゼンmiura1729
 
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown本当にわかる Spectre と Meltdown
本当にわかる Spectre と MeltdownHirotaka Kawata
 
できる!trema-switch
できる!trema-switchできる!trema-switch
できる!trema-switchHiroaki Kawai
 

La actualidad más candente (20)

coma Study Room vol.2 Arduino Workshop
coma Study Room vol.2 Arduino Workshopcoma Study Room vol.2 Arduino Workshop
coma Study Room vol.2 Arduino Workshop
 
Kiso sekkei 01rev03
Kiso sekkei 01rev03Kiso sekkei 01rev03
Kiso sekkei 01rev03
 
d-kami x86-1
d-kami x86-1d-kami x86-1
d-kami x86-1
 
Kiso sekkei 02rev02
Kiso sekkei 02rev02Kiso sekkei 02rev02
Kiso sekkei 02rev02
 
Effective Hyper-V - 久しぶりエディション
Effective Hyper-V - 久しぶりエディションEffective Hyper-V - 久しぶりエディション
Effective Hyper-V - 久しぶりエディション
 
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
 
Iot2017 0304-センサネットワークのセンサ端末群をインターネット上のWikiページで制御する IoTシステムの試作
Iot2017 0304-センサネットワークのセンサ端末群をインターネット上のWikiページで制御する IoTシステムの試作Iot2017 0304-センサネットワークのセンサ端末群をインターネット上のWikiページで制御する IoTシステムの試作
Iot2017 0304-センサネットワークのセンサ端末群をインターネット上のWikiページで制御する IoTシステムの試作
 
neobundle.vimについて+おまけ
neobundle.vimについて+おまけneobundle.vimについて+おまけ
neobundle.vimについて+おまけ
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
 
いいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory Primerいいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory Primer
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
 
Zio stm
Zio stmZio stm
Zio stm
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
 
Let's play with Goldfish
Let's play with GoldfishLet's play with Goldfish
Let's play with Goldfish
 
Symfony2 behat-bdd
Symfony2 behat-bddSymfony2 behat-bdd
Symfony2 behat-bdd
 
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
 
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
 
Mruby jitプレゼン
Mruby jitプレゼンMruby jitプレゼン
Mruby jitプレゼン
 
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
 
できる!trema-switch
できる!trema-switchできる!trema-switch
できる!trema-switch
 

Destacado

「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2Takuya ASADA
 
Progetto CIVITAS: Modello di Accoglienza Partecipata
Progetto CIVITAS: Modello di Accoglienza PartecipataProgetto CIVITAS: Modello di Accoglienza Partecipata
Progetto CIVITAS: Modello di Accoglienza PartecipataLuigi A. Dell'Aquila
 
2017 customer intelligence signs which brands should never ignore
2017 customer intelligence signs which brands should never ignore2017 customer intelligence signs which brands should never ignore
2017 customer intelligence signs which brands should never ignoreSubhakar Rao Surapaneni
 
15 ideas para la Transformación Digital de tu Negocio
15 ideas para la Transformación Digital de tu Negocio15 ideas para la Transformación Digital de tu Negocio
15 ideas para la Transformación Digital de tu NegocioLluis Serra
 
El relleno fluido no fue el único culpable - Foro Técnico sobre la Troncal Ca...
El relleno fluido no fue el único culpable - Foro Técnico sobre la Troncal Ca...El relleno fluido no fue el único culpable - Foro Técnico sobre la Troncal Ca...
El relleno fluido no fue el único culpable - Foro Técnico sobre la Troncal Ca...Sociedad Colombiana de Ingenieros
 
Fanny Leberquier
Fanny LeberquierFanny Leberquier
Fanny LeberquierSoSPIE
 
The Power of Beneficiary-Directed Data (CMS BlueButton on FHIR API Update)
The Power of Beneficiary-Directed Data (CMS BlueButton on FHIR API Update)The Power of Beneficiary-Directed Data (CMS BlueButton on FHIR API Update)
The Power of Beneficiary-Directed Data (CMS BlueButton on FHIR API Update)Mark Scrimshire
 
openEHR: aspectos de interoperabilidad y mantenibilidad
openEHR: aspectos de interoperabilidad y mantenibilidadopenEHR: aspectos de interoperabilidad y mantenibilidad
openEHR: aspectos de interoperabilidad y mantenibilidadPablo Pazos
 
臨床心理学における例数設計
臨床心理学における例数設計臨床心理学における例数設計
臨床心理学における例数設計Senshu University
 
ライトニングトーク - とある LINE Bot の開発記「とても腹立たしいことがあったのです」
ライトニングトーク - とある LINE Bot の開発記「とても腹立たしいことがあったのです」ライトニングトーク - とある LINE Bot の開発記「とても腹立たしいことがあったのです」
ライトニングトーク - とある LINE Bot の開発記「とても腹立たしいことがあったのです」Jun-ichi Sakamoto
 
Deeplinkから考えるWebとAppの今後とは
Deeplinkから考えるWebとAppの今後とはDeeplinkから考えるWebとAppの今後とは
Deeplinkから考えるWebとAppの今後とはYohhei Someya
 
SLLA Book: SLLA Crash Course
SLLA Book: SLLA Crash CourseSLLA Book: SLLA Crash Course
SLLA Book: SLLA Crash CourseWafa Hozien
 
CSCA 2017 - Water Nonprofit Case Studies
CSCA 2017 - Water Nonprofit Case StudiesCSCA 2017 - Water Nonprofit Case Studies
CSCA 2017 - Water Nonprofit Case StudiesRahul Mitra
 

Destacado (17)

Bhyve Internals
Bhyve InternalsBhyve Internals
Bhyve Internals
 
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2
 
Progetto CIVITAS: Modello di Accoglienza Partecipata
Progetto CIVITAS: Modello di Accoglienza PartecipataProgetto CIVITAS: Modello di Accoglienza Partecipata
Progetto CIVITAS: Modello di Accoglienza Partecipata
 
Curso de Marketing y Publicidad Digital
Curso de Marketing y Publicidad DigitalCurso de Marketing y Publicidad Digital
Curso de Marketing y Publicidad Digital
 
St Michael Presentation
St Michael PresentationSt Michael Presentation
St Michael Presentation
 
2017 customer intelligence signs which brands should never ignore
2017 customer intelligence signs which brands should never ignore2017 customer intelligence signs which brands should never ignore
2017 customer intelligence signs which brands should never ignore
 
15 ideas para la Transformación Digital de tu Negocio
15 ideas para la Transformación Digital de tu Negocio15 ideas para la Transformación Digital de tu Negocio
15 ideas para la Transformación Digital de tu Negocio
 
El relleno fluido no fue el único culpable - Foro Técnico sobre la Troncal Ca...
El relleno fluido no fue el único culpable - Foro Técnico sobre la Troncal Ca...El relleno fluido no fue el único culpable - Foro Técnico sobre la Troncal Ca...
El relleno fluido no fue el único culpable - Foro Técnico sobre la Troncal Ca...
 
Fanny Leberquier
Fanny LeberquierFanny Leberquier
Fanny Leberquier
 
The Power of Beneficiary-Directed Data (CMS BlueButton on FHIR API Update)
The Power of Beneficiary-Directed Data (CMS BlueButton on FHIR API Update)The Power of Beneficiary-Directed Data (CMS BlueButton on FHIR API Update)
The Power of Beneficiary-Directed Data (CMS BlueButton on FHIR API Update)
 
Ouellette elixir 2017
Ouellette elixir 2017Ouellette elixir 2017
Ouellette elixir 2017
 
openEHR: aspectos de interoperabilidad y mantenibilidad
openEHR: aspectos de interoperabilidad y mantenibilidadopenEHR: aspectos de interoperabilidad y mantenibilidad
openEHR: aspectos de interoperabilidad y mantenibilidad
 
臨床心理学における例数設計
臨床心理学における例数設計臨床心理学における例数設計
臨床心理学における例数設計
 
ライトニングトーク - とある LINE Bot の開発記「とても腹立たしいことがあったのです」
ライトニングトーク - とある LINE Bot の開発記「とても腹立たしいことがあったのです」ライトニングトーク - とある LINE Bot の開発記「とても腹立たしいことがあったのです」
ライトニングトーク - とある LINE Bot の開発記「とても腹立たしいことがあったのです」
 
Deeplinkから考えるWebとAppの今後とは
Deeplinkから考えるWebとAppの今後とはDeeplinkから考えるWebとAppの今後とは
Deeplinkから考えるWebとAppの今後とは
 
SLLA Book: SLLA Crash Course
SLLA Book: SLLA Crash CourseSLLA Book: SLLA Crash Course
SLLA Book: SLLA Crash Course
 
CSCA 2017 - Water Nonprofit Case Studies
CSCA 2017 - Water Nonprofit Case StudiesCSCA 2017 - Water Nonprofit Case Studies
CSCA 2017 - Water Nonprofit Case Studies
 

Similar a MMIO on VT-x

Bhyve code reading
Bhyve code readingBhyve code reading
Bhyve code readingTakuya ASADA
 
BHyVeってなんや
BHyVeってなんやBHyVeってなんや
BHyVeってなんやTakuya ASADA
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設Minoru Nakamura
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設Minoru Nakamura
 
あるmmapの話
あるmmapの話あるmmapの話
あるmmapの話nullnilaki
 
2008-03-19 第2回セキュアVMシンポジウム
2008-03-19 第2回セキュアVMシンポジウム2008-03-19 第2回セキュアVMシンポジウム
2008-03-19 第2回セキュアVMシンポジウムTakahiro Shinagawa
 
2008-11-18 セキュアVMワークショップ
2008-11-18 セキュアVMワークショップ2008-11-18 セキュアVMワークショップ
2008-11-18 セキュアVMワークショップTakahiro Shinagawa
 
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0Satoshi Kume
 
Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方
Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方
Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方tshiroyama
 
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~Preferred Networks
 
Swift 2.0 変更点(だいたい)まとめ
Swift 2.0 変更点(だいたい)まとめSwift 2.0 変更点(だいたい)まとめ
Swift 2.0 変更点(だいたい)まとめKen Toriumi
 
2009-03-24 第3回セキュアVMシンポジウム
2009-03-24 第3回セキュアVMシンポジウム2009-03-24 第3回セキュアVMシンポジウム
2009-03-24 第3回セキュアVMシンポジウムTakahiro Shinagawa
 
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略祐司 伊藤
 

Similar a MMIO on VT-x (16)

Bhyve code reading
Bhyve code readingBhyve code reading
Bhyve code reading
 
BHyVeってなんや
BHyVeってなんやBHyVeってなんや
BHyVeってなんや
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
あるmmapの話
あるmmapの話あるmmapの話
あるmmapの話
 
Open VZ
Open VZOpen VZ
Open VZ
 
VIOPS04: Intel VT ~仮想化を支える基礎技術~
VIOPS04: Intel VT ~仮想化を支える基礎技術~VIOPS04: Intel VT ~仮想化を支える基礎技術~
VIOPS04: Intel VT ~仮想化を支える基礎技術~
 
2008-03-19 第2回セキュアVMシンポジウム
2008-03-19 第2回セキュアVMシンポジウム2008-03-19 第2回セキュアVMシンポジウム
2008-03-19 第2回セキュアVMシンポジウム
 
2008-11-18 セキュアVMワークショップ
2008-11-18 セキュアVMワークショップ2008-11-18 セキュアVMワークショップ
2008-11-18 セキュアVMワークショップ
 
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0
 
Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方
Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方
Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方
 
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
 
Gingerbread
GingerbreadGingerbread
Gingerbread
 
Swift 2.0 変更点(だいたい)まとめ
Swift 2.0 変更点(だいたい)まとめSwift 2.0 変更点(だいたい)まとめ
Swift 2.0 変更点(だいたい)まとめ
 
2009-03-24 第3回セキュアVMシンポジウム
2009-03-24 第3回セキュアVMシンポジウム2009-03-24 第3回セキュアVMシンポジウム
2009-03-24 第3回セキュアVMシンポジウム
 
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
 

Más de Takuya ASADA

Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Takuya ASADA
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークTakuya ASADA
 
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」Takuya ASADA
 
ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜Takuya ASADA
 
UEFI時代のブートローダ
UEFI時代のブートローダUEFI時代のブートローダ
UEFI時代のブートローダTakuya ASADA
 
OSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingOSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingTakuya ASADA
 
OSvパンフレット v3
OSvパンフレット v3OSvパンフレット v3
OSvパンフレット v3Takuya ASADA
 
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallOSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallTakuya ASADA
 
OSvの概要と実装
OSvの概要と実装OSvの概要と実装
OSvの概要と実装Takuya ASADA
 
Linux network stack
Linux network stackLinux network stack
Linux network stackTakuya ASADA
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理Takuya ASADA
 
Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminalTakuya ASADA
 
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがないTakuya ASADA
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
OSvパンフレット
OSvパンフレットOSvパンフレット
OSvパンフレットTakuya ASADA
 
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜Takuya ASADA
 
「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1Takuya ASADA
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化Takuya ASADA
 
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD HypervisorImplements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD HypervisorTakuya ASADA
 

Más de Takuya ASADA (20)

Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
 
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
 
ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜
 
UEFI時代のブートローダ
UEFI時代のブートローダUEFI時代のブートローダ
UEFI時代のブートローダ
 
OSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingOSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meeting
 
OSvパンフレット v3
OSvパンフレット v3OSvパンフレット v3
OSvパンフレット v3
 
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallOSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/Fall
 
OSv噺
OSv噺OSv噺
OSv噺
 
OSvの概要と実装
OSvの概要と実装OSvの概要と実装
OSvの概要と実装
 
Linux network stack
Linux network stackLinux network stack
Linux network stack
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminal
 
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
OSvパンフレット
OSvパンフレットOSvパンフレット
OSvパンフレット
 
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
 
「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
 
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD HypervisorImplements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
 

Último

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Último (9)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

MMIO on VT-x

  • 1. MMIO ON VT-X @syuu1228 13年4月13日土曜日
  • 2. よくこんな風に説明しますね 単純なエミュレーション:ゲストOSのプログラムの全命令を ソフトウェアエミュレーションして実行→すごい遅い VT-x以前の仮想化:ゲストOSのプログラムをそのままCPUで実行 するとホストOSのステートが壊れる →実行してはならない命令を動的に置き換えてネイティブに実行 (VMwareのBinary Translation) VT-xを用いた仮想化:CPUをゲストモードへ切り替え、ゲストOS のプログラムをネイティブに実行(置き換え不要) 13年4月13日土曜日
  • 3. ゲストOSのプログラムを そのまま実行できる! 13年4月13日土曜日
  • 4. ゲストOSの命令は全部ネイティブに実行される から、ハイパーバイザは介入しないんだよね! 13年4月13日土曜日
  • 5. ( ゚д゚)ハッ! こんな所に BHyVeのソースコードが… int vmm_emulate_instruction(void *vm, int vcpuid, uint64_t gpa, struct vie *vie, mem_region_read_t memread, mem_region_write_t memwrite, void *memarg) { int error; if (!vie->decoded) return (EINVAL); 命令エミュレーションっぽい switch (vie->op.op_type) { コードが有るんですけど… case VIE_OP_TYPE_MOV: error = emulate_mov(vm, vcpuid, gpa, vie, memread, memwrite, memarg); break; case VIE_OP_TYPE_AND: error = emulate_and(vm, vcpuid, gpa, vie, memread, memwrite, memarg); break; 13年4月13日土曜日
  • 6. VT-Xなハイパーバイザで 命令エミュレーション必要なの…? 13年4月13日土曜日
  • 7. _人人人人人人_ > 必要です <  ̄Y^Y^Y^Y^Y ̄ 13年4月13日土曜日
  • 9. VT-xなハイパーバイザの ライフサイクル guest /usr/sbin/bhyve userland ioctl(VM_RUN) VMExit BSD guest vmm.ko kernel kernel VMEntry Host mode Guest mode ホストOSのカーネルからゲストモードへ切替(VMEntry) ハードウェアへのアクセスなどハイパーバイザの介入が必要な処理 が実行されたらゲストモードを停止、ホストOSへ戻る(VMExit) 13年4月13日土曜日
  • 10. IO命令によるVMExit IO命令が実行された時点でVMExitが発生 VMExitの詳細情報(Exit Qualification)から以下のような情報を取得 アクセスサイズ(1,2,4 bytes) IN方向かOUT方向か String命令(INS)か REP prefixが付いているか IOポート番号はイミディエイト値か、DXレジスタ参照か IOポート番号(イミディエイト値) 13年4月13日土曜日
  • 11. IO命令のエミュレーション Exit Qualificationの情報に基いてIO命令をエミュレーション出来る IN命令(イミディエイト値):EAX = ioport_read(imm) OUT命令(イミディエイト値):ioport_write(imm, EAX) IN命令(DX参照):EAX = ioport_read(DX) OUT命令( DX参照):ioport_write(DX, EAX) INS命令:*(ES:EDI) = ioport_read(DX) OUTS命令:ioport_write(DX, *(ES:EDI)) 13年4月13日土曜日
  • 12. MMIOによるVMExit MMIOは通常のメモリアクセスと同じ命令を用いる →IO命令と違って命令で判別してVMExit出来ない アクセスしたアドレスで判別可能 →MMIO領域に該当するページにアクセスした時に VMExit(EPT violation)が起きるようにEPTを設定 (read/write共に拒否) 13年4月13日土曜日
  • 13. MMIOでのVMExit時に 得られる情報 EPT violation時のVMExit Qualification どの種類のアクセス権違反でVMExitが起きたか ページに設定された権限 ゲストOSがアクセスしたアドレス(論理・物理) アクセスしたアドレスとアクセス方向(読み・書き)は分かる 書き込み元・読み込み先の情報(アドレス or レジスタ)とアクセス幅 が分からない どんな命令が実行されたのか分からない 13年4月13日土曜日
  • 14. 情報が足りない状態でMMIOを エミュレートするには ゲストEIPの指すアドレスの命令をデコードして、 オペコード・オペランドを取得 オペコード通りの動作をエミュレート アクセス先アドレスがMMIO領域ならデバイスの挙動 をエミュレート 13年4月13日土曜日
  • 15. 情報が足りない状態でMMIOを エミュレートするには ゲストEIPの指すアドレスの命令をデコードして、 オペコード・オペランドを取得 オペコード通りの動作をエミュレート アクセス先アドレスがMMIO領域ならデバイスの挙動 をエミュレート 13年4月13日土曜日
  • 16. _人人人人人人人人人人人人_ > 命令エミュレーション <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ 13年4月13日土曜日
  • 17. ( ゚д゚)ハッ! これがそうだったのか int vmm_emulate_instruction(void *vm, int vcpuid, uint64_t gpa, struct vie *vie, mem_region_read_t memread, mem_region_write_t memwrite, void *memarg) { int error; if (!vie->decoded) return (EINVAL); switch (vie->op.op_type) { case VIE_OP_TYPE_MOV: error = emulate_mov(vm, vcpuid, gpa, vie, memread, memwrite, memarg); break; case VIE_OP_TYPE_AND: error = emulate_and(vm, vcpuid, gpa, vie, memread, memwrite, memarg); break; 13年4月13日土曜日
  • 18. なんでCPUがやってくれないのか (想像) x86アーキテクチャでは、メモリアクセス可能な命令 やアドレッシングモードの種類が非常に多い そもそもEPT violationはページへのアクセス権限エラー を知らせるVMExitであって、MMIOを知らせるVMExit ではない 13年4月13日土曜日
  • 19. しんどい デバイス guest /usr/sbin/bhyve userland エミュレータ ioctl(VM_RUN) VMExit BSD guest vmm.ko kernel kernel VMEntry Host mode Guest mode ただでさえMMIO領域に触れる度にVMExitするのに、 更にデバイスエミュレータがユーザランドに居るので コンテキストスイッチが発生 13年4月13日土曜日
  • 20. Local APIC仮想化支援 Local APICは割り込み周りで頻繁にアクセスされる が、MMIOを使っており準仮想化にも馴染みづらいデ バイス この領域のMMIOだけVT-xが特別扱い 専用のVMExit ReasonとExit Qualificationを用意 →命令エミュレーションが不要に レジスタ・条件によってはVMExit自体省略 13年4月13日土曜日
  • 21. Coalesced MMIO (KVM) MMIO領域の中には読み書きによる副作用が無く、 単純なメモリ読み/書きに置き換えられる部分が存在 VGAボードのピクセルデータの領域とか VMExitが発生したらカーネル内で命令エミュレーション を実行、メモリ読み/書きを実施 ユーザランドでのデバイスエミュレーションを省略 e1000ドライバ(NIC)のパフォーマンスが9.7%向上 13年4月13日土曜日
  • 22. まとめ ハードウェア仮想化支援機構といっても、なんでもや ってくれるわけじゃない 最後はソフト屋が頑張るしかない 根性とバッドノウハウ・転んでも泣かない すげぇ頑張ったのに新しいハード出るとハード出来る ようになってたりすることもある(VT-x自体がそう) 13年4月13日土曜日