burak@unix~$

~bilgisayar üzerine garip deneyimler~

GNU/Linux’da Nvidia Optimus deneyimlerim

ile 2 yorum

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.

Written by Burak Sezer

Aralık 4, 2011 1:31 am

Kişisel, Linux kategorisinde yayınlandı

2 Yanıt

Subscribe to comments with RSS.

  1. 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


Yorum yapın

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Değiştir )

Twitter picture

You are commenting using your Twitter account. Log Out / Değiştir )

Facebook photo

You are commenting using your Facebook account. Log Out / Değiştir )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 55 other followers