跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 虚拟化指南 / 使用 Xen 管理虚拟机 / 设置虚拟机主机
适用范围 SUSE Linux Enterprise Server 15 SP4

23 设置虚拟机主机

本节介绍如何设置并使用 SUSE Linux Enterprise Server 15 SP4 作为虚拟机主机。

Dom0 的硬件要求通常与 SUSE Linux Enterprise Server 操作系统的硬件要求相同。应该添加额外的 CPU、磁盘、内存和网络资源才能满足规划的所有 VM Guest 系统的需求。

提示
提示:资源

请记住,如果 VM Guest 系统在更快的处理器上运行并且可以访问更多系统内存,其性能就会更好,这与物理机一样。

虚拟机主机要求安装多个软件包及其依赖项。要安装全部所需的软件包,请运行 YaST 软件管理,选择视图 › 软件集,然后选择 Xen 虚拟机主机服务器进行安装。也可以在 YaST 中使用模块虚拟化 › 安装超级管理程序和工具来执行安装。

安装 Xen 软件后,重启动计算机,并在引导屏幕上选择新添加的具有 Xen 内核的选项。

通过更新通道可使用更新。为了确保安装最新的更新,请在完成安装后运行 YaST 联机更新

23.1 最佳实践和建议

在主机上安装并配置 SUSE Linux Enterprise Server 操作系统后,请实施以下最佳实践和建议:

  • 如果该主机应始终作为 Xen 主机运行,请运行 YaST 系统 › 引导加载器,并激活 Xen 引导项作为默认引导部分。

    • 在 YaST 中单击系统 > 引导加载器

    • 将默认引导更改为 Xen 标签,然后单击设置为默认值

    • 单击完成

  • 为获得最佳性能,请仅在虚拟机主机上安装虚拟化所需的应用程序和进程。

  • 如果您打算使用挂接到 Xen 主机的看门狗设备,请每次仅使用一个设备。建议使用提供实际硬件集成的驱动程序,而不要使用通用软件驱动程序。

注意
注意:硬件监视

Dom0 内核以虚拟化模式运行,因此 irqbalancelscpu 等工具不会反映真实的硬件特征。

23.2 管理 Dom0 内存

在以前的 SUSE Linux Enterprise Server 版本中,Xen 主机的默认内存分配模式是将所有主机物理内存都分配给 Dom0,并启用自动气球式调节功能。当有其他域启动后,内存会自动从 Dom0 进行气球式调节。此行为总是容易出错,因此强烈建议将其禁用。从 SUSE Linux Enterprise Server 15 SP1 开始,默认已禁用自动气球式调节,而是为 Dom0 分配 10% 的主机物理内存外加 1GB。例如,在物理内存大小为 32 GB 的主机上,将为 Dom0 分配 4.2 GB 内存。

我们仍支持并建议在 /etc/default/grub 中使用 dom0_mem Xen 命令行选项。您可以通过将 dom0_mem 设置为主机物理内存大小,并在 /etc/xen/xl.conf 中启用 autoballoon 选项,来恢复旧行为。

警告
警告:Dom0 内存不足

为 Dom0 保留的内存量取决于主机上运行的 VM Guest 数量,因为 Dom0 会为每个 VM Guest 提供后端网络和磁盘 I/O 服务。计算 Dom0 内存分配时,还应考虑到 Dom0 中运行的其他工作负载。一般而言,应该像确定任何其他虚拟机的内存大小一样来确定 Dom0 的内存大小。

23.2.1 设置 Dom0 内存分配

  1. 确定需要为 Dom0 分配的内存。

  2. 在 Dom0 中,键入 xl info 以查看计算机上可用的内存量。可以使用 xl list 命令确定当前为 Dom0 分配的内存。

  3. 编辑 /etc/default/grub 并调整 GRUB_CMDLINE_XEN 选项,使其包含 dom0_mem=MEM_AMOUNT。将 MEM_AMOUNT 替换为要分配给 Dom0 的最大内存量。添加 KMG 以指定大小单位。例如:

    GRUB_CMDLINE_XEN="dom0_mem=2G"
  4. 重启动计算机以应用更改。

提示
提示

有关 Xen 相关引导配置选项的更多细节,请参见第 18.2.2 节 “/etc/default/grub 文件”

警告
警告:Xen Dom0 内存

对 GRUB 2 中的 Xen 超级管理程序使用 XL 工具堆栈和 dom0_mem= 选项时,需在 etc/xen/xl.conf 中禁用 xl autoballoon。否则,启动 VM 时将会失败并出现有关无法压缩 Dom0 内存气球的错误。因此,如果您为 Xen 指定了 dom0_mem= 选项,请在 xl.conf 中添加 autoballoon=0。另请参见 Xen dom0 memory(Xen dom0 内存)

