下面这些技巧可以帮你改善虚拟机性能。
VMware 准虚拟化 SCSI (PVSCSI) 驱动 (或称半虚拟化)是为 VMware ESXi 设计的 SCSI 驱动。可以明显提升吞吐量,降低 CPU 消耗。
在虚拟机设置的 SCSI 适配器类型里可以找到 VMware 准虚拟化
选项。
如果你在虚拟机设置里找不到该选项,可以用这个办法:首先确保将 PVSCSI 模块添加进内核的内存盘镜像。具体的做法是修改 mkinitcpio.conf
文件:
cat /etc/mkinitcpio.conf
... MODULES="... vmw_pvscsi" ...
然后重建内存盘镜像:
# mkinitcpio -p linux
将虚拟机关机,在虚拟机的 .vmx
配置文件里用如下的方法指定 SCSI 驱动:
scsi0.virtualDev = "pvscsi"
VMware 虚拟机提供了 多种网络适配方案。默认的网卡适配器一般是e1000
,它能模拟 Intel 82545EM 千兆以太网卡。该网卡可以被常见的操作系统(含 Arch)直接支持。
若要 提升性能,并引入更多高级功能(比如多队列支持),可以考虑使用 VMware 原生的 vmxnet3
网络适配器。
正常安装的 Arch 就包含有 vmxnet3
内核模块。该模块可以通过 mkinitcpio 来启用(或者被自动加载。可以用 lsmod | grep vmxnet3
命令来验证加载成功),然后关闭虚拟机,并如下修改 .vmx 文件:
ethernet0.virtualDev = "vmxnet3"
指定更换网卡驱动之后,你还要更新网络与 dhcpcd 的设置来真正使用新网卡:
# dhcpcd new_interface_name # systemctl enable dhcpcd@new_interface_name.service
运行 ip link
命令可以找到新网卡的名字。
按照 Vmware KB1008885 给出的如下优化方法,可以减少硬盘 I/O 操作数量,但代价是提升宿主机内存占用:
mainMem.useNamedFile = "FALSE" MemTrimRate = "0" prefvmx.useRecommendedLockedMemSize = "TRUE" MemAllowAutoScaleDown = "FALSE" sched.mem.pshare.enable = "FALSE"
下面这些配置可以在 VMware Workstation 的配置对话框里调整 (Edit -> Preferences... -> Memory/Priority)。
prefvmx.minVmMemPct = "100" mainMem.partialLazySave = "FALSE" mainMem.partialLazyRestore = "FALSE"
Arch Linux,和其他 Linux 客户机一样,当使用 NAT 模式的时候也许会碰到网络速度减慢的问题。为了解决这个问题,请在宿主机下把对应的客户机的网络模式切换为 桥接模式 ,在必要时修改客户机网络的配置文件。有关配置的详细信息请参阅 Network configuration (简体中文) 。如果在 Windows 宿主机下,使用正确的客户机网络配置仍然无法正确连接网络, 可使用 管理员 运行 虚拟网络编辑器 并点击左下方的 还原默认设置 按钮。
由于 open-vm-tools-dkmsAUR[损坏的链接:package not found] 包已经不再更新,较新的内核无法正确地使用它的做出兼容宿主机和客户机之间文件共享的修补。该Github 仓库 有一些修补文件可以手动应用它们并解决问题。
你还被推荐查看该包的 AUR comment 部分。
如果虚拟机发出了恼人的巨响,那有可能是 PC 扬声器的原因。在客户机系统里禁用 PC 扬声器即可解决:
# echo "blacklist pcspkr" > /etc/modprobe.d/nobeep.conf
虚拟机可能会出现下列鼠标问题:
可以先卸载软件包 xf86-input-vmmouse 试试看。
为解决鼠标箭头跳跃到从虚拟机移出的位置的问题,可以试试在 .vmx
配置文件里写入这些:
~/vmware/<Virtual Machine name>/<Virtual Machine name>.vmx
mouse.vusb.enable = "TRUE" mouse.vusb.useBasicMouse = "FALSE"
VMware 还会为游戏做自动的鼠标优化。如果这一优化产生了问题,可以在这里将其禁用:Edit > Preferences > Input > Optimize mouse for games: Never
再者,尝试在 60-libinput.conf
里禁用 catchall
事件也可能有用:
/usr/share/X11/xorg.conf.d/60-libinput.conf
#Section "InputClass" # Identifier "libinput pointer catchall" # MatchIsPointer "on" # MatchDevicePath "/dev/input/event*" # Driver "libinput" #EndSection
如果 VMware 开启了内存热扩容功能,那么有可能会出现如下错误:
若要禁用内存热扩容功能,可以在 .vmx
配置文件里写入 mem.hotadd = "FALSE"
。
~/vmware/<Virtual Machine name>/<Virtual Machine name>.vmx
mem.hotadd = "FALSE"
试着降低 vmtoolsd 服务的超时阈值(默认是 90 秒):
/etc/systemd/system/vmtoolsd.service.d/timeout.conf
[Service] TimeoutStopSec=1
自动适配的意思是,当你在宿主机里缩放 VMware 窗口之后,Arch 作为客户机系统,应该自动根据主系统窗口的新尺寸来调整分辨率。
确保在设置里开启了自动适配。
VMware Worksation 的这一设置位于:View -> Autosize -> Autofit Guest
分辨率自动适配的功能依赖 gtkmm 和 gtk2 软件包。确保客户机里装上这两个包。如果你没安装 X,或者你使用的桌面环境不依赖 GTK(比如 KDE),那么你需要手动安装这两个包。
通过 mkinitcpio.conf 加载以下模块:
/etc/mkinitcpio.conf
MODULES="vsock vmw_vsock_vmci_transport vmw_balloon vmw_vmci vmwgfx"
然后运行:
# mkinitcpio -p linux
再重启试试看。
启用 vmtoolsd.service
.
提示: 由于与 gtkmm3 的依赖关系没有明确声明导致该功能无法正常使用。此问题在 FS#43159有详述。
为了确保拖拽与复制粘贴功能正常工作,需要安装 open-vm-tools 和 gtkmm3 这两个包。
使 vmware-user
在 X11 之后运行:
etc/xdg/autostart/vmware-user.desktop
存在,如果文件不存在,请运行:# cp /etc/vmware-tools/vmware-user.desktop /etc/xdg/autostart/vmware-user.desktop
或
vmware-user
到 XinitrcWorkstation 11 有个 bug:当 Arch 客户机以共享 VM 模式运行,且启动了 vmtoolsd 服务时,vmware-hostd 会崩溃。open-vm-tools 有个补丁来绕过这一问题。
这个问题基本上只会在 open-vm-tools 出现。 自从 vmhgfs
模块属于 open-vm-tools-dkmsAUR[损坏的链接:package not found] 以后,使用 pacman -Syu
命令并不会升级传统的文件系统驱动。 因此在升级官方仓库之前应该手动升级 open-vm-tools-dkmsAUR[损坏的链接:package not found] 。
如果在系统升级之后共享文件夹没有被挂载,则删除共享文件系统自动挂载,升级 open-vm-tools-dkmsAUR[损坏的链接:package not found] 后执行 pacman -Syu
,最后执行 mkinitcpio -p linux
。不要忘记恢复文件系统自动挂载。