VirtualBox: Có phải là một ý tưởng tồi khi gán nhiều lõi CPU ảo hơn số lượng lõi CPU vật lý


40

Khi tôi có CPU có khả năng siêu phân luồng , tôi tự hỏi, có phải chỉ định nhiều lõi CPU ảo hơn số lõi CPU vật lý như cảnh báo sau đây cho thấy:

Cảnh báo VirtualBox

Bảng điểm:

Nhiều CPU ảo được gán cho máy ảo hơn số lượng CPU vật lý trên hệ thống máy chủ. Điều này có khả năng làm giảm hiệu suất của máy ảo của bạn. Vui lòng xem xét giảm số lượng CPU ảo.

Ai đó có thể đặt một lý do cho chủ đề này?

EDIT1:

CPU được đề cập là Intel Core i7-4700HQ, Ark Intel , CPU Benchmark

EDIT2:

Giả sử, không có CTNH lỗi thời, như ổ cứng (thay vì SSD) và / hoặc RAM thấp (16GB ở đây, tối thiểu vm.swappiness, 4GB cho VM này), v.v.


2
Cảnh báo là chính xác hợp lý và không nên bỏ qua trừ khi hiệu suất thời gian thực là không quan trọng, hoặc nếu chỉ một tải (phần mềm) tối thiểu sẽ được đưa vào máy ảo. Xem Vậy lõi lõi logic là gì (trái ngược với lõi lõi vật lý)?
agc

Như chiến tranh nói. Mọi thứ thực sự có thể nhanh hơn với ít CPU hơn trong VM.
Rui F Ribeiro

Bạn không bao giờ nên đi vào đường màu đỏ. Bạn có thể sử dụng 4 "lõi" trên CPU lõi 4 kích hoạt HT thực tế. Đối với RAM, 50% RAM của bạn nên làm, ngay cả khi phần màu xanh lá cây nằm ngoài điều đó.
xi

Trong Virtualbox, "lõi" là tất cả các luồng, vì vậy nếu bạn có CPU có 4 lõi và siêu phân luồng, thì giống như 8 "lõi", vì vậy bạn thực sự có thể thiết lập tối đa 4 lõi ảo trong một VM nếu bạn chạy một mình; đó là những gì tôi làm mọi lúc và nó hoạt động rất tốt.
trụ

Tôi phải chứng minh điều gì? Đường màu đỏ dành cho hơn 4 "lõi" đối với tôi, tôi không bao giờ vượt quá và tôi không bao giờ chạy 2 máy ảo cùng một lúc. Nếu bạn thích nguy cơ làm hỏng PC của mình bằng cách đưa tất cả CPU cho VM và bạn không làm gì ngoài VM thì có thể ổn.
trụ

Câu trả lời:


30

Phần cứng / HĐH / Phần mềm

Máy chủ : Linux Mint 18 Cinnamon 64-bit (cập nhật đầy đủ); Phiên bản kernel 4.4.0-47-generic

Khách : Windows 8.1 Pro 64-bit (cập nhật đầy đủ)

Bộ xử lý : Intel Core i7-4700HQ , (bộ nhớ cache 6 MB , 4 lõi vật lý hoặc 8 sử dụng Siêu phân luồng), Điểm chuẩn CPU

VirtualBox : Phiên bản 5.1.10 r112026 (Qt5.5.1)

Bổ sung khách : Đã cài đặt và cập nhật

Công cụ đo điểm chuẩn số 1 : WinRAR phiên bản 5.40 64-bit cuối cùng

Công cụ đo điểm chuẩn # 2 : VeraCrypt phiên bản 1.19 64-bit cuối cùng


Chuẩn bị

Trong cả hai trường hợp, tôi đã đợi sau khi khởi động cho đến khi CPU, RAM, ổ đĩa ổn định ở mức gần điểm không.


phương pháp

  1. Nhân bản máy ảo gốc để có hai cái giống hệt nhau.
  2. Tôi đã vượt qua lần thứ hai kể từ khi phần mềm khởi động lại bị vô hiệu hóa Antivirus chỉ ra ở cuối câu trả lời này và cập nhật WinRAR trong cả hai trường hợp từ bản Beta sang phiên bản Cuối cùng.
  3. Tôi đã thực hiện các chuẩn bị tương tự như được chỉ ra trước đó.
  4. Máy ảo chạy ở nền trước, không có ứng dụng đói thời gian CPU nào khác đang chạy, tôi đã vô hiệu hóa những gì tôi có thể cho mục đích kiểm tra không bị ảnh hưởng.
  5. Để bao gồm bộ nhớ đệm tiềm năng trong hoặc ngoài hệ thống, do đó tôi đã chạy thử nghiệm tương tự hai lần. Lợi ích gần như không có.

Các kết quả

