[etherlab-users] Performance rating of jitter on PC System

Sebastien Blanchet blanchet at iram.fr
Fri May 31 12:36:06 CEST 2013


Hi Marcel,

In my opinion a 70 us jitter is a very good number.

I have run some tests in November 2011. It was different from you, because I 
measured the whole chain latency and not only the PC performance.
Indeed, I wondered how many time is required to trigger an action after reading 
an event.

So my test was:
- Send a square signal on an ADC and when reproduce the signal with a DAC.

Hardware:
- PC: DELL Precision 390 (Intel(R) Core(TM)2 CPU 6700  @ 2.66GHz)
- Network card: Realtek RT8139D with native ethercat master 1.5 driver (8139too)
- Ethercat terminal from Beckhoff: EK1100 + EL3102 + EL4132
- Frequency generator + oscilloscope
- OS: Debian 6.0 i386

Results:
* with kernel 2.6.32.11 + rtai-3.8.1
    - maximum latency 200us, maximum jitter 200us

* with kernel 2.6.31.6 + rt-preempt
    - maximum latency 600us, maximum jitter 200us

My conclusion was:
- it does not worth using RTAI and ethercat native network driver below 1KHz.

because  RT-PREEMPT+generic_driver is much easier to use and offer quite similar 
performances for 1ms cycle time.

regards,
--
sebastien



On 05/30/2013 08:56 PM, Marcel Rothgänger wrote:
> Hello everybody,
>
> I have some problems with jitter on the following system:
>
> ASUS P7P55D-E with Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz
> 82574L Gigabit Network Connection with e1000e
> RTL8111/8168B PCI Express Gigabit Ethernet controller with r8169
> 8 GB RAM
>
> Which possible jitter minimum at 250µs cycle time do you expect? What should
> be possible on this system?
>
> As OS I use Ubuntu 10.04.4 and patched the Kernel with RT PREEMPT
> 2.6.31.6-rt19. Both NIC were tried with both native and generic driver (for
> e1000e on another RT Kernel).
>
> The application is the adapted user sample with RT PREEMPT timing. Cycle
> time 250 µs (4 kHz). Abstract below. On the oscilloscope I can see very
> different signal Jitter of 20µs – 70µs. The Jitter depends on system load
> e.g. mouse moving, window moving etc. The ambition is all OS services like
> screensaver, window moving and so on should surge but not my cyclic task.
>
> I am interested in your system hardware configuration, the OS, cycle time
> and of course your jitter. I think it can help to improve our system.
>
> Regards,
> Marcel
>
>
> Maybe the idea of timing and cyclic task below is not the best:
>
>
>      printf("Started.\n");
>
>      clock_gettime(CLOCK_MONOTONIC ,&t);
>
>      /* start after one second */
>          t.tv_sec++;
>
>          while(1) {
>                  /* wait until next shot */
>                  clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &t, NULL);
>
>                  /* do the stuff */
>                  cyclic_task();
>
>                  /* calculate next shot */
>                  t.tv_nsec += interval;
>
>                  while (t.tv_nsec >= NSEC_PER_SEC) {
>                         t.tv_nsec -= NSEC_PER_SEC;
>                          t.tv_sec++;
>                  }
>     }
>
> void cyclic_task()
> {
>      int i;
>
>      // receive process data
>      ecrt_master_receive(master);
>      ecrt_domain_process(domain1);
>
>     blink = !blink;
>     if (counter) {
>          counter--;
>      } else { // do this at 1 Hz
>          counter = FREQUENCY;
>
>          check_master_state();
>      }
>
>      // write process data
>      EC_WRITE_U8(domain1_pd + off_dig_out, blink ? 0x06 : 0x09);
>
>      // send process data
>      ecrt_domain_queue(domain1);
>      ecrt_master_send(master);
> }
>



More information about the Etherlab-users mailing list