Computer >> Hướng Dẫn Máy Tính >  >> Phần Mềm >> Máy Ảo

Chọn số vCPU và nhân cho máy ảo

Khi tạo máy ảo trong các hypervisor khác nhau (VMware, KVM, Hyper-V, v.v.), bạn có thể thấy đôi khi máy ảo không nhìn thấy tất cả socket bộ vi xử lý ảo (vCPU) được gán cho nó. Trong trường hợp của chúng tôi, 8 vCPU được gán cho máy ảo KVM và Windows 10 được cài đặt trên nó như hệ điều hành khách. Tuy nhiên, Windows phát hiện các vCPU này như các bộ vi xử lý riêng biệt (không phải nhân) và nó chỉ có thể dùng 2 trong số đó.

Máy ảo Windows 10 chỉ sử dụng 2 nhân

Nếu bạn mở Windows Device Manager, bạn có thể chắc chắn rằng tất cả nhân được cấp phát hiển thị như 8 bộ vi xử lý ảo riêng biệt QEMU Virtual CPU version 2.5+.

Chọn số vCPU và nhân cho máy ảo

Cùng lúc đó, thuộc tính Windows 10 (Computer → Properties) và Task Manager cho thấy chỉ có 2 bộ vi xử lý QEMU Virtual khả dụng.

Chọn số vCPU và nhân cho máy ảo

Điều này có nghĩa là Windows 10 chỉ có thể dùng 2 nhân bất kể bạn thêm bao nhiêu. Cùng lúc đó, máy ảo chạy Windows Server 2016 trên cùng hypervisor có thể thấy tất cả 16 vCPU được cấp phát cho nó.

Số bộ vi xử lý được hỗ trợ trong Windows

Vấn đề là các phiên bản Windows desktop (Windows 10/8.1/7) có giới hạn về số lượng tối đa bộ vi xử lý vật lý (socket) một máy tính có thể dùng:

  • Windows 10 Home – 1 CPU
  • Windows 10 Professional – 2 CPU
  • Windows 10 Workstation – lên đến 4 CPU
  • Windows Server 2016 – lên đến 64 CPU

Tuy nhiên, giới hạn này không liên quan đến số nhân. Để cải thiện hiệu suất máy ảo của bạn, bạn có thể dùng bộ vi xử lý với nhiều nhân hơn. Hầu hết hypervisors có thể cung cấp vCPU như bộ vi xử lý, nhân bộ vi xử lý hoặc thậm chí luồng (thread). Điều đó có nghĩa là thay vì 8 vCPU, bạn có thể thêm 2 vCPU (2 socket) với 4 nhân mỗi socket. Hãy xem cách gán bộ vi xử lý ảo làm nhân trong các hypervisor khác nhau và cách liên kết nó với kiến trúc NUMA dùng trong bộ vi xử lý hiện đại.

Quản lý nhân ảo & vCPU trong KVM

Trong máy ảo KVM chạy Windows 10 của tôi, tất cả nhân ảo được cấp phát được coi là các bộ vi xử lý riêng biệt.

Để sử dụng tất cả tài nguyên CPU được cấp phát cho máy ảo, nó phải nhìn thấy một bộ vi xử lý 8 nhân, 2 vCPU với 4 nhân mỗi cái hoặc 1 vCPU với 4 nhân trong hai luồng thay vì 8 vCPU. Hãy thử thay đổi cấp phát nhân ảo cho máy ảo KVM.

Tắt máy ảo của bạn:

# virsh shutdown w10testvm – nơi w10testvm là tên máy ảo của bạn

Dưới đây là các khía cạnh quản lý máy ảo KVM từ console bằng virsh.

Hiển thị cấu hình XML hiện tại của máy ảo KVM:

# virsh dumpxml w10testvm

Chúng ta cần khối mô tả cài đặt CPU của VM:

<vcpu placement='static'>8</vcpu>
<cputune>
  <shares>1000</shares>
</cputune>
<resource>
  <partition>/machine</partition>
</resource>
<os>
  <type arch='x86_64' machine='pc-i440fx-rhel7.6.0'>hvm</type>
  <bootmenu enable='yes'/>
</os>
<features>
  <acpi/>
  <apic/>
  <pae/>
</features>

Như bạn thấy, 8 vCPU được đặt ở đây. Hãy thay đổi cấu hình:

# virsh edit w10testvm

Thêm khối sau sau </features>:

<cpu mode='host-passthrough' check='none'>
  <topology sockets='1' cores='4' threads='2'/>
</cpu>

