Mereni casu v microsekundach

Michal Dobes dobes na tesnet.cz
Úterý Říjen 8 11:08:46 CEST 2002


Dalibor Toman wrote:
> > Puvodnimu tazateli se da jen doporucit, ze pokud chce to mereni
> > mit jen trochu presne a ma to mit prakticky smysl, tak bude
> > muset pouzit nejaky HW citac. At uz samostatnou kartu nebo
> > by mozna sel vyuzit nejaky citac onboard v 8253 a spol.
> > A rozhodne si nedelat iluze o presnosti techto normalnich
> > citacu. Chyba 50 us na 1 s je celkem bezna (aspon takto mi
> > zrovna vyvchazi prumerna chyba z 16 ks procesorovych karet
> > IEI Rocky-3705EV).
> 
> to uz rovnou muze pouzit counter cyklu CPU (pokud je predpoklad,
> ze aplikace pobezi na nejakem ne uplne starem Intel CPU) dostupny via

Nekde od Pentium nebo Pentium MMX vyse, ze?

> RDTSC asm instrukci - nejjemnejsi citac casu v PC.
> Samozrejme je nejprve nutne zjistit hodinovou frekvenci cyklu CPU...

Tak o presnosti tohodle citace si nedelejte velke iluze.
Zvlaste v pripade, ze v BIOSu je nekde zapnuta funkce spread spectrum,
kdy brouk zodpovedny za generovani vychozich frekvenci se snazi
plavat v nejakem intervalu hodnot.
Zmena frekvence se pohybuje dle typu cipsetu bezne od 0.5 do 2 promile.
A i kdyz toto je vypnuto, tak stabilita bude nic moc, kdysi
jsem se na to dival a zadne zazraky tam nebyly, zase to budou
desitky mikrosekund, ale v podsate shodne s tim 8253, co je 
dneska take v cipsetech zadratovan.

Puvodni tazatel si sam musi rozmyslet, jak presne, jak dlouhe
a jak casto chce merit nejake intervaly.
Pokud se budeme stale bavit v obasti bezne user space ulohy, tak
se stejne neda absolutne nic zarucit. Lepsi reseni je modul do
kernelu, pripadne nasazeni nejakeho real-time doplnku.

Stejne u vetsiny pripadu bede uz prvotni chyba v tom, jak se ta
externi udalost dostane k vam do programu. Rekneme, ze to bude tahat
nekde za preruseni, nejjednoduseji na LPT portu nebo stavove signaly
na RS-232. Jen cas, nez se zavola vase obsluha preruseni muze byt
snadno desitky mikrosekund. Na nekterych cipsetech dokaze takova 
"bezna" aplikace, jako je: 
while(1) printf{"XXXXXXXXXXXXXXXXXX\n");
rozhodit reakce na preruseni v casech i stovek mikrosekund
(samozrejme i na hard RT prostredi na bazi PC a je jedno, zda
RT-Linux, RT-AI nebo komercni veci jako QNX a dalsi).

	Majkl


Další informace o konferenci Linux