23.3 全虚拟化 Guest 中的网卡

在全虚拟化 Guest 中,默认网卡是一个模拟的 Realtek 网卡。不过,您也可以使用分离式网络驱动程序来管理 Dom0 与 VM Guest 之间的通讯。默认情况下,这两个接口都会呈现给 VM Guest,因为有些操作系统的驱动程序要求这两个接口都存在。

使用 SUSE Linux Enterprise Server 时,默认只有半虚拟化网卡可供 VM Guest 使用。可用的网络选项如下:

模拟

要使用模拟 Realtek 网卡之类的模拟网络接口,请在域 xl 配置的 vif 设备部分指定 type=ioemu。示例配置如下所示:

vif = [ 'type=ioemu,mac=00:16:3e:5f:48:e4,bridge=br0' ]

xl.conf 手册页 man 5 xl.conf 中提供了有关 xl 配置的更多细节。

半虚拟化

如果指定 type=vif 但不指定型号或类型,将使用半虚拟化网络接口:

vif = [ 'type=vif,mac=00:16:3e:5f:48:e4,bridge=br0,backen=0' ]
模拟和半虚拟化

如果要为管理员提供上述两个选项,只需同时指定类型和型号即可。xl 配置如下所示:

vif = [ 'type=ioemu,mac=00:16:3e:5f:48:e4,model=rtl8139,bridge=br0' ]

在这种情况下,应在 VM Guest 上禁用其中一个网络接口。

23.4 启动虚拟机主机

如果正确安装了虚拟化软件,计算机引导时会显示 GRUB 2 引导加载器,且其菜单中会包含 Xen 选项。选择此选项即可启动虚拟机主机。

注意
注意:Xen 和 Kdump

在 Xen 中,超级管理程序会管理内存资源。如果您需要为 Dom0 中的恢复内核保留系统内存,需由超级管理程序保留此内存。因此,需要将参数 crashkernel=size 添加到 kernel 行,而不能在该行中使用其他引导参数。

有关 crashkernel 参数的详细信息,请参见第 18.4 节 “计算 crashkernel 分配大小”

如果 GRUB 2 菜单中不包含 Xen 选项,请检查安装步骤,并校验是否已更新 GRUB 2 引导加载器。如果安装是在未选择 Xen 软件集的情况下完成的,请运行 YaST 软件管理,选择软件集过滤器,然后选择 Xen 虚拟机主机服务器进行安装。

引导超级管理程序后,Dom0 虚拟机将会启动并显示其图形桌面环境。如果您未安装图形桌面,则会显示命令行环境。

提示
提示:图形问题

有时可能会发生图形系统无法正常工作的问题。在这种情况下,请将 vga=ask 添加到引导参数。要激活永久设置,请使用 vga=mode-0x???,其中 ??? 的计算方式为 0x100 + http://en.wikipedia.org/wiki/VESA_BIOS_Extensions 中所述的 VESA 模式,例如 vga=mode-0x361

在开始安装虚拟 Guest 之前,请确保系统时间正确。为此,请在控制域上配置 NTP(网络时间协议):

  1. 在 YaST 中选择网络服务 › NTP 配置

  2. 选择在引导期间自动启动 NTP 守护程序的选项。提供现有 NTP 时间服务器的 IP 地址,然后单击完成

注意
注意:虚拟 Guest 上的时间服务

硬件时钟通常都不是非常精确。所有新式操作系统都会尝试通过一个额外的时间源来更正系统时间(对比硬件时间)。要使所有 VM Guest 系统上的时间正确,请也在每个相应 Guest 上激活网络时间服务,或确保 Guest 使用主机的系统时间。有关 SUSE Linux Enterprise Server 中的独立时钟的详细信息,请参见第 18.2 节 “Xen 虚拟机时钟设置”

有关管理虚拟机的详细信息,请参见第 25 章 “管理虚拟化环境

23.5 PCI 直通

为了充分利用 VM Guest 系统,有时需要将特定的 PCI 设备指派给专用的域。如果使用的是全虚拟化 Guest,仅当系统的芯片组支持并且已在 BIOS 中激活此功能时,此功能才可用。

AMD* 和 Intel* 都提供此功能。对于 AMD 计算机,此功能称为 IOMMU;对于 Intel 而言,此功能称为 VT-d。请注意,具备 Intel-VT 技术还不足以对全虚拟化 Guest 使用此功能。为确保您的计算机支持此功能,需专门要求您的供应商提供一个支持 PCI 直通的系统。

