Linux: CPU core shutdown alih-alih kondisi sleep

10

Di Linux, Anda dapat mematikan inti CPU (atau fisik CPU) dengan echo 0> / sys / devices / system / cpu / cpu1 / online Dengan anggapan bahwa perangkat keras sepenuhnya mematikan CPU dan memotong daya untuk itu tidak akan lebih baik dinonaktifkan. inti sepenuhnya daripada mengandalkan berbagai kondisi tidur prosesor?

Untuk mengilustrasikan prinsip saya memikirkan sesuatu di sepanjang baris ini (pseudocode) untuk sistem dengan empat CPU:

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
Waxhead
sumber

Jawaban:

6

Mengatur status online inti CPU hanya memberitahu penjadwal proses untuk tidak menggunakan inti itu untuk proses apa pun. Pada tingkat perangkat keras, intinya hanya duduk diam (melakukan NOPs), tetapi masih bertenaga. Meskipun ini akan menghemat daya, itu tidak akan menghemat daya yang hampir sama banyaknya dengan mematikan komputer. Mengapa?

Nah, motherboard, CPU, dan GPU Anda semua masih berjalan ! Ketika Anda mematikan komputer, semua komponen ini benar-benar tidak berdaya, dan daya yang cukup untuk membuat RAM Anda tetap hidup digunakan (berdasarkan urutan beberapa watt).

Sekali lagi, sementara saya setuju itu akan menghemat daya, bahkan mematikan setengah dari inti CPU Anda dapat mengurangi separuh konsumsi daya prosesor (meskipun dalam kenyataannya, Anda hanya dapat menghemat 30-40% karena core tersebut masih perlu diam), tetapi ini jauh dari satu-satunya komponen dalam sistem yang menggunakan daya. Bahkan jika Anda menghemat 50W dengan melakukan ini, seluruh komputer Anda masih menarik daya lebih dari sekadar watt dalam mode tidur.


Pikiran terakhir: Walaupun saya setuju ini adalah ide bagus dalam praktiknya, ini juga mengapa banyak produsen CPU memasukkan penskalaan frekuensi dinamis ("Speed ​​Step" Intel), dengan dukungan untuk Linux. Anda dapat menghasilkan kinerja keseluruhan yang lebih baik, serta efisiensi daya, dengan mengatur frekuensi ini lebih tepat untuk kebutuhan Anda. Ini dapat dilakukan di kedua perangkat keras (pengaturan BIOS), serta perangkat lunak (kernel Linux memungkinkan Anda untuk memodifikasi beberapa parameter CPU, lihat tautan yang saya pasang di atas atau situs web ini untuk perincian).

Ini berfungsi, karena berikut ini adalah persamaan umum untuk konsumsi daya dari rangkaian CMOS:

P = CV 2 f, di mana C = kapasitansi (asumsikan tetap), V = tegangan, dan f = frekuensi.

Dengan demikian, membagi frekuensi dengan 2 akan setengah dari konsumsi daya asli. Membagi tegangan dengan 2 akan mengurangi konsumsi daya hingga 1/4 yang asli.

Penerobosan
sumber
Setidaknya pada prosesor yang kompatibel x86 / amd64 saya akan berasumsi bahwa jika memungkinkan instruksi HLT akan lebih mudah pada CPU daripada NOP. Saya juga merujuk ke berbagai status tidur (atau status prosesor yang benar C0-C3 (ACPI)). Saya juga lebih memikirkan sistem yang selalu berjalan di mana seluruh sistem tidak dapat dimatikan. Dalam hal ini saya ingin tahu apakah perangkat keras akan benar-benar memotong daya ke cpu dan jika itu diterapkan di semua konfigurasi. Terima kasih atas jawaban Anda, tetapi saya akan membiarkan pertanyaannya tetap terbuka sedikit lebih lama.
Waxhead
@Waxhead setelah Anda memutus daya ke CPU, seluruh komputer secara logis "mati" (dan hanya dapat dihidupkan kembali melalui interupsi eksternal), bahkan jika perangkat keras lain masih menyala. Juga, Anda mungkin benar tentang menggunakan HLTalih-alih NOP, tetapi itu mengikat kembali ke penggunaan interupsi (yang merupakan cara untuk membawa prosesor keluar dari keadaan terhenti). Alih-alih memotong daya, kebanyakan prosesor secara dinamis mengubah kecepatan dan tegangan clock (menambahkan persamaan pada jawaban saya).
Terobosan
Saya melakukan penelitian lebih lanjut tentang ini. Ternyata Linux sebenarnya mendukung hotplug CPU. Dalam hal ini JIKA BIOS / Motherboard mendukungnya, Anda benar-benar dapat mematikan CPU dan menggantinya, misalnya mencabut CPU dari soketnya saat sistem sedang berjalan dan menggantinya. Ref: cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu jika saya tidak salah, ini akan memotong daya ke cpu JIKA BIOS / Motherboard mendukungnya.
Waxhead
@Breakthrough Terima kasih atas posting Anda yang bagus. Bisakah Anda memberikan beberapa dokumen referensi tentang detail bagaimana kami dapat meletakkan cpu dalam kondisi daya rendah (tanpa sistem
boot ulang
@Breakthrough "intinya adalah hanya duduk diam (melakukan NOP)," Ketika kita melakukan offline pada core cpu tertentu, itu tidak disukai dari "/ proc / interupsi". Bagaimana Anda bisa mengatakan Core memproses operasi NOP?
iDebD_gh