'htop' doğru CPU% 'sini göstermez, ancak' top 'gösterir


12

İş mencoderparçacığı = 4 ile çalışırken (dört çekirdekli işlemci üzerinde). Bunun gerçek CPU kullanımını htopgöstermediğini , ancak gösterdiğini fark ettim . top

Görünüşe göre htop sadece bir çekirdek hakkında rapor veriyor . Bu bir hata / htop sınırlaması mı? Burada neler oluyor?

İçin başka kayıt bulunmaktadır mencoder gösterilmesini psveya htopveya top. % 100'ün 1 çekirdeğin maksimize edildiği anlamına geldiğini varsayıyorum , ancak bu bile bana garip geliyor; diğer çekirdekler ne olacak?

Güncelleme: "Sistem Monitörü" çıkışı eklendi

                  PID   %CPU   COMMAND                    
           "top"  1869   220   mencoder                 
          "htop"  1869    95   mencoder -noodml /media/...  
"System Monitor"  1869   220   mencoder

Htop için hangi bayrakları kullanıyorsun?
Eylül332

sep332 ... Ben sadece "htop" çalıştırın ... bu yüzden varsayılanlar ne olursa olsun bir durumdur.
Peter.O

Bingo! sep332 .. bir cevap ver ve ben çözüldü işaretleyeceğim .. Varsayılanlarıma bakmama izin ver .... "H" "Kullanıcı konularını gizle " için bir geçiş anahtarı ... Her şey başarısız olduğunda " Bilgi yardımını okuyun ", ancak bazen doğru directonda kullanışlı bir ipucu daha fazla yardımcı olur .. Teşekkürler.
Peter.O

@ Peter.O: Yanlışlıkla indirildi (fare dokunmatik yüzeyi!). Yayınınızı düzenlerseniz iptal edeceğim.
SabreWolfy

Yanıtlar:


24

Kendiniz söylediğiniz gibi, Hkullanıcı konularını göstermek için vurabilirsiniz .

Sadece ileride başvurmak için (ve eğlence için), CPU kullanımını hesaplayalım!

Biraz arka plan:

Modern bir işletim sisteminde bir Zamanlayıcı vardır. Tüm Süreçlerin ve iş parçacıklarının hesaplama süresinde adil bir pay almasını sağlamayı amaçlamaktadır. Çok fazla zamanlamaya girmeyeceğim (gerçekten karmaşık). Ama sonunda çalışma kuyruğu denilen bir şey var . Bu, tüm işlemlerin tüm talimatlarının, sıralarının yürütülmesini beklemek için sıralandığı yerdir.

Herhangi bir işlem, onun "görevlerini" çalışma kuyruğuna koyar ve işlemci hazır olduğunda, onları çıkarır ve yürütür. Örneğin bir program uyku durumuna geçtiğinde, kendini çalışma kuyruğundan kaldırır ve tekrar çalışmaya hazır olduğunda "satırın sonuna" döner.

Bu kuyruğa göre sıralama, işlemlerin Önceliği ile ilgilidir ("iyi değer" olarak da adlandırılır - yani, sistem kaynakları hakkında iyi bir işlemdir ).

Sıra uzunluğu belirleyen Yükü sistemi. Örneğin 2.5 yükü, CPU'nun gerçek zamanlı olarak başa çıkabileceği her talimat için 2.5 talimat olduğu anlamına gelir .

Bu arada, Linux'ta bu yük 10ms aralıklarla hesaplanır (varsayılan olarak).

Şimdi CPU kullanımının Yüzde değerlerine bakalım:

İki saatinizt olduğunu düşünün, biri denir ve gerçek zamanı temsil eder . Her saniye için bir saniye ölçer. Dediğimiz diğer saat c. Yalnızca yapılacak işlem varsa çalışır. Bu, yalnızca bir işlem bir şey hesapladığında saatin çalıştığı anlamına gelir. Buna CPU zamanı da denir. Sistemdeki her süreç bunlardan birini 'elde etti'.

İşlemci kullanımı artık tek bir işlem için hesaplanabilir:

U = c / t = 0.5s / 1s = 0.5

veya tüm işlemler için:

alternatif metin

Çok çekirdekli bir makinede, bu elbette 3,9 değerine neden olabilir, çünkü CPU mükemmel kullanılırsa her saniye dört saniye değerinde hesaplama hesaplayabilir.

Wikipedia bu örneği sağlar:

6-CPU UNIX makinesinde çalışan bir yazılım uygulaması, kullanıcı gereksinimlerini karşılamak için üç UNIX işlemi oluşturur. Bu üç işlemin her biri iki iş parçacığı oluşturur. Yazılım uygulamasının çalışması, uygulama için oluşturulan 6 bağımsız yürütme iş parçacığına eşit olarak dağıtılır. Kaynaklar için herhangi bir bekleme söz konusu değilse, Toplam CPU süresinin Geçen gerçek zamanın altı katı olması beklenir.

İşte bunu yapan küçük bir python snippet'i

>>> import time
>>> t = time.time()
>>> c = time.clock()
>>> # the next line will take a while to compute
>>> tuple(tuple(i**0.2 for i in range(600)) for i in range(6000))
>>> print (time.clock() / (time.time() - t)) * 100, "%"
66.9384021612 %

Mükemmel bir dünyada, sistem yükünün 100 - 66.93 =% 33,1 olduğunu çıkarabilirsiniz. (Ama gerçekte bu, G / Ç beklemesi, zamanlama verimsizlikleri ve benzeri gibi karmaşık şeyler nedeniyle yanlış olurdu)

Yükün aksine , bu hesaplamalar her zaman 0 ile işlemci sayısı arasında, yani% 0 ile 1 veya% 0 ile 100 arasında bir değer ile sonuçlanır. Artık% 100 işlemci kullanan,% 100 işlemci kullanan bir makine ile bir milyon görevi çalıştıran bir makine arasında,% 100 gibi herhangi bir işte neredeyse hiç iş yapmadan ayrım yapmanın bir yolu yok. Örneğin, birçok bilgisayarda birçok işlemi dengelemeye çalışıyorsanız, cpu kullanımı işe yaramaz. Yük orada istediğiniz şeydir.

Şimdi gerçekte, bu işlem sürelerinden birden fazla var. Örneğin G / Ç'de bekleyen bir tane var. Böylece G / Ç kaynak kullanımını da hesaplayabilirsiniz.

Bu, orijinal soru ile ilgili yardımcı olmayabilir, ancak umarım ilginçtir. :)


Belirsizlik değerlerini gerçekten eklemeliydim, çünkü bu basit yöntemi kullanarak hesaplama muhtemelen% ± 1 oranında kapalı olacak, ancak herkesi çok fazla sıkmak istemedim .
Stefano Palazzo

Ders için teşekkürler. Bunların çoğunu biliyordum, ancak birkaç şey öğrendiklerimden daha spesifikti.
NightwishFan
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.