Hi !

This is my first a littl more clean attemt to "measure" the precision that
rtl will reach on a system , the idea here is to get the system jitter not
in absolute terms (measurement with an osziloscope on some pin) but as 
rtl sees it. it was basicaly done by having the folowing construct in a 
periodic thread.

rt_task outline:
----------------

---snip---
   for(vec_size=1;vec_size<=5;vec_size++){
      min_diff[vec_size] = 2000000000;
      max_diff[vec_size] = -2000000000;
   }
   for (i = 0; i < ntests; i++) {
      ++cnt;
      pthread_wait_np();
      end[0] = clock_gethrtime(CLOCK_UST);
      end[1] = clock_gethrtime(CLOCK_UST);
      end[2] = clock_gethrtime(CLOCK_UST);
      end[3] = clock_gethrtime(CLOCK_UST);
      end[4] = clock_gethrtime(CLOCK_UST);
      end[5] = clock_gethrtime(CLOCK_UST);
      diff[1] = end[1]-begin;
      diff[2] = end[2]-end[1];
      diff[3] = end[3]-end[2];
      diff[4] = end[4]-end[3];
      diff[5] = end[5]-end[4];
      for(vec_size=1;vec_size<=5;vec_size++){
         if (diff[vec_size] < min_diff[vec_size]) {
            min_diff[vec_size] = diff[vec_size];
            }
         if (diff[vec_size] > max_diff[vec_size]) {
            max_diff[vec_size] = diff[vec_size];
            }
      }
   }
     
   for(vec_size=1;vec_size<=5;vec_size++){
      samp.run[vec_size] = min_diff[vec_size];
      samp.jitt[vec_size] = (max_diff[vec_size]-min_diff[vec_size]);
   }

   write (fd_fifo, &samp, sizeof(samp));
---snip---

this is simply the inner loop of rtlinux/examples/measurement/rt_process.c 
modified , the calls to clock_gethrtime(CLOCK_UST) are simply called 
consecutive , and basicaly nothing should realy interrupt them. the inner
loop (ntest) was 500 long .

measurements were done in two cases (more fine-grain and selective measurements
will folow when I have time) , first a low-load measurement running 30 minutes
which coresponds to 3470 samples of the above thread .The system was as 
unloaded as posible (see interrupts below) . The second measurement was done
at a high load-average and with a maximum of interrupt events . The limiting
factor for a longer run than 30 minutes was that I was not willing to 
klick/move the mouse and hammer the keyboard for more than 30 minutes :)
 
low-load measurement:
---------------------

loadaverage of the linux system was between 0.00 and 0.30 .
runtime of the test 30min (approximatly) or 3470 samples (exactly).

interrupts during this lowload measurement:
-------------------------------------------

  0:     172903  RTLinux virtual irq  timer
  1:          0  RTLinux virtual irq  keyboard
  2:          0  RTLinux virtual irq  cascade
  5:        231  RTLinux virtual irq  NE2000
 12:          0  RTLinux virtual irq  PS/2 Mouse
 13:          0  RTLinux virtual irq  fpu
 14:       5182  RTLinux virtual irq  ide0
221:       3440  RTLinux virtual irq  fifo
222:          0  RTLinux virtual irq  RTL-scheduler
223:          0  RTLinux virtual irq  rtl_printf
ERR:          0

I assume that the fifo interrupts where 3470 , because I had 3470 samples in 
my data-file , don't know why proc only saw 3440 , and probably the other 
numbers are to be seen as a good aproximation no more....


jitter between cals:
--------------------

min in all exept 2 cases was 5028 (in two casse 2514) , 
jitter here is max-min.  all loops where of equal length 
(500 calls)

the maximum jitter value was obviously not dependant on when the call was
issued , running five consecutive calls was done only to ensure that there
is now load effect involved (contextswitch or so).

call-number   5         4        3        2        1     jitter (ns) 
             17      1786     2419      912     2146     1677
              6       118       88      203      122     2514
           3066      1236      879     1774      959     2515
             15        18        4       21        6     3352
            357       307       64      549      208     3353
              1         0        0        1        0     4190         
              1         1        1        4        2     4191
              0         0        0        0        1     4192         
              1         0        0        0        0     5028         
              0         0        0        0        1     5029
              0         0        2        1        3    15924
              0         1        1        1        0    16762
              0         1        3        0        2    16763         
              1         1        3        2        3    17601
              0         0        0        0        1    17600         
              0         0        0        1        0    18438
              3         0        0        2        0    18439
              1         0        0        0        0    19276         
              0         0        1        0        0    19277         
              0         1        0        0        0    20114         
              1         0        0        0        0    20115         
              0         0        1        0        0    20953        
              0         0        0        1        0    21791

first conclusion , the maximum shown here is the smales jitter that a 
rtl-thread will show , I guess there is no way to get guarantied lower
values on this hardware.


high-load measurement:
----------------------

load on the linux system was between 6.XX and 9.XX , load was produced by 
multiple calls to "ls -lR /" , "ping -l 1000 broadcast-addr" and 
"cp -r localdir nfs-mounted-dir" . The CPU-usage was close to 100% during 
the entire test (checkt it with top -> nice 0.0% , idle 0.0%-2.0%) .

