Linux’ta işlemci çekirdeklerini açıp kapamak

____________________________________________________________________

Bilgisayarlarımız daha fazla performans sağlaması açısından bir işlemci kasası içinde birden fazla işlemci çekirdeği ile donatılmış halde. Bu performans için bir artı olsa da güç tasarrufu konusunda yetersiz görüyorsak batarya ile kullanımda bazı çekirdekleri kapatmayı deneyebiliriz. Ya da illa ki işlemci çekirdeklerimizi kapatmak için sebebimiz olması gerekmiyor. Zevkine de geek ruhu için de yapabiliriz! 😉

Öncelikle grep “processor” /proc/cpuinfo komutunu uçbirimde çalıştırarak sistemimizin gördüğü işlemci çekirdeklerini kontrol etmeliyiz. Bu komut aşağıdaki gibi bir çıktı verecek ki aşağıdaki çift çekirdek bir cihazın çıktısı.

grep “processor” /proc/cpuinfo
processor : 0
processor : 1

Kodumuzu çalıştırınca 0 ve 1 numaralı iki çekirdeğimizin olduğunu görüyoruz ki ikinci çekirdeğimiz 1 numaralı olanı. Yani ilk çekirdek 0, ikincisi de 1 kodlu. Aşağıdaki kod da bu 1 kodlu çekirdeği kapatmak için kullanacağımız uçbirim komutu:

sudo sh -c “echo 0 > /sys/devices/system/cpu/cpu1/online”

Bu koddan sonra root şifresini girip bu çekirdeği devre dışı bırakabiliyoruz. Burada sistemimizdeki cpu1 adlı işlemcinin online değerine 0 değerini verip offline yani çevrimdışı hale getirdik gibi bir şey oluyor. Sistemdeki diğer çekirdekler için de yapmamız gereken sondaki online kelimesinden önceki /cpu1/ kısmındaki 1 rakamını çekirdeğin numarası ile değiştirmek. Yani mesela 4 gerçek 4 hyper threading çekirdeği olan 8 çekirdek görünen bir cihazda son çekirdeği kapatmak için kullanacağımız kod mesela sudo sh -c “echo 0 > /sys/devices/system/cpu/cpu7/online” olacak.

Kapattığımız çekirdekleri tekrar açmak için ise komuttaki 0 rakamını 1 ile değiştiriyor yani etkinleştirme komutu veriyoruz:

sudo sh -c “echo 1 > /sys/devices/system/cpu/cpu1/online”

Bu kodlar tabii ki çalışan sistem üzerinde çekirdekleri açıp kapatmak için. Bir de açılışta çekirdekleri devre dışı bırakmak mümkün. Bunun için açılışta görüp bir daha selam vermediğimiz GRUB yazılımına işlemci çekirdeği sınırı koymamız lazım. Bunun için de /etc/default/grub dosyasındaki GRUB_CMDLINE_LINUX_DEFAULT değerinin karşısındaki içeriğe bir boşluk bırakıp maxcpus=X kodunu girmemiz gerekiyor. Tabi buradaki X çalışmasınız istediğimiz maksimum işlemci sayısı. Yani mesela 8 çekirdekli bir cihazda sadece iki çekirdeğin çalışmasını istiyorsak bu durumda X yerine 2 yazacağız. Yani örneğin bahsettiğimiz değer ilk aşağıdaki satır gibi ise:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Yeni hali şu şekilde olacak:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash maxcpus=2"

grub dosyamızı kaydettikten sonra da sudo update-grub komutunu çalıştırıp grub konfigürasyonunu çalıştımalıyız. Bundan sonra cihazımız yeniden başladığında sadece bizim tanımladığımız sayı kadar işlemci çekirdeği çalışabilir. Tüm çekirdekleri tekrar etkinleştirmek için yukarıdaki maxcpus değişikliğini geri almamız gerekiyor.

Bu işlemler ile sistemimiz istediğimiz kadar çekirdeğini izole ederek çalışacak. Bunun performansa ve güç tüketimine getiri ve götürüleri neler olur bilinmez, en azından denemeye üşendiğim için ben bilmiyorum. Ancak güç tüketimini azaltacak diye bir kaide olmadığını da belirteyim. Okuduğum bazı yazılarda güç tüketimini drt çekirdekli Sandybridge bir işlemcide işlemcilerin yarısını kapatmanın boştaki güç tüketimini %30 arttırdığını okumuştum mesela.

Ayrıca yukarıdaki grep “processor” /proc/cpuinfo kodu Android cihazların Linux çekirdeklerinde de çalışıyor ama frekans ayarlamasını yapamadım, hata veriyor. 🙂