SORU
12 EYLÜL 2012, ÇARŞAMBA


Linux ölçmek zaman vs vs vs clock_gettime saat gettimeofday getrusage?

Arasında dört zamanlama fonksiyonları, getrusage, clock_gettime, clock, gettimeofday anlamak istiyorum açıkçası nasıl uygulandığını ve ne onların dönüş değerleri için bilmek hangi durum için kullanılır.

İlk işlevleri dönen sınıflandırmak için ihtiyacımız varduvar saati değerlerifonksiyonları dönen karşılaştırınbir işlem veya iş parçacığı değerleri. gettimeofday duvar saati clock_gettime değerini döndürür duvar-saat değeri döndürüryabir işlem veya iş parçacığı Clock parametre aktarılırsa bağlı olarak değerler. getrusage clock süreç değerleri döndürür.

İkinci soru da bu işlevleri uygulanmasına ve sonuç olarak, onların doğruluk. Hangi donanım veya yazılım mekanizması bu işlevleri kullanın.

getrusage sadece çekirdek onay (genellikle 1ms uzun) kullanan ve sonuç ms daha doğru olabilir gibi görünüyor. Doğru mudur? Sonra getimeofday işlevi en doğru temel donanım kullanılabilir gibi görünüyor. Sonuç olarak doğruluğu genellikle mikrosaniye (API nedeniyle daha fazla olamaz) Yeni Donanım. Ne hakkında konuşmak"", ne demek? yaklaşım clock_gettime, API nanosaniyede ile ilgili ise, temel donanım izin veriyorsa çok doğru olması mümkün değil bunun anlamı nedir? Ne monotonicity?

Başka fonksiyonları var mı?

CEVAP
18 EYLÜL 2012, Salı


Bu sorun , birkaç farklı zaman fonksiyonları C ve C mevcut olduğunu ve bunların bazı uygulamaları arasındaki davranış değişir. Ayrıca yarım cevaplar etrafında yüzen bir yeri vardır. Özellikleri ile birlikte saat fonksiyonları bir listesini derlemek soruya düzgün cevap verir. Başlar ilgili Özellikler aradığımız şey soracağım. Post bakıyor öneriyorum

  • Ne Zaman Saat ile ölçülür? (gerçek, kullanıcı, sistem, ya da, umarım, duvar saati, değil mi?)
  • Saat hassasiyeti nedir? (ms, us, ya da daha hızlı?)
  • Ne kadar zaman saatin etrafına sarın mıdır? Ya da orada bir mekanizma bunu önlemek için?
  • Saat monoton ya da sistem saati değişiklikleri ile (NTP), saat dilimi, Yaz Saati uygulaması, kullanıcı tarafından, vb.) değişir mi?
  • Nasıl yukarıdaki uygulamaları arasında değişiyor?
  • Belirli bir işlevi olmayan, standart, vb kullanılmıyor.?

Önce başlangıç listesinden isterim işaret eden duvar saati zaman nadiren doğru zamanda kullanmak, Oysa bu değişikliklerle saat dilimi değişiklikleri, gün ışığından yararlanma saati değişiklikleri veya duvar saati senkronize NTP tarafından. Bunların hiçbiri eğer kriter performans için zamanlama olayları veya zaman kullanıyorsanız iyi. Sadece adını söylediği için gerçekten çok iyi, duvarda bir saat (veya masaüstü).

Şimdiye kadar Linux saatler için bulduk ve OS X verdim:

  • time() OS duvar saati, saniye hassasiyetle verir.
  • clock() kullanıcı ve sistem saati toplamı dönmek gibi görünüyor. Bir zamanlar bu döngüleri CPU zamanı olması gerekiyordu, ama modern standartlara CLOCKS_PER_SEC 1000000, en fazla 1 US Olası hassas vermeyi gerektirir. Benim sistem üzerinde hassasiyetle 1 US gerçekten. Bu saat dışında en fazla bir kez (bu genellikle çok uzun 1 MHz saat için değil ~2^32 kene, sonra olur) tamamladı.
  • clock_gettime(CLOCK_MONOTONIC, ...) nanosaniye çözünürlük sağlar, monoton. Bence 'saniye' ve 'ayrı ayrı 32-bit sayaçlarını her depolanır. nanosaniye Böylece, herhangi bir wrap-around uptime sonra birçok düzine yıl meydana gelirdi. Bu çok iyi bir saat gibi görünüyor, ama ne yazık ki OS X üzerinde henüz mevcut değil
  • getrusage() benim durum için en iyi seçenek olduğu ortaya çıktı. Kullanıcı ve sistem kez ayrı ayrı rapor eder ve etrafında kaydırma değil. Benim sistem üzerinde hassasiyetle 1 US, ama ben de bir Linux sistemi (Red Hat GCC 4.1.2 ile 4.1.2-48) üzerinde test edilmiş ve hassas sadece 1 ms.
  • gettimeofday() (nominal) açıklamalardan da hassasiyetle duvar saati döndürür. Benim sistemde bu saat açıklamalardan da hassasiyet var gibi görünüyor, ama bu "the resolution of the system clock is hardware dependent" çünkü bu, garanti edilmez.
  • mach_absolute_time() Bu gerçekten ns çözünürlük veriyor benim sistemde OS X (ns) çok yüksek çözünürlük zamanlama için bir seçenek vardır. Bu saat sarar prensip olarak, ancak ns 64-bit işaretsiz tamsayı kullanarak saklama, sarma etrafında uygulamada sorun olmamalı. Taşınabilirlik sorgulanabilir.
  • Linux ve OS ns hassasiyeti elde etmek için OS üzerinde derlenmiş Linux, Mach bir zamanlayıcı üzerinde derlenmiş clock_gettime kullanan I wrote a hybrid function this snippet göre X, X tuşlarına basın

Yukarıdakilerin hepsi burada aksi belirtilmediği haricinde Linux ve OS X var. "" Yukarıdaki Elma çalışan bir OS X GCC 4.7.2 ile 10.8.3 gelen MacPorts. sistemim

Son olarak, burada yukarıdaki bağlantıları ek olarak yararlı bulduğum bir referans listesi
http://blog.habets.pp.se/2010/09/gettimeofday-should-never-be-used-to-measure-time
How to measure the ACTUAL execution time of a C program under Linux?
http://digitalsandwich.com/archives/27-benchmarking-misconceptions-microtime-vs-getrusage.html
http://www.unix.com/hp-ux/38937-getrusage.html

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dave Wallace

    Dave Wallace

    27 Kasım 2007
  • grickle

    grickle

    22 AĞUSTOS 2006
  • UberFacts

    UberFacts

    26 EKİM 2013