簡體   English   中英

為進程分配cpu核心 - Linux

[英]Assigning a cpu core to a process - Linux

有沒有辦法強制進行具有特定PID的進程,只能在服務器的一個cpu上執行和運行? 我知道有這樣的命令

taskset -cp <Cpu_Number> <Pid>

但上面的命令在我的系統上不起作用。 如果還有其他命令,請告訴我。

有兩種方法可以將cpu核心/核心分配給正在運行的進程。

第一種方法:

taskset -cp 0,4 9030

很清楚! 將cpu核0和4分配給pid 9030。

第二種方法:

taskset -p 0x11 9030

這有點復雜。 -p后面的十六進制數是一個位掩碼。 可在此處找到解釋,其摘錄如下:

CPU親和性表示為位掩碼,最低位對應於第一個邏輯CPU,最高位對應於最后一個邏輯CPU。 並非所有CPU都可能存在於給定系統上,但掩碼可能指定的CPU數量多於現有CPU數量。 檢索到的掩碼將僅反映與系統上物理上的CPU相對應的位。 如果給出了無效掩碼(即,對應於當前系統上沒有有效CPU的掩碼),則返回錯誤。 掩碼通常以十六進制給出。

仍然困惑? 看下圖:

在此輸入圖像描述

我添加了對應於十六進制數的二進制文件,處理器從左開始從零開始計數。 在第一個例子中,位掩碼中有one對應於第zero個處理器,因此處理器將被啟用進程。 所有處於zero位掩碼中相應位置的處理器都將被禁用。 事實上,這就是它被稱為面具的原因。

說完所有這些后,使用taskset更改處理器關聯性需要:

用戶必須擁有CAP_SYS_NICE才能更改進程的CPU關聯。 任何用戶都可以檢索關聯掩碼。

請查看Capabalities Man Page

您可能有興趣看一下處理CAP_SYS_NICE的SO問題

我的資源

  1. 教程點

  2. XModulo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM