Chỉnh sửa: Cập nhật vào ngày 1 tháng 10 năm 2013 - Một số câu trả lời ban đầu của tôi đã trở nên lỗi thời.
Tôi không chắc là bạn vẫn còn hoạt động trên trang này hay bạn sẽ thấy điều này, nhưng tôi muốn bạn biết rằng tôi đã đọc câu hỏi này ngày hôm nay và nó đã cuốn hút tôi, và vì vậy tôi đã dành cả ngày (khi tôi nên có đang làm việc) nghiên cứu nội bộ Hyper-V và Windows và thậm chí đào sâu vào chính các khái niệm ảo hóa với hy vọng rằng tôi có thể sẵn sàng trả lời câu hỏi của bạn.
Hãy để tôi mở đầu bằng cách nói rằng tôi đến từ quan điểm của Hyper-V như một nền tảng ảo hóa bởi vì đó là nơi tôi có nhiều kinh nghiệm nhất. Mặc dù có thể có một số nguyên lý ảo hóa nhất định, như chúng ta biết, không thể bị sai lệch, Microsoft và VMware và Xen đều có những chiến lược khác nhau về cách họ thiết kế các trình ảo hóa của họ.
Đó là điều đầu tiên khiến câu hỏi của bạn trở nên khó khăn. Bạn đặt ra câu hỏi của bạn như thể nó là bất khả tri, trong khi sự thật thì không phải vậy. Ví dụ, Amazon EC2 sử dụng bộ ảo hóa Xen và số liệu "Thời gian đánh cắp CPU" mà bạn thấy trong đầu ra của một top
lệnh được phát ra từ một máy ảo Linux chạy trên máy ảo hóa đó là kết quả của các dịch vụ tích hợp được cài đặt trên hệ điều hành khách đó (hoặc các công cụ nhận biết ảo hóa trên máy khách) kết hợp với dữ liệu được cung cấp bởi nhà ảo thuật cụ thể đó.
Trước hết, hãy để tôi trả lời thẳng câu hỏi của bạn: Không có cách nào để xem từ bên trong một máy ảo chạy Windows, bộ xử lý thuộc về máy vật lý mà máy ảo hóa chạy để làm những việc khác, trừ khi các công cụ ảo cụ thể / trừ khi các dịch vụ hoặc công cụ nhận biết ảo hóa cho trình ảo hóa cụ thể của bạn được cài đặt trong máy khách VM vànhà ảo thuật cụ thể mà khách đang chạy sẽ hiển thị dữ liệu đó cho khách. Ngay cả một khách Windows chạy trên máy ảo hóa Hyper-V cũng sẽ không có quyền truy cập ngay vào thông tin liên quan đến thời gian mà các bộ xử lý vật lý trên máy ảo hóa đang làm những việc khác. (Để trích dẫn voretaq7, một cái gì đó "phá vỡ bức tường thứ tư.") Mặc dù các hệ điều hành máy khách và máy chủ Windows chạy như khách ảo trong Hyper-V với các dịch vụ / công cụ tích hợp chính xác được cài đặt sử dụng "khai sáng" (nghĩa đen là kernel thay đổi mã được thực hiện đặc biệt cho máy ảo) làm tăng đáng kể hiệu năng của chúng trong việc sử dụng tài nguyên của máy chủ vật lý, điểm mấu chốt là máy ảo hóa không cóđể cung cấp thêm thông tin cho hệ điều hành khách hơn nó muốn. Điều đó có nghĩa hypervisor không có để kể một VM khách những gì khác nó đang làm bên cạnh phục vụ rằng VM ... trừ khi nó muốn. Và thông tin đó về những gì bộ xử lý vật lý khác đang làm là cần thiết để lấy số liệu theo quan điểm của VM, chẳng hạn như "Thời gian đánh cắp CPU: phần trăm thời gian mà vCPU chờ cho CPU vật lý".
Làm thế nào hệ điều hành khách có thể biết rằng, nếu nó thậm chí không nhận ra rằng nó thực sự được ảo hóa?
Nói cách khác, không có các công cụ tích hợp phù hợp được cài đặt trên máy khách, HĐH khách thậm chí sẽ không biết rằng CPU của nó thực sự là CPU v . Thậm chí sẽ không biết rằng có một lực lượng khác bên ngoài chính nó "đánh cắp" các chu kỳ CPU từ nó, do đó, số liệu đó sẽ không tồn tại trên máy khách VM.
VMware đã bắt đầu tiết lộ dữ liệu này cho khách Windows cũng như ESXi 5.0. Các công cụ tích hợp VMware cũng cần được cập nhật trên máy khách. Đây là một tài liệu tham khảo ; họ gọi nó là "Thời gian bị đánh cắp CPU".
Một trình ảo hóa như Hyper-V không cung cấp cho khách quyền truy cập trực tiếp vào các tài nguyên vật lý như bộ xử lý vật lý hoặc lõi bộ xử lý. Thay vào đó, trình ảo hóa cung cấp cho họ vDevs - thiết bị ảo - chẳng hạn như vCPUs.
Một ví dụ điển hình về lý do: Giả sử hệ điều hành máy khách ảo thực hiện cuộc gọi để xóa TLB (bộ đệm dịch sang một bên) là thành phần vật lý của CPU vật lý. Nếu HĐH khách được phép xóa toàn bộ TLB trên bộ xử lý vật lý, điều đó sẽ có hiệu ứng hiệu suất âm đối với tất cả các máy ảo khác cũng đang chia sẻ cùng TLB vật lý đó. Trong trường hợp của Windows, cuộc gọi đó trong HĐH khách được dịch thành một cuộc gọi "hypercall" hoặc "giác ngộ" được trình diễn giải bởi trình ảo hóa để chỉ phần TLB có liên quan đến máy ảo đó bị xóa.
(Thật thú vị, điều đó gợi ý cho tôi rằng các máy khách VM không có các công cụ và / hoặc dịch vụ tích hợp phù hợp có thể có khả năng ảnh hưởng đến hiệu suất của tất cả các máy ảo khác trên cùng một máy chủ, nhưng điều đó hoàn toàn nằm ngoài phạm vi của chủ đề này .)
Tất cả điều đó để nói rằng bạn vẫn có thể phát hiện trong máy chủ Hyper-V thời gian mà bộ xử lý ảo đã dành để chờ bộ xử lý thực sự có sẵn để nó có thể được lên lịch để chạy. Nhưng bạn chỉ có thể thấy dữ liệu đó trên máy ảo hóa Windows Hyper-V. Nếu có thể thấy điều này trong các nhà cung cấp dịch vụ thôi miên khác, tôi kêu gọi những người khác cho chúng tôi biết làm thế nào để thấy điều này trong nhà cung cấp dịch vụ đó và cũng nếu nó được tiếp xúc với khách. (Chỉnh sửa 10/1/2013 Cảm ơn bạn evilensky vì đã làm điều đó!)
Máy thử nghiệm của tôi là Hyper-V Server 2012, đây là phiên bản miễn phí của Server 2012 chỉ chạy Core và vai trò Hyper-V. Nó thực sự giống như bất kỳ Windows Server 2012 nào chạy Hyper-V.
Kích hoạt Perfmon trên phân vùng cha mẹ của bạn, còn gọi là máy chủ vật lý. Tải bộ đếm này:
Hyper-V Hypervisor Virtual Processor\CPU Wait Time Per Dispatch\*
Bạn sẽ nhận thấy rằng sẽ có một phiên bản của bộ đếm đó cho mỗi máy ảo trên trình ảo hóa đó, cũng như _Total. Định nghĩa của Microsoft về bộ đếm Perfmon đó là:
Thời gian trung bình (tính bằng nano giây) dành cho việc chờ bộ xử lý ảo được gửi đến bộ xử lý logic.
Rõ ràng, bạn muốn con số đó càng thấp càng tốt. Đối với máy tính, chờ đợi gần như không bao giờ là một điều tốt.
Bộ đếm hiệu suất khác trên hypervisor rằng bạn sẽ muốn điều tra là Hyper-V Hypervisor Root Virtual Processor\% Guest Run Time
, % Hypervisor Run Time
, và % Total Run Time
. Những quầy cung cấp cho bạn với tỷ lệ phần trăm mà có thể được sử dụng để xác định sự kiện như bao nhiêu thời gian bộ xử lý "thực" dành làm những việc khác hơn phục vụ một VM hoặc tất cả các máy ảo.
Vì vậy, để kết luận, số liệu mà bạn đang tìm kiếm trong một máy ảo khách phụ thuộc vào trình ảo hóa mà nó đang chạy, liệu trình siêu giám sát đó có chọn cung cấp dữ liệu về cách nó dành thời gian ngoài việc phục vụ VM đó không và nếu khách HĐH có các công cụ / dịch vụ / trình điều khiển ảo hóa phù hợp để đủ nhận thức để nhận ra rằng trình ảo hóa đang cung cấp dữ liệu đó.
Tôi không biết cách nào đối với một khách Windows, các công cụ tích hợp được cài đặt hay không, để xem bao nhiêu thời gian, tính bằng giây hoặc phần trăm, máy chủ của VM đã dành thời gian phục vụ nó hoặc không phục vụ nó tương ứng với tổng thời gian của bộ xử lý vật lý. (Chỉnh sửa 10/1/2013: ESXi 5.0 hoặc tốt hơn là hiển thị dữ liệu này cho VM khách thông qua các công cụ tích hợp. Mặc dù vậy vẫn không có gì trên Hyper-V.)