Có Windows tương đương với Unix 'CPU đánh cắp thời gian' không?


24

Để đánh giá hiệu suất giám sát chính xác về ảo hóa nền tảng, các CPU ăn cắp thời gian đã trở thành một ngày càng phù hợp số liệu - xem EC2 giám sát: trường hợp của CPU bị đánh cắp cho một bản tóm tắt bài học trong bối cảnh của Amazon EC2 và IBM giấy trên thời gian CPU chiếm một giải thích kỹ thuật sâu hơn (bao gồm cả hình minh họa) của khái niệm:

Thời gian đánh cắp là phần trăm thời gian CPU ảo chờ CPU thực trong khi bộ ảo hóa đang phục vụ bộ xử lý ảo khác.

Theo đó, nó được đưa ra trong hầu hết các công cụ giám sát Unix / Linux có liên quan hiện nay - xem ví dụ: cột % ăn cắp hoặc st in sarhoặc top:

st - Steal Time
Lượng CPU 'bị đánh cắp' từ máy ảo này bởi nhà ảo thuật cho các tác vụ khác (chẳng hạn như chạy một máy ảo khác).

Mặc dù vậy, tôi đã không thể tìm ra cách chụp cùng một số liệu trên Windows, điều này đã có thể chưa? (Lý tưởng cho Windows 2008 Server R2 AMI trên EC2 và thông qua Bộ đếm hiệu suất Windows tương ứng .)

Câu trả lời:


33

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 toplệ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 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 để 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 để 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.)


1
+1 - câu trả lời hoành tráng là anh hùng ca
Mark Henderson

1
+1 cho khám phá kỹ lưỡng thực sự, đánh giá cao. Vì vậy, liên quan đến EC2, điều này rõ ràng làm sôi các khách Unix / Linux đang chạy trong Xen paravirtualchế độ, đó là một miền bị ảo hóa (tức là không ảo hóa hoàn toàn, HĐH khách được sửa đổi để chạy trên máy chủ), trong đó có thời gian đánh cắp , so với Windows / FreeBSD / ... khách đang chạy Xen HVM, là miền mô phỏng phần cứng (tức là hệ điều hành khách không được sửa đổi để chạy trên máy chủ), trong đó rõ ràng là không - vì vậy, một câu trả lời phủ định rõ ràng, hãy đoán đó là điều đáng quan tâm. Tôi có đọc đúng cho bạn rằng cuối cùng nó có thể được thêm vào không?
Steffen Opel

2
Về lý thuyết, nó có thể, nhưng đừng nín thở. Giống như tôi đã nói, nó yêu cầu bộ ảo hóa dành riêng cho nhà cung cấp và HĐH khách dành riêng cho nhà cung cấp phải nỗ lực phối hợp để làm cho dữ liệu đó về máy chủ vật lý có sẵn và có thể truy cập được từ bên trong máy khách VM. wiki.xen.org/wiki/Xen_Kernel_Feature_Matrix
Ryan Ries

2
Tiếp tuyến: VMware hypannerors sẽ coi nhóm đánh cắp là thời gian sẵn sàng - lượng thời gian mà CPU ảo đang chờ để được phục vụ bởi một tài nguyên vật lý.
Yolo Perdiem

1
đây là một chủ đề nổi tiếng trên máy tính lớn. Các số liệu đã có sẵn trong nhiều thập kỷ. Nó được gọi là "chờ trên cpu".

2

FWIW, tôi chỉ xem qua các bộ đếm Perfmon của máy chủ Windows 2008r2 chạy trong Hyper-V và không thấy bất cứ điều gì liên quan đến việc đánh cắp thời gian (hoặc ảo hóa cả về vấn đề đó).


Cảm ơn bạn đã kiểm tra - rõ ràng Bộ đếm ảo hóa cho Hyper-V thực sự nên có sẵn, có lẽ chúng phải được cài đặt / kích hoạt bằng cách nào đó trước? Mặc dù vậy, tôi vẫn không thể xác định / suy ra một số liệu tương tự / liên quan trong số này.
Steffen Opel
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.