GNU/Linux >> Znalost Linux >  >> Linux

Jak deaktivovat jeden CPU

Po provedení několika testů jsem dostal níže uvedené výsledky:

echo 0 > /sys/devices/system/cpu/cpu4/online

deaktivuje 4. CPU.

"zakázat 4. CPU" znamená, že pozdější procesy již nebudou přiřazeny 4. CPU. Jinými slovy, procesy umístěné na 4. CPU před "zakázat 4. CPU" nebudou přesunuty z CPU při deaktivaci CPU.

Říkám, že mám čtyři CPU:0, 1, 2 a 3. Takže můžu:

echo 0 > /sys/devices/system/cpu/cpu1/online
echo 0 > /sys/devices/system/cpu/cpu2/online
echo 0 > /sys/devices/system/cpu/cpu3/online
./MyShell.sh

vynutit ./MyShell.sh které mají být přiřazeny k CPU0.

Mimochodem, restart automaticky povolí všechny CPU.


Kromě odpovědi @Yves můžete ve skutečnosti použít isolcpus parametr jádra.

Chcete-li deaktivovat 4. CPU/jádro (CPU 3) s Debianem nebo Ubuntu:

V /etc/default/grub přidejte isolcpus=3GRUB_CMDLINE_LINUX_DEFAULT

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=3"

Spustit

sudo update-grub

Restartujte server.

isolcpus — Izolujte CPU od plánovače jádra.

Synopse isolcpus=cpu_number [, cpu_number,...]

Popis Odeberte specifikovaná CPU, jak jsou definována pomocí cpu_numbervalues, z obecného jádra SMP vyvažování a plánovacích groithmů. Jediný způsob, jak přesunout proces na nebo z "izolovaného" CPU, je přes systémová volání CPU afinity. cpu_number začíná 0, takže maximální hodnota je o 1 menší než počet CPU v systému.

Tato možnost je preferovaným způsobem izolace CPU. Alternativa, ruční nastavení masky CPU všech úloh v systému, může způsobit problémy a neoptimální výkon nástroje pro vyrovnávání zátěže.

Je zajímavé, že použití těchto parametrů jádra může být vyčleněním CPU pro pozdější použití pomocí afinity CPU k jednomu procesu/připnutí procesu k CPU, a tím se zajistí, že na tomto CPU neběží žádné další uživatelské procesy.

Kromě toho může také učinit server stabilnější a mít záruku, že konkrétní proces s velmi vysokou zátěží bude mít své vlastní procesory, se kterými si bude hrát. Viděl jsem Meru, jak to dělá se svými ovladači založenými na Linuxu, než jsem se o tomto nastavení dozvěděl.

Přidružený příkaz pro přiřazení procesu čtvrtému CPU (CPU 3) je:

sudo taskset -cp PID

taskset se používá k nastavení nebo načtení afinity CPU běžícího procesu dané jeho PID nebo ke spuštění nového PŘÍKAZU s danou CPU afinitou. Afinita CPU je vlastnost plánovače, která „spojuje“ proces s danou sadou CPU v systému. Plánovač Linuxu bude respektovat danou afinitu CPU a proces nepoběží na žádném jiném CPU. Všimněte si, že plánovač Linux také podporuje přirozenou afinitu CPU:plánovač se z výkonnostních důvodů pokouší udržet procesy na stejném CPU tak dlouho, jak je to praktické. Vynucení konkrétní CPUafinity je proto užitečné pouze v určitých aplikacích.


SOUHRN

Na tuto otázku se používá několik technik:

nastavte isolcpus = 4 v grub a restartu lze trvale deaktivovat 5. CPU/CPU 4 pro uživatelské procesy;

echo 0 > /sys/devices/system/cpu/cpu4/online deaktivuje 5. CPU/CPU 4, který bude stále pracovat pro procesy, které mu již byly přiřazeny, ale žádné nové procesy již nebudou přiřazeny CPU 4;

taskset -c 3 ./MyShell.sh vynutí MyShell.sh být přiřazen ke 4. CPU/CPU 3, zatímco 4. CPU může stále přijímat další uživatelské procesy, pokud jej z toho nevylučuje isolcpus.

PS. Anekdoticky, můj nejlepší příklad použití isolcpus /taskset na poli, byl SSL frontend pro velmi zaneprázdněné stránky, které byly každých pár týdnů nestabilní, kde Ansible/ssh už by mě dálkově nepustil dovnitř.

Použil jsem výše uvedené techniky a od té doby to fungovalo velmi stabilně.


Linux
  1. Jak povolit/zakázat CPU (omezení počtu CPU) v CentOS / RHEL

  2. CentOS / RHEL 6 :Jak deaktivovat IPv6

  3. Jak mohu zakázat škálování frekvence CPU?

  1. Jak zjistit využití CPU

  2. Jak omezit proces na jedno jádro CPU v Linuxu?

  3. Jak (skutečně) zakázat NCQ v Linuxu

  1. Jak dočasně nebo trvale zakázat SELinux

  2. Jak zakázat ETag v NGINX

  3. Jak zakázat Cryptswap?