Hi,
ich spiele zur Zeit ein bisschen mit dem RPi 2 rum, insbesondere gucke
ich was über GPIO an Sampling möglich ist. Dabei ist mir aufgefallen,
dass es Totzeiten gibt. Nicht nur beim GPIO Sampling, sondern generell
beim Polling der BCM Register (also auch beim Timer).
Grundsätzlich kommt man (aus dem User Space) auf ca 10 Mio. Samples/s
(polling, busy loop). Die Totzeiten kann man gut beim Sampling des
Timers (CL0) beobachten. Das angehangene Programm liest den Timer (1us
Auflösung) 100 Mio. Mal und guckt wenn zwei aufeinanderfolgende Werte
mehr als 1us auseinanderliegen. Bspw.
1 | prompt> sudo taskset -c 3 chrt -f 99 ./test
|
2 | time=7.63435s cnt=766 min=5 max=82 avg=10.2755
|
Es gibt also 100 Totzeiten/s die durchschnittlich 10us dauern (die
Totzeiten erfolgen tatsächlich im genauen Abstand von 10ms, was man hier
jedoch nicht sehen kann).
Ich lass dass auf Raspbian laufen, und mir ist bewußt, dass es kein
real-time System ist. Ich bin allerdings neugierig, was genau die
Totzeiten verursacht. Ich spekuliere auf Cache-Faults oder auf
Aktivitäten der GPU auf dem (shared) Bus.
Hat jemand eine Idee, um was es sich hier handelt? Freue mich auf
Rückmeldungen! (Im RPi Forum gab es nur Stille.)
Edit: Spelling