Nvidia Optimus Kubuntu (Ubuntu) bilgisayarda Bumblebee ile Nvidia GPU kullanımı

____________________________________________________________________

Linux & Nvidia

Linux bağımlıları, bilgisayarlarındaki her yazılımı kullanmak ister. Ancak bu her zaman yeterli kadar verimli olmayabiliyor. Özellikle ekran kartları konusunda. Nvidia tarafında sürücüler kapalı kaynak sürücülere göre oldukça zayıf ve işe yaramaz. AMD tarafında sürücüler oldukça iyi olsa da yine sıkıntıları var. Geçmişte ATI ekran kartlı bilgisayarımı kapalı kaynak ATI sürücüsü ile kullanamamıştım bile, gelişmiş hiçbir işlemi kullanamıyordum, bir daha ATI ekran kartlı PC almamaya yemin etmedim ama almamaya özen gösterdim. Nvidia kapalı kaynak sürücüleri ise oldukça iyiydi. Ancak sonra iki üretici de dizüstü bilgisayarlarda masaüstü işlemlerini dahili grafik işlemcisinde, gelişmiş 3D işlemlerini de kendi grafik işlemcilerinde çalıştıracak teknolojiler geliştirdi. Nvidia tarafında bu teknolojinin adı Nvidia Optimus olarak geçiyor ve iyi bir açık kaynak sürücüsü olmayan Nvidia platformuna bir darbe daha indiriyor. Çözümü var tabii ki.

Optimus Technology logoNvidia Optimus teknolojisinde temel olarak masaüstü işlemleri genel olarak Intel yongasetindeki dahili grafik işlemci ile yaptırılır. Dahili işlemciler hem masaüstü performansı konusunda yeterli, hem de harici bir grafik işlemci, bellek yöneticisi ve RAM sistemine göre batarya kullanımında daha düşük güç tüketimlidir. Dahili işlemciler yeni nesil Intel işlemcilerde, eskiden de kuzey köprüsü denen yongada bulunurdu. Nvidia Optimus teknolojisi sanırım Intel işlemcideki grafik işlemcilerle uyumlu. Dahili işlemcinin yeterli olmayacağı durumlarda da Nvidia grafik işlemcisi devreye girerek kullanıcının performans ihtiyacını karşılıyor.

Nvidia Optimus teknolojisinde özetle dahili grafik işlemcisine bağlı bir görüntü sunucusu çalıştırılır. Normal kullanımlar bu sunucu üzerinde gerçekleşir. Nvidia grafik işlemcisi devreye girdiğinde ise bir sunucu da bu grafik işlemcisi ile çalışır. Nvidia GPU üzerinde yapılan işlemlerle oluşturulan görüntü JPG, RGB, XV, YUV gibi biçimlerde görüntülere sıkıştırılarak dahili grafik işlemcisine gönderilir. Burada da bu görüntüler açılarak dahili işlemcinin çerçeve belleğine yazılıp ekranda görüntülenmesi sağlanır.

Nvidia Optimus teknolojisi Windows altında sıkıntısız çalışsa da Linux için yeterli destek Nvidia tarafından verilmemektedir. Nvidia Prime diye bir paket ile Nvidia Settings (Nvidia ayar uygulaması) üzerinden sistemin dahili ya da harici GPU üzerinde çalışması seçeneği sunulmuştur. Ancak tam olarak Optimus modunda bir çalışma için Nvidia’nın sürücülerinin bazı kısımlarını anladığım kadarıyla açık kaynak haline getirmesi gerekmekte ve Nvidia da buna yanaşmamaktadır.Bundan dolayı da Nvidia tarafından sunulan kolay bir çözüm yok. Bu da ya tüm sistemi dahili GPU’da çalıştırmak ya da tüm sistemi harici GPU’da çalıştırarak batarya süresinden feragat etmek demek.

En mantıklı çözüm ise yine açık kaynak bir proje olan Bumblebee projesi. Bu proje ile istediğiniz programı Nvidia Optimus modunda yani Nvidia GPU kullanarak çalıştırmanız mümkün oluyor. Bumblebee projesinin sisteme kurulumu basit olsa da ilk denemelerde biraz sıkıntı ile karşılaşabiliyorsunuz. Kendi deneyimlerim doğrultusunda Bumblebee projesinin Kubuntu (Ubuntu) sisteme kurulumunu anlatmaya çalışacağım. Diğer dağıtımlarda da hemen hemen aynı ama yine de ilgili kaynaklara bakmakta fayda var. Kullandığım sürücü kapalı kaynak sürücüsü ki, açık kaynak sürücülerinde düşük frekans, eksik özellikler vs. belli problemler var. Ayrıca bulabileceğiniz diğer bazı rehberlerden farklı olarak önce Nvidia sürücüsünü kurup sonra Bumblebee kuruyorum. Sürücüleri Bumblebee ve bumblebee-nvidia paketine bırakarak kurdurmak bazen eski sürücüleri sisteme kurup işi uzatabiliyor. Ayrıca yüklediğim sürücü de sistemi kurduğumdaki muhtemelen en sıkıntısız sürücü nvidia-346 sürücüsü.

