Tips and Tweaks for creating a high performance Arch linux VM using VMware Workstation 17 on Windows 11
- config.ini file located in "C:\ProgramData\VMware\VMware Workstation" by default
- VMX file is in VM folder. You can right click the VM in the sidebar to "Open VM Directory"
GLMark2 score: 4342 (Host is using an RTX 3080)
Geekbench5 score: 1875/10016 (8 p-cores of a modestly clocked 12700K, within 5% of host score)
In-guest disk speed: 3500MBPS read 2500MBPS write (on crucial P5+)
Desktop visual performance equivalent to virgl w/ libvirt
Initial Conditions:
-
Affinity set to only P-cores in taskmanager
-
Hyper-V and associated features turned off
-
PVSCSI (nvme) pre-allocated disk for arch root
-
PVSCSI (nvme) independent-persistent disk for /var/cache/pacman/pkg - Common pkg cache between all the future snapshot forks of VM - I set it to uses nvme1:0 rather than nvme0:1 so it shows as seperate nvme dev instead of another namespace
-
Archiso CD-ROM changed from IDE to SCSI
- IDE was extremely slow (>10 minutes to login shell)
-
Options>Advanced: Disable page trimming, select UEFI
-
3d acceleration enabled
-
All CPU options selected > nested virtualization enabled (untested)
-
"Other 5.X 64 Linux" selected as OS
-
VMW-Workstation config.ini edited to use memory directly
-
Some highlited VMX file parameters:
- vcpu.hotadd = "FALSE"
- mem.hotadd = "FALSE"
- arch-wiki mentions problems with mem.hotadd
- cpuid.numSMT = "2"
- Enable hyperthreading awareness - set # vcpus equal to # threads
- priority.grabbed = "high"
- personal preference
- mks.forceDiscreteGPU = "TRUE"
- Possible keyboard lag fix
- mks.keyboardFilter = "require"
- keyboard.softAutorepeat = "FALSE"
- keyboard.typematicMinDelay = "5"
- vmxnet.alwaysEnhanced = TRUE"
- ethernet0.virtualDev = "vmxnet3"
- Defaults to e1000 when choosing "Other Linux"
- DELETED after done with iso:
- scsi0.virtualDev = "pvscsi"
- scsi0.present = "TRUE"
Other VMX paremeters that may do nothing:
- sched.cpu.affinity = "0-15"
- mks.forceDiscreteGPU = "TRUE"
- mks.enableVulkanPresentation = "TRUE"
- mks.enableX11Presentation = "TRUE"
- mks.maxRefreshRate = "120"
- mks.vsync = "FALSE"
- mks.useD3D = "TRUE"
- svga.maxFullscreenRefreshTick = "120"
- svga.maxChangeTick = "120"
- svga.maxLocalChangeTick = "120"
- svga.maxNoChangeTick = "120"
- svga.showUpdateRate = "TRUE"
- svga.debug.showFPS = "TRUE"