GNU/Linux’da Nvidia Optimus deneyimlerim
Nvidia GeForce GT 525M karta sahip bir GNU/Linux kullanıcı iseniz Optimus teknolojisini muhtemelen duymuşsunuzdur. Temelde iyi bir teknoloji; güçlü ekran kartınızın bataryanızı yiyip bitirmesini engelliyor. Sıradan işler için işlemcinin bünyesindeki grafik çipi kullanılırken performans isteyen işlerde Nvidia çipseti kullanılıyor. Neyin bütünleşik çipset neyin Nvidia çipset tarafından çalıştırılacağına kullanıcı da karar verebiliyor. Bu konuda detaylı bilgiyi Google’dan alabilirsiniz. Keselim…
Optimus, dediğim gibi, iyi bir teknoloji aslında ama Nvidia’nın Windows dışında bir platforma destek vermemesi nedeniyle bizler için ciddi bir problem olarak ortada duruyor. Bu teknolojiyi Windows üzerinde çalıştığı gibi GNU/Linux üzerinde çalıştıracak araçlar yok; zira Xorg biraz yetersiz kalıyor ve Nvidia destek vermiyor ama bazı hacky çözümler var.
Bu arada Nvidia Xorg’u ve Waylandı desteklemek gibi bir planı olmadığını açıklamış.
Bumblebee/Ironhide denen bir araç var. Hiç kullanmadım ama garip, kötü bir program olduğu söyleniyor. Fazla incelemedim… Aklınızda bulunsun.
Benim yaptığım şey, grafik donanımına çok fazla ihtiyacım olmadığından, nVidia çipi kapatmak oldu. acpi_call denen bir çekirdek modülü ile bu işi kolayca yapabiliyorum.
Bu arada lspci çıktısının ilgili kısmı şöyle:
01:00.0 VGA compatible controller: nVidia Corporation Device 0df5 (rev ff)
Bahsettiğim çekirdek modülü ise şurada ikamet ediyor:
https://github.com/mkottman/acpi_call
Derlemeniz gerekiyor, derlemek için de çekirdek kodlarına sahip olmanız gerek. En azından Gentoo‘da ve Hadron‘da işler öyle yürüyor. Diğer dağıtımlarda kernel-headers denen paketleri kurmanız gerekebilir. Araştırın…
Bu arada acpi_call dağıtımınızın deposunda da olabilir. Gentoo’da var mesela.
Eğer elle derliyorsanız şöyle bir yol izlemeniz gerekecek:
1- Kodu çekin:
$ git clone git://github.com/mkottman/acpi_call.git
2- Kod dizinine geçin:
$ cd acpi_call
3- Derleyin:
$ make
4- Çekirdek modülünü uygun bir yere kopyalayın. Şöyle olabilir:
/lib/modules/3.1.4-hadron/misc/acpi_call.ko
# cp acpi_call.ko /lib/modules/3.1.4-hadron/misc/acpi_call.ko
Evet, çekirdek modülünüz acpi_call.ko
Bu kopyalama işlemini yapmadan da modülü çalıştırabilirsiniz. Şöyle ki:
# insmod ./acpi_call.ko
Eğer kullandığınız çekirdeğin modül dizinine attıysanız ki yapmanız gereken de budur, şu komutu çalıştırmanız gerekiyor:
# depmod -a
-a yerine -A da kullanabilirsiniz sanırım. Eğer bu komutu çalıştırmazsanız modprobe komutu ile modülü yükleyemezsiniz.
5- Modülü yükleyin:
# modprobe acpi_call
dmesg çıktısında şu sonucu gördüyseniz başardınız demektir:
# dmesg | tail -f
[15337.338344] acpi_call: Module loaded successfully
Dikkat ettiyseniz GitHub‘dan çektiğiniz kodun içinde test_off.sh diye bir betik var. Bu betiği çalıştırarak bazı ACPI çağrılarını deneyebilirsiniz. Bu konularda detaylı bilgi modülün README dosyasında var.
Yukarıda bahsettiğim kartı kapatmak için şu komutu kullanıyorum:
# echo '\_SB.PCI0.PEG0.PEGP._OFF' > /proc/acpi/call
Çalıştırdıktan sonra dmesg | tail -f komutunun çıktısı şöyle oldu:
[15739.540423] acpi_call: Calling \_SB.PCI0.PEG0.PEGP._OFF
[15739.540648] acpi_call: Call successful: 0×0
İşe yaradı gördüğünüz gibi. Zaten fanın susmasından da işe yaradığını anlayabilirsiniz.
Açmak içinse şu komutu kullanıyorum:
# echo '\_SB.PCI0.PEG0.PEGP._ON' > /proc/acpi/call
Kapattıktan sonra /proc/acpi/call dosyasına gidip baktığımda içinde 0×0 yazdığını görüyorum. Kartı açınca da 0×1 yazıyor olmalı.
Bumblebee denen yazılımı kullanarak Nvidia kartı anlık olarak kullanabiliyorsunuz bildiğim kadarıyla. Ama ben hiç denemedim.
Bu konularla ilgili olarak şu kaynakları inceleyebilirsiniz:
http://hybrid-graphics-linux.tuxfamily.org/index.php?title=ACPI_calls
http://linux-hybrid-graphics.blogspot.com/
http://en.gentoo-wiki.com/wiki/X.Org/nVidia_Optimus
Son verdiğim bağlantıdaki bilgileri kullarak orta vadede kendi programımı yazarım gibi geliyor ama şimdilik böyle iyiyim!
Bu arada çekirdek güncellemesi yaparsanız acpi_call‘ı yeniden derlemeniz gerekebilir. En azından onu yeni çekirdeğinizin modül dizinine almanız gerekir. Modülün hangi sürüm için geçerli olduğunu şu komutla anlayabilirsiniz:
# modinfo acpi_call.ko
filename: acpi_call.ko
license: GPL
depends:
vermagic: 3.1.4-hadron SMP preempt mod_unload modversions
Eğer minor sürüm geçişleri ise, 3.1.3 > 3.14 geçişi gibi, yeni çekirdeğin modül dizinine almanız yeterli olur. 3.0′dan 3.1.4′e geçiyorsanız yeniden derlemeniz gerekir.









Bumblebee dedin de aklıma yine efsanevi yorumlu commit geldi şljhkgjhfgdhf
http://github.com/MrMEEE/bumblebee/commit/a047be85247755cdbe0acce6f1dafc8beb84f2ac
seqizz (@seqizz)
Aralık 4, 2011 at 2:25 am
Biraz da o yüzden “leş” bir program olduğunu söylüyorum zaten…
Burak Sezer
Aralık 4, 2011 at 2:39 am