Tại sao 1 trong số 24 CPU của tôi được chốt 100%?


12

Tôi có hệ thống HP ProLiant DL380 G7 sử dụng 2 CPU 6 nhân, có bật siêu phân luồng, cho tổng số 24 CPU logic (như Windows thấy).

Khi chạy ứng dụng của chúng tôi, tổng mức sử dụng CPU của hệ thống là tốt, nhưng một trong 24 CUP được chốt ở mức 100%: nhập mô tả hình ảnh ở đây

Chỉnh sửa: Đây là dữ liệu PerfMon cho quy trình Hệ thống trong thời gian này và cho Bộ xử lý có mức độ sử dụng cao: nhập mô tả hình ảnh ở đây

Điều này có bình thường không? Nếu không, có cách nào để xác định (các) quá trình nào đang sử dụng CPU logic đó không? Windows PerfMon, ResMon, Trình quản lý tác vụ và Process Explorer không giúp được gì, ngoài việc xác định rằng CPU ở mức 100%.


29
Tôi đoán là nó sẽ được sử dụng vì một quy trình đang sử dụng nó.
HoplessN00b

1
Bạn biết bạn có thể di chuột qua biểu đồ và nhận được gợi ý cho bạn biết quá trình nào đang chiếm nhiều cpu nhất trên bộ xử lý đó?!
Lieven Keersmaekers

Tôi sẽ nghi ngờ về đồng bằng ngắt 100k. Bạn nên đăng ảnh chụp màn hình danh sách quy trình Process Explorer nơi chúng ta có thể thấy những gì nó nói cho những thứ như Hệ thống, DPC, Ngắt.
Gabe

@RyanRies; "ứng dụng" của chúng tôi bao gồm một số dịch vụ .Net WCF cũng có WebSphere MQ và một số phần mềm giám sát của bên thứ 3.
Patrick Cuff

2
Việc chuyển một tiến trình từ CPU này sang CPU khác tương đối tốn kém, so với việc giữ nó theo lịch trình trên cùng một CPU, vì vậy nếu một quá trình thực sự đòi hỏi CPU thì HĐH thường không muốn di chuyển nó.
Michael Hampton

Câu trả lời:


11

Như những người khác đã chỉ ra, chúng ta có thể thấy từ ảnh chụp màn hình đó rằng CPU hoạt động rất chăm chỉ đang dành toàn bộ thời gian ở chế độ kernel. (Màu đỏ.)

Chạy Powershell với tư cách quản trị viên, gõ:

