Tại sao máy ảo Windows 7 của tôi chạy trong KVM của Linux không sử dụng tất cả các bộ xử lý ảo?


12

Tất cả

Tôi đã gặp sự cố trên máy chủ của mình kể từ khi tôi di chuyển một trong các máy ảo của mình từ Windows 2008 Server sang Windows 7 (cuối cùng): mặc dù tôi đã gán bốn lõi cho VM và dường như nó nhìn thấy chúng, nhưng dường như nó nghĩ rằng có hai lõi!

Nó nhận ra bộ xử lý của tôi nhưng không sử dụng chúng!

Bất cứ ai có thể cho tôi biết những gì đang xảy ra ở đây? Tôi nghĩ rằng nó có thể là một số không tương thích giữa KVM và Windows 7 nhưng vì nó thấy các bộ xử lý ảo nên tôi bắt đầu nghĩ rằng không có bất kỳ manh mối nào?

Dưới đây là ảnh chụp màn hình của trình quản lý quy trình chỉ hiển thị hai lõi trên cùng một hộp:

Quản lý công việc


Bạn có chắc chắn rằng nó không hiển thị cho bạn hai procs lõi kép?
phoebus

@phoebus: Tôi đã tự hỏi điều đó, nhưng sau đó trên tất cả các phiên bản windows nơi tôi đã chạy thiết lập này trước khi tôi thấy bốn lõi khi nhìn vào màn hình bộ xử lý, mà tôi không có ở đây.
jkp

Khi bạn nói màn hình bộ xử lý, bạn có nghĩa là phần giám sát hiệu suất của trình quản lý tác vụ? Bởi vì chỉ dựa trên ảnh chụp màn hình của bạn, bạn đang hiển thị bằng chứng về bộ xử lý hai, hai lõi. Nếu đó là trường hợp, bạn sẽ thấy tất cả 4 lõi trong màn hình hiệu suất. Nếu bạn không, thì có, một cái gì đó là mạnh mẽ.
phoebus

@phoebus: có, ý tôi là phần giám sát hiệu suất của trình quản lý tác vụ. Chắc chắn là có vẻ khó khăn với tôi ...
jkp

Câu trả lời:


17

Tôi nghi ngờ các bộ xử lý đang được trình bày dưới dạng bộ xử lý lõi đơn trong các ổ cắm riêng biệt. Windows 7 Ultimate hỗ trợ tối đa 2 hệ thống ổ cắm, vì vậy nó sẽ sử dụng 2 bộ xử lý.

Tôi không biết liệu bạn có thể định cấu hình KVM để trình bày bộ xử lý dưới dạng CPU lõi tứ đơn hay 2 CPU lõi kép hay không, điều này sẽ giải quyết vấn đề.


1
Đúng rồi. ATM không có cách nào để thay đổi cấu trúc liên kết.
Luca Tettamanti

1
Ồ, tôi không biết điều này. Cảm ơn đã đặt chính xác ngón tay của bạn về vấn đề này. @Luca: bạn có biết kế hoạch hỗ trợ như vậy không? Tôi thực sự đang sử dụng thêm hai lõi hoặc chúng sẽ lãng phí?
jkp

2
@Luca: thực sự kể từ qemu 0.12 bạn có thể thay đổi cấu trúc liên kết. Tôi đã nâng cấp các thành phần kvm không gian người dùng của mình nhưng tôi nghĩ rằng tôi cần mod kernel mới để nó hoạt động .... dù sao, nó có thể được thực hiện :)
jkp

À, tuyệt ... Tôi cũng nên nâng cấp :)
Luca Tettamanti

Hãy nhớ rằng bạn có thể chạy mô-đun hạt nhân kvm mới nhất trên nhân cũ hơn hiện tại của mình. Bạn có thể sẽ phải tự biên dịch mô-đun trừ khi bạn có thể tìm thấy một kho lưu trữ cho bản phân phối có nhị phân cho bạn. Nhưng việc xây dựng một mô-đun không quá khó để thực hiện.
3dinfluence

