[Xenomai] Loose determinism when reading pcap and sending as raw ethernet packets

Gilles Chanteperdrix gilles.chanteperdrix at xenomai.org
Thu Dec 10 16:01:10 CET 2015

On Thu, Dec 10, 2015 at 01:20:47PM +0000, Umair Ali wrote:
> Hi Gilles,


> Thanks for understanding my problem.
> >- for a program to run in primary mode only, pthread_setschedparam
> should be called with a priority higher than 1 for the SCHED_FIFO
> (or SCHED_RR) policy;
> I have been doing the same already but i did not copy that part of code in the email.
> >- when you call a function which returns a value, like send or
> nanosleep, you should always check the return value for errors;
> - if you want to send a message on average every 5us then
> nanosleep(5us) is not what you should be using, you should be using
> clock_nanosleep with an absolute date, or the easier but less
> portable timerfd;
> I have used the clock_nanosleep with absolute time, but i could
> not find the absolute date. With clock_nanosleep i have found the
> same problem as described in the last email.

You compute the next absolute date. But the point is to add 5us to
the absolute date, instead of using now + 5us, so that the packets
are really sent every 5us on average. This should not solve the
problem you have, only ensure that the messages are sent every 5us
on average.

> I have looked the
> file timerfd.h. What i have understand is that by using timerfd i
> will create the dedicated timer with unique ID and then use the ID
> to get the time by using timerfd_gettime(). The time is added with
> amount of delay and passed to clock_nanosleep() function to
> achieve the required sleep time period. Am i doing it right with
> timerfd?

With timerfd, you would set up the timer with timerfd_settime() to
tick every 5us, then the read() system call to wait for the timer
next expiration.

> >  what you observe is the jitter, you can measure the timer
> interrupt jitter with the "latency" test, but I bet that maybe the
> latency may be higher than 5us;
> - if you really really need to reduce the jitter, then using kernel
> timers instead of sleeping in a user-space thread is recommended,
> Yes, you are right that what i have observed is the jitter. I have
> gone through the links which you have provided me in the last
> email. I am building my application using POSIX skin. In the
> links, they have used the rtdm_timer_start(). Now my question is
> that can i use the rtdm functions in the application compiling
> with posix skin, if yes then how. Do i have to change the skin for
> comilation in order to use the rtdm functions. Please refer me
> some guide for using the Xenomai Kernel timers with posix skin in
> order to avoid the jitter. Last thing do i need to made a kernel
> module in order to use the kernel timers. I am confused. Please
> guide me.

If you want to use kernel-space, you need to write a driver, running
in kernel spaces, and drivers use the RTDM API. The POSIX API is for
the application.


More information about the Xenomai mailing list