Get-Process | Select Name, PrivilegedProcessorTime | `
Sort-Object PrivilegedProcessorTime -Descending

Quá trình ở đầu danh sách là quá trình hiện đang sử dụng thời gian CPU chế độ nhân nhiều nhất hiện nay. Nếu quy trình đó không phải là "Hệ thống", thì bạn đã tìm ra quy trình chế độ người dùng nào gây ra việc sử dụng CPU này. Nếu quy trình có Thời gian xử lý đặc quyền cao nhất là Hệ thống, mà tôi nghi ngờ đó là, thì nó phức tạp hơn một chút.

Mở quy trình khám phá. Tùy chọn, thiết lập máy chủ biểu tượng của bạn. Hãy chắc chắn rằng bạn đang chạy với độ cao UAC đầy đủ. Nhấp chuột phải vào "quy trình" hệ thống và đi đến Thuộc tính. Sau đó chuyển đến tab Chủ đề. Sắp xếp các chủ đề theo cách sử dụng CPU. Chủ đề gây ra tất cả các chế độ nhân này hoạt động nên ở đây. Nếu bạn nhìn vào mô-đun được liệt kê trong Địa chỉ bắt đầu, nó sẽ cung cấp cho bạn manh mối về những gì công việc có liên quan. Ví dụ, nếu đó là NDIS.sys, đó là trình điều khiển giao diện mạng. Nếu bạn thiết lập máy chủ ký hiệu, bạn sẽ thấy tên của một chức năng trong một mô-đun (trừ khi mô-đun không phải là Microsoft,) nếu không bạn sẽ chỉ thấy một số bù từ địa chỉ bắt đầu của mô-đun.

Ngoài ra, sử dụng Xperf từ Bộ công cụ hiệu suất Windows để ngắt cấu hình, DPC, v.v.

xperf -on PROC_THREAD+LOADER+DPC+INTERRUPT

và dừng ghi âm với xperf -d logfile.etl

Xperf thay thế công cụ Kernrate cũ và có thể cung cấp cho bạn một số dữ liệu cực kỳ chi tiết.

Khi CPU hoạt động ở chế độ kernel, nó chủ yếu chạy các thói quen dịch vụ ngắt. (ISR) Khi xảy ra gián đoạn, công việc chế độ người dùng bị đình chỉ trên bộ xử lý đó và CPU chạy ISR đã đăng ký với ngắt đó. Nếu bạn thấy CPU của mình tiêu tốn một lượng thời gian không đáng có cho các ngắt này, điều đó thường cho thấy trình điều khiển thiết bị bị lỗi cần được cập nhật.

Điều khiến tôi băn khoăn (không có ý định chơi chữ) về kịch bản này là nó xuất hiện như thể bất cứ chủ đề hạt nhân nào đang làm điều này dường như được liên kết với một lõi đó. Tôi tự hỏi tại sao người điều phối dường như chỉ lập lịch trình để chạy trên lõi có vẻ độc đoán đó. Vì vậy, tôi có cảm giác rằng chúng ta cần tìm bất cứ ai đã viết trình điều khiển thiết bị này và chỉ cho họ cách thực hiện các DPC luồng, và không đặt một mối quan hệ rõ ràng trên các luồng nhân, v.v.


IIRC, đó là hành vi khá chuẩn đối với một HĐH chỉ sử dụng một CPU duy nhất để xử lý các ngắt phần cứng ...
Massimo

1
@Massimo Đây có thể là trường hợp với các hệ điều hành cũ, nhưng không còn nữa. Mỗi CPU có bảng mô tả ngắt riêng và mỗi bộ xử lý có IRQL riêng. Nếu một CPU bị kẹt ở IRQL cao vì một lý do nào đó (nghĩa là nó đã phục vụ ngắt), thì nó không thể nhận được các ngắt cùng cấp hoặc thấp hơn và do đó Windows sẽ cung cấp ngắt cho bộ xử lý khác hoặc chỉ giữ lại nó cho đến khi CPU có sẵn Ngay cả các bộ định thời (một đối tượng nổi tiếng trước đây chỉ chạy trên CPU0) cũng có thuật toán chọn bộ xử lý.
Ryan Ries

Nhưng vâng, điều này có thể đơn giản như chạy một ứng dụng cũ hoặc ứng dụng được viết kém, được xác nhận kém, và sau đó tạo ra rất nhiều tòa nhà. Các ngắt thường cần bắt đầu và kết thúc trên cùng một CPU mà chúng được gọi là ... nhưng thông thường, ngay cả một ứng dụng đơn luồng cũng sẽ bị "cân bằng tải" giữa các lõi khi nó chạy ... cái này có vẻ kỳ quặc sự giống nhau.
Ryan Ries

@RyanRies; Tôi đã cài đặt Bộ công cụ hiệu suất Windows trên hệ thống và sử dụng Trình ghi hiệu suất Windows; lệnh xperf ở trên tiếp tục đưa ra lỗi. CPU cao trông giống như đến từ: Quá trình - Hệ thống; Mô-đun - ntoskrnl.exe; Chủ đề - Phase1Initialize; Chức năng - KeZeroPages. Nó chỉ xảy ra khi ứng dụng đang chạy, vì vậy tôi nghĩ (hy vọng) tôi có đủ để quay lại với các nhà phát triển, nhưng tôi cũng quan tâm đến bất kỳ ý tưởng nào bạn có thể có.
Patrick Cuff

23

Hiển thị cột "Thời gian CPU" trên tab "Chi tiết" trong "Trình quản lý tác vụ" và tìm kiếm một quy trình với số lượng thời gian CPU tăng đều đặn. Đó là quá trình nêm của bạn. Nó nên được sử dụng khoảng 4,17% CPU liên tục.


10

Nó dường như là tất cả thời gian Kernel, có thể là Ngắt, chúng chỉ có thể được xử lý bởi một CPU duy nhất.


+1 - Nó chắc chắn trông giống như thời gian kernel, không phải vậy.
Evan Anderson

Điều đó sẽ xuất hiện trong quá trình "Hệ thống"? Dữ liệu PerfMon chúng tôi thu thập được trong quá trình chạy thử có 100% CPU cho quy trình "Hệ thống".
Patrick Cuff

Vâng, tôi nghĩ rằng nó sẽ nằm trong hệ thống (nếu nó được liệt kê ở tất cả ...)
MichelZ

6
Không phải đó cũng là một lỗi trình điều khiển hay một phần cứng xấu tương tác với trình điều khiển không có phục hồi lỗi? Hoặc có thể phần mềm gọi vào kernel trong một vòng lặp chặt chẽ.
Zan Lynx

1
@MichelZ, Một quá trình người dùng thực hiện một loạt các cuộc gọi hệ thống (bao gồm bất kỳ loại I / O nào) sẽ giống như vậy.
thiệu lại

6

Tìm kiếm một quá trình với mức sử dụng CPU không đổi ~ 4% (= 1/24 tổng số CPU khả dụng). Đó phải là cái liên tục chiếm một CPU.

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.