KVM: Những tính năng CPU nào làm cho VM chạy tốt hơn?


21

Chúng tôi đang sử dụng Ubuntu 12.04 với các tham số sau:

  • Dell R910
  • Hạt nhân 3.2.0-25-chung # 40-Ubuntu SMP x86_64 x86_64 x86_64 GNU / Linux
  • kvm 1: 84 + dfsg-0ubfox16 + 1.0 + noroms + 0ubfox13
  • qemu-kvm 1.0 + noroms-0ubfox13
  • qemu-common 1.0 + noroms-0ubfox13
  • qemu-kvm 1.0 + noroms-0ubfox13
  • 4 x CPU Intel (R) Xeon (R) E7- 4870 @ 2.40GHz (mỗi lõi có 10 lõi vật lý, bật HT và Intel VT)
  • Các khách Windows hiện không có VirtIO, nhưng điều đó sẽ sớm thay đổi

Chúng tôi đang chạy một số khách Windows trên máy này, một trong số họ là Windows 2003 32 Bit, một người khác là Windows 2008 (64 Bit). Chúng tôi hiện đang vật lộn với các vấn đề về hiệu năng và chơi xung quanh với các mô hình CPU.

Chúng tôi thường sử dụng "qemu-system-x86_64 cho khách Windows 32 Bit của mình, ví dụ:

/usr/bin/qemu-system-x86_64 -S -M pc-1.0 -cpu qemu32 -enable-kvm -m 4096 -smp 4,sockets=4,cores=1,threads=1 [...] 

Hiệu suất của khách này hóa ra hơi thấp. Chúng tôi chưa chạy bất kỳ điểm chuẩn nào, nhưng giả sử rằng việc sao chép một lượng lớn dữ liệu (tệp) trong VM từ thư mục này sang thư mục khác sẽ nhanh hơn rất nhiều khi chúng tôi chuyển mô hình CPU từ "-cpu qemu32" sang "-cpu Nehalem ". Các tệp mất khoảng 2: 40h để sao chép ngay bây giờ sao chép trong vòng 40 phút. Tất nhiên đây không phải là một bài kiểm tra chất lượng cao và có nhiều chỗ để có một nỗ lực chuyên nghiệp hơn. Nhưng đây là một chỉ số rõ ràng rằng việc chọn mô hình CPU chính xác có thể ảnh hưởng lớn đến hiệu suất của khách.

Bây giờ tôi đã tò mò và chạy:

qemu-x86_64 -cpu ?
x86           [n270]
x86         [athlon]
x86       [pentium3]
x86       [pentium2]
x86        [pentium]
x86            [486]
x86        [coreduo]
x86          [kvm32]
x86         [qemu32]
x86          [kvm64]
x86       [core2duo]
x86         [phenom]
x86         [qemu64]

Và:

kvm -cpu ?model
 x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)
 x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)
 x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)
 x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)
 x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)
 x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)
 x86           [n270]  Intel(R) Atom(TM) CPU N270   @ 1.60GHz
 x86         [athlon]  QEMU Virtual CPU version 1.0
 x86       [pentium3]
 x86       [pentium2]
 x86        [pentium]
 x86            [486]
 x86        [coreduo]  Genuine Intel(R) CPU           T2600  @ 2.16GHz
 x86          [kvm32]  Common 32-bit KVM processor
 x86         [qemu32]  QEMU Virtual CPU version 1.0
 x86          [kvm64]  Common KVM processor
 x86       [core2duo]  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
 x86         [phenom]  AMD Phenom(tm) 9550 Quad-Core Processor
 x86         [qemu64]  QEMU Virtual CPU version 1.0

Với tất cả các phiên bản khác nhau này, thật khó để đoán ra. "Nehalem" dường như là người biểu diễn nhiều nhất trong danh sách đó. Bây giờ tôi tự hỏi, làm thế nào để biết mô hình CPU nào là tốt nhất cho khách của tôi? Duyệt Internet, tôi tìm thấy các nguồn tài nguyên sau:

Khi tôi đọc các trang web đó một cách chính xác, họ tuyên bố rằng "máy chủ -cpu" có thể mang lại hiệu suất tốt nhất. Tôi chưa có bất kỳ lo lắng nào về việc di chuyển, vì cả hai máy chủ KVM đều được trang bị như nhau (chính xác là cùng một phần cứng).

Vì vậy, quản trị viên KVM có kinh nghiệm khuyên gì? Có một quy tắc vàng hoặc thậm chí là một ma trận, như "mô hình này là tốt nhất cho hệ điều hành khách đó" không?

