O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

/dev/kvmを直接叩いて自作VM

316 visualizações

Publicada em

6/4のスライド

Publicada em: Software
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

/dev/kvmを直接叩いて自作VM

  1. 1. /dev/kvmを直接叩いて自作VM 2018-06-04 大神 祐真
  2. 2. 2018/06/04 大神 祐真 2 KVMとは ● Kernel-based Virtual Machine[1] ● 仮想化支援機能を持つx86ハードウェア上のLinux向け 完全仮想化機能[1] – 仮想化支援機能 ● Intel VT ● AMD-V – 完全仮想化(Full virtualization) ● 特定のハードウェアを完全にシミュレートしていること ● 対義語: 準仮想化(Paravirtualization) [1] http://linux-kvm.org
  3. 3. 2018/06/04 大神 祐真 3 KVMは何をしてくれるのか? Kernel Userspace
  4. 4. 2018/06/04 大神 祐真 4 KVMは何をしてくれるのか? Kernel Userspace KVMは 仮想的なCPUを 用意してくれる
  5. 5. 2018/06/04 大神 祐真 5 KVMは何をしてくれるのか? Kernel Userspace /dev/kvm を通じて設定 /dev/kvm
  6. 6. 2018/06/04 大神 祐真 6 KVMは何をしてくれるのか? Kernel Userspace /dev/kvm ● VM作って。 ● VCPU作って。 ● メモリはこれね。 ● カーネルレベルの 処理 ● IO
  7. 7. 2018/06/04 大神 祐真 7 実は簡単に叩けます Kernel Userspace /dev/kvm open(“/dev/kvm”) ioctl(KVM_CREATE_VM) ioctl(KVM_CREATE_VCPU) for (;;) { ioctl(KVM_RUN) switch (exit_reason) { case KVM_EXIT_IO: /* ... */ case KVM_EXIT_HLT: /* ... */ } } 実は こんな風に 叩ける
  8. 8. 2018/06/04 大神 祐真 8 /dev/kvmを直接叩いてみる https://github.com/cupnes/bare_metal_kvm
  9. 9. 2018/06/04 大神 祐真 9 1. Hello KVM! ● IOとしてはシリアル通信のみをサポートする VMを作る ● シリアル送信のIOアドレスへ文字を送信するだ けの実行バイナリをVMのアドレス空間へマッ プして、VMのCPUに実行させる サンプルコード https://github.com/cupnes/bare_metal_kvm/tree/master/01_hello
  10. 10. 2018/06/04 大神 祐真 10 1. Hello KVM! VM CPU ROM (実行バイナリ がある) Serial アーキテクチャ
  11. 11. 2018/06/04 大神 祐真 11 1. Hello KVM! メモリマップ リニアアドレス空間 IOアドレス空間 0x0000 0000 ROM(4KB) 0x0000 1000 0x0000 0x0001 0x0002 シリアル送信 レジスタ (1バイト)
  12. 12. 2018/06/04 大神 祐真 12 2. BIOSを動かす ● ROMをBIOS(SeaBIOS)にして、BIOSを動かす ● 適宜必要なデバイスを追加する ● このステップではBIOSが動いている様子が シリアル出力で確認できればOKとする サンプルコード https://github.com/cupnes/bare_metal_kvm/tree/master/02_bios エラー処理・デバッグ処理などを削ったもの https://github.com/cupnes/bare_metal_kvm/tree/master/02_bios_no debug
  13. 13. 2018/06/04 大神 祐真 13 2. BIOSを動かす VM CPU ROM (BIOS) Serial アーキテクチャ 割り込み コントローラ RAM タイマー
  14. 14. 2018/06/04 大神 祐真 14 2. BIOSを動かす メモリマップ リニアアドレス空間 IOアドレス空間 0x0000 0000 RAM(640KB) 0x000a 0000 0x0000 0x0402 0x0403 シリアル送信 レジスタ (1バイト) 0x000c 0000 RAM(128KB) 0x000e 0000 ・ ・ ・ ROM(128KB) 0x0010 0000 0xfffe 0000 ROM(128KB) 0x1 0000 0000 BIOS BIOS (shadow)

×