Các lõi "ảo" mà bạn gán cho VM có sẵn để sử dụng trong đa xử lý trong HĐH máy khách. Nếu bạn chỉ gán một lõi cho VM, thì hệ điều hành khách sẽ không có khả năng phân phối tải trên nhiều lõi. Vì vậy, hãy giả sử một số tình huống thực tế:
Máy chủ có 4 CPU, khách được chỉ định 1 CPU
- Máy chủ chạy 4 lõi vật lý
- HĐH máy khách trong VM được gán 1 lõi
Trong trường hợp này, hệ điều hành khách sẽ chỉ có thể sử dụng một lõi. Do đó, nếu bạn chạy một ứng dụng đa luồng, có khả năng mở rộng tốt trên nhiều lõi, nó sẽ vẫn chỉ chạy trên một lõi. Do đó, tất cả các luồng trên HĐH khách phải chia sẻ một lõi vật lý.
Chạy một hệ điều hành khách trong thiết lập này tải CPU đầy đủ sẽ mang lại tải CPU cho hệ điều hành máy chủ ~ 25% (một trong 4 lõi được tải trên máy chủ).
Tất nhiên, bạn vẫn có thể có các tác vụ tiêu thụ CPU chạy trong hệ điều hành máy chủ của mình và sử dụng 3 lõi còn lại.
Máy chủ có 4 CPU, khách được chỉ định 4 CPU
- Máy chủ chạy 4 lõi vật lý
- HĐH máy khách trong VM được gán 4 lõi
Trong trường hợp này, bạn có thể chạy các ứng dụng đa luồng có tỷ lệ tốt trong máy khách VM có thể sử dụng toàn bộ 4 CPU ảo. VirtualBox sẽ sử dụng 4 lõi vật lý để xử lý các tác vụ được lên lịch trong VM và do đó, tải CPU chủ của bạn có thể đạt mức sử dụng tối đa 100%.
Vậy bạn nên chọn cài đặt nào?
Câu trả lời cho câu hỏi này phụ thuộc khá nhiều vào những gì bạn muốn làm. Trong một số trường hợp, có thể hữu ích khi gán tất cả các lõi cho VM hoặc thậm chí chạy nhiều VM với mỗi CPU có đủ số lượng CPU được gán. Trong những trường hợp như vậy, VM có thể sử dụng toàn bộ sức mạnh xử lý của máy chủ. Nếu nhiều CPU được gán cho VM hơn so với thực tế hiện tại thì VM sẽ bị ảnh hưởng bởi tải trên các VM khác nhau. Để ngăn chặn điều này, bạn có thể dành một số lõi cho các VM cụ thể. Ví dụ, chạy 2 VM với 2 CPU được gán cho mỗi nút trên 4 lõi có thể giúp mỗi VM có được 2 CPU chuyên dụng (giả sử không có tải được áp đặt bởi HĐH máy chủ, cũng mất một phần sức mạnh xử lý).
Nó có tác động tiêu cực đến máy chủ của tôi để gán tất cả các lõi cho VM không?
Một lần nữa điều này phụ thuộc vào phần mềm chạy. Nếu bạn chạy một VM không hoạt động (hoàn toàn không có chương trình sử dụng nhiều CPU), tải được áp đặt bởi VM này sẽ ở mức gần 0%. Bạn thậm chí có thể chạy song song 10 VM và vẫn gặp tải CPU chủ gần 0% nếu tất cả các VM không hoạt động.
Làm thế nào để CPU hoạt động trên tải không đồng đều?
Chà, phân phối tải CPU phụ thuộc rất nhiều vào một thành phần tích hợp dành riêng cho hệ điều hành được gọi là bộ lập lịch. Đối với Windows XP, bộ lập lịch đã cố gắng tải vòng tròn tất cả các lõi CPU. Vì vậy, chạy một tác vụ đơn luồng với tải đầy đủ trên CPU lõi tứ sẽ mang lại tải ~ 25% cho mỗi lõi.
Thật không may, điều này đã được chứng minh là xấu cho quản lý năng lượng CPU hiện đại. Đối với các hệ thống hiện đại, đó thậm chí còn là một lợi thế nếu một lõi đơn được tải lên tới 100% trước khi lõi thứ hai thậm chí được tham gia. Lý do là miễn là không có đủ tải để sử dụng hết một lõi, các lõi khác có thể vẫn ở chế độ ngủ sâu để tiết kiệm năng lượng và giảm tản nhiệt.
Đối với một số CPU như Intel Core i-Series và AMD mới hơn (Bulldozer), điều này thậm chí còn thú vị hơn vì trong trường hợp chỉ có một tập hợp các lõi được sử dụng thì các bộ không sử dụng sẽ bị tắt. Điều này làm giảm mức tiêu thụ năng lượng của CPU. Cả (Intel và AMD) bắt đầu sử dụng ngân sách tiêu thụ nhiệt và năng lượng sau đó để ép xung các lõi đang hoạt động. Vì vậy, điều này có thể cung cấp cho các ứng dụng đơn luồng (không thể phân phối cho nhiều lõi để thực hiện song song một tác vụ). Tuy nhiên, khi tất cả các lõi đều hoạt động thì hầu hết các công nghệ "tăng tốc" này chỉ có ảnh hưởng nhỏ đến sức mạnh xử lý vì tình huống "tất cả các lõi hoạt động" chính xác là tình huống mà CPU được thiết kế.
Vì vậy, câu trả lời là lõi i7 của bạn xử lý rất tốt tải không đồng đều trên các lõi đơn và thậm chí có thể tăng hiệu năng cho các ứng dụng đơn luồng. Tuy nhiên, mức tăng này nằm trong phạm vi vài phần trăm trong khi các ứng dụng đa luồng thực sự có thể phân phối tải trên nhiều lõi CPU có thể được tăng bởi các yếu tố (x2 trên lõi kép, 4x trên lõi tứ ...) trong trường hợp tối ưu . Vì vậy, đa luồng luôn cung cấp nhiều năng lượng hơn về sức mạnh CPU kết hợp so với luồng đơn kết hợp với tăng xung nhịp.