Tôi xin lỗi nếu tôi có thể tự mình tìm hiểu thông tin này - tôi đã chạy nhiều tìm kiếm khác nhau trên Google và duyệt qua nhiều trang web. Tôi đã không thể tìm thấy một cái gì đó trả lời câu hỏi của tôi.


Tại sao phải bận tâm với công tắc -cpu? Chỉ cần để nó ra.
psusi

1
Tại sao không bận tâm với nó? Afaik nó có thể mang lại cải tiến hiệu suất.
Valentin ngày

Nếu nó phải bước vào và mô phỏng mọi thứ, nó sẽ làm giảm hiệu suất. Hãy thử mà không có.
psusi

2
Tôi chỉ phát hiện ra rằng libvirt tự động thêm tham số "-host qemu32", vì chúng tôi không đặt nó.
Valentin

3
@psusi: Chỉ cần thử nghiệm nó ngày hôm nay ... khi tôi rời khỏi công tắc -cpu, hiệu suất sẽ tốt như tôi chọn mô hình CPU tốt nhất có thể.
Valentin ngày

Câu trả lời:


13

Nó thực sự khá đơn giản. Đối với các cụm đồng nhất và thiết lập máy chủ duy nhất sử dụng hosttùy chọn. Đối với các cụm hỗn hợp, sử dụng phiên bản CPU có sẵn thấp nhất, vì vậy nếu một máy chủ là Penryn và Nehalem khác, hãy sử dụng Penryn trên cả hai.

Nếu bạn đang sử dụng RHEV hoặc oVirt, thì điều này đã được tích hợp sẵn. VMWare có cái gọi là "EVC" và định vị nó là một tính năng rất lớn.

Quay trở lại hiệu suất, bạn chắc chắn cần có tài năng ở mọi nơi bạn có thể đặt nó. Và nếu bạn vẫn gặp các tắc nghẽn về hiệu suất, chúng thường có thể được xử lý theo từng trường hợp, tùy thuộc vào nơi chúng xảy ra.

[offtop] Về lựa chọn phân phối của bạn, tôi đã nhận xét trong một chủ đề khác [/ offtop]


Cảm ơn dyasny, đã hy vọng bạn trả lời và cung cấp cho tôi một số "quy tắc vàng"!
Valentin ngày

11

Các khách Windows hiện không có VirtIO

Đừng mất nhiều thời gian hơn với việc điều chỉnh bất cứ điều gì.
Cài đặt trình điều khiển virtIO và quay trở lại. Sự khác biệt là rất lớn đến nỗi bất kỳ sự tăng cường nào bạn có thể tìm thấy bây giờ sẽ không có ý nghĩa gì với virtIO.

Chỉ là một ví dụ với một trong các máy chủ của chúng tôi:
- không có virtIO, W2k3 có thể xử lý khoảng 10 người dùng Terminal Server
- với virtIO, cùng một máy có cùng hệ điều hành hiện xử lý 120 đến 125 người dùng với tốc độ chậm. Và chúng tôi đã thêm một máy ảo khác để chạy SQL Server một máy tính vật lý tương tự


Cảm ơn đã gợi ý. Có, VirtIO nên được kích hoạt chắc chắn, nhưng chúng tôi đang gặp một số vấn đề với khách Windows 2003 cần được giải quyết trước. Bên cạnh đó, tôi muốn làm rõ về chủ đề mô hình CPU.
Valentin ngày

Đây là một lý do tôi sử dụng Hyper-V. Kể từ năm 2008, điều này có nghĩa là KHÔNG CÀI ĐẶT và có nghĩa là tất cả các trình điều khiển cho Hyper-V được duy trì với Windows Update. Các vấn đề tương thích có deamn chết người.
TomTom

@TomTom Hyper-V không phải là trình ảo hóa duy nhất được chứng nhận để chạy Windows. Và chứng nhận trong bối cảnh này có nghĩa là SVVP / WHQL.
dyasny

1
Không, đó là cái duy nhất hoạt động ngoài hộp vì nó đã cài đặt trình điều khiển;) Tôi nghĩ rằng XEN khi họ cõng trên trình điều khiển Hyper-V. Không phải duy trì một yếu tố cập nhật bên ngoài khác là một điều thực sự tốt đẹp. Tôi không quan tâm liệu họ có được ký hay không - điểm là tôi không muốn xem nhà cung cấp khác, vì tất cả đều thông qua cập nhật windows. Tôi chỉ WISH MS sẽ mở Windows Update cho softawre của bên thứ ba;)
TomTom

1
Vì tôi chắc chắn bạn đã nghe nói về các mẫu trượt và VM, nên tôi sẽ (hầu như) không đề cập đến các mẫu đó :) Vấn đề của tôi với Hyper-V là sự hỗ trợ cực kỳ kém của khách Linux.
dyasny

