Thread (59 messages) 59 messages, 8 authors, 2023-01-25

Re: [net-next 03/15] net/mlx5: Add adjphase function to support hardware-only offset control

From: Rahul Rameshbabu <rrameshbabu@nvidia.com>
Date: 2023-01-22 21:12:19

Held off on replying any further till I verified my understanding with a
PTP architect on our side. Looks like my understanding was correct.

On Fri, 20 Jan, 2023 16:06:09 -0800 Jakub Kicinski [off-list ref] wrote:
On Fri, 20 Jan 2023 15:58:25 -0800 Jacob Keller wrote:
quoted
Sure. I guess what I don't understand is why or when one would want to
use adjphase instead of just performing frequency adjustment via the
.adjfine operation...

Especially since "gradual adjustment over time" means it will still be
slow to converge (just like adjusting frequency is today).

We should definitely improve the doc to explain the diff between them
and make sure that its more clear to driver implementations.
Our PTP architect also was subtly confused by the differences of adjtime
and adjphase when the adjphase patch was first introduced. Vincent's
follow up helped with better understanding the difference.

The way NVIDIA devices internally handle adjphase is to adjust the
frequency for a short period of time to make the small time offset
adjustments smooth (using some internal calculations) where the time
offset "nudge" is applied but frequency is also adjusted to prevent
immediate drift after that time adjustment. However, we aren't sure if
this is the only approach possible to achieve accurate corrections for
small offset adjustments with adjphase, so I would suggest that the
documentation be updated to state something discussing that adjphase is
expected to support small jumps in offset precisely without necessarily
bringing up frequency manipulation potentially done to achieve this.
Fair point, I assumed that the adjustment is precise (as in the device
is programmed with both the extra addend and number of cycles over
which to use it). Yielding an exact adjustment.

But then again, I also thought that .adjtime is supposed to be a precise
single-shot nudge, while most drivers just do:

time = read_time()
time += delta
write_time(time)

:S  So yeah, let's document..
Our architect used the following to compare adjtime and adjphase.

  time adjustment is a 'jump' in time while phase adjustment is a smooth correction.

I think the thing though is how that smooth correction for small offset
values is achieved is not very well defined/something the implementer
can define. Will update the comments for adjphase in my patch series
based on this.
quoted
It also makes it harder to justify mapping small .adjtime to .adjphase,
as it seems like .adjphase isn't required to adjust the offset
immediately. Perhaps the adjustment size is small enough that isn't a
big problem?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help