Linux

如何在 Linux 中將一個程序限制為一個 CPU 核心?

  • March 10, 2020

如何將程序限制為一個 cpu 核心?

類似於ulimitcpulimit會很好的東西。(只是為了確保:我不想限制使用百分比或執行時間。我想強制應用程序(連同它的所有子程序、程序(執行緒))使用一個 cpu 核心(或“n”個 cpu 核心))。

在 Linux 下,執行sched_setaffinity系統呼叫。程序的親和性是它可以執行的處理器集。有一個標準的外殼包裝器:taskset. 例如,要將程序固定到 CPU #0(您需要選擇特定的 CPU):

taskset -c 0 mycommand --option  # start a command with the given affinity
taskset -c -pa 0 1234            # set the affinity of a running process

Sys::CpuAffinityPerl ( ) 和 Python ( )都有第三方模組affinity來設置程序的親和性。這些都可以在 Linux 和 Windows 上執行(Windows 可能需要其他第三方模組Sys::CpuAffinity);Sys::CpuAffinity也適用於其他幾個 unix 變體。

如果你想從它誕生的時候設置一個程序的親和性,在呼叫之前設置目前程序的親和性execve。這是一個簡單的包裝器,它強制程序在 CPU 0 上執行。

#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV

引用自:https://unix.stackexchange.com/questions/23106