interrupts during the highload measurement:
-------------------------------------------

  0:     174003  RTLinux virtual irq  timer
  1:      21778  RTLinux virtual irq  keyboard
  2:          0  RTLinux virtual irq  cascade
  5:      40033  RTLinux virtual irq  NE2000
 12:      64659  RTLinux virtual irq  PS/2 Mouse
 13:          0  RTLinux virtual irq  fpu
 14:      84042  RTLinux virtual irq  ide0
221:       3502  RTLinux virtual irq  fifo
222:          0  RTLinux virtual irq  RTL-scheduler
223:          0  RTLinux virtual irq  rtl_printf
ERR:          0

again the same holds true , the interrupt counts are not absolutly correct I 
guess, because the datafile was almost the same size (3484 samples...snipped
of the 14 that where too many).

jitter between cals:
--------------------

min in most cases again was 5028 (in less than 1% min was 1677/2514/3352), 
jitter here is max-min. All loops where of equal length again (500 calls).


call-number   5         4        3        2        1     jitter (ns) 
             16         6       10       12       11     1677
              7         0        0        1        0     2514
            674        13       44        4        8     2515
            602         6        4        1        3     3352
           1501      2831     2785     2807     2756     3353
              0         1        0        3        1     4190
              1         2        2        0        9     4191
              0         0        0        0        2     4192
              0         0        1        0        1     5028
              3         3        2        0        0     5029
              0         1        0        0        1     5030
              0         0        1        0        0     5866
              0         0        1        0        1     5867
              1         0        0        0        0    12571
              0         0        1        0        0    13410
              1         0        0        0        0    14248
              1         2        0        3        1    15086
              0         1        2        1        0    15087
              1         3        4        1        5    15924
              0         2        4        0        3    15925
              6         5        7        6        4    16762
              6         8        6        5        8    16763
              2         0        0        0        0    17599
             13         5       11        9        9    17600
             12        17       20       17       10    17601
              2         0        0        0        0    18437
             16        14       11        6        9    18438
             28        27       31       25       25    18439
              1         0        0        0        0    19275
             15        10        9       13       15    19276
             42        42       51       54       36    19277
              1         0        0        0        0    20113
             23        13        7        8        7    20114
             51        69       66       72       83    20115
             18         3        1        1        3    20952
             72        75       89       79       79    20953
              7         0        0        0        0    21790
             53        64       60       55       79    21791
              9         4        6        9       10    21792
             11         0        0        0        0    22628
             44        53       49       49       77    22629
             13        11       11       21       11    22630
              6         0        0        0        0    23466
             50        36       36       39       69    23467
             14        11       21       19       16    23468
              4         0        0        0        0    24304
             24        30       32       41       34    24305
             19         9       23       23       20    24306
              4         0        0        0        0    25142
             43        22       19       24       24    25143
             15        20        0        0        0    25144
              3         0        0        0        0    25980
             10        18       10       12        7    25981
             14        19       11       10        5    25982
              4         5        1        1        1    26819
              5         8        1        7        0    26820
              1         0        0        0        0    27657
              1         1        0        3        1    27658

there is a hole between 3 and 15us which I have no explenation for , but
maby I would have to take much longer samples to realy be able to say 
anything sensible about this.

interpretation attemt:
----------------------

the jitter is "Modulo 838" wich is the 8254 timmers-tick length in ns.
statistic correlation on the consecutive calls is good, event-corelation
is low to non-existent . External load clearly has an influence
comparing maxima , it shows that the interrupts or periferal 
computer-components probably are NOT the cause of this jitter.
even with high load and high interrupt-rates on all connected
devices + CPU the maximum jitter "only" was increased by 27%, 
although there is also a shift towards higher average values, wich 
is not of so great importance because the criteria here is WORST
not AVERAGE case.

one conclusion that I am uncirtain about but I will put it here for discusion
is that since the low-load measurement shown a time of 5028ns for 
clock_gethrtime(CLOCK_UST) (with the noted two exeptions of 17350 samples) 
and the high-load measurement showd LOWER values in 40 cases , I assume 
that the time-precision of clock_gethrtime(CLOCK_UST) is limited to something
like +/- 2*838ns (again 838 ns being a tick of the 8254). could someone 
comment on this assumtion ?? 

a further conclusion is that rtlinux obviously is quite stable concerning 
worst-case guarantee under high system/interrupt-load.

hardware:
---------

   486 75MHz (genuine intel)
   OS SuSE 6.2
   Kernel 2.3.35
   RTL V3.0.pre1
   24MB-RAM 
   IDE-HD (Segate 4.3MB)
   ISA/VESA BUS no PCI !

any suggestion on what I'm measuring here and how it could be inproved are 
very wellcomed.


thx
nmg
*------------------------------------------------------------------------*
*THERE           {__}                         Universitaet Wien          *
*IS              oo )                      Inst. f. Materialphysik       *
*LIFE           O_   `_-------.              Mc  Guire  Nicholas         *
*IN               (-.         ,-\                                        *
*THE               || )---<  )            [EMAIL PROTECTED] *
*NET !             |||     | |          privat: [EMAIL PROTECTED]         *
*                                     [EMAIL PROTECTED]   *
*------------------------------------------------------------------------*
*ASCII-COW (C) 1996-2001 [EMAIL PROTECTED]                                *
*------------------------------------------------------------------------*
--- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
----
For more information on Real-Time Linux see:
http://www.rtlinux.org/~rtlinux/

Reply via email to