WinRAR

  1. 4 lõi => 7,5 phút ( thời gian ngắn hơn là tốt hơn)

    WinRAR với 4 lõi được kích hoạt

    WinRAR với 4 lõi được kích hoạt, 1,5GiB được xử lý trong 7,5 phút.

  2. 8 lõi => 4,5 phút ( thời gian ngắn hơn là tốt hơn)

    WinRAR với 8 lõi được kích hoạt

    WinRAR với 8 lõi được kích hoạt, 1,5GiB được xử lý trong 4,5 phút.


Mật mã

  1. 4 lõi => tốc độ 2,6 GiB / s ( tốc độ cao hơn là tốt hơn)

    VeraCrypt với 4 lõi được kích hoạt

    VeraCrypt với 4 lõi được kích hoạt, tốc độ AES (AES-NI) được tăng tốc CTNH 2,6 GiB / s.

  2. 8 lõi => tốc độ 3,9 GiB / s ( tốc độ cao hơn là tốt hơn)

    VeraCrypt với 8 lõi được kích hoạt

    VeraCrypt với 8 lõi được kích hoạt, tốc độ AES (AES-NI) tăng tốc CTNH 3,9 GiB / s.


Phần kết luận

Tôi có thể chạy nhiều thử nghiệm khi cần thiết. Nhưng tôi hình dung, nếu hai trong số này, một trong số đó là thử nghiệm nén khá phức tạp, thì thứ hai là một tập hợp các thử nghiệm mã hóa khá phức tạp, điều gì sẽ là điểm chính.

Cả hai điểm chuẩn cho thấy một sự khác biệt rõ rệt. Tôi thấy không có lý do gì để tin rằng kết quả của họ là không chính xác, vì tôi đã tuân theo một phương pháp và sự chuẩn bị khá nghiêm ngặt, hơn nữa các thử nghiệm này đã diễn ra trong RAM để loại bỏ tắc nghẽn I / O. Từ quan điểm của tôi, cảnh báo được đề cập trong câu hỏi có thể áp dụng cho một số điều kiện, nhưng chắc chắn không phải tất cả chúng. Đã chia sẻ với bạn những kết quả khá đáng chú ý này, tôi chắc chắn để bạn đồng ý với tôi, rằng cảnh báo này có lẽ không nên quá nghiêm trọng đối với các CPU hiện đại có tính năng Siêu phân luồng với phiên bản VirtualBox mới nhất. Một điều chắc chắn: Đừng bắt tôi phải dùng từ đó và kiểm tra nó trong điều kiện của riêng bạn, trước khi bạn quyết định áp dụng cài đặt này vĩnh viễn.


Bạn đã chạy nó trên cùng một VM với các lõi đã thay đổi hay hai VM khác nhau (nhưng giống hệt nhau) chưa? Nếu cùng một VM, bạn đã thử lại trong chuỗi khác sau đó để loại trừ ảnh hưởng có thể có của các thuật toán lưu trữ hệ điều hành khách?
tự đại diện

Hãy thử chạy thử nghiệm ghi CPU thực tế cho vui.
trụ

Một cái gì đó giống như Prime95 trong ít nhất một giờ. Và cố gắng duyệt web trên máy chủ cùng một lúc. Như tôi đã nói, sẽ ổn thôi nếu bạn không làm gì trên máy chủ hoặc không chạy nhiều máy ảo cùng một lúc. Nếu nó tệ đến mức đó, giới hạn sẽ được thực thi trong Virtualbox thay vì cảnh báo.
trụ

Một điều khác bạn có thể thử nhưng nó có thể khó hơn. Cài đặt gentoo hoặc Linux từ Scratch VM và kiểm tra xem mọi thứ diễn ra như thế nào khi nó được biên dịch mạnh mẽ. Hoặc cố gắng xây dựng Chromium trong VM.
trụ

@Vlastimil hoàn toàn đồng ý. Trong trường hợp của tôi, tôi sử dụng VM để biên dịch C ++ (đây là một nhiệm vụ ràng buộc cpu) và lý do duy nhất tôi có một cpu 16 lõi là để có thể biên dịch nhanh hơn. Cảnh báo đó hoàn toàn vô nghĩa nếu không có lời giải thích phù hợp và dẫn đến kết luận sai lầm này như "Mọi thứ thực sự có thể nhanh hơn với ít CPU hơn trong VM"
Pavel P

16

Là một nhà thiết kế hệ điều hành, tôi hoàn toàn đồng ý với kết quả của các phép đo. Số lượng nhảm nhí được sản xuất ở nơi khác về vấn đề này là không thể tin được.

Xem số lượng lõi logic là số luồng / quy trình song song có thể được thực thi bởi CTNH. Điều đó đạt được bằng cách sao chép, ví dụ như các thanh ghi và con trỏ lệnh của lõi CPU. Chính lõi CPU bây giờ quyết định sử dụng luồng nào (con trỏ lệnh). Nó sẽ quyết định sử dụng luồng khác vì hướng dẫn của luồng hiện tại không có sẵn trong bộ đệm và cần được tìm nạp từ bộ nhớ hoặc bộ đệm L3. Cơ chế này sẽ tạo ra sự cải thiện tiềm năng 10% -30% trong hướng dẫn / giây hoặc hiệu suất CPU.

