CPU 基準
本頁說明 go-pve-qemu 如何決定新 VM 的 --cpu 類型,讓 VM 可以在叢集任何節點之間遷移。
為何需要基準
Proxmox 預設的 host CPU 類型會把當前節點的指令集完整暴露給 VM;遷移到指令集較舊的節點後 VM 會無法開機。取全叢集共同支援的最低等級,可犧牲少量效能換取任意遷移。
偵測流程
- 讀取快取檔
.go_qemu_cpu_type,存在即直接使用 pvesh get /nodes --output-format json取得所有節點- 對每個節點執行
pvesh get /nodes/<node>/status,解析cpuinfo.flags - 依下表判定等級,取全叢集最低者
- 寫入
.go_qemu_cpu_type
任一節點查詢失敗時整個偵測失敗,qm create 改用 kvm64。
等級判定
| 等級 | 必須具備的 flags |
|---|---|
x86-64-v1 |
未滿足 v2 時的預設 |
x86-64-v2 |
cx16 lahf_lm popcnt sse4_1 sse4_2 ssse3 |
x86-64-v2-AES |
v2 + aes pclmulqdq(且未滿足 v3) |
x86-64-v3 |
v2 + avx avx2 bmi1 bmi2 f16c fma movbe lzcnt xsaveopt |
x86-64-v4 |
v3 + avx512f avx512bw avx512cd avx512dq avx512vl |
已知行為
- 比較全叢集最低等級時只認得
x86-64-v1~v4四種值;判定為x86-64-v2-AES的節點會被當成 v1,使整個叢集基準降為x86-64-v1 - 快取不會自動失效;新增或更換節點後需手動刪除
.go_qemu_cpu_type - 已建立的 VM 不受影響,只有之後建立的 VM 會使用新基準