* [Xenomai] powerpc 440 userspace latency test does nothing
@ 2015-12-05 8:02 Steven Seeger
2015-12-05 9:55 ` Steven Seeger
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Steven Seeger @ 2015-12-05 8:02 UTC (permalink / raw)
To: xenomai
Hey guys.
I am running a virtex5 ml507 board from Xilinx configured to use the internal powerpc 440 processor in the FPGA. I compiled a 3.18.20 kernel and patched it and build xenomai 3.0.1.
I am able to run latency -t 1 and latency -t 2
When I try to run just latency, however, I get no results. It seems like userspace threads are not ever waking up. Here's the result of cat /proc/xenomai/sched/stat:
SCLINUX: / # cat /proc/xenomai/sched/stat
CPU PID MSW CSW XSC PF STAT %CPU NAME
0 0 0 3240214 0 0 00018000 100.0 [ROOT]
0 898 1 1 5 0 000680c0 0.0 latency
0 900 1 2 5 0 00068042 0.0 display-898
0 901 2 3 7 0 0004c042 0.0 sampling-898
0 0 0 3245052 0 0 00000000 0.0 [IRQ512: [timer]]
Before I spend too much time tearing into this I wanted to ask if anyone's seen this issue before.
It should be noted that clocktest runs fine. switchtest runs. xeno-test just sits there though.
Thanks,
Steven
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Xenomai] powerpc 440 userspace latency test does nothing
2015-12-05 8:02 [Xenomai] powerpc 440 userspace latency test does nothing Steven Seeger
@ 2015-12-05 9:55 ` Steven Seeger
2015-12-05 18:53 ` Steven Seeger
` (2 subsequent siblings)
3 siblings, 0 replies; 10+ messages in thread
From: Steven Seeger @ 2015-12-05 9:55 UTC (permalink / raw)
To: xenomai
Just to add more info, the issue is that the read() call from the timerfd
never returns. I've never seen this occur before.
Steven
On Saturday, December 05, 2015 03:02:38 Steven Seeger wrote:
> Hey guys.
>
> I am running a virtex5 ml507 board from Xilinx configured to use the
> internal powerpc 440 processor in the FPGA. I compiled a 3.18.20 kernel and
> patched it and build xenomai 3.0.1.
>
> I am able to run latency -t 1 and latency -t 2
>
> When I try to run just latency, however, I get no results. It seems like
> userspace threads are not ever waking up. Here's the result of cat
> /proc/xenomai/sched/stat:
>
> SCLINUX: / # cat /proc/xenomai/sched/stat
> CPU PID MSW CSW XSC PF STAT %CPU NAME
> 0 0 0 3240214 0 0 00018000 100.0 [ROOT]
> 0 898 1 1 5 0 000680c0 0.0 latency
> 0 900 1 2 5 0 00068042 0.0
> display-898 0 901 2 3 7 0 0004c042
> 0.0 sampling-898 0 0 0 3245052 0 0 00000000
> 0.0 [IRQ512: [timer]]
>
> Before I spend too much time tearing into this I wanted to ask if anyone's
> seen this issue before.
>
> It should be noted that clocktest runs fine. switchtest runs. xeno-test just
> sits there though.
>
> Thanks,
> Steven
Steven Seeger
Software Engineer Codes 443/444/582
Embedded Flight Systems, Inc.
304-550-8800 (cell)
301-286-5641 (office)
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Xenomai] powerpc 440 userspace latency test does nothing
2015-12-05 8:02 [Xenomai] powerpc 440 userspace latency test does nothing Steven Seeger
2015-12-05 9:55 ` Steven Seeger
@ 2015-12-05 18:53 ` Steven Seeger
2015-12-06 15:48 ` Philippe Gerum
2015-12-05 20:03 ` Steven Seeger
2015-12-06 3:46 ` Steven Seeger
3 siblings, 1 reply; 10+ messages in thread
From: Steven Seeger @ 2015-12-05 18:53 UTC (permalink / raw)
To: xenomai
More info on this.
timer_gettime() on latency's timerfd returns 0 seconds and 1 nanosecond,
indicating the timer has not expired. No matter how much time I sleep before
this the result is the same.
The output of cat /proc/xenomai/timer/coreclk:
SCLINUX: / # cat /proc/xenomai/timer/coreclk
CPU SCHED/SHOT TIMEOUT INTERVAL NAME
0 2320/1334 1ms523us - [host-timer]
0 2/2 - - latency
0 1/0 - 100us timerfd_handler
The "latency" with 2/2 is a couple of sleep(1) I added for debugging purposes
during the beginning of the program.
I've modified latency to look like this:
133 err = clock_gettime(CLOCK_MONOTONIC, &expected);
134 if (err)
135 error(1, errno, "clock_gettime()");
136
137 printf("expected is: %Ld %ld\n", (long long int)expected.tv_sec,
expected.tv_nsec);
138 sleep(1);
139 err = clock_gettime(CLOCK_MONOTONIC, &expected);
140 printf("expected is: %Ld %ld\n", (long long int)expected.tv_sec,
expected.tv_nsec);
141
142 fault_threshold = CONFIG_XENO_DEFAULT_PERIOD;
143 nsamples = (long long)ONE_BILLION / period_ns;
144 /* start time: one millisecond from now. */
145 expected.tv_nsec += 1000000;
146 if (expected.tv_nsec > ONE_BILLION) {
147 expected.tv_nsec -= ONE_BILLION;
148 expected.tv_sec++;
149 }
150 timer_conf.it_value = expected;
151 timer_conf.it_interval.tv_sec = period_ns / ONE_BILLION;
152 timer_conf.it_interval.tv_nsec = period_ns % ONE_BILLION;
153
154 printf("expected is: %Ld %ld\n", (long long int)expected.tv_sec,
expected.tv_nsec);
155 err = timerfd_settime(tfd, TFD_TIMER_ABSTIME, &timer_conf, NULL);
156 if (err)
157 error(1, errno, "timerfd_settime()");
158
159 sleep(1);
160 err = timerfd_gettime(tfd, &timer_conf);
161 if(err) error(1, errno, "steven temp");
162 printf("timer got time %Ld %ld\n", (long long
int)timer_conf.it_value.tv_sec, timer_conf.it_value.tv_n sec);
Which yields the output:
expected is: 1582352598 771936946
expected is: 1582352599 772083521
expected is: 1582352599 773083521
timer got time 0 1
I've also confirmed that timerfd_read() reaches xnsynch_sleep_on
Seeing as how coreclk is also used for the host-timer and that works correctly
I am totally stumped. Anybody have any ideas? :)
Steven
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Xenomai] powerpc 440 userspace latency test does nothing
2015-12-05 8:02 [Xenomai] powerpc 440 userspace latency test does nothing Steven Seeger
2015-12-05 9:55 ` Steven Seeger
2015-12-05 18:53 ` Steven Seeger
@ 2015-12-05 20:03 ` Steven Seeger
2015-12-06 3:46 ` Steven Seeger
3 siblings, 0 replies; 10+ messages in thread
From: Steven Seeger @ 2015-12-05 20:03 UTC (permalink / raw)
To: xenomai
Another piece of info for you. I changed the latency absolute start time from
1ms to 10 seconds. I see the correct value in __cobalt_timer_setval() but cat
/proc/xenomai/timer/coreclk never shows any value for TIMEOUT for the
timerfd_handler.
It's almost like the timer never really starts.
Steven
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Xenomai] powerpc 440 userspace latency test does nothing
2015-12-05 8:02 [Xenomai] powerpc 440 userspace latency test does nothing Steven Seeger
` (2 preceding siblings ...)
2015-12-05 20:03 ` Steven Seeger
@ 2015-12-06 3:46 ` Steven Seeger
2015-12-06 15:43 ` Philippe Gerum
3 siblings, 1 reply; 10+ messages in thread
From: Steven Seeger @ 2015-12-06 3:46 UTC (permalink / raw)
To: xenomai
Me again. The issue appears to be that there's a discrepancy between the value
returned by clock_gettime(CLOCK_MONOTONIC... and the cobalt kernel's internal
notion of time. Changing latency to start with a 100 nanosecond relative time
(which adds some constant latency to the expected result since both the
expected and actual are no longer based on the same point in time) allows it
to run successfully.
It seems if I telnet into the board and generate too much text on the screen
the board locks up. I don't know if the board has any thermal cutoff (it gets
very hot) or if something is wrong with the kernel. I manually patched in some
vendor code from a 3.6 kernel into the 3.18.20 kernel to use the xenomai patch
so I could be missing something, too.
I'm not sure if this makes a difference, but here is clock_gettime's returned
tv_sec and tv_nsec (with a space in the middle) and the line after that is an
immediate read of ticks: from /proc/xenomai/clock/coreclk:
1582347100 704906148
ticks: 15136959121354131671
You can see there's an extra digit in the coreclk output compared to what
comes out of clock_gettime.
I went ahead and used the ipipe-core-3.14.39-powerpc-8 patch and built the
vendor's 3.14.2 kernel against it. I didn't have to do as much work as I did
with the 3.18.20 patch. I had the same results (both with latency and with
freezing.)
At this point I've got the answers I need from this exercise, but it would be
good to understand the problem and possibly fix it. If anyone can point me in
the right direction maybe I can take a look at it.
Steven
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Xenomai] powerpc 440 userspace latency test does nothing
2015-12-06 3:46 ` Steven Seeger
@ 2015-12-06 15:43 ` Philippe Gerum
2015-12-06 18:20 ` Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]
0 siblings, 1 reply; 10+ messages in thread
From: Philippe Gerum @ 2015-12-06 15:43 UTC (permalink / raw)
To: steven.seeger, xenomai
On 12/06/2015 04:46 AM, Steven Seeger wrote:
> I went ahead and used the ipipe-core-3.14.39-powerpc-8 patch and built the
> vendor's 3.14.2 kernel against it. I didn't have to do as much work as I did
> with the 3.18.20 patch. I had the same results (both with latency and with
> freezing.)
>
> At this point I've got the answers I need from this exercise, but it would be
> good to understand the problem and possibly fix it. If anyone can point me in
> the right direction maybe I can take a look at it.
>
For the Virtex5 family, we likely need the xilinx-intc controller, and
that one has not been made pipeline-aware in the kernel tree. I checked
Xenomai 3.0.1 over a yosemite 44xFP SoC and all went well, so this is
consistent with a SoC-dependent issue on the ml507 (AMCC's 440EP sports
a single UIC).
I would suggest to have a look at arch/powerpc/sysdev/xilinx_intc.c, and
make sure it implements the I-pipe helpers and tweaks.
/proc/interrupts should reveal all interrupt controllers in use for a
given configuration (make sure to enable GPIOs to have a complete
report). From that point you should be able to cross-check that each of
them is supported by the pipeline.
--
Philippe.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Xenomai] powerpc 440 userspace latency test does nothing
2015-12-05 18:53 ` Steven Seeger
@ 2015-12-06 15:48 ` Philippe Gerum
2015-12-06 18:22 ` Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]
0 siblings, 1 reply; 10+ messages in thread
From: Philippe Gerum @ 2015-12-06 15:48 UTC (permalink / raw)
To: steven.seeger, xenomai
On 12/05/2015 07:53 PM, Steven Seeger wrote:
> More info on this.
>
> timer_gettime() on latency's timerfd returns 0 seconds and 1 nanosecond,
> indicating the timer has not expired.
This value usually indicates an expired but not yet handled timer shot;
that would match your description of an elapsed timer that did not
trigger the associated action.
--
Philippe.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Xenomai] powerpc 440 userspace latency test does nothing
2015-12-06 15:43 ` Philippe Gerum
@ 2015-12-06 18:20 ` Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]
0 siblings, 0 replies; 10+ messages in thread
From: Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc] @ 2015-12-06 18:20 UTC (permalink / raw)
To: Philippe Gerum, xenomai
Thanks for the suggestion. I will look at the interrupt controller and then get back to you.
I will have access to the board again on Friday.
It does sound like we should be able to get decent numbers with this board.
________________________________________
From: Philippe Gerum [rpm@xenomai.org]
Sent: Sunday, December 06, 2015 10:43 AM
To: Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]; xenomai@xenomai.org
Subject: Re: [Xenomai] powerpc 440 userspace latency test does nothing
On 12/06/2015 04:46 AM, Steven Seeger wrote:
> I went ahead and used the ipipe-core-3.14.39-powerpc-8 patch and built the
> vendor's 3.14.2 kernel against it. I didn't have to do as much work as I did
> with the 3.18.20 patch. I had the same results (both with latency and with
> freezing.)
>
> At this point I've got the answers I need from this exercise, but it would be
> good to understand the problem and possibly fix it. If anyone can point me in
> the right direction maybe I can take a look at it.
>
For the Virtex5 family, we likely need the xilinx-intc controller, and
that one has not been made pipeline-aware in the kernel tree. I checked
Xenomai 3.0.1 over a yosemite 44xFP SoC and all went well, so this is
consistent with a SoC-dependent issue on the ml507 (AMCC's 440EP sports
a single UIC).
I would suggest to have a look at arch/powerpc/sysdev/xilinx_intc.c, and
make sure it implements the I-pipe helpers and tweaks.
/proc/interrupts should reveal all interrupt controllers in use for a
given configuration (make sure to enable GPIOs to have a complete
report). From that point you should be able to cross-check that each of
them is supported by the pipeline.
--
Philippe.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Xenomai] powerpc 440 userspace latency test does nothing
2015-12-06 15:48 ` Philippe Gerum
@ 2015-12-06 18:22 ` Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]
2015-12-06 18:29 ` Philippe Gerum
0 siblings, 1 reply; 10+ messages in thread
From: Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc] @ 2015-12-06 18:22 UTC (permalink / raw)
To: Philippe Gerum, xenomai
What would keep it from firing? The latency -t 1 works fine. At its core both user thread and kernel
thread use xntimers so they should all fire.
________________________________________
From: Philippe Gerum [rpm@xenomai.org]
Sent: Sunday, December 06, 2015 10:48 AM
To: Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]; xenomai@xenomai.org
Subject: Re: [Xenomai] powerpc 440 userspace latency test does nothing
On 12/05/2015 07:53 PM, Steven Seeger wrote:
> More info on this.
>
> timer_gettime() on latency's timerfd returns 0 seconds and 1 nanosecond,
> indicating the timer has not expired.
This value usually indicates an expired but not yet handled timer shot;
that would match your description of an elapsed timer that did not
trigger the associated action.
--
Philippe.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Xenomai] powerpc 440 userspace latency test does nothing
2015-12-06 18:22 ` Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]
@ 2015-12-06 18:29 ` Philippe Gerum
0 siblings, 0 replies; 10+ messages in thread
From: Philippe Gerum @ 2015-12-06 18:29 UTC (permalink / raw)
To: Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc], xenomai
On 12/06/2015 07:22 PM, Seeger, Steven D. (GSFC-444.0)[Embedded Flight
Systems, Inc] wrote:
> What would keep it from firing? The latency -t 1 works fine. At its core both user thread and kernel
> thread use xntimers so they should all fire.
It does fire kernel-wise, but the system seems to be confused enough
that the userland task does not switch in. Not that I'm 100% sure that
the IC issue will fix this, but that bug is serious enough to wreck the
interrupt state of the whole kernel, so this may be related, and such
consequence has already been observed in similar cases (e.g. lockups,
unexpected hangs).
> ________________________________________
> From: Philippe Gerum [rpm@xenomai.org]
> Sent: Sunday, December 06, 2015 10:48 AM
> To: Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]; xenomai@xenomai.org
> Subject: Re: [Xenomai] powerpc 440 userspace latency test does nothing
>
> On 12/05/2015 07:53 PM, Steven Seeger wrote:
>> More info on this.
>>
>> timer_gettime() on latency's timerfd returns 0 seconds and 1 nanosecond,
>> indicating the timer has not expired.
>
> This value usually indicates an expired but not yet handled timer shot;
> that would match your description of an elapsed timer that did not
> trigger the associated action.
>
> --
> Philippe.
>
--
Philippe.
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2015-12-06 18:29 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-12-05 8:02 [Xenomai] powerpc 440 userspace latency test does nothing Steven Seeger
2015-12-05 9:55 ` Steven Seeger
2015-12-05 18:53 ` Steven Seeger
2015-12-06 15:48 ` Philippe Gerum
2015-12-06 18:22 ` Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]
2015-12-06 18:29 ` Philippe Gerum
2015-12-05 20:03 ` Steven Seeger
2015-12-06 3:46 ` Steven Seeger
2015-12-06 15:43 ` Philippe Gerum
2015-12-06 18:20 ` Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.