在多核 CPU 系統中,作業系統預設會根據負載均衡演算法自動排程進程在不同核心間執行。但某些場景(如高效能運算、即時系統、基準測試、避免快取失效)需要將特定進程「釘選」到固定 CPU 核心。本文以 Ubuntu 為例,詳細說明如何使用 taskset 指令實現進程 CPU 親和性設定。
0x0F (二進位 1111) 代表核心 0-3# 設定/查看現有進程親和性
taskset -cp
# 啟動新進程並設定親和性
taskset -c 指令 [參數...]
| 參數 | 說明 | |
|---|---|---|
-c, --cpu-list | 以核心編號清單指定(而非位元遮罩),如 0,2,4-7 | |
-p, --pid | 操作現有進程(PID),而非啟動新進程 | |
-a, --all-tasks | 對進程所有執行緒生效 |
| 場景 | 指令範例 | 說明 |
|---|---|---|
| 啟動時直接綁定 | taskset -c 0,1 ./myapp | 限制在核心 0、1 執行 |
| 綁定多核心提升吞吐 | taskset -cp 0-3 | 允許使用核心 0-3,平衡效能與隔離 |
| 隔離核心給關鍵服務 | taskset -cp 8-15 | 將資料庫釘選到核心 8-15,避免干擾 |
| NUMA 架構優化 | numactl --cpunodebind=0 --membind=0 ./app | 搭配 numactl 綁定 CPU 與記憶體節點 |
nproc 或 lscpu 可查看總核心數cpuset cgroup 限制與 host 核心映射關係chrt -f 99)結合 CPU 綁定可構建硬即時系統善用 taskset 進行 CPU 親和性管理,能在高效能運算、低延遲服務、基準測試標準化等場景發揮關鍵作用,是 Linux 系統調優工具箱中的利器。