On Tue, Jan 17, 2023 at 09:05:47AM +0000, Wagner Florian (DC-AE/ESW2) via 
Linuxptp-users wrote:

> But for synchronizing the phase of the schedulers, it would be
> sufficient to synchronize the CLOCK_MONOTONICs relative to the cycle
> time of our tasks. So if we could for example define, that the
> offset between CLOCK_MONOTONIC and CLOCK_REALTIME can only be a
> multiple of our cycle time (eg. 1ms), this would be sufficient. Is
> there an option to do something like this?

The realtime/monotonic offset is handled in the kernel.  Setting
CLOCK_REALTIME aka "wall clock" amounts to setting the variable
wall_to_monotonic in the timekeeper data structure.

There is no kernel interface to do what you what you propose.

> If this is not the case, what would happen if we hard (re-)set the
> offset during runtime of phc2sys to the closest multiple of our
> cycle time? Would phc2sys overwrite this

Yes, if allowed by the step_threshold configuration option.

> or would it just adjust the
> difference to the master clock that was introduced by this
> manipulation by adjusting the frequency of
> CLOCK_REALTIME/CLOCK_MONOTONIC?

This is the likely case, when step_threshold == 0.

> Do you have other recommendations to synchronize cyclic scheduling on linux 
> systems with a monotonic time source?

Barring hacking the kernel, I think the easiest way would be to call

    t1 = clock_gettime(CLOCK_REALTIME);
    t2 = clock_gettime(CLOCK_MONOTONIC);
    t3 = clock_gettime(CLOCK_REALTIME);

and figure the phase difference using (t1 + t3)/2 - t2

and then correct your monotonic timer so that it remains in phase with
CLOCK_REALTIME.

You only have to do this once at the beginning, then repeat whenever
CLOCK_REALTIME is set (you can detect that with the timer API).

HTH,
Richard



_______________________________________________
Linuxptp-users mailing list
Linuxptp-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-users

Reply via email to