高性能虚拟机
摘要
在oVirt中支持一种新型VM,该VM旨在运行具有尽可能高的性能和尽可能接近裸机的性能指标的VM。
为了将虚拟机设置为高性能,除现有的“服务器”,“桌面”类型外,还将添加名为“高性能”的新虚拟机配置文件类型。通过选择此新的高性能VM类型,将为VM预先配置一组建议和推荐的配置设置,以实现最佳效率。
所有者
- 姓名:莎朗·格莱奇(sgratch)
- 电子邮件:sgratch@redhat.com
对oVirt的好处
在实现此功能之前,配置虚拟机以使其在高性能工作负载下运行并不是一件容易的简单任务,并且要求用户通过遍历所有设置并检查相关内容和配置方式来手动设置虚拟机。
此外,oVirt根本不支持提高虚拟机性能所必需的很少功能(例如:使用大页面,IO线程固定和CPU缓存第3层),现在可以利用无头虚拟机的新功能来建议一种解决方案。根据虚拟机使用要求的最佳推荐配置。
此功能引入了一种易于管理的解决方案,该解决方案可通过WebAdmin或REST api将新的/现有的VM作为高性能运行,同时用户仍然可以选择手动更改或忽略建议的配置,以适应自己的调整和要求。
用法
- 通过在VM新建/编辑对话框中显示的“优化”下拉菜单字段中选择“高性能”类型,可以通过UI将VM设置为作为高性能VM运行。除了已经存在的VM类型之外,还添加了此新的VM类型:“服务器”,“桌面”。
- 如果为正在运行的VM更改VM类型,则部分必需的配置更改将要求VM在保存后重新启动。如果为新的/现有的VM更改VM类型,则在将VM设置为高性能之前,部分要求/建议的配置可能需要手动更改VM的群集配置,并且可能需要部分要求/建议的配置将虚拟机设置为高性能之前,请更改特定的固定主机配置。
- 可以使用与VM相同的方式来创建高性能模板或池。如果用户要创建高性能VM,他还可以选择配置为高性能类型的模板或池,并“继承”该特定VM的此属性。
- 请注意,如果为VM选择了“实例类型”,则它对VM高性能类型和配置没有影响。但是,通过实例类型更改的配置可能会覆盖VM High Performance配置。
- 在“ VM /模板/池”对话框中选择“高性能” VM类型后,会向用户提出一组自动配置更改和建议的手动配置更改,以向用户建议最佳的配置设置:
- 验证列表和建议的手动配置更改将在保存时的弹出窗口中显示,用户可以选择保存还是忽略它们之前接受还是执行。
- 配置更改列表将自动应用(用户可以在通过WebAdmin UI保存之前取消操作)。
- 用户接受配置并单击弹出对话框中的“确定”按钮后,配置将相应更改,并且该VM变为High Performance VM。
- 该新的高性能VM类型将显示一个新图标,并保留在VM名称的左侧,并且该VM类型也将显示在“常规”子选项卡中(由于未显示“池”和“模板”图标,因此需要此图标)。
- 此功能不适用于所有群集级别(因为在oVirt 4.2之前不支持大页面)。
- 请注意,上述所有方案只能通过oVirt WebAdmin而不是通过UserPortal在UI中完成。
详细说明
如上所述,配置设置分为自动完成的配置更改(用户可以在保存之前更改)和建议的配置更改/警告,建议用户在保存之前执行。
高性能VM的自动配置设置列表
启用无头模式并启用串行控制台
显示在“ VM”对话框的控制台侧选项卡中。
有关Headless VM的处理,请参阅http://www.ovirt.org/develop/release-management/features/virt/headless-vm
禁用所有USB设备
显示在“ VM”对话框的控制台侧选项卡中。
这是为oVirt 4.2添加的新配置设置。
禁用声卡设备
显示在VM对话框的控制台侧选项卡中
禁用智能卡设备
显示在VM对话框的控制台侧选项卡中
启用直通主机CPU
显示在“ VM”对话框的“主机”侧标签中。
仅在禁用VM实时迁移时才能启用此选项。
禁用虚拟机迁移
显示在VM对话框的“主机”侧选项卡中。
对于oVirt 4.2,无法自动或手动迁移VM。支持迁移计划用于oVirt 4.3。参见https://bugzilla.redhat.com/show_bug.cgi?id=1457250。
启用IO线程,IO线程数= 1
显示在VM对话框的“资源分配”侧选项卡中。
通过从UI删除“ IO线程数”字段来更改当前配置,以便在启用的情况下始终仅创建一个IO线程。对于REST api,配置保持不变,因此用户仍可以将IO线程数设置为> = 1。
禁用内存气球设备
显示在VM对话框的“资源分配”侧选项卡中。
用户也可以为该VM的群集手动设置此选项(添加/编辑群集对话框->优化侧选项卡)。
仅对固定主机启用高可用性
显示在VM对话框的“高可用性”侧选项卡中。
当前,禁用迁移时不支持高可用性。
高性能VM将被区别对待并支持高可用性,但仅适用于VM固定的主机。如果存在多个固定主机,则这将允许在同一固定主机或下一固定主机上重新运行VM。高可用性支持将扩展到所有群集主机,作为支持oVirt 4.3中迁移的解决方案的一部分。
禁用看门狗设备
显示在VM对话框的“高可用性”侧选项卡中。
启用半虚拟化随机数生成器PCI(virtio-rng)设备
显示在VM对话框的“随机生成器”侧选项卡中。
该选项是使用libvirt默认设置(“ Period duration” = 1000毫秒)自动设置的,用户可以在保存之前进行更改。
为每个虚拟接口启用多个队列
这是为oVirt 4.2添加的新配置设置。
显示在VM对话框的“资源分配”侧选项卡中。
设置IO和仿真器线程固定拓扑
这是为oVirt 4.2添加的新配置设置。
该选项将在引擎端自动配置和计算,并且建议的计算固定拓扑将通过libvirt xml发送到主机。此选项不需要UI设置。
IO和仿真器线程的自动计算的固定拓扑将假定以下内容:
- 要求为VM启用并设置IO线程,CPU固定拓扑以及vNUMA和NUMA固定。否则,将在弹出窗口中显示警告,并要求用户进行设置。
- 自动IO线程固定将通过固定到负责主机中IO的CPU(固定的NUMA节点的CPU)来完成,或者固定到CPU#0,因为这通常是一个。
- 每个NUMA节点的前两个CPU将保留给IO + Emulator线程使用。默认值将设置为“ 0,1”。这样的配置意味着每个NUMA节点中的两个CPU(第0个和第1个)将用于每个高性能VM的IO +仿真器线程固定。
如果所有VM的CPU都适合主机的一个NUMA节点,则前两个CPU保留用于仿真器+ IO固定,其余的将用于vCPU固定。 - 需要额外的逻辑,以避免浪费CPU占用超过一个NUMA节点的大型单个高性能VM。对于此类VM,引擎将找到固定最多的NUMA节点(即,大多数vCPU固定到的NUMA节点),将IO和仿真器固定到该NUMA节点的前两个CPU,并留下下一个固定的NUMA节点。仅用于vCPU固定。
- 如果固定到vCPU的CPU列表和固定到IO +仿真器线程的CPU列表重叠,则日志中将显示警告,并要求用户对其进行修复。
- 请注意,池不支持IO + Emulator线程固定(由于不支持NUMA固定,所以请参见“启用虚拟NUMA和设置NUMA固定拓扑”部分)。
高性能VM的手动配置设置/警告列表
设置CPU固定拓扑
显示在VM对话框的“资源分配”侧选项卡中。
如果在保存虚拟机时未设置CPU固定拓扑,则会在弹出窗口中显示建议/警告,并要求用户将虚拟机固定到主机(通过选择“在以下主机上运行”: (在“主机”侧标签中),并验证VM配置是否适合主机配置(即guest_number_of_cores_per_socket <= host_number_of_cores_per_socket,guest_threads_per_core <= host_threads_per_core和guest_number_of_sockets <= host_number_of_sockets)。
理想情况下,CPU固定应该自动完成,而不是由用户手动完成,但是在第一阶段,我们将不支持此功能。
请注意,由于可以为VM和池而不是为模板设置此配置选项,因此,即使基于高性能模板,用户在创建VM或池时也应始终设置此字段。
启用虚拟NUMA并设置NUMA固定拓扑
显示在VM对话框的“主机”侧选项卡中。
如果在保存虚拟机时未设置虚拟NUMA和NUMA固定拓扑,则会在弹出窗口中显示建议/警告,并要求用户将虚拟机固定到支持NUMA拓扑的主机并验证虚拟机NUMA拓扑适合主机的NUMA拓扑。
理想情况下,应根据暴露的主机的NUMA拓扑自动完成NUMA固定,而不是由用户手动完成,但是在第一阶段,我们将不支持它。
请注意,可以为VM而不是模板或池设置此配置选项。因此,在基于模板创建VM时,用户应始终设置NUMA配置,而对于池,根本不支持NUMA固定。
禁用内核同一页面合并(KSM)
当前仅在引擎中为群集级别实现此功能(“新建/编辑群集”对话框->“优化”侧标签)。
通过在管理程序上停止ksmtuned和ksm服务,可以在主机级别手动停用KSM。
如果需要,可以为oVirt 4.3禁用特定VM的KSM。这可以通过在VM对话框的“资源分配”侧选项卡中添加一个复选框来实现,并可以通过在libvirt xml中设置“ nosharepages”域属性来实现(需要更改VDSM)。
如果在保存VM时未禁用集群级别或主机级别的KSM,则会在弹出窗口中显示建议/警告,并要求用户在集群级别,主机级别或特定VM中禁用它。
启用具有大页面的内存备份
这是为oVirt 4.2添加的新配置设置。除了引擎和UI更改外,此功能还包括主机端更改。UI更改将作为预定义的新键选项添加到VM对话框的“自定义属性”侧选项卡中。这个新的“大页面”键将允许以kB为单位设置大页面的大小。
如果在保存虚拟机时未设置大页面配置,则会在弹出窗口中显示建议/警告,并且将要求用户进行设置/验证,并确认它适合主机配置(即,应选择的访客大页面大小为受固定主机支持,建议设置可用的最大页面,并检查guest_number_of_huge_pages_for_selected_size <= host_number_of_huge_pages_for_selected_size)。
有关更多信息,请参见https://trello.com/c/ABUiJgWR/62-hugepages
WebAdmin / UserPortal UI
- 在VM / Template / Poll中为“新建和编辑”对话框显示的“优化”下拉菜单字段中添加了新的“高性能”类型。
- 添加了新图标来显示此新的VM类型+模式(无状态/有状态,有/没有新配置,池/常规VM中的Vm)。
- VM /模板/池“已优化”类型(值:“服务器”,“桌面”或“高性能”)将显示在“常规”子选项卡中。
- 已从“ VM”对话框的“资源分配”侧选项卡中删除了“ IO线程数”字段
- 保存高性能VM /模板/池时,新的弹出窗口中会显示验证列表和建议的手动配置更改,用户可以选择是否接受并执行这些更改,然后再保存或忽略它们。
REST API
- 新的“高性能” VM类型应添加到VM /池/模板创建/编辑API。
- 上面提到的所有相关配置更改都应在API中公开,包括新功能,例如大页面配置。
- 没有通过REST API对高性能VM /池/模板进行自动设置,用户应手动设置配置(IO +仿真器线程固定,USB禁用和CPU缓存第3层启用(在后端自动设置)除外) 。
- 为了通过REST API创建完全配置的高性能VM,应调用以下API:
- 基于预先创建的高性能模板创建新的VM,并设置“ host_passthrough”和主机固定,因为它不是模板的一部分。或者,如果新VM基于“空白”模板,则用户应在API请求中设置以下必需的/推荐的高性能配置:启用host_passthrough,设置cpu_pinning,禁用声卡,禁用迁移,禁用气球,启用串行控制台,启用大页面,启用高可用性,将io线程号设置为1。
基于高性能模板创建虚拟机的示例:
POST…/ api / vm
<vm>
<cluster> <name> cluster_name </ name> </ cluster>
<名称>虚拟机名称</名称>
<template> <名称> hp_template </ name> </ template>
<type> HIGH_PERFORMANCE </ type> \
<cpu>
<mode> host_passthrough </ mode>
<cpu_tune> <vcpu_pins> <vcpu_pin> <vcpu> 0 </ vcpu> <cpu_set> 0 </ cpu_set> </ vcpu_pin </ vcpu_pins> </ cpu_tune>
</ cpu>
</ vm>
- 要将虚拟机设置为无头并禁用所有USB设备,用户需要通过调用每个图形控制台设备来删除所有图形控制台:
删除... / api / vms / <vm-id> / graphicsconsoles / <console-id> - 通过调用以下命令来设置虚拟NUMA节点和NUMA固定拓扑:
POST…/ api / vms / <vm-i> d / numanodes - 为虚拟机的群集禁用KSM。
模板和池也是如此。
状态
- 目标版本:Ovirt 4.2
- 状态:已合并
局限性
依赖项/相关功能
无头虚拟机
VM内存支持大页面