Hi all,

I have some questions regarding context switching in Xenomai and how
adding LTT support with older Kernel.

We have a project based on 2.4 Kernel (CPU MPC5200-Kernel 2.4.25) and
Xenomai 2.3.5 (adeos-ipipe-2.4.25-ppc-CVS-20070325-1.2-01.patch).

Because it was not possible to upgrade to the 2.6 Kernel, there was the
decision to use LTT (and not LTT-ng) to trace the system behavior. The
consequence was to add support for Xenomai in LTT.

I prepared a patch for the 2.4 Kernel (based on a old RTAI-Patch) and I
slightly modified the Xenomai code to wrap the xnltt_log_event to call
the corresponding LTT trace function.
Because the events are already set in Xenomai, I only mapped them with
LTT Custom Events. In this way, it is very simple to change Xenomai
version because the changes in Xenomai are really minimal. I can easy
replace in the same way the calling to the trace_mark() function in
Xenomai 2.4 if an upgrade to the newer version is desired.

I can start the tracedaemon application on the target and collect all
events. Everything seems fine and consistent.
With the Visualizer I can obtain the raw dump of all events as ASCII text.

However, I adapted the LTT-Visualizer to get a visualization of the
events. I added (if you know as the RTAI-Tasks were added to the
LTT-Visualizer, I did it in the same way) the Xenomai tasks to the
visualizer on the bottom of the graph and I wanted to display when a
task-switch happens.

To do this, I am searching for all Xenomai ctxsw events to understand
which tasks are involved. I have an example running at the same time the
latency test (with -t1 to generate a Xenomai task in kernel) and the
trivial-periodic provided with Xenomai code.

Here some sequences I get it, I would like to know how I have to display
them.

For example:

Xenomai i-enter    223,663,358 0    27 irq=256
Xenomai timer tick 223,663,362 0    34 runthread=ROOT
Xenomai thread resu223,663,366 0    47 thread=timerbench, mask=0x4
Xenomai resched    223,663,370 0    20
Xenomai ctxsw      223,663,375 0    46 ROOT(0) -> timerbench(-1)

This sequence means for me (but please correct me if I am wrong !) that
there is a context switch from Xenomai Core (ROOT(0)) and the Xenomai
task "timerbench" in Kernel. The values in parenthesis are the pids from
xnthread_user_task(threadout) and xnthread_user_task(threadin) that I
have added to the trace. (-1=user_task is set to null)

Xenomai thread susp 221,481,424 397 79 thread=timerbench, mask=0x4,
Xenomai resched 221,481,432 397 20
Xenomai ctxsw   221,481,437 397 48  timerbench(-1) -> ROOT(397)
Xenomai i-exit         221,481,441      397     27      irq=256

This was for me a context switch from the Xenomai Kernel task
"timerbench" to the Process with PID=397, that I see is a Linux Process.
Then I draw a line (that is, a task/process switch) from the Xenomai
task "timerbench" to the linux process with PID=397.
Am I wrong ?

Xenomai thread resu 223,695,395 0 48 thread=display-369, mask=0x2
Xenomai resched     223,695,398 0 20
Xenomai thread susp 223,695,408 0 79 thread=timerbench, mask=0x4
Xenomai resched     223,695,414 0 20
Xenomai ctxsw       223,695,419 0 55 timerbench(-1) -> display-369(371)

This is a context switch between two Xenomai tasks, if I understand well.

I have not considered the modex2 and modex1 events and I am not sure
about them. However, I have noted that modex2 is collected with a Linux
"Sched change" event and I can consider only the last one to understand
if a Linux process is running, for example I see:

Xenomai i-exit 221,695,618 0 27 irq=256
Xenomai lohandler 221,695,631 0 54 type=10, task=display-369, pid=371
Process      221,695,634      0 16 WAKEUP PID : 371; STATE : 1
Sched change 221,695,653    371 19   IN : 371; OUT : 0; STATE : 0
Xenomai modex2 221,695,666  371 38      thread=display-369

In my IMHO it is enough to get the "Sched change" event to understand
that the system is switching to Linux and that a Linux process is
currently scheduled. In this case, the linux process with PID=371 is
scheduled.

However, I got also these events, where the lohandler event is not traced:

Xenomai ctxsw 223,695,419 0 55 timerbench(-1) -> display-369(371)
Xenomai modsw2 223,695,573 0 38 thread=display-369

At the moment, I display only the modex event, but I do not take any
decision about it. I draw only a context switch between the two Xenomai
tasks "timerbench" and "display-369".

Thanks,
Stefano


-- 
stefano <[EMAIL PROTECTED]>
GPG Key: 0x55814DDE
Fingerprint 4E85 2A66 4CBA 497A 2A7B D3BF 5973 F216 5581 4DDE

_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to