On 02/06/2014 06:26 PM, Philippe Gerum wrote:
On 02/06/2014 05:25 PM, Marcel van Mierlo wrote:
Hi,
I've been investigating this for a couple of days and would really
appreciate some insight
on what might be going on or what I can do to progress this...
I am porting a legacy pSOS application - to Xenomai on BeagleBoard Black
3.8 kernel
and have noticed %CPU (via. top) of MAIN around 40% when using q_send,
and doing no "work".
Surprisingly, if I add a printf() and fflush() to the task body then
the CPU drops down to < 1%.
I've checked compile options, nothing obviously wrong. Here is the
(abridged) body of the task.
It just provides a periodic message for watchdog purposes.
[%CPU ~%40]
while{1}
{
q_send(ulCanTQid, (INT32 *)&oCanMsg);
tm_wkafter(100); // ~100ms
}
[%CPU < %1]
while{1}
{
q_send(ulCanTQid, (INT32 *)&oCanMsg);
tm_wkafter(100); // ~100ms
printf("WAKING");
fflush(stdout);
}
there is a task calling q_receive on the queue, but I have stubbed out
any work to keep it as simple as possible.
root@arm:~# cat /proc/xenomai/version
2.6.3
Here is xenomai/stat when running at ~40 %CPUfrom top. I presume that
ROOT/0 represents the
Xenomai/I-PIPE kernel. Nothing is reported as hogging the CPU....
Every 2.0s: cat /proc/xenomai/stat Sat Jan 1
00:09:03 2000
CPU PID MSW CSW PF STAT %CPU NAME
0 0 0 186436 0 00500080 94.2 ROOT/0
0 2882 16 427 0 00300380 0.0 MAIN
0 2883 0 54128 0 00300184 1.0 onemsscheduler
0 2884 0 542 0 00300184 0.0 FREE
0 2885 0 1499 0 00300184 0.0 flsh
0 2886 0 1 0 00300182 0.0 EWRN
0 2887 0 45158 0 00300186 0.8 EEDT
0 2888 0 53921 0 00300184 1.4 RESP
0 2889 1 1 0 00300380 0.0 SERV
0 2890 0 10784 0 00300184 0.4 CMND
0 2891 2 1370 0 00300186 0.1 SERP
0 2896 0 53080 0 00300184 0.8 SERO
0 2899 0 536 0 00300186 0.0 CANP
0 2900 0 1 0 00300182 0.0 CANG
0 2901 0 1 0 00300182 0.0 CANE
0 2902 0 315 0 00300182 0.0 CANT
0 2903 1 1 0 00300380 0.0 CNMN
0 2904 236 628 0 00300184 0.0 CIOW
0 0 0 699350 0 00000000 1.0 IRQ83: [timer]
So questions are:
- Why does the %CPU under xenomai/stat not reflect whats reported by top
Because top reports the CPU consumed when Linux is active, which
excludes Xenomai activity.
(where is the 40% going)?
Good question.
- How can I track down the high CPU load?
Could you obtain a report from Xenomai's rtps command? This one reports
real-time cycles.
- Why would using printf and fflush make such a massive difference to
%CPU? The application is not busy waiting or doing any CPU intensive
work...
Which kernel version, I-pipe release and CPU architecture are you
running on?
Please ignore this question. I missed this info from your past mail, so
ARM and 3.8 it seems.
--
Philippe.
_______________________________________________
Xenomai mailing list
Xenomai@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai