----- Den 10 aug 2020, på kl 9:52, Petr Červenka [email protected] skrev: > Hello.
> The problem is only when I use Xenomai linking flags and only with > thestart time. Period is OK. > That aprox. 16s time delay can be "compensated" by substracting of any > number of seconds from the start time. You could try using CLOCK_REALTIME or CLOCK_HOST_REALTIME instead of CLOCK_MONOTONIC. I use timerfd and similar heuristics without issues afaik. >From the top of my head I don't recall exactly how Xenomai timers correspond >to Linux timers but you may have an issue if you check your starting time a >non RT thread and use that value in a RT thread, depending on your choice of >timer. Check out: https://gitlab.denx.de/Xenomai/xenomai/-/wikis/Porting_To_Xenomai_POSIX I have had some issues with time-keeping of my machines and I had to do a bit of manual tuning for it to work properly (talking 0.x pct drifts but also a bit of a offset). For debugging I used the following: * Hard coding freq using boot time kernel argument: "clocksource=tsc tsc=reliable xenomai.clockfreq=2807909955" * Using (in my case ) "adjtimex -f 2080674" to adjust the time-keeping scaling * "clocktest" from Xenomai test-suite. Right now I have (for a setting tuned to some machine and then run on another) CPU ToD offset [us] ToD drift [us/s] warps max delta [us] --- -------------------- ---------------- ---------- -------------- 0 110881217.1 316239.964 0 0.0 1 110881224.7 316239.943 0 0.0 2 110881216.8 316239.928 0 0.0 3 110881217.4 316239.921 0 0.0 Which is about 110s and drifting 0.3s per second. Regards Per Öberg > // Create timer > timer_fd = timerfd_create(CLOCK_MONOTONIC, 0); > // Get current time > struct timespec start; > clock_gettime(CLOCK_MONOTONIC, &start); > // Set periodic > struct itimerspec timer_conf; > memset(&timer_conf, 0, sizeof (timer_conf)); > timer_conf.it_value = timespec_add(start, -15 * NANOSEC_PER_SEC); > // compensation of the delay > ... > timerfd_settime(timer_fd, TFD_TIMER_ABSTIME, &timer_conf, NULL); > There is strange unexpected difference/time shift between product of > clock_gettime and timerfd_settime. Only with Xenomai posix wrappers. > Best regards > Petr Cervenka > Dne 10.08.2020 v 8:45 Per Oberg napsal(a): > > ----- Den 7 aug 2020, på kl 17:12, xenomai [email protected] skrev: > >> Hello. > >> I have created small example of periodic task in posix. > >> If I compile it without xenomai it works fine. > >> When I add Xenomai linking flags, the first tick of periodic task take > >> around > >> 16s. After that it continues as it should. > >> Used clock type for timer_fd is CLOCK_MONOTONIC. The example should in > >> attachment. > >> Do you have any suggestions? >> Just had a extremely quick look at it. Are you sure you don't get any >> rounding > > errors when doing your period arithmetics ? > >> Best regards > >> -------------- next part -------------- > >> A non-text attachment was scrubbed... > >> Name: timer_test.cpp > >> Type: text/x-c++src > >> Size: 4351 bytes > >> Desc: timer_test.cpp > >> URL: > >> <http://xenomai.org/pipermail/xenomai/attachments/20200807/d4203f59/attachment.cpp> > > Per Öberg
