Performance measurements

I did some measurements with regard to real-time performance of QNX4/6 and
interrupt latency. I use a ServoToGo S8 board that generates interrupts at a
certain frequency. My interrupt handler just sends a proxy/pulse to a
message handler. The message handler checks if it is able to keep up by
looking at a sequence number that both interrupt handler and message handler
increase. The message handler runs at priority 63 (QNX6)/31 (QNX4). In QNX4,
Proc32 priority has been decreased to 26. All tests are made with the same
system, AMD K6 500MHz, no sound card or other special hardware except the
ServoToGo board, Photon running.

These are the results I get (maximum frequencies):

  1. No system load (other than what’s usually running in the background, no
    mouse movement)
    QNX4: 33KHz, QNX6: 31KHz

  2. No system load as in 1), but with mouse movement
    QNX4: 33KHz, QNX6: 26KHz

  3. Heavy system load (Several photon graphics output, several “cp” commands
    running)
    QNX4: 3700Hz, QNX6: 2500Hz.

As I believe that the interrupt latency of QNX6 is as good as in QNX4 or
even better, as it was stated a couple of times here in the forum. But it
looks like that the ISR’s take more time in QNX6. Especially mouse
interrupts seem to really have effect.

Is there a difference of the scheduling period in QNX4/6?

Markus

Markus Loffler wrote:

[snip]

As I believe that the interrupt latency of QNX6 is as good as in QNX4 or
even better, as it was stated a couple of times here in the forum. But it
looks like that the ISR’s take more time in QNX6. Especially mouse
interrupts seem to really have effect.

Is there a difference of the scheduling period in QNX4/6?

Scheduling period? If you mean timeslice, it used to be fixed at 50msec
in QNX4, in QNX6 it is 4*ClockPeriod(), AFAIR.

  • igor

Markus Loffler <loffler@ces.clemson.edu> wrote:

I did some measurements with regard to real-time performance of QNX4/6 and
interrupt latency. I use a ServoToGo S8 board that generates interrupts at a
certain frequency. My interrupt handler just sends a proxy/pulse to a
message handler. The message handler checks if it is able to keep up by
looking at a sequence number that both interrupt handler and message handler
increase. The message handler runs at priority 63 (QNX6)/31 (QNX4). In QNX4,
Proc32 priority has been decreased to 26. All tests are made with the same
system, AMD K6 500MHz, no sound card or other special hardware except the
ServoToGo board, Photon running.

Just curious - what priority are you giving the pulse under QNX6? Basically
what are you putting in event.sigev_priority before you do the
InterruptAttachEvent() call.

chris

cdm@qnx.com > “The faster I go, the behinder I get.”

Chris McKillop – Lewis Carroll –
Software Engineer, QSSL
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Actually I did a mistake when typing the numbers in - correct is:
3) Heavy system load (Several photon graphics output, several “cp” commands
running)
QNX4: 12KHz, QNX6: 7KHz.


“Markus Loffler” <loffler@ces.clemson.edu> wrote in message
news:9lufg7$cp2$1@inn.qnx.com

I did some measurements with regard to real-time performance of QNX4/6 and
interrupt latency. I use a ServoToGo S8 board that generates interrupts at
a
certain frequency. My interrupt handler just sends a proxy/pulse to a
message handler. The message handler checks if it is able to keep up by
looking at a sequence number that both interrupt handler and message
handler
increase. The message handler runs at priority 63 (QNX6)/31 (QNX4). In
QNX4,
Proc32 priority has been decreased to 26. All tests are made with the same
system, AMD K6 500MHz, no sound card or other special hardware except the
ServoToGo board, Photon running.

These are the results I get (maximum frequencies):

  1. No system load (other than what’s usually running in the background, no
    mouse movement)
    QNX4: 33KHz, QNX6: 31KHz

  2. No system load as in 1), but with mouse movement
    QNX4: 33KHz, QNX6: 26KHz

  3. Heavy system load (Several photon graphics output, several “cp”
    commands
    running)
    QNX4: 3700Hz, QNX6: 2500Hz.

As I believe that the interrupt latency of QNX6 is as good as in QNX4 or
even better, as it was stated a couple of times here in the forum. But it
looks like that the ISR’s take more time in QNX6. Especially mouse
interrupts seem to really have effect.