Nếu bạn chạy một ứng dụng với một luồng, bạn sẽ không thể gặt hái được lợi ích này, nhưng nếu bạn chạy hai ứng dụng tải cao trên ví dụ như HT Pentium cũ, bạn sẽ có thể gặt hái những lợi ích. Tất nhiên, điều tương tự cũng đúng với các ứng dụng, có nhiều hơn một luồng. Hệ thống Linux của tôi có 200 luồng, vì vậy một số lợi ích phụ thuộc vào tải thực tế luôn luôn xuất hiện. Tất cả những nhận xét này được áp dụng mà không cần ảo hóa.

Virtualbox chỉ giới hạn số lượng luồng có thể chạy song song cho mỗi máy ảo (VM), nhưng bộ lập lịch xử lý máy chủ sẽ thay đổi (các) bộ xử lý logic và do đó (các) bộ xử lý vật lý, trên đó các tiến trình VM chạy tự động. Nếu bạn chạy một ứng dụng tải cao trên máy ảo, các lõi logic bổ sung sẽ mang lại cho bạn lợi ích tương tự 10% -30%. Tải có thể là một ứng dụng đa luồng đơn hoặc một tập hợp các ứng dụng khác nhau.

Trên các hệ thống hiện đại có VT-x hoặc AMD-V, không có hình phạt hiệu năng nào để tối đa hóa số lượng lõi logic, vì cũng không có hình phạt hiệu năng đáng chú ý nào khi chạy nhiều máy ảo cùng một lúc. Giới hạn của bạn là hiệu suất của chip CPU, vì vậy bạn không thể kết xuất video trên 3 VM cùng một lúc mà không làm chậm từng VM, vì chúng phải chia sẻ cùng một CPU vật lý.

Hệ thống máy chủ của bạn có thể trở nên thiếu phản hồi, nếu bạn kết xuất video trên máy ảo với tất cả các lõi logic, nhưng bạn sẽ gặp vấn đề gần như tương tự, nếu bạn đã chạy ứng dụng kết xuất đó trên máy chủ của mình. Ít nhất trong VM bạn có một sự lựa chọn và bạn có thể giải quyết nó bằng cách giới hạn tải CPU tối đa đến 80% -90% hoặc bằng cách giảm số lượng lõi vì lý do này.


0

Hai xu tốt nhất của tôi là không bao giờ sử dụng tất cả các lõi / luồng, chỉ để một hoặc hai cho máy chủ lưu trữ.

Vì vậy, trong trường hợp của bạn, hãy đưa cho khách một lõi sáu, không bao giờ là lõi eigth (vì bạn chỉ có 8 luồng trên máy chủ).

Nếu số lượng luồng có sẵn (không bị nhầm với lõi) trên máy chủ là:

  • Nếu <2, tốt hơn hết là không sử dụng máy ảo
  • Nếu 2, sử dụng máy ảo ở chế độ lõi đơn hoặc chấp nhận rủi ro và sử dụng máy khách lõi kép
  • Nếu> 2, tốt hơn nên sử dụng công thức

Đối với nhiều hơn hai chủ đề, tôi có xu hướng sử dụng công thức này:

  • N = Số luồng cho máy chủ
  • M = Số lượng máy ảo đồng thời tôi muốn chạy (giả sử số dư bằng nhau, cùng số lượng lõi khách cho mỗi khách)
  • Công thức = (N-1) / M nếu máy chủ chỉ có 4 luồng hoặc ít hơn
  • Công thức = (N-2) / M nếu máy chủ có nhiều hơn 4 luồng

Kinh nghiệm của tôi cho tôi biết nó mượt mà hơn và ít rủi ro hơn khi không vượt qua giới hạn công thức như vậy.

Cảnh báo: Không được phép thay đổi số lượng lõi khách khi chạy khách, nhưng được phép giảm mức sử dụng CPU từ 100% xuống 75% hoặc 50%, không ít khách có thể thất bại.

Vì vậy, đôi khi tôi có xu hướng cung cấp cho hai khách 6 sáu lõi trên máy chủ 8 luồng (số công thức như thể chỉ có một khách thay vì hai khách), nhưng giới hạn họ ở mức 50% tốc độ CPU (vì vậy cả hai khách có thể sử dụng 1 / 2 lần CPU), nhưng chỉ khi tôi biết khách sẽ chạy các ứng dụng có tỷ lệ song song lớn hơn, như với so sánh / khớp hình ảnh, v.v.


1
Bản thân bạn đã thực hiện những công thức này? Hoặc bạn có thể thêm trích dẫn?
LinuxSecurityFreak
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.