Neden gerçek zaman kullanıcı zamanından daha düşük olabilir?


31

Video dosyalarını dönüştüren bir betiğim var ve onu test verilerinde sunucuda çalıştırıyorum ve zamanını ölçtüm time. Sonuçta gördüm:

real    2m48.326s
user    6m57.498s
sys     0m3.120s

Neden gerçek zaman kullanıcı zamanından daha düşük? Bunun çoklu okuma ile herhangi bir bağlantısı var mı? Ya da başka?

Düzenleme: Ve bence bu senaryo yaklaşık 2m48'lerde yayınlanıyordu.


EDIT'iniz - bu mükemmel bir anlam ifade ediyor, çünkü realzaman aşağıda açıklandığı gibi duvar saatidir (yani bir kronometremiz varsa neyi ölçeceğimizi)
Levon

Yanıtlar:


42

Gösterdiğiniz çıktı biraz tuhaf, çünkü gerçek zaman genellikle diğer ikisinden daha büyük olacaktır.

  • Realzaman duvar saati zamanı. (bir kronometre ile ne ölçebiliriz)
  • User zaman, süreç içinde kullanıcı modunda harcanan zamanın miktarıdır.
  • Sys İşlemdeki çekirdeğin CPU harcaması.

Bu yüzden eğer iş aynı anda birkaç işlemci tarafından yapılıyorsa, CPU zamanı geçen duvar saati zamanından daha yüksek olur.

Bu eşzamanlı / çok iş parçacıklı / paralel bir uygulama türü miydi?

Örnek olarak, time find .emir verdiğimde Linux sistemime girdiğim şey budur . Beklendiği gibi geçen realzaman bu tek kullanıcı / tek çekirdekli işlemdeki diğerlerinden çok daha büyük.

real    0m5.231s
user    0m0.072s
sys     0m0.088s

Temel kural:

  • real <user: İşlem CPU'ya bağlıdır ve birden fazla çekirdek / CPU üzerinde paralel yürütme avantajından yararlanır.
  • Gerçek kullanıcı: İşlem CPU'ya bağlıdır ve paralel exeuction işleminden hiçbir avantaj sağlamaz.
  • real> user: İşlem G / Ç sınırlıdır. Birden fazla çekirdek üzerinde yürütme çok az veya hiç avantaj sağlamaz.

avconvÇok parçalı olup olmadığını bilmiyorum . Olabilir. avconvYeni nesildir ffmpeg. 7 kısa flv dosyasını dönüştürüyordum (her biri yaklaşık 20 saniye).
kobylecki

gerçek zaman genellikle diğer ikisinden daha büyük olurdu - ama diğer durum hakkında soruyorum
kobylecki

4
Bu açıklama doğru. Bu işlem 4 çekirdekte çalıştırılmış gibi görünüyor. Ayrıca bkz. Real / sys / user zamanının nasıl hesaplandığı konusunda daha fazla bilgi için hiper-diş açıklamam . Tam olarak ilişkili değil, ancak kavramlar aynı.
bahamat

@kobylecki real time diğerlerinden daha az çünkü avconv çoklu çekirdeklerde çalışıyor gibi görünüyor. Bu yazılımı ve ne şekilde çalıştığını bilmediğim için% 100 talepte bulunmak istemiyorum, ancak mevcut bilgilere (3 satırlık zaman ölçümleri ve bilgi temelinde) benziyor: )
Levon

Gelen findörnek usrçoğu zaman kesmeleri sırasında tükendiği için değeri bile çok daha düşüktür findolurdu (üzgünüm ingilizce zamanları usta yoksa) o kaldı düşük olurdu okuyuculu.
Emmanuel,

13

Sadece ne söylendiğini göstermek için, bazı hesaplamalar yapan iki dişli işlemle.

/*a.c/*
    #include <pthread.h>
    static void  * dosomething () {
        unsigned long a,b=1;
        for (a=1000000000; a>0; a--) b*=3;
        return NULL;
    }
    main () {
        pthread_t one, two;
        pthread_create(&one,NULL, dosomething, NULL);
        pthread_create(&two,NULL, dosomething, NULL);
        pthread_join (one, NULL);
        pthread_join (two, NULL);
    }
/* end of a.c */

derleme

gcc a.c -lpthread

(Bu sadece göstermek içindir, gerçek hayatta -D_REENTRANT bayrağını eklemeliydim)

$ time ./a.out

real    0m7.415s
user    0m13.105s
sys     0m0.032s

(Times, iki yavaş çekirdeğe sahip bir Intel Atom'dadır :))

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.