Search This Blog

Tuesday, March 24, 2015

How does Bumblebee work with Optimus NVIDIA GPU

How does Bumblebee work with Optimus NVIDIA GPU


What is bumblebee? Sounds like the name of an Insect or perhaps you would recognize it with the Transformer Series of Movies. The yellow Car which uses the voices from the Car's Audio system, to talk to people. Well all this is true, However What I am referring to is entirely different and it concerns Linux. Especially Linux on Computers with the Optimus Graphic Cards from Nvidia. These systems are very different from the traditional single graphics Card systems. In Traditional systems what would happen on the desktop and laptop computers is that, you would have only one graphics card. Either an Integrated graphics card or a dedicated graphics card.

What if your system had the option of having both types of cards. I mean if a computer had an Integrated graphics card capable enough of running most of the graphics stack on your computer, and onother dedicated Card to handle the heavy duty gaming stuff, How would things be then ? How would one manage the graphics cards and their settings then?

This is mostly achieved in modern hardware by using a combination of an Intel Integrated GPU and a secondary discrete NVIDIA gpu. The technology is called as Optimus. Well most of the latops these days come with the NVIDIA/INTEL Optimus setup. However having the technology at the hardware level only is not sufficient. We need to have a software stack which would then use the technology within the Operating Systems. How do we achieve this? and Quite Frankly Microsoft Windows leads in this area as the most widely used Desktop operating system hence with windows, The Optimus Technology is quite well supported out of the box wth almost zero effort on the user's part. Whenever a graphics intensive application is launched the system automatically switches to the more powerful NVIDIA GPU. Which is great as the user gets great performance without having to worry about anything. When there is no need for the NVIDIA GPU, the System automatically switches back to the Intel Integrated GPU. The result being more efficient utilization of the system resources and Improved battery life with optimum performance for you graphic intensive applications.

Well that is how it was supposed to work. However that is true only on the windows side of the world. We know MS Windows is not the end of the world. So we now talk a bit about Linux. With Linux the road is a bit bumpy, however we also have a perfect solution for Linux. We rather have two solutions to the same problem. I will cover both in this POST.

We need to understand one basic fact that with Linux, the automatic switching from Intel to NVIDIA GPU and Vice Versa is not yet supported. We can switch however user intervention is needed. Apart from this there is no other caveat to this.

The First Option is called NVIDIA PRIME. Under NVIDIA Prime, One Installs nvidia drivers alongwith the nvidia prme and nvidia-settings. In this method Nvidia-Settings program is used to switch between the driver. One can use only on GPU at one time. The Entire System will use on GPU at one time. We can Change and choose Which GPU we want however after selecting we need to logout of the session and start a new session. So this is a soluion requiring the least amount of configuration and consequently we have to live with the fact that we need to switch he graphic Card for the whole system and start a new session to use the newly selected GPU.(This works only with Nvidia Closed Source Drivers supplied by NVIDIA)

The Second Option is called the Bumblebee !! you hear it .. It is indeed called Bumblebee. Well I am not going to go into why it is called so, the fact of the matter is that it is a great solution to use in case you have the Optimus based hardware like I have. It allows you to select the GPU at run time by selecting which application you would want to run on the dedicated GPU. Yes it is true. You can launch applications to use a the high power NVIDIA GPU. By default the system always uses the Integrated Intel GPU. However when needed you can launch a application specifically targeting the NIDIA GPU.Not only that this works well with NVIDIA Closed Source Drivers but with the nuoveau Open Source Drivers as well.

I am going to be elaborating a more on the Bumblebee Stuff as there is still a lot of confusion for the new users to Linux as to how it exactly works. Bumblebee is a very Interesting piece of software. It is however often misunderstood and hence not everyone prefers it. But I strongly recommend it. Almost all Linux Distros have a small wiki dedicated to how to get Bumblebee working. There is a special case of Ubuntu and anything based on Ubuntu that I would like to point this article to.

If there is a new user ever starting the switch from Other Operating Systems to Linux, there is a high chance that he will land on to a Ubuntu or Ubuntu Spin. If the user has an Optmus Laptop then things become really Interesting. The user is used to out of box experiences and Linux in this case does not offer one. So there needs so be a specific wiki/documentation for this. There is however i personally believe it is not sufficient. There are some specfics which I think are still not covered in any Wiki for Ubuntu. I am going to focus on Ubuntu beause I fee Ubuntu documentation on bumblebee is poor.

Ok let us Understand the Operation and how it to be correctly configured.

While using Bumbelee to control the Optimus/Hybrid graphics on a laptop we must understand that Bumblebee takes total control of the Driver or the Nvidia Graphics Card. This means that Bumblebee Daemon controls the loading and unloading of the Driver. The Module for Loading the Graphics Drivers for Nvidia Cards, Namely Nouveau and nvidia-XXX driver is to be controlled by Bumblebee.

So here is a few things one needs to ensure while configuring bumblebee on Ubuntu. We need to ensure that the Driver/Kernel Module for the NVIDIA CARD is completely Blacklisted so that it never loads automatically. We want bumblebee to completely control this card.
This can be done as below.

  1. Blacklist Noueau Driver so it does not load automatically. (This is generally done Automatically by the Bumblebee Install.) Config Files to look at. /etc/modprobe.d/nvidia-XXX_hybrid.conf in case you Installed your Nvidia Proprietary Drivers alongwith Bumblebee. If you do not plan on using only Noveau, Then you must manually create a /etc/modprobe.d/blacklist-nouveau.conf and add one line to it, blacklist nouveau.
  2. Blacklist the NVIDIA-XXX Driver , We need to ensure that the NVIDIA-XXX driver needs to stay blacklisted as well. This most likely shoul happen automatically however if you are using any driver newer thatn Nvidia-331, Then it is a good option to look in /etc/modprobe.d/bumblebee.conf. This file is automatically generated while Installing Nvidia Graphics Drivers after installing Bumblebee. If you do not see the driver you are using in the file, you must add it manually. 
  3. Automatically load i915 Driver for Intel card. We need to add bbswitch and i195 to the /etc/modules file. This is because we want the bbswitch module to load automatically, this is what actually turns on and off the Nvidia Graphics Card. We also want that the Intel Integrated Card to be in use always so we add that to the file.

The above three steps ensure that we have only Intel Card enabled by default and Nvidia Drivers completely removed from getting automatically loaded. We also are loading he bbswitch module automatically which will actually switch the Nvidia Gaphics Cad ON and OFF when launching any program using optirun or primusrun prefix from the terminal. These two are the commands that need to be prefixed while launching wine or Steam depending on which of these you use or gaming. Or any other program which needs some Juice from the Nvidia Graphics Card.

Configure Bumblebee to use your Nivida-Drivers

The Only other piece of configuration that needs to be done is as below.

sudo gedit /etc/bumblebee/bumblebee.conf

1. line 22:

Driver=nvidia

2. line 55:

KernelDriver=nvidia-331

3. line 58:

LibraryPath=/usr/lib/nvidia-331:/usr/lib32/nvidia-331

4. line 61:

XorgModulePath=/usr/lib/nvidia-331/xorg,/usr/lib/xorg/modules

5. Reinstall bbswitch-dkms:

sudo apt-get install --reinstall bbswitch-dkms

6. Reboot

Note:- Just ensure that you replace nvidia-331 with the driver you have Installed.

If you are planing to use Nouveau driver then you don't need the above configuration, I will automatially work with Nouveay driver.

I now hope that after readin this post, many Ubuntu Users will understand the Bumblebee Concepts Clearly.