Ubuntu türevi Linux dağıtımlarda Ayarlar uygulamasında sürücü yöneticisi bölümleri oluyor. Bu bölümden önerilen Nvidia kapalı kaynak sürücüsünü kurabilirsiniz ya da Muon ya da Yazılım Merkezi üzerinden de Nvidia sürücü paketlerini seçerek kurulum yapabilirsiniz. Bu kurulumlarda nvidia-prime paketi de kurulacak ve sisteminiz Nvidia Prime modunda çalışacak, yani tüm masaüstü Nvidia GPU üzerinde çalıştırılacak.

Bendeki Kubuntu sürücü yöneticisi sayfasında sürücü seçenekleri ve seçtiğim sürücü aşağıdaki görüntüdeki gibi. Bunu seçip uygula butonunu tıkladığınızda kurulum başlıyor.

surucu-secim-ekrani

Ayrıca Muon ya da Yazılım Merkezi üzerinden kurulumlarda da stabil sürümleri kurmakta fayda var. Mesela benim kurulum yaptığım esnada daha üst sürüm nvidia-349 sürücüsü olsa da nvidia-346 sürücüsünü tercih ettim. Yazılım merkezi üzerinden Nvidia-346 ya da farklı bir sürücü sürüm numarası yazıp arama yaptığınızda çıkacak ana paketi seçtiğinizde diğer çoğu paket de bağımlılık olarak işaretlenecek. nvidia-prime paketi otomatik seçilmemiş ise seçmek gerekebilir. Bundan sonra da uygula butonu ile kurulumu başlatabilirsiniz. Bendeki temel sürücü paketleri aşağıdakiler.

Muon yazılım merkezi

Kurulum bittiğinde sistemi yeniden başlatmak gerekiyor. Yeniden başladığında ekran görüntüsünün önceki ayarlardan biraz değişmiş olacağını göreceksiniz, çünkü sistem artık Nvidia GPU üzerinde çalışıyor. Bu kısıma kadar sorunsuz gelirseniz işlem tamamdır, ama siyah ekran vs. ile karşılaşıp beklenmedik bir şeyler olursa iş biraz sıkıcı. 😀 İlk kurulumlarda birkaç kez bununla uğraşmanız gerekebilir, hatalı ya da eksik yaptığınız bir şeyler olduğunu ondan sonra araştırarak göreceksiniz. 🙂 Bir daha bu kurulumlar çocuk oyuncağı gibi gelecek.

Masaüstünüzün Nvidia GPU üzerinde çalışıp çalışmadığını kontrol etmek için Uygulamalar > Sistem > Nvidia X Server Settings yolundan Nvidia X Server Settings ayar ekranını açın. Karşınıza aşağıdaki gibi bir pencere gelmeli. Eğer böyle bir pencere geliyorsa sisteminiz Nvidia GPU üzerinde çalışıyordur demektir.

Nvidia X Server Settings

Yukarıdaki görüntüde yok ama yan menüde göreceğiniz PRIME Profiles seçeneğine tıklarsanız aşağıdaki ekranı göreceksiniz. Bundan sonra da Intel (Power Saving Mode) seçeneğini seçerek kaydedip oturumunuzu yeniden başlatın. Bir daha Nvidia X Server Settings ekranına girdiğinizde üstteki gibi detaylı bir pencere değil sadece aşağıdaki gibi bir görüntü göreceksiniz. Bu kısımdan Bumblebee kullanmadan da Intel ve Nvidia grafik birimleri arasında geçiş yaparak sistemi kullanmak mümkün. Ama oturumu yeniden başlatmak gerekiyor ki Bumblebee bununla uğraşmaktansa daha mantıklı bir çözüm.

Nvidia X Server Settings

