Improving Yosemite VM performance in VMware Fusion
Being able to virtualize OS X with VMware Fusion has been a great tool for Mac admins, as it allows them to test out new workflows and configurations before committing them to actual Macs. To go along with the convenience, there can be a performance trade-off between VMs and physical Macs, but it’s usually been one where assigning adequate RAM and processors to the VMware Fusion VM usually resulted in decent performance in the VM.
This changed with Yosemite, where the graphics performance in a VM was sluggish and assigning more RAM and processors to a VM did not address the issue. Even ensuring that the VMware Tools were installed did not markedly improve performance. I also saw redraw issue involving windows that had been in the background and hidden behind other windows. These windows were not redrawing correctly when they were selected and brought to the foreground, resulting in parts of windows showing up as being transparent.
On investigation, the root cause of the issue was beam synchronization, which is a technique first introduced in 10.4.x to better handle screen redraw and allow OS X’s window management process to be more efficient. Beam synchronization works fine on Yosemite when running on actual machines, but it is apparently a significant issue when running in a VMware VM.
Fortunately, the answer to the problem is relatively simple – disable beam synchronization. Once that’s done, the performance of an OS X VM running 10.10.x improves dramatically. However, there were two hitches:
- The way to disable it was to use Apple’s Quartz Debug developer tool.
- You had to disable it on every login.
Enter BeamOff, an application designed to do one thing – disable beam synchronization. For more details, see below the jump.
BeamOff was written by JasF, who developed BeamOff to fix the performance issue he was having with Yosemite VMs. JasF posted the source files to GitHub and a compiled version of the application as part of this thread on the InsanelyMac forums.
When BeamOff runs, you should see it appear briefly in the dock and bounce once or twice as it runs. Once it has finished disabling beam sync, it then quits automatically.
When I tested the compiled BeamOff application, I saw a considerable improvement in how fast the VM was now responding. The window redraw issues I had previously seen were also addressed, with windows now being refreshed correctly regardless if they were in the background or foreground.
Because I wanted to have BeamOff run automatically, I installed it in the /Applications directory of my Yosemite VM and wrote the following LaunchAgent to launch and run BeamOff on login:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
<plist version="1.0"> | |
<dict> | |
<key>Label</key> | |
<string>com.company.launch_beamoff</string> | |
<key>ProgramArguments</key> | |
<array> | |
<string>/Applications/beamoff.app/Contents/MacOS/beamoff</string> | |
</array> | |
<key>RunAtLoad</key> | |
<true/> | |
</dict> | |
</plist> |
To assist other Mac admins who are also dealing with this issue, I’ve also built and posted an installer for BeamOff and the LaunchAgent, which is available as a .zip file from the installer directory. The installer adds BeamOff to /Applications and installs the LaunchAgent to /Library/LaunchAgents.
For those interested in building their own installer, I’ve also posted a copy of the compiled BeamOff application, the LaunchAgent and the Packages project files I used to build the BeamOff installer. Those are available in the resources directory up on my repo:
I was beating my head against this very issue this week. Thanks for the post, Rich!
Lovely. I definitely see improved performance but for some reason, still, when I open a .icns file in Preview it doesn’t load all of the layers. Which is a bit mind-boggling. But the VM is much more responsive, which is helpful. Thanks!
Rich, thanks for raising your voice to let us know that this workaround works. We have implemented this workaround in the VMware Tools, that we will ship as part of an upcoming VMware Fusion release.
Régis, as of mid-May 2015, I still have to implement this workaround myself in VMWare Fusion 7 (VMWare Tools are installed). Can you confirm when it will be included?
Rich, thanks for this. However the file posted on git (“fix_yosemite_vm_graphic_performance.zip”) doesnt seem to decompress properly, resulting in a “fix_yosemite_vm_graphic_performance.zip.cpgz” file.
You may want to try downloading the .zip file again. See here for more details about .zip.cpgz file issues:
http://osxdaily.com/2013/02/13/open-zip-cpgz-file/
Or just dump Fusion for Parallels – which I did after 5 years with Fusion. No issues whatsoever. This is not a Yosemite-only problem. Vmware is twiddling their thumbs. Parallels is fine.
Seth is probably the best looking computer nerd on this forum 🙂
Great my VM’s working perfectly now..Thankyou for the post 😀
I’m leaving this note here for myself, don’t mind me…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
beamsync.py
hosted with ❤ by GitHub
pudquick / beamsync.py
Thanks for the great article: I’ve translated it in italian in my IT blog here: http://www.ryadel.com/os-x-yosemite-e-vmware-prestazioni-scadenti-come-risolvere/
Thnx Rich,
I’m running a Yosemite VM with the latest VMware Fusion 7.1.2.
I’ve noticed that after launching beamoff the UI randomly hangs (though the system is still reachable via SSH).
Did you experience something like this?
Awesome! Thanks for putting this all together you rock!!!
Beamoff.app did the trick. Thanks so much.
Awesome !!! worked like a charm
Any experience in combination with macOS Sierra? Does it work the same way?
Thanks