限制
  • 有些图形驱动程序使用高度优化的方法来访问 DMA。这种方法不受支持,因此使用显卡可能会存在问题。

  • 访问 PCIe 网桥后面的 PCI 设备时,必须将所有 PCI 设备都指派到单个 Guest。这项限制不适用于 PCIe 设备。

  • 具有专用 PCI 设备的 Guest 无法实时迁移到其他主机。

PCI 直通的配置要兼顾两个方面。首先,在引导时必须告知超级管理程序应使某个 PCI 设备可供重新指派。其次,必须将该 PCI 设备指派给 VM Guest。

23.5.1 配置超级管理程序以使用 PCI 直通

  1. 选择要重指派给 VM Guest 的设备。为此,请运行 lspci -k,并读取设备编号以及指派给该设备的原始模块的名称:

    06:01.0 Ethernet controller: Intel Corporation Ethernet Connection I217-LM (rev 05)
            Subsystem: Dell Device 0617
            Kernel driver in use: e1000e
            Kernel modules: e1000e

    在本例中,PCI 编号为 (06:01.0),相关的内核模块为 e1000e

  2. 指定模块依赖项以确保 xen_pciback 是用于控制设备的第一个模块。添加包含以下内容的 /etc/modprobe.d/50-e1000e.conf 文件:

    install e1000e /sbin/modprobe xen_pciback ; /sbin/modprobe \
     --first-time --ignore-install e1000e
  3. 指示 xen_pciback 模块使用“hide”选项来控制设备。编辑或创建包含以下内容的 /etc/modprobe.d/50-xen-pciback.conf 文件:

    options xen_pciback hide=(06:01.0)
  4. 重新启动系统。

  5. 使用以下命令检查该设备是否在可指派设备列表中

    xl pci-assignable-list

23.5.1.1 通过 xl 进行动态指派

为了避免重启动主机系统,您可以利用通过 xl 进行的动态指派来使用 PCI 直通。

首先确保 Dom0 中已装载 pciback 模块:

> sudo modprobe pciback

然后使用 xl pci-assignable-add 使设备可供指派。例如,要使设备 06:01.0 可供 Guest 使用,请运行以下命令:

> sudo xl pci-assignable-add 06:01.0

23.5.2 将 PCI 设备指派给 VM Guest 系统

可通过多种方法来使 PCI 设备专用于某个 VM Guest:

安装时添加该设备:

在安装期间,在配置文件中添加 pci 行:

pci=['06:01.0']
将 PCI 设备热插入到 VM Guest 系统

可以使用 xl 命令即时添加或去除 PCI 设备。要将编号为 06:01.0 的设备添加到名为 sles12 的 Guest,请使用:

xl pci-attach sles12 06:01.0
将 PCI 设备添加到 Xend

要将设备永久添加到 Guest,请在 Guest 配置文件中添加以下代码段:

pci = [ '06:01.0,power_mgmt=1,permissive=1' ]

将 PCI 设备指派给 VM Guest 后,Guest 系统必须负责处理此设备的配置和设备驱动程序。

23.5.3 VGA 直通

Xen 4.0 和更高版本支持在全虚拟化 VM Guest 上实现 VGA 图形适配器直通。Guest 可以全面控制提供高性能全 3D 和视频加速的图形适配器。

限制
  • VGA 直通功能与 PCI 直通类似,因此也需要主板芯片组和 BIOS 提供 IOMMU(或 Intel VT-d)支持。

  • 只有主图形适配器(打开计算机电源时使用的图形适配器)能够与 VGA 直通搭配使用。

  • 仅支持对全虚拟化 Guest 使用 VGA 直通。不支持半虚拟 (PV) Guest。

  • 不能在多个使用 VGA 直通的 VM Guest 之间共享显卡 — 显卡只能供一个 Guest 专用。

要启用 VGA 直通,请在全虚拟化 Guest 配置文件中添加以下设置:

gfx_passthru=1
pci=['yy:zz.n']

其中,yy:zz.n 是 Dom0 上使用 lspci -v 找到的 VGA 图形适配器的 PCI 控制器 ID。

23.5.4 查错

在某些情况下,安装 VM Guest 期间可能会出现问题。本节将介绍一些已知问题及其解决方法。

系统在引导期间挂起

软件 I/O 转换缓冲区会提前在引导进程中分配一大块低速内存。如果内存请求超出了缓冲区大小,通常就会导致引导进程挂起。要检查是否存在这种情况,请切换到控制台 10,并检查其输出是否包含如下所示的消息

