24 CPU'umdan 1'i neden% 100'de sabitlendi?


12

Toplam 24 mantıksal CPU (Windows tarafından görüldüğü gibi) için Hiper iş parçacığı etkinleştirilmiş 2 adet 6 çekirdekli CPU kullanan bir HP ProLiant DL380 G7 sistemim var.

Uygulamamızı çalıştırırken, toplam sistem CPU kullanımı iyidir, ancak 24 CUP'dan biri% 100 oranında sabitlenmiştir: resim açıklamasını buraya girin

Düzenleme: Bu, bu süreçte Sistem işlemi ve yüksek kullanımı olan İşlemci için PerfMon verileridir: resim açıklamasını buraya girin

Bu normal mi? Değilse, hangi işlemlerin bu mantıksal CPU'yu kullandığını tanımlamanın bir yolu var mı? Windows PerfMon, ResMon, Görev Yöneticisi ve İşlem Gezgini, CPU'nun% 100'de olduğunu tanımlamaktan başka yardımcı olmamıştır.


29
Tahminimce kullanımda olacak çünkü bir süreç kullanıyor.
HopelessN00b

1
Grafik üzerinde gezinebileceğinizi ve bu işlemcide hangi işlemin en fazla işlemciyi aldığını söyleyen bir ipucu alabileceğinizi biliyor musunuz ?!
Lieven Keersmaekers

100k kesme deltasından şüphelenirim. Sistem, DPC'ler, Kesintiler gibi şeyler için ne söylediğini görebileceğimiz bir İşlem Gezgini işlem listesi ekran görüntüsü yayınlamalısınız.
Gabe

@RyanRies; "Uygulamamız", WebSphere MQ ve bazı 3. taraf izleme yazılımlarından oluşan birkaç .Net WCF hizmetinden oluşur.
Patrick Cuff

2
Bir işlemin bir CPU'dan diğerine taşınması, aynı CPU'da zamanlanmış kalmasına kıyasla nispeten pahalıdır, bu nedenle bir işlem gerçekten CPU'yu talep ediyorsa, işletim sistemi genellikle taşımamayı tercih eder.
Michael Hampton

Yanıtlar:


11

Diğerlerinin de belirttiği gibi, bu ekran görüntüsünde çok sıkı çalışan CPU'nun tüm zamanını çekirdek modunda harcadığını görebiliriz. (Kırmızı renk.)

Powershell'i yönetici olarak çalıştırırken şunu yazın:

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

Listenin en üstündeki işlem, şu anda en çok çekirdek modu CPU saatini kullanan işlemdir. Bu işlem "Sistem" değilse , bu CPU kullanımına hangi kullanıcı modu işleminin neden olduğunu henüz anladınız. En yüksek Ayrıcalıklı İşlemci Süresine sahip işlem, bundan şüphelendiğim Sistem ise, o zaman biraz daha karmaşıktır.

İşlem Gezgini'ni açın. İsteğe bağlı olarak simge sunucunuzu ayarlayın. Tam UAC yüksekliği ile çalıştığınızdan emin olun. Sistem "işlemini" sağ tıklayın ve Özellikler'e gidin. Ardından Konular sekmesine gidin. İş parçacıklarını CPU kullanımına göre sıralayın. Tüm bu çekirdek modu çalışmasına neden olan iş parçacığı burada olmalıdır. Başlangıç ​​Adresi altında listelenen modüle bakarsanız, işin ne ile ilgili olduğuna dair bir ipucu vermelidir. Örneğin, NDIS.sys ise, bu bir ağ arabirimi sürücüsüdür. Sembol sunucusunu ayarlarsanız, modül içindeki bir işlevin adını görmeniz gerekir (modül Microsoft değilse), aksi takdirde modülün başlangıç ​​adresinden sayısal bir uzaklık görürsünüz.

Alternatif olarak, kesintileri, DPC'leri vb. Tanıtmak için Windows Performans Araç Seti'nden Xperf kullanın.

xperf -on PROC_THREAD+LOADER+DPC+INTERRUPT

ile kaydı durdurun xperf -d logfile.etl

Xperf eski Kernrate aracının yerini alır ve size bazı son derece ayrıntılı veriler sağlayabilir.

CPU çekirdek modunda çalışırken, çoğunlukla kesme hizmeti rutinleri çalıştırılır. (ISR) Bir kesinti meydana geldiğinde, kullanıcı modu çalışması bu işlemcide askıya alınır ve CPU bu kesintiye kayıtlı ISR'yi çalıştırır. CPU'nuzun bu kesintilere çok fazla zaman harcadığını görürseniz, bu genellikle güncellenmesi gereken hatalı bir aygıt sürücüsünü gösterir.

