UNIX'te duvar saati, kullanıcı-cpu-zamanı ve sistem-cpu-zamanı nedir?


144

İsimlere dayanarak bir tahminde bulunabilirim, ancak özellikle UNIX'te duvar saati, kullanıcı-cpu-zamanı ve sistem-cpu-zamanı nedir?

User-cpu time, kullanıcı kodunu yürütmek için harcanan süre mi, kernel-cpu time ise ayrıcalıklı işlemlerin gerekliliği nedeniyle çekirdekte harcanan süre mi (diske G / Ç gibi)?

Bu ölçüm hangi zaman birimindedir?

Ve duvar saati zamanı gerçekten işlemin CPU'da geçirdiği saniye sayısı mı yoksa ad sadece yanıltıcı mı?


Yanıtlar:


143

Duvar saati süresi, duvardaki bir saatin (veya eldeki bir kronometrenin) işlemin başlangıcı ile 'şimdi' arasında geçen süreyi ölçmesidir.

Kullanıcı-cpu süresi ve sistem-cpu süresi, söylediğiniz gibi oldukça fazladır - kullanıcı kodunda harcanan zaman ve çekirdek kodunda harcanan zaman.

Birimler saniyedir (ve sonraki saniye, mikrosaniye veya nanosaniye olabilir).

Duvar saati süresi, işlemin CPU üzerinde geçirdiği saniye sayısı değildir; CPU'yu açmayı beklemek için harcanan zaman da dahil olmak üzere geçen süredir (diğer işlemler çalışırken).


16
Bu, duvar saati süresinin her zaman işlemci süresinden daha uzun olacağı anlamına mı geliyor?
Pacerier

36
@Pacerier: tek çekirdekli bir makinede, evet, ancak çok çekirdekli makineler ve çok iş parçacıklı programlar geçen saniye başına 1'den fazla CPU kullanabilir.
Jonathan Leffler

@JonathanLeffler cevap için teşekkür ederim, geçen nanosaniye sayısını almak istedim ama formülü kullanarak CPU zamanını CPUtime = #clock_cycles / clock_ratehesaplamak geçen süreyi hesaplamakla aynı olamaz. CPU zamanından geçen zamanı alıp alamayacağımı biliyor musunuz?
Bionix1441

2
@ Bionix1441: Birkaç nedenden dolayı CPU zamanından geçen zamanı türetemezsiniz. Birincisi, bir işlem keyfi dönemler için herhangi bir CPU zamanı tüketmeyen, boşta olabilir (örneğin, bir istemcinin ağ üzerinden bağlanmasını bekleyen bir daemon işlemi), bu nedenle geçen süre boyunca günlerce hiçbir şey yapamaz . İkincisi, çalışıyorsa, birden fazla iş parçacığı olabilir ve örneğin 4 iş parçacığı varsa ve sistemde 4 veya daha fazla çekirdek varsa, geçen sürenin saniyede 4 CPU saniyelik harcanan çabayı toplayabilir. Bunlar, kullanabileceğiniz basit (hatta karmaşık) bir formülün olmadığını gösterir.
Jonathan Leffler

1
@Catbuilts: Unix çekirdeğinin kullanıcı programlarından ayrı çalıştığını biliyor musunuz? Programınız bir sistem çağrısı yaptığında (örneğin read()veya getpid()), çekirdek programınız adına kod yürütür. Çekirdek ayrıca önleyici çoklu görevler yürütür, böylece diğer programlar da sırayla çalışır ve sistemin sorunsuz çalışmasını sağlamak için bazı genel temizlik işleri yapar. Bu kod 'çekirdek kodu'nda (' çekirdek modunda ') yürütülür. Bu, yazdığınız koddan ve çalıştırdığınız kullanıcı kitaplıklarından (sistem C kitaplığı dahil) farklıdır.
Jonathan Leffler

36

Duvar saati süresi: bilgisayarın dış dünyadaki zamana uyması gereken dahili saatine göre geçen süre. Bunun CPU kullanımı ile ilgisi yoktur; referans için verilmiştir.

Kullanıcı CPU zamanı ve sistem zamanı: tam olarak ne düşündüğünüzü. I içerir Sistem aramaları, G / Ç gibi aramaları read, writeçekirdek kodu ve çalıştıracak biçimde atlama yürütür, vb.

Duvar saati zamanı <CPU zamanı ise, paralel olarak bir program yürütüyorsunuz. Duvar saati zamanı> CPU zamanı ise, disk, ağ veya diğer cihazları bekliyorsunuz.

Hepsi SI başına saniye cinsinden ölçülür .


7

Duvar saati süresi tam olarak söylediği şeydir, duvarınızdaki saat (veya kol saati) tarafından ölçülen süre

Kullanıcı cpu süresi "kullanıcı arazisinde" harcanan zamandır, yani çekirdek olmayan süreçlerde harcanan zamandır

Sistem cpu süresi çekirdekte harcanan zamandır, genellikle sistem çağrılarına hizmet vermek için harcanan zamandır.


7
time [WHAT-EVER-COMMAND]

real    7m2.444s
user    76m14.607s
sys 2m29.432s

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24

gerçek veya duvar saati

gerçek 7m2.444s

24 çekirdekli işlemcili bir sistemde, bu cmd / işlemin tamamlanması 7 dakika sürdü. Bu, verilen tüm çekirdekler ile en olası paralellik kullanarak.

kullanıcı

kullanıcı 76m14.607s

Cmd / işlemi bu kadar fazla işlemci zamanı kullanmıştır. Başka bir deyişle, tek çekirdekli CPU'lu makinede, gerçek ve kullanıcı neredeyse eşit olacaktır, bu yüzden aynı komutun tamamlanması ~ 76 dakika sürecektir.

sys

sys 2m29.432s

Bu, çekirdek değiştirme, kaynak tahsisi vb.

Not: Örnekte komutunuzun paralellik / iş parçacıkları kullanıldığı varsayılmaktadır.

Ayrıntılı kılavuz sayfası: https://linux.die.net/man/1/time


Gönderdiğiniz zamanlar göz önüne alındığında, paralelliğin kabaca yarısı değil mi? (sadece bunu (user + sys) / realtemsil etmek için im .
dtc
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.