首頁 » 部落格 » PVE 繫結核心(CPU Pinning) [切換主題] [English] [简体]

PVE 繫結核心(CPU Pinning)

使用 taskset 繫結 vCPU 執行緒


拓撲

9950X 是雙 CCD(每顆 8 核 32MB L3),Linux 編號按 CCD 分組:

執行緒範圍歸屬
0-7、16-23CCD0
8-15、24-31CCD1

lscpu -eCORE 列同值的兩個 CPU 是同一物理核的雙執行緒(如 0 和 16),L3 編號末位 0/1 就是 CCD 分組。繫結時把 vCPU 成對分到同一物理核的兩個執行緒上,L3 共享。vCPU ≤ 16 的 VM 全塞一個 CCD,另一個留宿主;目前分配的 30 vCPU 超了單 CCD,只能按下面指令碼成對綁後進虛擬機器重新指定。

指令碼


#!/bin/bash
VMID=101
# vCPU N → 物理執行緒 M;9950X 雙 CCD:0-7+16-23=CCD0,8-15+24-31=CCD1
# 執行緒 15、31 留出給宿主
PIN_MAP=(
    "0:0" "1:1" "2:2" "3:3" "4:4" "5:5" "6:6" "7:7"
    "8:16" "9:17" "10:18" "11:19" "12:20" "13:21" "14:22" "15:23"
    "16:8" "17:9" "18:10" "19:11" "20:12" "21:13" "22:14"
    "23:24" "24:25" "25:26" "26:27" "27:28" "28:29" "29:30"
)
for map in "${PIN_MAP[@]}"; do
    vcpu="${map%:*}"
    pcpu="${map#*:}"
    tid=$(ps -eLo tid,comm | grep "CPU $vcpu/KVM" | awk '{print $1}')
    if [ -n "$tid" ]; then
        taskset -cp $pcpu $tid
    fi
done

邏輯三步:ps -eLo tid,comm 列執行緒 → grep "CPU $vcpu/KVM" 找對應 vCPU 執行緒(/KVM 字尾防止 CPU 1 誤匹配 CPU 10)→ taskset -cp $pcpu $tid 釘核。VM 沒開機時找不到執行緒會自動跳過。

使用


chmod +x /root/pin-vcpu.sh
bash /root/pin-vcpu.sh   # 確認 VM 開機後執行

驗證


taskset -p $(ps -eLo tid,comm | grep 'CPU 0/KVM' | awk '{print $1}')

« NUT65 CU 返回主頁