Nơi:

  • host-passthrough là chế độ giả lập mà máy ảo thấy bộ vi xử lý vật lý của nút cụm
  • sockets='1' chỉ ra rằng có một vCPU (socket)
  • cores='4' bộ vi xử lý có 4 nhân mỗi socket
  • threads='2' mỗi nhân có 2 luồng

Lưu file cấu hình và khởi động máy ảo. Đăng nhập vào VM Windows 10 khách, chạy Task Manager hoặc Resource Monitor, và đảm bảo Windows thấy tất cả nhân ảo được cấp phát.

Chọn số vCPU và nhân cho máy ảo

Bộ vi xử lý vật lý của máy chủ, Intel(R) Xeon(R) Silver 4114 CPU, hiện hiển thị thay vì ảo trong thuộc tính hệ thống.

Chọn số vCPU và nhân cho máy ảo

Đây là cách chúng ta giải quyết vấn đề tải nặng cho VM vì hai nhân không đủ cho ứng dụng hoạt động đúng.

Đặt số nhân trên mỗi vCPU cho VMware VM

Bạn có thể thay đổi cách trình bày vCPU cho máy ảo VMware trong giao diện vSphere Client.

  1. Tắt VM và mở cài đặt của nó;
  2. Mở rộng phần CPU;
  3. Thay đổi cấu hình VM để hệ điều hành khách thấy 2 bộ vi xử lý với 4 nhân mỗi cái. Thay đổi giá trị Cores per Socket thành 4. Điều đó có nghĩa là hệ điều hành khách sẽ thấy hai CPU 4 nhân (2 socket với 4 nhân mỗi socket);
    Chọn số vCPU và nhân cho máy ảo
  4. Lưu thay đổi và chạy VM.

vCPU máy ảo và kiến trúc NUMA

Có thêm một số khía cạnh về gán vCPU và nhân cho máy ảo bạn phải hiểu.

Khi gán số nhân trên mỗi socket, hãy đảm bảo xem bạn có kiến trúc NUMA (dùng trong hầu hết CPU hiện đại). Không khuyến khích gán nhiều nhân trên mỗi socket (và tổng số vCPU) cho VM nhiều hơn số nhân có sẵn trên socket vật lý (NUMA node). Khi đặt trên một NUMA node vật lý đơn, máy ảo sẽ có thể dùng RAM cục bộ nhanh có sẵn trên NUMA node cụ thể. Ngược lại, tiến trình sẽ phải chờ phản hồi từ NUMA node khác (mất thời gian lâu hơn).

Nếu bạn gán hai socket ảo riêng biệt cho VM, hypervisor có thể chạy chúng trên các NUMA node khác nhau. Nó sẽ ảnh hưởng đến hiệu suất VM.

Nếu số vCPU cần thiết nhiều hơn số nhân trên 1 socket vật lý (NUMA node), hãy tạo một số socket ảo (bộ vi xử lý) với số nhân cần thiết. Cũng không khuyến khích dùng số lẻ bộ vi xử lý (tốt hơn thêm 1 vCPU).

Điều này cho phép duy trì hiệu suất máy ảo.

Chọn số vCPU và nhân cho máy ảo

Ví dụ, khuyến khích dùng cấu hình sau cho host 2 bộ vi xử lý với 10 nhân mỗi socket (40 vCPU có sẵn tổng cộng bao gồm Hyper—Threading) khi cấu hình vCPU cho VM:

Số vCPU cần Số Socket ảo trong cài đặt VM Số nhân trên mỗi bộ vi xử lý ảo trong cài đặt VM
1 1 1
……
10 1 10
11 Không tối ưu
12 2 6
……
20 2 10
Trong phiên bản ESXi miễn phí bạn không thể tạo VM với hơn 8 vCPU.

Ví dụ, VM chạy Microsoft SQL Server 2016 Enterprise Edition với 16 vCPU (cấu hình 8 Socket với 2 Cores per Socket) sẽ có hiệu suất kém hơn VM với 2 Socket x 8 Cores per Socket.
Cũng nhớ rằng một số ứng dụng được cấp phép tùy thuộc vào số socket vật lý (như các phiên bản SQL Server trước đây). Đôi khi cấp phép một bộ vi xử lý đa nhân lợi hơn nhiều bộ vi xử lý với ít nhân hơn.

Các phiên bản Windows Server hiện đại được cấp phép trong môi trường ảo theo cách đặc biệt. Cũng có một số khía cạnh về cấp phép bộ vi xử lý trong VMware vSphere.