xhyve, xhyve,轻量级的OS X 虚拟化解决方案

分享于 

10分钟阅读

GitHub

  繁體 雙語
xhyve, a lightweight OS X virtualization solution
  • 源代码名称:xhyve
  • 源代码网址:http://www.github.com/mist64/xhyve
  • xhyve源代码文档
  • xhyve源代码下载
  • Git URL:
    git://www.github.com/mist64/xhyve.git
    Git Clone代码到本地:
    git clone http://www.github.com/mist64/xhyve
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/mist64/xhyve
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    xhyve.org

    xhyve hypervisor 是 bhyve的端口,用于 OS X。 它构建在 Hypervisor.framework 之上,位于 OS X 10.10 Yosemite 和更高版本,完全在用户空间运行,并且没有其他依赖项。 它可以运行FreeBSD和in发行版,并且可以在未来为它的他客户操作系统提供支持。

    许可证:BSD

    简介:http://www.pagetable.com/?p=831

    要求

    • OS X 10.10.3 Yosemite 或者更高版本
    • 一个 2010或者更高版本的Mac ( 例如。 支持EPT的CPU

    安装

    如果你有 Homebrew,那么简单:

    
    $ brew update
    
    
    $ brew install --HEAD xhyve
    
    
    
    

    brew命令中的--HEAD 确保你始终获得最新的更改,即使 Homebrew 数据库还没有更新。 如果出于任何原因,你不希望只做 brew install xhyve

    如果不是这样:

    建筑

    
    $ git clone https://github.com/mist64/xhyve
    
    
    $ cd xhyve
    
    
    $ make
    
    
    
    

    生成的二进制文件将在生成/xhyve中

    用法

     
    $ xhyve -h
    
    
    
     

    什么是 bhyve?

    bhyve是FreeBSD管理程序,与Linux上的KVM + QEMU大致类似。 它专注于简单性和遗留自由。

    它将以下外围设备公开给虚拟机:

    • 局部x ( 2 ) APIC
    • io apic
    • 8259A PIC
    • 8253/8254 PIT
    • HPET
    • PM定时器
    • RTC
    • PCI
      • 宿主桥
      • 传递
      • UART
      • AHCI ( 例如。HDD和 CD )
      • VirtIO块设备
      • VirtIO网络
      • VirtIO RNG

    声音。USB。HID和任何图形支持都不存在。 关注服务器虚拟化,这并不是严格的要求。 bhyve可能在未来获得桌面虚拟化功能,但这似乎不是一个优先考虑的问题。

    QEMU不同,bhyve目前还缺乏任何类型的客户机端固件( QEMU使用了 GPL3 SeaBIOS插件。),但目标是在不久的将来提供兼容的OVMF。 但是它提供了 ACPI。SMBIOS和MP表。

    bhyve体系结构

    
     Linux
    
    
     I/O VM control FreeBSD NetBSD
    
    
     OpenBSD
    
    
     | A | A | |
    
    
     V | V | V V
    
    
     +-------------++-------------++-------------++-------------+
    
    
     | || || || |
    
    
     | bhyve || bhyvectl || bhyveload || grub2-bhyve |
    
    
     | || || || |
    
    
     | || || || |
    
    
     +-------------++-------------++-------------++-------------+
    
    
     +----------------------------------------------------------+
    
    
     | libvmmapi |
    
    
     +----------------------------------------------------------+
    
    
     A
    
    
     | user
    
    
     ------------------------------┼------------------------------
    
    
     | ioctl FreeBSD kernel
    
    
     V
    
    
     +----------------------------+
    
    
     | VMX/SVM host |
    
    
     | VMX/SVM guest |
    
    
     | VMX/SVM nested paging |
    
    
     | Timers |
    
    
     | Interrupts |
    
    
     +----------------------------+
    
    
     vmm.ko
    
    
    
    

    vmm.ko

    bhyve FreeBSD内核 MODULE。 使用( 2 ) 和PIT来管理虚拟机和vCPU对象,并处理客户机与 PIC。PIT。PM定时器。x APIC和i/o APIC的交互。 包含用于解码客户机MMIO的最小 x86 模拟器。 在Executes中执行两个内部 vCPU ( VMX/支持和拥有 Intel VMX和AMD支持支持后台。 向用户空间提供ioctl和 mmap API。

    libvmmapi

    vmm.ko ioctl接口与用户空间C API之间的精简抽象层。

    bhyve

    执行虚拟机的用户空间bhyve组件( 重量很轻的QEMU )。 运行客户机 I/O vCPU runloops。 管理 ACPI,PCI和所有非内核设备。 通过libvmmapi与 vmm.ko 交互。

    bhyvectl

    对虚拟机生命周期进行内省和管理的一些多余的工具。 虚拟机和vcpu可以独立于bhyve主机进程而存在于内核对象中。 通常用于在使用后删除虚拟机对象。 奇怪的建筑选择。

    bhyveload

    FreeBSD引导程序的用户空间端口。 由于bhyve仍然缺少固件,这是 Bootstrap 操作系统的一个很麻烦的。 它创建一个虚拟对象,将FreeBSD内核加载到客户机内存中,设置初始vCPU状态,然后退出。 只有这样,bhyve才能执行 VM。

    grub2-bhyve

    执行与bhyveload相同的功能,但是 GRUB2的用户空间端口。 它被用于 Bootstrap。换句话说,。OpenBSD和NetBSD以外的客户机操作系统。

    支持 Windows 客人的工作,并依赖EFI端口。

    xhyve体系结构

    
     +----------------------------------------------------------+
    
    
     | xhyve |
    
    
     | |
    
    
     | I/O |
    
    
     | |
    
    
     | |
    
    
     | |
    
    
     |+--------------------------------------------------------+|
    
    
     || vmm VMX guest ||
    
    
     || Timers ||
    
    
     || Interrupts ||
    
    
     |+--------------------------------------------------------+|
    
    
     +----------------------------------------------------------+
    
    
     +----------------------------------------------------------+
    
    
     | Hypervisor.framework |
    
    
     +----------------------------------------------------------+
    
    
     A
    
    
     | user
    
    
     ------------------------------┼------------------------------
    
    
     |syscall xnu kernel
    
    
     V
    
    
    
     VMX host
    
    
     VMX nested paging
    
    
    
    

    xhyve与bhyve共享大部分代码,但在体系结构上却非常不同。 Hypervisor.framework 为 VMX VMCS来宾状态和VMCS控件字段的安全子集提供了接口,从而使得用户空间管理程序不可能有任何额外的内核扩展。 of主机状态和嵌套分页的所有方面都由 OS X 内核处理,你可以通过地址空间映射来管理客户机物理地址空间。

    ibm - - - - xhyve - - - - - - - 等价于bhyve的进程,但获得了vmm内核 MODULE的一个用户空间端口。 支持支持支持,PCI通道和VMX主机和方面。 vmm组件提供了一个libvmmapi兼容接口到 xhyve。 对于主机进程/虚拟机和主机线程/vcpu,Hypervisor.framework 似乎执行严格的1: 1,这意味着vm和vcpu只能与创建它们的进程和线程进行交互。 因此与bhyve不同,xhyve需要遵循单个流程模型。 可以通过启动多个xhyve实例来创建多个虚拟机。 xhyve保留了大部分 bhyve 命令行 接口。

    单个流程模型不同,bhyvectl,bhyveload和grub2-bhyve与单个流程模型不兼容,并被丢弃。 在我们拥有一个合适的固件xhyve支持 Linux kexec协议插件之前,作为一个停止间隙解决方案,一个非常简单且简单的方法可以。 它采用bzImage和可选的initrd图像和内核参数字符串作为输入。

    wi - fi网络

    如果要在虚拟机重新启动时使用相同的IP地址,请将UUID分配给特定的虚拟机:

    
    $ xhyve [-U uuid]
    
    
    
    

    可选:

    如果你需要更高级的网络,并且已经配置了 TAP 设备,你可以使用它:

     
    virtio-tap,tapX
    
    
    
     

    替代:

     
    virtio-net
    
    
    
     

    其中,X 是你的tap设备,换句话说,是/dev/tapX。

    问题

    如果你在 4.3.30或者 5.0之前运行任何版本的is,并尝试运行 xhyve,你的系统将立即崩溃。 这是由于a Bug ( 在最新的朋克版本里) 没有玩 nice,因为它还没有在osx使用的osx中玩。

    如果你不想更新,或者你不能更新你的Mac,或者在使用xhyve之前,你可以更新你的Mac。 ( 请参见 issue #5#9 以获得完整的上下文)

    待办事项

    • vmm:
      • 启用APIC访问页面以加速APIC仿真( 性能 )
      • 启用 x2APIC MSRs ( 更快更快) ( 性能 )
      • vmm_callout:
        • 是FreeBSD内核标注机制的快速'n'实现
        • 看起来 racy
        • 修正比赛或者用更好的方法替换
        • 每个vCPU计时器事件线程( 性能评估) 使用
        • 使用硬件VMX抢占定时器而非 pthread_cond_wait ( 高性能的性能评估)
      • 一些 32位 客户机坏了( 支持VMCS中的PAE分页)
      • PCID客户支持( 性能 )
    • block_if:
      • OS X 不支持 preadv/pwritev,我们需要序列化读和写,直到找到更好的解决方案。 ( 性能为 )
      • 支持除普通文件以外的块设备
    • virtio_net:
      • 统一TAP和vmnet后端
      • vmnet: 使它不需要 root
      • vmnet: 一次发送/接收多个数据包( 性能 )
    • virtio_rnd:
      • 未测试
    • 删除显式状态转换:
      • 由于只有拥有的任务/线程可以修改虚拟机/vcpu,所以可能不必要的同步( 性能 )
    • 性能,性能和性能
    • 删除剩余代码,清除

    Light  Virtual  
    相关文章