Is there a difference of the scheduling period in QNX4/6?

Markus

I set
event.sigev_priority = 63;

Markus

“Chris McKillop” <cdm@qnx.com> wrote in message
news:9luvef$sgm$1@nntp.qnx.com

Markus Loffler <> loffler@ces.clemson.edu> > wrote:

I did some measurements with regard to real-time performance of QNX4/6
and
interrupt latency. I use a ServoToGo S8 board that generates interrupts
at a
certain frequency. My interrupt handler just sends a proxy/pulse to a
message handler. The message handler checks if it is able to keep up by
looking at a sequence number that both interrupt handler and message
handler
increase. The message handler runs at priority 63 (QNX6)/31 (QNX4). In
QNX4,
Proc32 priority has been decreased to 26. All tests are made with the
same
system, AMD K6 500MHz, no sound card or other special hardware except
the
ServoToGo board, Photon running.



Just curious - what priority are you giving the pulse under QNX6?
Basically
what are you putting in event.sigev_priority before you do the
InterruptAttachEvent() call.

chris

cdm@qnx.com > “The faster I go, the behinder I get.”
Chris McKillop – Lewis Carroll –
Software Engineer, QSSL

“Igor Kovalenko” <Igor.Kovalenko@motorola.com> wrote in message
news:3B82D799.FBBD9E92@motorola.com

Markus Loffler wrote:


[snip]

As I believe that the interrupt latency of QNX6 is as good as in QNX4 or
even better, as it was stated a couple of times here in the forum. But
it
looks like that the ISR’s take more time in QNX6. Especially mouse
interrupts seem to really have effect.

Is there a difference of the scheduling period in QNX4/6?


Scheduling period? If you mean timeslice, it used to be fixed at 50msec
in QNX4, in QNX6 it is 4*ClockPeriod(), AFAIR.

Yes, that was what I was looking for.
So you say QNX4: 50msec
In QNX6, I get ClockPeriod() = 1ms on my machine, so it would be timeslice
of 4ms?
I was asking this because I wanted to know if a smaller timeslice would
increase the interrupt latency.
Looks like, 50 msec and 4ms, a big difference?
Markus


  • igor

Chris McKillop <cdm@qnx.com> wrote:

Markus Loffler <> loffler@ces.clemson.edu> > wrote:

I did some measurements with regard to real-time performance of QNX4/6 and
interrupt latency. I use a ServoToGo S8 board that generates interrupts at a
certain frequency. My interrupt handler just sends a proxy/pulse to a
message handler. The message handler checks if it is able to keep up by
looking at a sequence number that both interrupt handler and message handler
increase. The message handler runs at priority 63 (QNX6)/31 (QNX4). In QNX4,
Proc32 priority has been decreased to 26. All tests are made with the same
system, AMD K6 500MHz, no sound card or other special hardware except the
ServoToGo board, Photon running.



Just curious - what priority are you giving the pulse under QNX6? Basically
what are you putting in event.sigev_priority before you do the
InterruptAttachEvent() call.
^^^^^^^^^^^^^^^^^^^^^

I hope you are not use “InterruptAttachEvent()” but “InterruptAttach()”
do you?

AttachEvent, and then a pulse to your counter thread (message handler)
is double pulse.

-xtang

Hi Markus,

Markus Loffler <loffler@ces.clemson.edu> wrote in article
[snip]

Yes, that was what I was looking for.
So you say QNX4: 50msec
In QNX6, I get ClockPeriod() = 1ms on my machine, so it would be
timeslice
of 4ms?
I was asking this because I wanted to know if a smaller timeslice would
increase the interrupt latency.
Looks like, 50 msec and 4ms, a big difference?

Are you going to set ClockPeriod=13 ms in QNX6 and to make a comparison?
If yes, please, impart results :wink:

Thank you,
Eduard.

Yes, I’m using InterruptAttach()
Markus

“Xiaodan Tang” <xtang@qnx.com> wrote in message
news:9lvg4t$943$1@nntp.qnx.com

Chris McKillop <> cdm@qnx.com> > wrote:
Markus Loffler <> loffler@ces.clemson.edu> > wrote:

