如何禁用一個 CPU
我正在嘗試禁用我的伺服器的一些 CPU。
我找到了這個連結:https ://www.cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu/linux-turn-on-off-cpu-core-commands/ ,它提供我的方法如下:
這是
numactl --hardware
給我的:我想禁用從 16 到 63 的所有 CPU,所以我編寫了一個腳本,命名
opCPUs.sh
如下:#!/bin/bash for i in {16..63}; do if [[ "$1" == "enable" ]]; then echo 1 > /sys/devices/system/cpu/cpu$i/online elif [[ "$1" == "disable" ]]; then echo 0 > /sys/devices/system/cpu/cpu$i/online else echo 'illegal parameter' fi done grep "processor" /proc/cpuinfo
然後我執行它:我可以在腳本
./opCPUs.sh disable
中看到結果:grep
它似乎工作。
現在我認為所有程序都應該在 CPU 0 - 15 中,因為其他程序已被禁用。
所以我使用現有的流程
dbus
來驗證如下:
ps -Lo psr $(pgrep dbus)
我明白了:
告訴我程序在
psr
哪個 CPU 中執行,對嗎?如果是這樣,我已經禁用了 CPU 60、CPU 52 等,為什麼它們還在這裡?
除了@Yves 答案,您實際上還可以使用
isolcpus
核心參數。要使用 Debian 或 Ubuntu 禁用第 4 個 CPU/核心 (CPU 3):
除了
/etc/default/grub
_isolcpus=3
_GRUB_CMDLINE_LINUX_DEFAULT
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=3"
跑
sudo update-grub
重新啟動伺服器。
isolcpus — 將 CPU 與核心調度程序隔離開來。
概要 isolcpus= cpu_number
$$ , cpu_number ,… $$ 說明 從通用核心 SMP 平衡和調度程序算法中刪除由 cpu_number 值定義的指定 CPU。將程序移入或移出“隔離”CPU 的唯一方法是通過 CPU 關聯繫統呼叫。cpu_number 從 0 開始,因此最大值比系統上的 CPU 數量少 1。
此選項是隔離 CPU 的首選方法。另一種方法是手動設置系統中所有任務的 CPU 遮罩,這可能會導致問題和負載平衡器性能欠佳。
有趣的是,這個核心參數的使用可以留出一個 CPU,以便稍後使用 CPU 親和性到一個程序/將一個程序固定到一個 CPU,從而確保沒有更多的使用者程序在該 CPU 上執行。
此外,還可以使伺服器更穩定,保證負載非常高的特定程序將擁有自己的 CPU 來玩。在意識到這種設置之前,我已經看到 Meru 使用他們的基於 Linux 的控制器執行此操作。
然後將程序分配給第四個 CPU (CPU 3) 的相關命令是:
sudo taskset -cp PID
taskset
用於在給定 PID 的情況下設置或檢索正在執行的程序的 CPU 親和性,或啟動具有給定 CPU 親和性的新命令。CPU 親和性是一種調度程序屬性,它將程序“綁定”到系統上的一組給定 CPU。Linux 調度程序將遵循給定的 CPU 親和性,並且該程序不會在任何其他 CPU 上執行。請注意,Linux 調度程序還支持自然 CPU 親和性:出於性能原因,調度程序會嘗試將程序保持在同一個 CPU 上,只要可行。因此,強制特定的 CPU 親和性僅在某些應用程序中有用。概括
有幾種技術適用於這個問題:
在 grub 中設置
isolcpus = 4
並重新啟動可以為使用者土地程序永久禁用第 5 個 CPU/CPU 4;
echo 0 > /sys/devices/system/cpu/cpu4/online
禁用第 5 個 CPU/CPU 4,它仍將繼續為已分配給它的程序工作,但不再將新程序分配給 CPU 4;
taskset -c 3 ./MyShell.sh
將強制MyShell.sh
分配給第 4 個 CPU/CPU 3,而第 4 個 CPU 仍然可以接受其他使用者土地程序,如果 isolcpus 不排除它這樣做的話。PS。
isolcpus
有趣的是,我在現場使用/的最佳範例taskset
是一個非常繁忙的站點的 SSL 前端,它每隔幾週就會不穩定,Ansible/ssh
不會再讓我遠端進入。我應用了上面討論的技術,從那以後它一直以非常穩定的方式工作。