Linux: Uyku durumu yerine CPU çekirdeği kapatma


10

Linux'ta CPU çekirdeklerini (veya fiziksel CPU'ları) echo 0> / sys / device / system / cpu / cpu1 / online ile kapatabilirsiniz Donanımın CPU'yu tamamen kapattığını ve gücü keseceğini devre dışı bırakmak daha iyi olmazsa çekirdeği tamamen bir işlemcinin çeşitli uyku durumlarına güvenmek yerine?

İlkeyi göstermek için, dört CPU'lu bir sistem için bu satırlar boyunca (sahte kod) bir şey düşünüyordum:

if(loadavg > 3.00) echo 1 > /sys/devices/system/cpu/cpu3/online
if(loadavg < 3.00) echo 0 > /sys/devices/system/cpu/cpu3/online

if(loadavg > 2.00) echo 1 > /sys/devices/system/cpu/cpu2/online
if(loadavg < 2.00) echo 0 > /sys/devices/system/cpu/cpu2/online

if(loadavg > 1.00) echo 1 > /sys/devices/system/cpu/cpu1/online
if(loadavg < 1.00) echo 0 > /sys/devices/system/cpu/cpu1/online

Yanıtlar:


6

CPU çekirdeğinin çevrimiçi durumunu ayarlamak, işlem zamanlayıcıya bu çekirdeği herhangi bir işlem için kullanmamasını söyler . Donanım düzeyinde, çekirdek sadece boşta oturuyor (yapıyor NOP), ancak hala güç alıyor. Bu güç tasarrufu sağlarken, bilgisayarı uyku moduna geçirmek kadar güç tasarrufu yapmayacaktır. Neden?

Anakartınız, CPU'nuz ve GPU'nuz hala çalışıyor ! Bilgisayarı uyku moduna geçirdiğinizde, tüm bu bileşenler tam anlamıyla güçsüzdür ve RAM'inizi canlı tutmak için yeterli güç kullanılır (birkaç watt civarında).

Yine, güç tasarrufu yapacağını kabul etsem de, CPU çekirdeklerinizin yarısını kapatmak bile işlemcinin güç tüketimini yarıya indirebilir (gerçekte, bu çekirdeklerin hala boşta oturması gerektiğinden sadece% 30-40 tasarruf edebilirsiniz), ancak bu sistemde güç kullanan tek bileşenden çok uzaktır. Bunu yaparak 50W tasarruf etseniz bile, tüm bilgisayarınız hala uyku modunda yalnızca watttan çok daha fazla güç çekiyor demektir .


Son düşünceler: Bunun pratikte harika bir fikir olduğunu kabul etsem de, birçok CPU üreticisinin Linux desteğiyle dinamik frekans ölçeklendirmesini (Intel'in "Speed ​​Step") içermesinin nedeni de budur. Bu frekansları ihtiyaçlarınıza daha uygun şekilde ayarlayarak daha iyi bir genel performans ve güç verimliliği sağlayabilirsiniz. Bu hem donanımda (BIOS ayarları) hem de yazılımda yapılabilir (Linux çekirdeği bazı CPU parametrelerini değiştirmenizi sağlar, ayrıntılar için yukarıda gönderdiğim bağlantıya veya bu web sitesine bakın).

Bu, çünkü bir CMOS devresinin güç tüketimi için genel denklem olduğu için çalışır:

P = CV 2 f, burada C = kapasitans (sabit olduğunu varsayalım), V = voltaj ve f = frekans.

Böylece, frekansı 2'ye bölmek orijinal güç tüketiminin yarısını oluşturacaktır. Voltajı 2'ye bölmek güç tüketimini orijinalin 1 / 4'üne düşürür.


En azından x86 / amd64 uyumlu işlemcilerde, mümkünse bir HLT komutunun CPU'da bir NOP'dan daha kolay olacağını varsayıyorum. Ayrıca çeşitli uyku durumlarına (veya doğru işlemci durumlarına C0-C3 (ACPI)) atıfta bulunuyordum. Ayrıca her zaman tüm sistemin uykuya konulamayacağı yerlerde çalışan sistemler hakkında daha fazla düşünüyordum. Bu durumda, donanımın gerçekten cpu gücünü kesip kesmeyeceğini ve bazı yapılandırmalarda uygulandığını merak ediyorum. Cevabınız için teşekkürler, ancak sorunun biraz daha açık kalmasına izin vereceğim.
Waxhead

@ CPU'ya giden gücü kestikten sonra, diğer donanımlar hala açık olsa bile, tüm bilgisayar mantıksal olarak "kapalı" (ve yalnızca harici kesme yoluyla yeniden açılabilir). Ayrıca, HLTyerine kullanmak konusunda haklı olabilirsiniz NOP, ancak bu, kesintilerin kullanımına bağlanır (bu, bir işlemciyi durdurulmuş durumdan nasıl çıkarır). Kesim gücü yerine, çoğu işlemci saat hızını ve voltajını dinamik olarak değiştirir (cevabıma denklem eklendi).
Atılım

Bu konuda biraz daha araştırma yaptım. Görünüşe göre Linux aslında bir CPU'nun hotplug'unu destekliyor. Bu durumda, BIOS / Anakart destekliyorsa, CPU'ları gerçekten kapatabilir ve değiştirebilirsiniz, örneğin sistem çalışırken CPU'yu yuvasından yırtıp değiştirin. Ref: cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu Yanlış bir şey yapmıyorsam, BIOS / Anakart destekliyorsa bir CPU'ya güç keser.
Waxhead

@Breakthrough Güzel yazınız için teşekkürler.
CPU'yu

@Breakthrough "çekirdek sadece boş oturuyor (NOP yapıyor)," Belirli bir işlemci çekirdeğinde çevrimdışı yaptığımızda "/ proc / interrupts" dan kayboluyor. Core'un NOP operasyonunu işlediğini nasıl söyleyebilirsiniz?
iDebD_gh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.