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