21

Trên libvirt 0.8.3, nếu bạn gõ:

virsh capabilities | grep topology

nó sẽ liệt kê cấu trúc liên kết của máy chủ:

<topology sockets='1' cores='4' threads='1'/>

Các con số đề cập đến ổ cắm, lõi trên mỗi ổ cắm và luồng trên mỗi lõi. Thêm dòng này vào mục cpu trong tệp xml để cho phép các cửa sổ sử dụng tất cả 4 lõi, ví dụ:

 <vcpu>4</vcpu>
 <cpu>
     <topology sockets='1' cores='4' threads='1'/>
 </cpu>

biết điều đó, nhưng quên nó đi - một lần nữa lại có serverfault và tất cả những người viết tất cả những thứ tuyệt vời này. cảm ơn vì tiền hỗ trợ!
fen

1
Tôi đã thử điều này trên máy RHEL 7.2 của tôi. Đã thêm vào <topology sockets='1' cores='4' threads='1'/>xml của tôi. virsh capabilities | grep topologycho thấy <topology sockets='1' cores='6' threads='2'/>. kill -HUP nnnnnTIÊU CHÍ : đã thực hiện một trong đó nnnnn là PID của quá trình libvirtd của tôi. Bắt đầu VM. Nó đã làm việc. +1! Cảm ơn! ... Nhưng đừng quên đá libvirtd bằng tín hiệu HUP hoặc khởi động lại!
Mike S

4

Các cài đặt cấu trúc liên kết được hỗ trợ đầy đủ trong trình quản lý virt kể từ Ubuntu 15.04.

Từ virt-manager> CPU> Topology:

  • Kiểm tra: Đặt thủ công cấu trúc liên kết CPU
  • Ổ cắm: 2
  • Lõi: 2
  • Chủ đề: 2

Sau đây được tạo từ các cài đặt ở trên trong virt-manager. Bạn không cần phải nhập chúng với chỉnh sửa virsh.

<vcpu placement='static'>8</vcpu>
<cpu mode='host-model'>
  <model fallback='allow'/>
  <topology sockets='2' cores='2' threads='2'/>
</cpu>

Cấu trúc liên kết đã bị các cửa sổ nhận ra sau khi cập nhật và một lần nữa giới hạn CPU ảo chỉ còn 2 ổ cắm.

Để khắc phục điều này, hãy sử dụng 'chỉnh sửa virsh' để ẩn tính năng kvm và thêm các tính năng hyperv. Sau khi tắt hoàn toàn và khởi động lại, Windows VM sẽ lại nhận ra nhiều CPU.

Tại sao máy ảo Windows 7 của tôi chạy trong KVM của Linux không sử dụng tất cả các bộ xử lý ảo?

<features>
  <acpi/>
  <apic/>
  <hyperv>
    <relaxed state='on'/>
    <vapic state='on'/>
    <spinlocks state='on' retries='8191'/>
  </hyperv>
  <kvm>
    <hidden state='on'/>
  </kvm>
</features>

2

Trong RHEL / CentOS 5.5 (kvm> = 83-164.el5) nhị phân kvm cũng hỗ trợ tùy chọn "-smp N, cores = N" (có các bản vá backport trong gói); tuy nhiên, phiên bản libvirt không hỗ trợ phần tử <topology> trong XML miền. Cách giải quyết là tạo tập lệnh bao bọc cho / usr / libexec / kvm để thêm tùy chọn thích hợp và chỉ định tập lệnh đó trong phần tử <trình giả lập> thay vì đường dẫn mặc định.


1

Điều đáng chú ý là Ubuntu 10.4 (Lucid) có phiên bản 0.7.5 của libvirt trong khi hỗ trợ cho cấu trúc liên kết đã được thêm vào libvirt trong phiên bản 0.7.6. Ubuntu 10.10 (Maverick) có 0.8.3 libvirt và do đó có thể hỗ trợ trực tiếp đặc tả cấu trúc liên kết trong XML mà không cần trình bao bọc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.