8

Qemu không hoạt động theo cách tương tự như nhiều nhà ảo thuật khác làm. Đối với người mới bắt đầu, nó có thể cung cấp thi đua đầy đủ. Điều đó có nghĩa là bạn có thể chạy mã x86 trên bộ xử lý ARM chẳng hạn. Khi ở chế độ KVM, khi bạn đang sử dụng nó, nó không thực sự làm điều đó ... bộ xử lý bị lộ bất kể là gì, nhưng những gì được báo cáo cho HĐH sẽ bị thay đổi bởi -cpucờ.

Nếu bạn muốn tốc độ nhanh hơn, đó là điểm khởi đầu để thử và kết hợp các khả năng của bộ xử lý ảo với bộ xử lý thực của bạn tốt nhất có thể. Điều đó sẽ giảm các trường hợp trong đó các opc tối ưu phụ được gọi để chạy các tác vụ và cũng sẽ giảm các opcodes không thể có trên phần cứng của bạn được dịch sang thứ khác trước. Do model bộ xử lý Xeon của bạn được phát hành vào đầu năm 2011, nên nó có thể hỗ trợ chủ yếu phù hợp với dòng Core i7. Vì thế, tôi muốn nói rằng kiến ​​trúc Nehalem là sự mô phỏng tốt nhất của bạn.

Trích dẫn từ một trong các liên kết của bạn ( Điều chỉnh KVM ):

Để chuyển tất cả các tính năng của bộ xử lý máy chủ có sẵn cho khách, hãy sử dụng công tắc dòng lệnh

 qemu -cpu host

nếu bạn muốn duy trì khả năng tương thích, bạn có thể hiển thị các tính năng đã chọn cho khách của mình. Nếu tất cả máy chủ của bạn có các tính năng này, khả năng tương thích vẫn được giữ lại:

 qemu -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic

Do đó, nếu bạn cảm thấy rằng cuối cùng bạn có thể di chuyển mọi thứ xung quanh đủ để tạo ra một vấn đề, bạn có thể tìm thấy tất cả các bộ hướng dẫn được hỗ trợ mà bạn nghĩ rằng bất kỳ bộ xử lý nào bạn có bây giờ hoặc có thể có trong các hỗ trợ trong tương lai và liệt kê chúng ra.

Hầu hết thời gian, mặc dù, bạn muốn dính vào -cpu host. Chỉ định CPU có cờ ít hơn có nghĩa là các ứng dụng sẽ tránh sử dụng các tính năng có thể làm cho chúng nhanh hơn.


4
Anh ta đang sử dụng KVM, cần các phần mở rộng ảo hóa đó và không chạy mô phỏng; ngay cả khi nó dựa trên qemu
Javier

1
Vẫn +1 phiếu bầu từ tôi cho những nỗ lực và đề xuất sử dụng máy chủ -cpu!
Valentin ngày

3

Bạn đang nhận được tùy chọn '-cpu host'. Tùy chọn này KHÔNG chỉ kích hoạt tất cả các tính năng CPU dành riêng cho hệ thống máy chủ của bạn, nó cho phép TẤT CẢ các tính năng mà CPU của bạn hỗ trợ và tất cả những gì có thể được mô phỏng ngay cả khi CPU của bạn không hỗ trợ chúng.

-Cpu host
là một tùy chọn tốt nhưng không hiệu quả nhất, vì nó có thể cho phép các tùy chọn có thể được mô phỏng mà cpu của bạn không hỗ trợ, hệ thống khách có thể bị chậm lại bất cứ khi nào nó cố gắng sử dụng một trong những tính năng này cần được mô phỏng .

Nguồn: http://wiki.qemu.org/Features/CPUModels


1
Ban đầu tôi nghĩ câu trả lời này đề cập đến hỗ trợ hướng dẫn, ví dụ như hỗ trợ SSE có thể được mô phỏng. Nhưng tất nhiên điều đó không có ý nghĩa khi bạn chạy ở chế độ KVM hoặc TCG và không kết hợp cả hai. Vì vậy, tôi đoán giả lập được đề cập ở đây có thể là những thứ như x2apic khi không có hỗ trợ h / w nhưng kernel có thể giả mạo nó. Tôi chỉ đề cập đến điều này để thử và làm rõ những điều trên vì nó khiến tôi ban đầu bối rối.
Neil McGill

-2

CentOS 6.7 mang lại cho tôi hiệu suất KVM + Spice thích hợp trên Dell R910. Tôi nghĩ rằng một khi bạn cho nó một phát bắn, bạn sẽ không quay trở lại với bất cứ điều gì khác (nghiêm tú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.