Bu senaryo hakkında beni rahatsız eden (cinas amaçlı değil) olsa da, bunu yapan çekirdek iş parçacığının o çekirdeğe benzediği görülüyor . Dağıtıcı neden sadece keyfi bir çekirdek üzerinde çalıştırmak için iş parçacığı zamanlama gibi görünüyor acaba. Bu nedenle, bu aygıt sürücüsünü kimin yazdığını bulmamıza ve onlara dişli DPC'lerin nasıl yapılacağını göstermemize ve çekirdek iş parçacıklarına açıkça benzememeye ihtiyacımız olduğunu hissediyorum.


IIRC, bir işletim sisteminin donanım kesintilerini işlemek için yalnızca tek bir CPU kullanması oldukça standart bir davranış ...
Massimo

1
@Massimo Bu, eski işletim sistemlerinde geçerli olabilir, ancak artık geçerli olmayabilir. Her CPU kendi kesme tanımlayıcı tablosuna sahiptir ve her işlemcinin kendi IRQL'i vardır. Bir CPU herhangi bir nedenden ötürü yüksek bir IRQL'de sıkışmışsa (yani zaten bir kesmeye hizmet veriyorsa) aynı veya daha düşük seviyedeki kesmeleri alamaz ve bu nedenle Windows ya kesmeyi başka bir işlemciye verir veya sadece tutun CPU kullanılabilir hale gelene kadar. Zamanlayıcıların bile (daha önce yalnızca CPU0'da çalıştırmak için kötü şöhretli bir nesne) bir işlemci seçim algoritması var.
Ryan Ries

Ancak, bu, kötü bir şekilde aşılanan ve daha sonra çok sayıda sistem çağrısı yapan eski veya kötü yazılmış bir uygulamayı çalıştırmak kadar basit olabilir. Kesintiler genellikle çağrıldıkları aynı CPU'da başlayıp bitmelidir ... ancak normalde tek iş parçacıklı bir uygulama bile çalışırken çekirdekler arasında "yük dengeli" olur ... bu garip görünüyor afinite.
Ryan Ries

@RyanRies; Windows Performans Araç Seti'ni sisteme yükledim ve Windows Performans Kaydedici'yi kullandım; Yukarıdaki xperf komutu hata vermeye devam etti. Yüksek CPU geliyor gibi görünüyor: İşlem - Sistem; Modül - ntoskrnl.exe; Konu - Faz1Başlatma; İşlev - KeZeroPages. Sadece uygulama çalışırken olur, bu yüzden geliştiricilere geri almak için yeterli olduğunu düşünüyorum (umarım), ancak sahip olabileceğiniz herhangi bir fikirle de ilgileniyorum.
Patrick Cuff

23

"Görev Yöneticisi" ndeki "Ayrıntılar" sekmesinde "CPU Saati" sütununu gösterin ve CPU saat sayımının sürekli arttığı bir işlem arayın. Bu senin kama sürecin. Sürekli% 4.17 CPU kullanıyor olmalıdır.


10

Tüm Çekirdek zamanı gibi görünüyor, Kesintiler olabilir, sadece tek bir CPU tarafından ele alınabilirler.


+1 - Kesinlikle çekirdek zamanı gibi görünüyor, değil mi?
Evan Anderson

Bu "Sistem" işlemi altında görünür mü? Bir test çalıştırması sırasında topladığımız PerfMon verileri, "Sistem" işlemi için% 100 CPU'ya sahiptir.
Patrick Cuff

Evet, bunun sisteme gireceğini düşünüyorum (eğer listelenmişse ...)
MichelZ

6
Bu aynı zamanda bir sürücü hatası veya bir hata kurtarma işlemi olmayan bir sürücü ile etkileşim halinde olan kötü bir donanım parçası olamaz mı? Ya da yazılım çekirdeğe sıkı bir döngü içinde çağıran yazılım.
Zan Lynx

1
@MichelZ, Bir grup sistem çağrısı yapan (herhangi bir G / Ç içeren) bir kullanıcı işlemi böyle görünecektir.
reirab

6

Sabit CPU kullanımı ~% 4 olan (toplam kullanılabilir CPU'nun 1 / 24'ü) bir süreç arayın. Sürekli olarak tek bir CPU alan kişi bu olmalı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.