Artık Bumblebee kurulumuna başlayabiliriz. Bumblebee kurulumu için gerekli paketler Ubuntu depolarında zaten var ama daha güncel paketler farklı depolarda olabiliyor. Yine de standart Ubuntu deposu ile devam ediyorum. Yapmamız gereken Bumblebee paketini sisteme kurmak. Bunun için yazılım merkezinde Bumblebee paketini seçip kurabilirsiniz. Zaten gereken ekstra paket varsa bu esnada seçecektir. Ya da direk aşağıdaki komutu bir uçbirim uygulamasına kopyala yapıştır yaparak kullanabilirsiniz.

sudo apt-get install bumblebee

Kurulum tamamlandığında da ufak bir ayarlama gerekiyor. Bu da /etc/bumblebee/bumblebee.conf dosyası düzenlenerek yapılıyor. Dilerseniz kök (root) olarak dosya yöneticiniz ile bu dosyayı açabilir ya da aşağıdaki komutlar ile düzenleyicide açabilirsiniz:

Kubuntu için:

sudo kate /etc/bumblebee/bumblebee.conf

Ubuntu için:

sudo gedit /etc/bumblebee/bumblebee.conf

Bundan sonra düzenleyici ile dosyada yapacağınız değişiklikler şöyle:

Driver değerinin karşısı boş, buraya aşağıdaki gibi nvidia yazıyoruz.

Driver=nvidia

Sonra da biraz aşağıdaki [nvidia-driver] kısmında sürücü numarası ile ilgili değişiklikler yapmanız gerekiyor. KernelDriver kısmında standart olarak nvidia-current yazar, buradaki current değerini sürücünüzün numarası ile değiştiriyorsunuz. Benim yüklediğim sürücü 346 numaralı sürücü olduğu için buradaki current kısımlarını 346 ile değiştiriyorum. LibraryPath ve XorgModulePath kısmındaki değerleri de aynı şekilde değiştiriyorsunuz ve dosyayı kaydediyorsunuz. Bu dosyada şu anda başka değişiklikler yapmak gerekmiyor ama eskiden PMMethod ve Bridge ayarları ile de oynaıyordu. Benim dosyamdaki görüntü aşağıdaki gibi.

KernelDriver=nvidia-346

Bundan sonra işlem bitmiş oluyor ama son bir kontrol için aynı dizindeki xorg.conf.nvidia dosyasını kontrol etmekte fayda var. Komutumuz Kubuntu için:

sudo kate /etc/bumblebee/xorg.conf.nvidia

Ubuntu için:

sudo gedit /etc/bumblebee/xorg.conf.nvidia

Bu dosyada da bakacağımız kısım 19. satırdaki BusID değeri. Burasının başında # işareti yoksa ve değer varsa sıkıntı yok, bu kısmı atlayabilirsiniz. Ama # işareti varsa ufak bir şey daha yapmak gerekli. Bu diyez ( # ) işaretini silin. Sonra da uçbirimde lspci | egrep ‘VGA|3D’ komutunu çalıştırarak Nvidia GPU’nuzun PCI veriyolu numarasını alıp buraya tırnak işaretleri içinde giriyorsunuz. Benim uçbirim görüntüm aşağıdaki gibi ve PCI BusID değerim de 07:00.0.

Nvidia PCI BusID

Bu da xorg.conf.nvidia dosyamın görüntüsü.

xorg.conf.nvidia

Bu dosyayı da kaydettikten sonra yapılacak şey Bumblebee ayarlarımızın bbswitch-dkms çekirdek DKMS modülüne işlenmesini sağlamak. Bbswitch-dkms modülü Nvidia grafik işlemcisini açıp kapatan modül. Bunun için de uçbirimde aşağıdaki kodu çalıştırıyoruz.

sudo apt-get upgrade –reinstall bbswitch-dkms

Bundan sonra sistemi yeniden başlattığımızda genel olarak işlemlerimiz bitmiş oluyor. Denemek için yapabileceğimiz şey aşağıdaki kod ile glxgears uygulamasını yükledikten sonra test etmek.

sudo apt-get install mesa-utils

Nvidia grafik işlemcisinde çalıştırmak istediğimiz uygulamaları optirun komutu ile çalıştırmamız gerekiyor. Yani glxgears uygulamasını çalıştırmak için uçbirime optirun glxgears yazıp Enter tuşuna basmamız gerekli. Aşağıdaki gibi bir ekran görüyorsak işlem başarılı olmuş demektir. Güle güle kullanın.

optirun glxgears komutu sonrası...