kernel: PCI-DMA: Out of SW-IOMMU space for 32768 bytes at device 000:01:02.0

在这种情况下,您需要增加 swiotlb 的大小。在 Dom0 的命令行上添加 swiotlb=VALUE(其中 VALUE 指定为 slab 项数)。请注意,可以通过增大或减小该数字来找到适合计算机的最佳大小。

注意
注意:为 PV Guest 启用 swiotlb

要在 PV Guest 上正常进行 PCI 设备的 DMA 访问,必须指定 swiotlb=force 内核参数。有关 IOMMU 和 swiotlb 选项的详细信息,请参见软件包 kernel-source 中的 boot-options.txt 文件。

23.5.5 更多信息

互联网上的一些资源提供了有关 PCI 直通的有趣信息:

23.6 USB 直通

可通过两种方法将单个主机 USB 设备直通到 Guest。第一种方法是使用模拟的 USB 设备控制器,第二种方法是使用 PVUSB。

23.6.1 标识 USB 设备

在将 USB 设备直通到 VM Guest 之前,需要先在 VM 主机服务器上标识该设备。使用 lsusb 命令列出主机系统上的 USB 设备:

# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0461:4d15 Primax Electronics, Ltd Dell Optical Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

例如,要直通 Dell 鼠标,请以 vendor_id:device_id (0461:4d15) 格式指定设备标记,或以 bus.device (2.3) 格式指定总线地址。请记得去除前导零,否则 xl 会将数字解释为八进制值。

23.6.2 模拟的 USB 设备

在模拟的 USB 中,设备模型 (QEMU) 会向 Guest 呈现模拟的 USB 控制器。然后,将通过 Dom0 控制 USB 设备,而 USB 命令将在 VM Guest 与主机 USB 设备之间转换。此方法仅适用于全虚拟化域 (HVM)。

使用 usb=1 选项启用模拟的 USB 集线器。然后使用 host:USBID 在配置文件中指定设备列表中的设备以及其他模拟的设备。例如:

usb=1
usbdevice=['tablet','host:2.3','host:0424:460']

23.6.3 半虚拟化 PVUSB

PVUSB 是以高性能方式实现从 Dom0 到虚拟化 Guest 的 USB 直通的新方法。借助 PVUSB,可以通过两种方式将 USB 设备添加到 Guest:

  • 在创建域时通过配置文件添加

  • 当 VM 正在运行时通过热插入方式添加

PVUSB 使用半虚拟化前端和后端接口。PVUSB 支持 USB 1.1 和 USB 2.0,适用于 PV 和 HVM Guest。要使用 PVUSB,Guest 操作系统中需要有 USB 前端,并且 Dom0 中需要有 USB 后端或者 QEMU 中需要有 USB 后端。在 SUSE Linux Enterprise Server 上,QEMU 已随附了 USB 后端。

从 Xen 4.7 开始引入了 xl PVUSB 支持和热插入支持。

在配置文件中,使用 usbctrlusbdev 指定 USB 控制器和 USB 主机设备。例如,对于 HVM Guest:

usbctrl=['type=qusb,version=2,ports=4', 'type=qusb,version=1,ports=4', ]
usbdev=['hostbus=2, hostaddr=1, controller=0,port=1', ]
注意
注意

必须为 HVM Guest 的控制器指定 type=qusb

要管理 PVUSB 设备的热插入,请使用 usbctrl-attachusbctrl-detachusb-listusbdev-attachusb-detach 子命令。例如:

创建版本为 USB 1.1 并包含 8 个端口的 USB 控制器:

# xl usbctrl-attach test_vm version=1 ports=8 type=qusb

在域中找到第一个可用的 controller:port,并将 busnum:devnum 为 2:3 的 USB 设备挂接到该端口;您也可以指定控制器端口

# xl usbdev-attach test_vm hostbus=2 hostaddr=3

显示域中的所有 USB 控制器和 USB 设备:

# xl usb-list test_vm
Devid  Type   BE  state usb-ver ports
0      qusb   0   1     1       8
  Port 1: Bus 002 Device 003
  Port 2:
  Port 3:
  Port 4:
  Port 5:
  Port 6:
  Port 7:
  Port 8:

分离控制器 0 端口 1 下的 USB 设备:

# xl usbdev-detach test_vm 0 1

去除具有所示 dev_id 的 USB 控制器,以及其下的所有 USB 设备:

# xl usbctrl-detach test_vm dev_id

有关详细信息,请参见 https://wiki.xenproject.org/wiki/Xen_USB_Passthrough