From: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
To: Jonas Witt <jonas.witt@domain.hid>
Cc: Jan Kiszka <jan.kiszka@domain.hid>, xenomai@xenomai.org
Subject: Re: [Xenomai-help] Huge clock drift
Date: Fri, 27 May 2011 21:11:10 +0200 [thread overview]
Message-ID: <4DDFF74E.2000400@domain.hid> (raw)
In-Reply-To: <4DDFEDA2.40206@domain.hid>
On 05/27/2011 08:29 PM, Jonas Witt wrote:
> Am 27.05.2011 17:05, schrieb Jan Kiszka:
>> On 2011-05-27 16:38, Gilles Chanteperdrix wrote:
>>> On 05/27/2011 04:19 PM, Jonas Witt wrote:
>>>> Am 27.05.2011 08:40, schrieb Gilles Chanteperdrix:
>>>>> On 05/26/2011 07:28 PM, Jonas Witt wrote:
>>>>>> Hi all,
>>>>>>
>>>>>> i am having a problem concerning the clock drift under load:
>>>>>>
>>>>>> # /usr/xenomai/bin/clocktest
>>>>>> == Tested clock: 0 (CLOCK_REALTIME)
>>>>>> CPU ToD offset [us] ToD drift [us/s] warps max delta [us]
>>>>>> --- -------------------- ---------------- ---------- --------------
>>>>>> 0 775571614.0 166776.858 0 0.0
>>>>>>
>>>>>>
>>>>>> It remains in the hundreds of MILLIseconds, changing constantly. My
>>>>>> setup consists of an embedded Intel Atom board (1.6GHz Z530 processor)
>>>>>> with a 2.6.32.7 kernel and Xenomai 2.5.2.
>>>>> Hi Jonas,
>>>>>
>>>>> Could you try and see if 2.5.6 with latest I-pipe patches has the same
>>>>> behaviour?
>>>>>
>>>>>> Latencies under load are
>>>>>> reasonable. Mean latency< 10us. Maximum latency< 40us.
>>>>>>
>>>>>> Without load the ToD offset is approximately constant over time with a
>>>>>> ToD drift in the range of 10 microseconds (strangely after a while this
>>>>>> settles in a range of 2 microseconds). Does anyone have an idea how this
>>>>>> can be caused?
>>>>> First, I am not sure clocktest is meant to be use under load. Second,
>>>>> does your system uses ntp?
>>>>>
>>>>>> As a workaround I currently use rt_timer_read() in all
>>>>>> relevant programs (also the non-realtime ones), since I need consistent
>>>>>> timestamps between realtime and non-realtime tasks.
>>>>> In order to solve this particular issue, we have a solution, but not yet
>>>>> in stable released versions.
>>>>>
>>>>>> One other (maybe unrelated) strange behavior is occasional secondary
>>>>>> mode switches when calling rt_queue_read(...).
>>>>> For this error, we need more details, such as a simple test case
>>>>> allowing to reproduce the issue, and again, you need to be sure to
>>>>> reproduce the issue on latest stable release with latest I-pipe patches.
>>>>>
>>>>> Regards.
>>>> Hi Gilles,
>>>>
>>>> thanks for your input. I will try Xenomai 2.5.6 soon. In the meantime I
>>>> wrote a simple load simulator to reproduce the issue with my more
>>>> complex program. The clock drift only occurs with a load of more than
>>>> 30%. Below that the clock is fine. So you may have to adjust the
>>>> attached code (e.g. change the 2000 value in the for-loop to something
>>>> larger) to stress your system to that level where the processing time is
>>>> more than 2000 microseconds.
>>> My point was that maybe clocktest is not meant to be run under load. To
>>> this, we should ask Jan to answer, as he wrote this test and knows what
>>> is inside.
>> There are some simple measures in clocktest to check if the clock
>> read-outs were done without major preemptions. But even in extreme load,
>> this should only cause temporary offsets, no constant drift, no
>> persistent delta after taking away the load.
>>
>> What is the clocksourse Linux is using? See
>> /sys/devices/system/clocksource/clocksource0/current_clocksource.
>>
>> More important, you still didn't answer Gilles' question about ntp.
>>
>> Jan
>>
> Sorry, I missed the NTP-part. I am not using NTP. Just plain timer
> queries on a single system.
>
> My clock source is tsc which is the same for Xenomai I suppose.
>
> I wonder how a Xenomai task, even if it occupies 50% or even 90% of a 4
> milliseconds time slice can interfere with the tsc. The tsc is not
> incremented via an interrupt, is it? But I do not know much about the
> inner workings of these functions.
The problem is not the clocksource, the problem is the timer interrupt.
The kernel expects 1 timer tick every millisecond. When you run a
real-time task during 2 milliseconds and prevent the kernel from
receiving the timer interrupts, you certainly disrupt its timekeeping.
If you want to do this, switch the Linux kernel frequency (CONFIG_HZ) to
100.
>
> Jonas
>
>
--
Gilles.
next prev parent reply other threads:[~2011-05-27 19:11 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-26 17:28 [Xenomai-help] Huge clock drift Jonas Witt
2011-05-27 6:40 ` Gilles Chanteperdrix
2011-05-27 14:19 ` Jonas Witt
2011-05-27 14:38 ` Gilles Chanteperdrix
2011-05-27 15:05 ` Jan Kiszka
2011-05-27 16:22 ` Gilles Chanteperdrix
2011-05-27 18:29 ` Jonas Witt
2011-05-27 19:11 ` Gilles Chanteperdrix [this message]
2011-05-28 14:32 ` Jan Kiszka
2011-05-28 22:08 ` Gilles Chanteperdrix
2011-05-29 15:38 ` Jan Kiszka
2011-05-30 7:03 ` Pavel Machek
2011-05-30 7:07 ` Jan Kiszka
2011-05-30 7:43 ` Jonas Witt
2011-05-30 7:57 ` Jan Kiszka
2011-05-30 10:31 ` Jonas Witt
2011-05-30 10:33 ` Pavel Machek
2011-05-30 12:32 ` Jonas Witt
2011-05-30 13:08 ` Jan Kiszka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4DDFF74E.2000400@domain.hid \
--to=gilles.chanteperdrix@xenomai.org \
--cc=jan.kiszka@domain.hid \
--cc=jonas.witt@domain.hid \
--cc=xenomai@xenomai.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.