Spela i en virtuell maskin (Fortnite)
Hej.
Kort bakgrund: jag vill inte att MS äger min dator, så jag kör Linux Mint istället för Windows. Många spel fungerar; men inte Fortnite för den vill installera BattleEye och annat jobbigt. För att köra det i Linux, installerade jag VMware Player (som VMware Workstation men gratis), installerade en virtuell Windows 10 och kör från VM:en. Efter en hel del meckande så "fungerar" det tillräckligt för att spela med barnen.
Här beskriver jag hur jag fick det att fungera så bra som möjligt, kanske kan det vara till hjälp för någon annan som vill köra grafiska saker i en VM OBS: Dessa optimeringar är för att köra en virtuell dator optimalt, resten av systemet kommer att gå väldigt segt.
Hårdvara
CPU: AMD 5600G (6 kärnor, inbyggt grafikkort)
Minne: 32G DDR4 3600 CL18 (AMP-profil aktiverad)
Grafik: 8GB statisk allokering (av 32GB, så OS:et har 26GB kvar)
VM
Workstation 17 virtual machine
CPU: 5 kärnor
Minne: 17GB RAM
Nätverk: VMXNET3 (bridged)
Hårddisk: PVSCSI (ej valbart i Player, se nedan)
USB-kontroller: USB 2.0
Ljud: Auto
Grafik: 1st skärm, 4GB RAM
Optimeringar
Först: patcha, kör "disk cleanup" och radera alla gamla windows-installationsfiler.
Första optimeringen var att köra Windows 10 Debloater och radera allt fluff som MS tycker att man ska ha. Den avinstallerar till och med OneDrive \o/ https://github.com/Sycnex/Windows10Debloater
VMware-optimeringar, stäng VM:en först:
Tillagt i /etc/vmware/config:
prefvmx.minVmMemPct = "100"
sched.mem.pshare.enable = "FALSE"
mainMem.useNamedFile = "FALSE"
prefvmx.useRecommendedLockedMemSize = "TRUE"
mainMem.partialLazySave = "FALSE"
mainMem.partialLazyRestore = "FALSE"
priority.grabbed = "high"
priority.ungrabbed = "normal"
"minVmMemPct" ser till all alla VM:ar får 100% av all minne, annars försöker Player sno tillbaka minne som den tycker inte behövs
"sched.mem.pshare.enable" förhindrar att VM:en delar minne (borde inte spela någon roll i Player som bara kan köra en VM)
Tillagt i VMX:filen:
svga.autodetect = "FALSE"
svga.maxWidth = "1920"
svga.maxHeight = "1080"
svga.maxTextureAnisotropy = "0"
svga.maxTextureSize = "8192"
monitor.usecHostedVSMPMaxSkew = "0"
mainmem.backing = "swap"
sched.cpu.affinity="2,4,6,8,10"
monitor_control.disable_mmu_largepages="TRUE"
monitor.idleLoopSpinBeforeHalt="TRUE"
monitor.idleLoopMinSpinUS="2000"
mainMem.freeSpaceCheck = "FALSE"
Affinity: låser VM:ens 5 kärnor till specifika kärnor. De jag har valt är 5 kärnor (trådar egentligen) som ligger på separata fysisika kärnor.
Largepages: utan den så laggar VM:en otroligt mycket, när mycket 3D används
idleLoopSpin: om Player tycker att VM:en inte jobbar, så pausar den vCPU:n. Här specificeras att den ska vänta 2ms innan den pausar.
usecHostedVSMPMaxSkew: lite oklar, jag tror att den tvingar alla trådar att gå synkront. Den gav marginellt bättre prestanda i EZBENCH
För att minska CPU-belastningen marginellt, ändras också nätverkskortet till VMXNET. Ändra nätverkskortet genom att ändra virtualDev (det stod e1000 förut):
ethernet0.virtualDev = "vmxnet3"
Efter detta fungerar Fortnite ganska bra, med all grafik-fluff avstängt och 3D satt till 50%. "EZBENCH", som är ett gratis demo av Unreal 5-motorn (som Fortnite kör) ger 3460 poäng. Men spelet låser sig rejält med oregelbunda mellanrum. Jag gissar att det är när den läser in nya texturer från disk. Det blev bättre när jag bytte (virtuell) disk från NVME till PVSCSI. Windows var redan installerat, men så här bytte jag disk utan att ominstallera:
Lägg till en ny disk, i Player-GUI:et, på 1gig eller så. OBS: välj typen "SCSI"
Redigera VMX-filen, ändra "scsi0.virtualDev" till "pvscsi"
Starta, så att Windows laddar drivrutinen för PVSCSI
Stäng ner Windows-VM:en.
Byt fil på scsi0:0 och nvme0:0
nvme0:0.fileName = "Windows 10 x64-0.vmdk"
scsi0.virtualDev = "pvscsi"
scsi0:0.fileName = "Windows 10 x64.vmdk"
Jag trodde att det skulle vara svårare att byta OS-disk, men Windows 10 bootade utan problem efter ändringen.
Resultat
Jag kan nu köra Fortnite med sämst grafik
"EZBENCH" gick från ca 2700 poäng utan optimeringar, till 3460.
Det uppstår fortfarande korta "lagg" eller hängningar när spelet läser in texturer, men det är spelbart.
Troligen skulle prestandan bli bättre med en snabbare CPU; jag vet inte hur VMware gör sin virtuella 3D, men jag gissar på att den är helt CPU-baserad.