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

Umair Ali ali.umair at tut.fi
Thu Dec 10 18:25:41 CET 2015


Hello,

> >
> >  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.

As i need to send raw Ethernet packets therefore i am using  rtnet driver for this purpose. Do you mean that i have to write my own driver for ethernet card.  Or should i have to write an rtdm driver that uses rtnet drivers for sending the raw ethernet. Or is there a way i can change the rtnet drivers according to my need. 

Thanks & BR
ali
________________________________________
From: Gilles Chanteperdrix [gilles.chanteperdrix at xenomai.org]
Sent: Thursday, December 10, 2015 5:01 PM
To: Umair Ali
Cc: xenomai at xenomai.org
Subject: Re: [Xenomai] Loose determinism when reading pcap and sending as raw ethernet packets

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

Hi,

>
> 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.

--
                                            Gilles.
https://click-hack.org



More information about the Xenomai mailing list