Linux: Tắt lõi CPU thay vì trạng thái ngủ


10

Trong Linux, bạn có thể tắt các lõi CPU (hoặc CPU vật lý) bằng echo 0> / sys / thiết bị / system / cpu / cpu1 / online Giả sử rằng phần cứng tắt hoàn toàn CPU và cắt nguồn cho nó sẽ không bị vô hiệu hóa tốt hơn lõi hoàn toàn thay vì dựa vào các trạng thái ngủ khác nhau của bộ xử lý?

Để minh họa nguyên tắc tôi đã suy nghĩ điều gì đó dọc theo các dòng này (mã giả) cho một hệ thống có bốn 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

Câu trả lời:


6

Việc đặt trạng thái trực tuyến của lõi CPU chỉ cho bộ lập lịch xử lý không sử dụng lõi đó cho bất kỳ quy trình nào. Ở cấp độ phần cứng, lõi chỉ đơn giản là không hoạt động NOP, nhưng vẫn được cấp nguồn. Mặc dù điều này sẽ tiết kiệm năng lượng, nhưng nó sẽ không tiết kiệm được gần như nhiều năng lượng như đưa máy tính vào trạng thái ngủ. Tại sao?

Chà, bo mạch chủ, CPU và GPU của bạn vẫn đang chạy ! Khi bạn đặt máy tính ở chế độ ngủ, tất cả các thành phần này đều không được cấp nguồn theo nghĩa đen và chỉ đủ năng lượng để giữ cho RAM của bạn được sử dụng (theo thứ tự một vài watt).

Một lần nữa, trong khi tôi đồng ý rằng nó sẽ tiết kiệm năng lượng, thậm chí tắt một nửa số lõi CPU của bạn có thể giảm một nửa mức tiêu thụ năng lượng của bộ xử lý (mặc dù trong thực tế, bạn chỉ có thể tiết kiệm 30-40% vì các lõi đó vẫn cần để không hoạt động), nhưng đây là xa thành phần duy nhất trong hệ thống sử dụng năng lượng. Ngay cả khi bạn tiết kiệm 50W bằng cách này, toàn bộ máy tính của bạn vẫn tiêu thụ nhiều năng lượng hơn nhiều so với chỉ watts ở chế độ ngủ.


Suy nghĩ cuối cùng: Mặc dù tôi đồng ý rằng đây là một ý tưởng tuyệt vời trong thực tế, đây cũng là lý do tại sao nhiều nhà sản xuất CPU bao gồm thang đo tần số động ("Bước tốc độ" của Intel), với sự hỗ trợ cho Linux. Bạn có thể mang lại hiệu suất tổng thể tốt hơn, cũng như hiệu quả năng lượng, bằng cách đặt các tần số này phù hợp hơn cho nhu cầu của bạn. Điều này có thể được thực hiện trong cả phần cứng (cài đặt BIOS), cũng như phần mềm (nhân Linux cho phép bạn sửa đổi một số tham số CPU, xem liên kết tôi đã đăng ở trên hoặc trang web này để biết chi tiết).

Điều này hoạt động, bởi vì sau đây là phương trình chung cho mức tiêu thụ năng lượng của mạch CMOS:

P = CV 2 f, trong đó C = điện dung (giả định cố định), V = điện áp và f = tần số.

Do đó, chia tần số cho 2 sẽ bằng một nửa mức tiêu thụ năng lượng ban đầu. Chia điện áp cho 2 sẽ giảm mức tiêu thụ điện năng xuống còn 1/4 so với ban đầu.


Ít nhất là trên các bộ xử lý tương thích x86 / amd64, tôi cho rằng nếu có thể, một lệnh HLT sẽ dễ dàng hơn trên CPU so với NOP. Tôi cũng đã đề cập đến các trạng thái ngủ khác nhau (hoặc trạng thái bộ xử lý chính xác C0-C3 (ACPI)). Ngoài ra, tôi đã suy nghĩ nhiều hơn về các hệ thống luôn chạy trong đó toàn bộ hệ thống không thể ngủ được. Trong trường hợp đó, tôi tò mò liệu phần cứng có thực sự cắt nguồn cho cpu hay không và liệu điều đó có được thực hiện trong một số cấu hình hay không. Cảm ơn câu trả lời của bạn nhưng tôi sẽ để câu hỏi mở lâu hơn một chút.
Sáp

@Waxhead một khi bạn cắt nguồn cho CPU, toàn bộ máy tính sẽ bị "tắt" một cách hợp lý (và chỉ có thể được bật lại thông qua ngắt ngoài), ngay cả khi phần cứng khác vẫn được cấp nguồn. Ngoài ra, bạn có thể đúng khi sử dụng HLTthay vì NOP, nhưng điều đó liên quan đến việc sử dụng các ngắt (đó là cách đưa bộ xử lý ra khỏi trạng thái tạm dừng). Thay vì cắt điện, hầu hết các bộ xử lý tự động thay đổi tốc độ và điện áp xung nhịp (thêm phương trình vào câu trả lời của tôi).
Đột phá

Tôi đã làm một số nghiên cứu thêm về điều này. Hóa ra Linux thực sự hỗ trợ cắm nóng CPU. Trong trường hợp đó NẾU BIOS / Bo mạch chủ hỗ trợ nó, bạn thực sự có thể tắt (các) CPU và thay thế chúng, ví dụ như tách CPU ra khỏi ổ cắm trong khi hệ thống đang chạy và thay thế nó. Tham chiếu: cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu nếu tôi không nhầm điều này sẽ cắt điện cho cpu NẾU BIOS / Bo mạch chủ hỗ trợ nó.
Sáp

@BreakENC Cảm ơn bài viết tốt đẹp của bạn. Bạn có thể cung cấp một số tài liệu tham khảo về chi tiết về cách chúng tôi có thể đặt cpu ở trạng thái năng lượng thấp (không có hệ thống khởi động lại) và có thể lấy lại khi cần
iDebD_gh

@BreakENC "lõi đơn giản là không hoạt động (thực hiện NOP)," Khi chúng tôi ngoại tuyến trên một lõi cpu cụ thể, nó sẽ biến mất khỏi "/ Proc / interrupt". Làm thế nào bạn có thể nói Core đang xử lý hoạt động NOP?
iDebD_gh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.