Primus: Better Performance And Less Power Consumption For Bumblebee [Optimus Hybrid Graphics Chipsets]
Nvidia Optimus is a technology used to increases battery life by switching between two graphics adapters (a low-performance integrated Intel graphics adapter and a high-performance one by Nvidia) within a computer system. Optimus GPU switching is officially only supported on Windows, but it's also unofficially available on Linux thanks to the Bumblebee project.
Primus brings better performance and less power consumption when using Bumblebee, by replacing VirtualGL. According to the Bumblebee G+ page, this has the following advantages over the optirun (VirtualGL) solution used by default in Bumblebee:
- Less overhead (better framerates) and cleaner solution (no networking or compression involved at all)
- Fixes the "bug" that causes Bumblebee to shut down the GPU too early sometimes (no more need for the "optirun bash" workaround)
- Less buggy/glitchy, easier to debug
- Only uses/starts secondary GPU for OpenGL parts of applications - everything else remains on your main GPU (power savings)
The Bumblebee developers explain what Primus does and the difference between Primus / optirun in simple terms in a comment on their G+ page:
Bumblebee uses VirtualGL to copy the image generated by the second (faster) GPU to your display. VirtualGL was intended for use over a network though, so it takes a great many steps to enable this (compression, sending the image over a network link, decompression, etc).
Primus doesn't perform all these "extra" steps, instead taking a more direct route (copying the rendered image in memory to the other GPU, then displaying there). In theory this should get you better performance as well as better compatibility. Running applications will "see" the OpenGL implementation of your real hardware, nothing virtual is presented to them.
For comparison, here are the framerates I get on my laptop when using the integrated Intel graphics, when using the Nvidia graphics card using optirun and using primusrun (this is just for FPS and not an indicator for the whole performance!):
|Integrated (Intel) graphics|
|optirun (default in Bumblebee) using the Nvidia GPU|
|Primus using the Nvidia GPU|
As you can see, the FPS using Primus is a lot better than using the integrated graphics or using optirun with the Nvidia GPU.
Note: I've used "vblank_mode=0 primusrun" instead of simply running "primusrun" because that was recommended by the Primus GitHub page for benchmarking. Without it, I get just 60 FPS because of vblank synchronisation.
Update: Primus has been integrated into Bumblebee and is now available in the Bumblebee Ubuntu PPA.
How to install Primus for Bumblebee in Ubuntu
Update: Primus is now available in the Bumblebee Stable PPA. To add the Bumblebee PPA and install Primus and Bumblebee, use the following commands:
64bit: you also need to install the "primus-libs-ia32:i386" package:
sudo add-apt-repository ppa:bumblebee/stable sudo apt-get update sudo apt-get install bumblebee bumblebee-nvidia primus
sudo apt-get install primus-libs-ia32:i386
For other Linux distributions, see the Bumblebee Wiki for installation instructions.
Once installed, use "primusrun APP", to launch an application or game - this works just like the "optirun" command available in Bumblebee ("APP" is the application or game executable which you want to run using the Nvidia GPU). You can also use "bumblebee -b primus APP".