.. _intro_bhyve: ====================== bhyve简介 ====================== FreeBSD的高性能 :ref:`hypervisor` 名为 ``bhyve`` ,类似于Linux内核的 :ref:`kvm` hypervisor,可以创建和运行虚拟机,性能接近于裸机速度。 最早在2000年后期,NetApp开始在自家基于FreeBSD的存储应用上使用hypervisor运行附加服务。 ``bhyve`` 最初由NetApp的Neel Natu设计和实现,最后由NetApp的一个开发小组完善并发展。到2011年5月,NetApp将代码开源贡献给FreeBSD,至此开始不断发展。 ``bhyve`` 是FreeBSD原生的、高性能hypervisor。和 :ref:`kvm` 类似,也是 ``type-1`` hypervisor,能够发挥硬件虚拟化功能以接近原生的性能来运行虚拟机。 ``bhyve`` 相比较KVM有如下优势: - 性能: bhyve 和 kvm 都是高性能hypervisor,不过在特定的负载下有些性能差异: 一些存储高负载测试环境,bhyve模拟的 :ref:`nvme` 控制器显示更强的性能 - 精简: bhyve 的虚拟化堆栈比 :ref:`kvm` / :ref:`qemu` 组合软件栈架构要简洁、资源占用更少 - KVM虽然和bhyve一样是 ``type-1`` hypervisor,但是KVM只是一个底层内核模块,只能处理核心虚拟化任务(执行硬件加速CPU虚拟化和管理guest内存),但是不能提供虚拟化硬件设备(网卡、图形卡、磁盘控制器)。这使得KVM不得不依赖QEMU(用户空间应用)来模拟所有的虚拟硬件以满足guest操作系统需求。 - bhyve则从一开始就聚焦轻量级和紧密集成hypervisor,提供了独特和标准化的高性能virtio驱动,也就是说bhyve是一个完整的hypervisor解决方案,无需结合类似QEMU这样的模拟硬件的软件。 - 这种集成了virtio规范的Para-virtualized驱动的模式,使得bhyve没有沉重的历史负担(无需像QEMU那样模拟古老的硬件) - 最新的virtio规范提供了 ``discarded`` 块功能(类似现代文件系统的TRIM指令用于通知SSD介质某些块不再使用): 这个机制在虚拟环境中,允许guest操作系统通知虚拟机管理程序知晓虚拟磁盘上某些块不再使用,从而使Host主机能够回收底层磁盘的相应空间(底层Host使用UFS和ZFS都可以配置是否以及如何生成TRIM命令),也提高了SSD支持的虚拟机的性能 ``bhybe`` 采用BSD license,从FreeBSD 10.0-RELEASE开始就是base系统的一部分,支持不同的guests系统,包括FreeBSD,OpenBSD, :ref:`linux` 和 :ref:`windows` 。默认是, ``bhyve`` 提供了一个串口控制台但是不会模拟图形控制台。对于新型CPU提供的虚拟化卸载(virtualization offload)可以避免传统的指令转换和人工管理内存映射。 ``bhyve`` 硬件要求 =================== - 支持 :ref:`intel_ept` 的 :ref:`intel_cpu` - 支持 AMD Rapid Virtualization Indexing(RVI)或Nested Page Table(NPT)的 :ref:`amd_cpu` - 支持 ``Stage-2`` MMU 虚拟化扩展的 ARM ``aarch64`` (例如ARMv8) 注意,FreeBSD的 ``bhyve`` 在ARM上只支持纯ARMv8.0虚拟化,目前尚未使用虚拟化主机扩展(Virtualization Host Extensions)。托管具有多个vCPU的Linux guest或FreeBSD guest需要VMX非限制模式支持(UG)。 最简单判断Intel或AMD处理器是否支持 ``bhyve`` 的简单方法是运行 ``dmesg`` 或在 ``/var/run/dmesg.boot`` 中查找AMD处理器 ``Features2`` 行上的 ``POPCNT`` 处理器功能标志,或者Intel处理器 :ref:`intel_vt` 行上的EPT和UG .. literalinclude:: intro_bhyve/dmesg_popcnt_ept_ug :caption: 检查CPU对POPCNT和EPT和UG支持 例如,我组装了一台 :ref:`xeon_e-2274g` 台式机用来不停机(静音)运行,检查 ``dmesg`` 输出: .. literalinclude:: intro_bhyve/dmesg_vt :caption: 使用 ``dmesg`` 检查CPU是否支持SLAT( :ref:`intel_ept` ) :emphasize-lines: 12 参考 ====== - `FreeBSD handbook: Chapter 24. Virtualization `_ - `bhyve: The FreeBSD Hypervisor `_ 介绍了bhyve诞生的历史渊源,优势以及未来发展