27 虚拟化:配置选项和设置 #
本节中的内容介绍可帮助技术创新者实施前沿虚拟化解决方案的高级管理任务和配置选项。这些内容仅作为参考信息,并不意味着所述的所有选项和任务都受 Novell, Inc. 的支持。
27.1 虚拟 CD 读取器 #
可以在创建虚拟机时设置虚拟 CD 读取器,也可以将虚拟 CD 读取器添加到现有虚拟机。虚拟 CD 读取器可以基于物理 CD/DVD 或 ISO 映像。虚拟 CD 读取器的工作方式根据其是半虚拟还是全虚拟读取器而异。
27.1.1 半虚拟计算机上的虚拟 CD 读取器 #
一台半虚拟计算机最多可以包含 100 个由虚拟 CD 读取器和虚拟磁盘构成的块设备。在半虚拟计算机上,虚拟 CD 读取器会将 CD 显示为允许进行只读访问的虚拟磁盘。虚拟 CD 读取器不可用于向 CD 写入数据。
访问完半虚拟计算机上的 CD 后,建议从虚拟机中去除虚拟 CD 读取器。
半虚拟化 Guest 可以使用 devtype=cdrom
设备类型。这可以在一定程度上模拟真实 CD 读取器的行为,并允许更换 CD。您甚至可以使用 eject 命令打开 CD 读取器的托盘。
27.1.2 全虚拟计算机上的虚拟 CD 读取器 #
一台全虚拟计算机最多可以包含 4 个由虚拟 CD 读取器和虚拟磁盘构成的块设备。全虚拟计算机上的虚拟 CD 读取器会像物理 CD 读取器一样与插入的 CD 进行交互。
将 CD 插入主机计算机上的物理 CD 读取器后,包含基于物理 CD 读取器(例如 /dev/cdrom/
)的虚拟 CD 读取器的所有虚拟机都可以读取插入的 CD。假设操作系统具有自动挂载功能,CD 应该会自动显示在文件系统中。虚拟 CD 读取器不可用于向 CD 写入数据。它们配置为只读设备。
27.1.3 添加虚拟 CD 读取器 #
虚拟 CD 读取器可以基于插入 CD 读取器中的 CD,也可以基于 ISO 映像文件。
请确保虚拟机正在运行,并且操作系统已完成引导。
将所需 CD 插入物理 CD 读取器,或者将所需 ISO 映像复制到 Dom0 可访问的位置。
在 VM Guest 中选择一个新的未使用的块设备,例如
/dev/xvdb
。选择您要分配给 Guest 的 CD 读取器或 ISO 映像。
使用真实 CD 读取器时,请使用以下命令将 CD 读取器分配给 VM Guest。在此示例中,Guest 名为 alice:
>
sudo
xl block-attach alice target=/dev/sr0,vdev=xvdb,access=ro分配映像文件时,请使用以下命令:
>
sudo
xl block-attach alice target=/path/to/file.iso,vdev=xvdb,access=ro新的块设备(例如
/dev/xvdb
)即会添加到虚拟机中。如果虚拟机运行的是 Linux,请完成以下操作:
在虚拟机中打开一个终端,然后输入
fdisk -l
校验是否正确添加了设备。您也可以输入ls /sys/block
查看虚拟机可用的所有磁盘。虚拟机将 CD 识别为带有驱动器号的虚拟磁盘,例如:
/dev/xvdb
输入使用相应驱动器号挂载 CD 或 ISO 映像的命令。例如,
>
sudo
mount -o ro /dev/xvdb /mnt会将 CD 挂载到名为
/mnt
的挂载点。虚拟机应该可以通过指定的挂载点使用该 CD 或 ISO 映像文件。
如果虚拟机运行的是 Windows,请重引导虚拟机。
校验虚拟 CD 读取器是否显示在
My Computer
部分。
27.1.4 去除虚拟 CD 读取器 #
请确保虚拟机正在运行,并且操作系统已完成引导。
如果已挂载虚拟 CD 读取器,请从虚拟机内部将其卸载。
在 Guest 块设备的主机视图中输入
xl block-list alice
。输入
xl block-detach alice
BLOCK_DEV_ID 以从 Guest 中去除该虚拟设备。如果该操作失败,请尝试添加-f
以强制去除。按下硬件弹出按钮以弹出 CD。
27.2 远程访问方法 #
某些配置(例如包含机架式服务器的配置)要求运行的计算机不配备视频监视器、键盘或鼠标。此类配置通常称为headless
,需要使用远程技术来管理。
典型的配置方案和技术包括:
- 包含 X Window 系统服务器的图形桌面
如果在虚拟机主机上安装了图形桌面(例如 GNOME),您便可以使用 VNC 查看器这样的远程查看器。在远程计算机上,使用
tigervnc
或virt-viewer
等图形工具登录并管理远程 Guest 环境。- 仅文本
您可以从远程计算机使用
ssh
命令登录到虚拟机主机并访问其基于文本的控制台。然后可以使用xl
命令来管理虚拟机,并可使用virt-install
命令来创建新虚拟机。
27.3 VNC 查看器 #
VNC 查看器用于以图形方式查看运行中 Guest 系统的环境。可以从 Dom0 使用该查看器(称为本地访问或机上访问),也可以从远程计算机使用。
可以使用 VM 主机服务器的 IP 地址和 VNC 查看器来查看此 VM Guest 的显示画面。当虚拟机运行时,主机上的 VNC 服务器将为该虚拟机分配一个端口号,用于建立 VNC 查看器连接。分配的端口号是虚拟机启动时可用的最小端口号。该端口号仅供虚拟机运行时使用。虚拟机关机后,该端口号可能会分配给其他虚拟机。
例如,如果端口 1、2、4、5 已分配给运行中的虚拟机,那么 VNC 查看器将分配最小可用端口号 3。如果虚拟机下次启动时端口号 3 仍在使用中,则 VNC 服务器将向虚拟机分配其他端口号。
要从远程计算机使用 VNC 查看器,防火墙必须允许访问 VM Guest 系统要通过其运行的端口数。即,要允许访问 5900 及更大编号的端口。例如,要运行 10 个 VM Guest 系统,则需要打开 TCP 端口 5900:5910。
要从运行 VNC 查看器客户端的本地控制台访问虚拟机,请输入以下命令之一:
vncviewer ::590#
vncviewer :#
# 是分配给虚拟机的 VNC 查看器端口号。
从 Dom0 之外的计算机访问 VM Guest 时,请使用以下语法:
>
vncviewer 192.168.1.20::590#
在本例中,Dom0 的 IP 地址为 192.168.1.20。
27.3.1 向虚拟机分配 VNC 查看器端口号 #
尽管 VNC 查看器默认会分配第一个可用的端口号,但您应该向特定的虚拟机分配特定的 VNC 查看器端口号。
要在 VM Guest 上分配特定的端口号,请编辑虚拟机的 xl 设置,并将 vnclisten
更改为所需的值。以端口号 5902 为例,请仅指定 2,因为系统会自动加上 5900:
vfb = [ 'vnc=1,vnclisten="localhost:2"' ]
有关编辑 Guest 域的 xl 设置的详细信息,请参见第 25.1 节 “XL — Xen 管理工具”。
分配较大的端口号可避免与 VNC 查看器分配的端口号冲突,VNC 查看器使用的是最小的可用端口号。
27.3.2 使用 SDL 而不是 VNC 查看器 #
如果您要从虚拟机主机控制台访问虚拟机的显示画面(称为本地访问或机上访问),应使用 SDL 而不是 VNC 查看器。通过网络查看桌面时,VNC 查看器速度更快,但从同一台计算机查看桌面时,SDL 速度更快。
要设置为默认使用 SDL 而不是 VNC,请按如下所示更改虚拟机的配置信息。有关说明,请参阅 第 25.1 节 “XL — Xen 管理工具”。
vfb = [ 'sdl=1' ]
请记住,与 VNC 查看器窗口不同,关闭 SDL 窗口会终止虚拟机。
27.4 虚拟键盘 #
启动虚拟机后,主机会根据虚拟机的设置创建一个与 keymap
项匹配的虚拟键盘。如果未指定 keymap
项,虚拟机的键盘将默认为“英语(美国)”。
要查看虚拟机当前的 keymap
项,请在 Dom0 上输入以下命令:
>
xl list -l VM_NAME | grep keymap
要配置 Guest 的虚拟键盘,请使用以下代码段:
vfb = [ 'keymap="de"' ]
有关支持的键盘布局的完整列表,请参见 xl.cfg
手册页 man 5 xl.cfg
的 Keymaps
部分。
27.5 分配专用 CPU 资源 #
在 Xen 中,可以指定 Dom0 或 VM Guest 应使用多少以及哪些 CPU 核心来保持其性能。Dom0 的性能对于系统整体而言非常重要,因为磁盘和网络驱动程序都是在 Dom0 上运行。此外,I/O 密集型 Guest 的工作负载可能会消耗 Dom0 的大量 CPU 周期。不过,设置 VM Guest 的目的是为了完成某项任务,而 VM Guest 的性能对于此类任务能否完成也很重要。
27.5.1 Dom0 #
为 Dom0 分配专用 CPU 资源可以提高虚拟化环境的总体性能,因为这样 Dom0 便会有可用的 CPU 时间处理来自 VM Guest 的 I/O 请求。不为 Dom0 分配专用 CPU 资源可能会导致性能不佳,并可能导致 VM Guest 无法正常运行。
分配专用 CPU 资源涉及到三个基本步骤:修改 Xen 引导行,将 Dom0 的 VCPU 绑定到物理处理器,然后在 VM Guest 上配置 CPU 相关选项:
首先,需要将
dom0_max_vcpus=X
追加到 Xen 引导行。为此,请将以下行添加到/etc/default/grub
中:GRUB_CMDLINE_XEN="dom0_max_vcpus=X"
如果
/etc/default/grub
已包含设置了GRUB_CMDLINE_XEN
的行,请将dom0_max_vcpus=X
追加到此行。需将
X
替换为供 Dom0 专用的 VCPU 数量。运行以下命令更新 GRUB 2 配置文件:
>
sudo
grub2-mkconfig -o /boot/grub2/grub.cfg重引导以使更改生效。
下一步是将 Dom0 的每个 VCPU 绑定(或“固定”)到一个物理处理器。
>
sudo
xl vcpu-pin Domain-0 0 0 xl vcpu-pin Domain-0 1 1第一行将 Dom0 的 VCPU 0 绑定到物理处理器 0,第二行将 Dom0 的 VCPU 1 绑定到物理处理器 1。
最后,需确保没有任何 VM Guest 使用 Dom0 的 VCPU 专用的物理处理器。假设您正在运行一个 8 CPU 系统,需将
cpus="2-8"
添加到相关 VM Guest 的配置文件。
27.5.2 VM Guest #
用户常常需要分配特定的 CPU 资源供虚拟机专用。默认情况下,虚拟机会使用任何可用的 CPU 核心。为虚拟机分配合理数量的物理处理器可以提升其性能,因为分配给虚拟机后,其他 VM Guest 都不能使用这些物理处理器。假设某台计算机具有 8 个 CPU 核心,而虚拟机需要其中的 2 个,请按如下所示更改其配置文件:
vcpus=2 cpus="2,3"
以上示例为 VM Guest 分配了 2
个专用处理器,即第三个和第四个处理器(从 0 开始算起为第 2
和第 3
个)。如果您需要分配更多的物理处理器,请使用 cpus="2-8"
语法。
如果您需要以热插拔方式为名为 “alice” 的 Guest 更改 CPU 分配,请在相关 Dom0 上使用以下命令:
>
sudo
xl vcpu-set alice 2>
sudo
xl vcpu-pin alice 0 2>
sudo
xl vcpu-pin alice 1 3
此示例为该 Guest 分配了 2 个专用物理处理器,并将其 VCPU 0 和 1 分别绑定到物理处理器 2 和 3。现在检查分配:
>
sudo
xl vcpu-list alice Name ID VCPUs CPU State Time(s) CPU Affinity alice 4 0 2 -b- 1.9 2-3 alice 4 1 3 -b- 2.8 2-3
27.6 HVM 功能 #
在 Xen 中,某些功能仅适用于全虚拟化域。这些功能极少用到,但在特定环境中仍可能具有独特的作用。
27.6.1 指定引导时使用的引导设备 #
与使用物理硬件时一样,有时需要从其他设备而非 VM Guest 自己的引导设备来引导该 Guest。对于全虚拟计算机,可以在域 xl 配置文件中使用 boot
参数来选择引导设备:
boot = BOOT_DEVICE
BOOT_DEVICE 可以是 c
(表示硬盘)、d
(表示 CD-ROM)或 n
(表示网络/PXE)。您可以指定多个选项,系统会按指定的顺序尝试这些选项。例如,
boot = dc
从 CD-ROM 引导,如果 CD-ROM 不可引导,则回退到硬盘。
27.6.2 更改 Guest 的 CPUID #
要将 VM Guest 从一台 VM 主机服务器迁移到另一台 VM 主机服务器,VM Guest 系统只能使用这两个 VM 主机服务器系统上均会提供的 CPU 功能。如果两台主机上的实际 CPU 不同,可能需要在启动 VM Guest 之前隐藏某些功能。这样便可以在两台主机之间迁移 VM Guest。对于全虚拟化 Guest,可以通过配置可供 Guest 使用的 cpuid
来实现此目的。
要大致了解当前 CPU 的情况,请查看 /proc/cpuinfo
。其中包含定义当前 CPU 的所有重要信息。
要重新定义 CPU,请先查看 CPU 供应商的相应 cpuid 定义。可从以下网站获取这些定义:
cpuid = "host,tm=0,sse3=0"
语法为 key=value
对的逗号分隔列表,前面加上 host
一词。一些键接受数字值,其他所有键接受描述功能位作用的单个字符。有关 cpuid 键的完整列表,请参见 man 5
xl.cfg
。可使用下面的值更改相应的位:
- 1
将对应的位强制为
1
- 0
将对应的位强制为
0
- x
使用默认策略的值
- k
使用主机定义的值
- s
与
k
类似,但会在迁移后保留值
请记住,位是从位 0
开始从右向左计数的。
27.6.3 增加 PCI-IRQ 的数量 #
如果您需要增加 Dom0 和/或 VM Guest 可用的 PCI-IRQ 的默认数量,可以修改 Xen 内核命令行。使用命令 extra_guest_irqs=
DOMU_IRGS,DOM0_IRGS。第一个可选数字 DOMU_IRGS 是所有 VM Guest 公用的数字,第二个可选数字 DOM0_IRGS(前面带有逗号)用于 Dom0。更改 VM Guest 的设置不会影响 Dom0,反之亦然。例如,要在不更改 VM Guest 的情况下更改 Dom0,请使用
extra_guest_irqs=,512
27.7 虚拟 CPU 调度 #
Xen 超级管理程序会将虚拟 CPU 单独调度到不同的物理 CPU 中。在每个核心均支持多个线程的新式 CPU 中,虚拟 CPU 可以在同一核心上的不同线程中运行,因此会相互影响。在一个线程中运行的虚拟 CPU 的性能可能会受到其他线程中的其他虚拟 CPU 所执行操作的显著影响。如果这些虚拟 CPU 属于不同的 Guest 系统,这些 Guest 可能会相互影响。具体影响各不相同,从 Guest CPU 用时统计出现差异,到遭遇边信道攻击等更坏的情况。
调度粒度可以解决此问题。您可以使用 Xen 引导参数在引导时指定粒度:
sched-gran=GRANULARITY
请将 GRANULARITY 替换为下列其中一项:
- cpu
Xen 超级管理程序的常规调度。不同 Guest 的虚拟 CPU 可以共享同一个物理 CPU 核心。此为默认设置。
- core
一个虚拟核心的虚拟 CPU 始终一起调度到一个物理核心中。来自不同虚拟核心的两个或更多个虚拟 CPU 永远不会调度到同一个物理核心中。因此,在某些物理核心中,可能有多个 CPU 保持空闲状态,即使存在需要运行的虚拟 CPU 也不例外。对性能的影响取决于 Guest 系统内部正在运行的实际工作负载。在我们所分析的大多数案例中,观察到的性能下降情况(尤其是在承受很高负载的情况下)比禁用超线程(使所有核心仅保留一个线程)要轻一些(请参见 https://xenbits.xen.org/docs/unstable/misc/xen-command-line.html#smt-x86 上的
smt
引导选项)。- socket
粒度甚至可以提高到 CPU 插槽级别。