Linux Ring3 設定當前程序cpu親和性

2021-10-10 11:45:45 字數 2003 閱讀 6646

主要還是使用以下幾個函式,具體的使用方法,這裡就不多加說明,大佬們說的比較清楚,我這裡直接分享寫的**;

//程序

sched_setaffinity(0

,sizeof

(cpu_set_t)

,&mask)

;sched_getaffinity(0

,sizeof

(cpu_set_t)

,&get)

;//執行緒

pthread_setaffinity_np

(pthread_self()

,sizeof

(mask)

,&mask)

pthread_getaffinity_np

(pthread_self()

,sizeof

(get)

,&get)

sysconf

(_sc_nprocessors_conf)

;cpu_zero

(&mask)

;cpu_isset

(i,&get)

cpu_set

(cpu,

&mask)

;

//set_task_cpu.c

#define _gnu_source

#include

#include

#include

#include

static

intset_task_cpu

(int cpu)

printf

("set pid %d to cpu %d success\n"

,getpid()

,cpu)

;return ret;

}static

intget_task_cpu

(void

)for

(i =

0; i < cpus; i++)}

return0;

}int

main

(char argc,

char

**ar**)

get_task_cpu()

; cpu =

atoi

(ar**[1]

);set_task_cpu

(cpu)

;get_task_cpu()

;return0;

}

列印資訊:

curtis@curtis-virtual-machine:

/mnt/hgfs/share/write_code/set_task_cpu$ .

/a.out 0

enter into set task cpu

system cpu num is 2

system enable cpu num is 2

this porcess 3914 is runing processor 0

this porcess 3914 is runing processor 1

set pid 3914 to cpu 0 success

system cpu num is 2

system enable cpu num is 2

this porcess 3914 is runing processor 0

主要邏輯:清空cpu集合 --> 新增所需cpu集合 --> 設定程序親和性;

首先獲得當前系統所有cpu的核數,我這裡是虛擬機器分配了兩個核,sysconf()函式返回的資料是正確的,然後去判斷當前程序可以在哪些cpu上執行,也可以寫個驅動檢視task_struct -> cpus_allowed的mask,這個位掩碼由 n 位組成,與系統中的 n 個邏輯處理器一一對應,linux預設狀態下mask位全為1,也就是說當前程序可以在cpu0,cpu1上跑,然後呼叫set_task_set()函式,設定cpu的親和性,這裡傳入的引數是0,再次檢查cpu親和位cpu0,說明設定成功。

C 獲取當前程序HASH的方法

用c 實現在這個過程,我們需要進行下面幾個步驟 得到當前程序所對應的本地宿主檔案 開啟這個檔案流 確定hash演算法,計算檔案流的hash 將hash結果轉換為我們熟悉的字串表現形式。下面就分別就這幾個方面來進行解釋。在system.diagnostics命名空間下,有個process類,msdn的...

C 得到當前程序所占用的記憶體

使用sdk的psapi process status helper 中的boolgetprocessmemoryinfo handle process pprocess memory counters ppsmemcounters dword cb typedef struct process me...

C 得到當前程序所占用的記憶體

使用sdk的psapi process status helper 中的boolgetprocessmemoryinfo handle process pprocess memory counters ppsmemcounters dword cb typedef struct process me...