Artık çalıştıracağımız uygulamaların komutlarının başında optirun yazdığımızda Nvidia GPU ile çalışacaklar. Tabi her uygulamayı uçbirimle açmaya uğraşmak olmaz. Masaüstü kısayollarını da komutlarının başına optirun gelecek şekilde düzenlediğimizde kolay bir biçimde Nvidia GPU ile çalıştırabiliriz.

Ayrıca Steam kullanıcıları da oyunlarını Nvidia GPU ile çalıştırabilir. Steam kütüphanelerindeki oyun ya da uygulamaya sağ tıklayıp Properties ekranına ve Set Launch Options… kısmına gittikten sonra buraya optirun %command% yazarak Ok deyip kaydedildiğinde artık Steam oyunlarınız da Nvidia GPU üzerinde çalışacaktır.

Steam'de optirun komutu.

Steam’de optirun komutu.

Olası sıkıntılar

Bunlardan başka Linux üzerinde CUDA uygulamaları kullanmak istiyorsanız biraz sıkıntı çıkabiliyor. Örneğin Boinc‘teki GPUgrid projesi CUDA destekli Nvidia GPU gerektiriyor ama Boinc Nvidia GPU ile açılsa da CUDA desteğini göremeyebiliyor. Bu durumda yazılım merkezimizden ilgili sürücü numaramız ile olan CUDA paketlerinin seçili olduğundan emin olmamız gerekiyor. Bundan başka da nvidia-modprobe paketini de kurmamız gerekiyor. Ayrıca kurduğumuz sürücünün UVM paketi de kurulu değilse, onu da kurmamız gerekiyor. Bu durumda benim nvidia-346 sürücüsünü kurduğuma göre benim kullandığım uçbirim komutu şöyle oluyor:

sudo apt-get install nvidia-modprobe nvidia-346-uvm

Kod yerine ilgili paketleri yazılım merkezinden de yükleyebilirsiniz. Kurulum tamamlandığında tekrar aşağıdaki komut ile bbswitch-dkms modüllerini yeniden yüklemek gerekiyor:

sudo apt-get upgrade –reinstall bbswitch-dkms

Bundan sonra CUDA desteğinin de sorunsuz çalışması gerekli. Eğer çalışmıyorsa da aşağıdaki komutu kullanarak GLX alternatifi olarak Nvidia sürücüsünü seçmek gerekiyor.

sudo update-alternatives –config x86_64-linux-gnu_gl_conf

Seçim için Nvidia sürücüsünün numarasını klavye ile tuşlayıp Enter komutu kullanmak yeterli. Ancak bu ayarın sistemin yeniden başlatıldıktan sonra sıfırlanabileceğini belirtmemde fayda var, en azından bende sıfırlanıyor. Bu da Nvidia’nın resmi olarak Linux’u desteklemediği bir platformda Linux kullanmanın ufak sıkıntılarından.

Bir de batarya moduna geçildiğinde Nvidia-UVM sürücüsü kapanmamış ise Optimus üzerindeki uygulamayı kapatsak da Nvidia GPU çalışıyor olabilir. Bu şekilde bir güç tüketimi farkederseniz de kapatmak için sırası ile çalıştırılması gereken kodlar aşağıda. Tabi sık sık kullanılıyorsa bunları bir komut dosyası haline getirmekte fayda var.

sudo rmmod nvidia_uvm
sudo rmmod nvidia
sudo tee /proc/acpi/bbswitch <<< OFF

Xorg-Edgers fresh X crack veya “Ubuntu-X” team (x-swat) gibi güncel sürücü PPA adreslerinde daha güncel Bumblebee ve Nvidia sürücüleri olabilir. Bunlar da oldukça iyi iş görebiliyorlar ancak bazı sürümlerde sıkıntı çıkabildiğini belirtmeliyim. Örneğin Kubuntu 15.04 (Vivid) üzerinde Xorg Edgers PPA ekleyerek kurulum yaptığımda siyah ekranla karşılaşarak bazı sıkıntılar yaşadım. Ancak Kubuntu 14.10 Utopic’te bir sıkıntı yaşamamıştım. Yani Ubuntu deposundan daha güncel sürücülere ulaşmak için bu PPA’ları da kullanabilirsiniz ama sistemi yeniden kurmayı göze alın derim. 🙂

Daha farklı sorunlar da çıkabiliyor tabii ki. Bunlar da genellikle UVM paketi, bbswitch-dkms paketinin yeniden yapılandırılmaması veya çekirdekle ilgili sıkıntılar. Hepsinin çözümü var. 😉