I did some measurements with regard to real-time performance of QNX4/6
and
interrupt latency. I use a ServoToGo S8 board that generates interrupts
at a
certain frequency. My interrupt handler just sends a proxy/pulse to a
message handler. The message handler checks if it is able to keep up by
looking at a sequence number that both interrupt handler and message
handler
increase. The message handler runs at priority 63 (QNX6)/31 (QNX4). In
QNX4,
Proc32 priority has been decreased to 26. All tests are made with the
same
system, AMD K6 500MHz, no sound card or other special hardware except
the
ServoToGo board, Photon running.



Just curious - what priority are you giving the pulse under QNX6?
Basically
what are you putting in event.sigev_priority before you do the
InterruptAttachEvent() call.
^^^^^^^^^^^^^^^^^^^^^

I hope you are not use “InterruptAttachEvent()” but “InterruptAttach()”
do you?

AttachEvent, and then a pulse to your counter thread (message handler)
is double pulse.

-xtang

Hello Markus,

Markus Loffler <loffler@ces.clemson.edu> wrote in article
<9lufg7$cp2$1@inn.qnx.com>…
[snip]

As I believe that the interrupt latency of QNX6 is as good as in QNX4 or
even better, as it was stated a couple of times here in the forum. But it
looks like that the ISR’s take more time in QNX6. Especially mouse
interrupts seem to really have effect.

Are you using QNX RTP 6.1? On my old p166mmx 64 MB ram

  1. No system load (other than what’s usually running in the background, no
    mouse movement)
    CPU usage: 0-2%
  2. No system load as in 1), but with mouse movement
    CPU usage: 40% peak

Pointer Cam plug-in is removed from shelf:

  1. CPU usage: 0-1%
  2. CPU usage: 14% peak

Pointer Cam seems to work always, not in the time when the mouse is
stopped.
BTW, the same hardware in Windows NT4.0 SP6:

  1. System Idle: 99%
  2. System Idle: 96% peak

Regards,
Eduard.

To be frank, I am not surprised at these measurements. QNX4 is Intel
centric, it squeezes every last little drop of performance out of an x86
at the expense of portability. QNX6 is multi-platform, and trades some
performance for portability. You of course, realize that the
performance degradation is not caused by the cp itself, but by the
resulting increase of interrupts from the disk controller (same for the
mouse). Interrupts are non schedulable and if everyone used
InterruptAttachEvent for their drivers instead of InterruptAttach (as
you appear to be doing) then life would be much better for everyone.

Try your tests on an x86 SMP box, QNX6 will come out on top (since QNX4
can’t make use of the additional processor(s)).

btw: scheduling period has nothing to do with this, as a pulse is a
kernel re-schedule AFAIK.

-----Original Message-----
From: Markus Loffler [mailto:loffler@ces.clemson.edu]
Posted At: Tuesday, August 21, 2001 1:16 PM
Posted To: os
Conversation: Performance measurements
Subject: Performance measurements


I did some measurements with regard to real-time performance of QNX4/6
and
interrupt latency. I use a ServoToGo S8 board that generates interrupts
at a
certain frequency. My interrupt handler just sends a proxy/pulse to a
message handler. The message handler checks if it is able to keep up by
looking at a sequence number that both interrupt handler and message
handler
increase. The message handler runs at priority 63 (QNX6)/31 (QNX4). In
QNX4,
Proc32 priority has been decreased to 26. All tests are made with the
same
system, AMD K6 500MHz, no sound card or other special hardware except
the
ServoToGo board, Photon running.

These are the results I get (maximum frequencies):

  1. No system load (other than what’s usually running in the background,
    no
    mouse movement)
    QNX4: 33KHz, QNX6: 31KHz

  2. No system load as in 1), but with mouse movement
    QNX4: 33KHz, QNX6: 26KHz

  3. Heavy system load (Several photon graphics output, several “cp”
    commands
    running)
    QNX4: 3700Hz, QNX6: 2500Hz.

As I believe that the interrupt latency of QNX6 is as good as in QNX4 or
even better, as it was stated a couple of times here in the forum. But
it
looks like that the ISR’s take more time in QNX6. Especially mouse
interrupts seem to really have effect.

Is there a difference of the scheduling period in QNX4/6?

Markus