Minor issue 1: You seem not to initialize fudgeminjitter if not
configured.  Probably to 0.0

Wishlist issue 2: Maybe also make fudgeminjitter available for network
clocks, e.g. to describe a non-uniform packet jitter in a network path
or non-uniform hardware jitter in a preferred site local higher stratum
server.

On 10/08/2019 08:58, Michael Haardt wrote:
By now I hacked ntpd for allowing to override the lower jitter bound,
which fixes the problem properly.  The attached patch shows the current
state.

Good: It works! ntpd no longer drops the GPS as false ticker, which in
turn does not drop PPS that depends on the preferred peer, so everything
works as beautiful as with "tos mindist 0.1", but without the negative
effect on the root dispersion that is caused by increasing the minimum
distance.
Bad: I don't see the modified jitter with "ntpq -c peers" and I have
no idea why.  I verified it is modified.  Perhaps there is duplicated
code somewhere I missed to modify as well? I should add a flag, but that
would run out of bits, and I am not certain if I may need to change other
struct members or variables storing flags as well, because much data is
being copied instead of referenced.  I would appeciate some help here.

IMHO the minimum distance should only be set in case of multiple
reference clocks that unfortunately have no overlap of offset and jitter,
so increasing the distance allows to use them at the logical price of a
higher root dispersion.  Using it to fix the wrong jitter estimation of
a single clock with not statistically distributed jitter is not what it
is intended for.  Overriding the jitter of that clock is what is really
required, and checking past mailing lists, this topic came up quite a
few times.  Obviously that allows to set mindist to 0, which reduces
the root dispersion to the actual value, which is below 1 ms for me.

Michael

diff -u -r ntp-dev-4.3.99-orig/ntpd/ntp_refclock.c 
ntp-dev-4.3.99/ntpd/ntp_refclock.c
--- ntp-dev-4.3.99-orig/ntpd/ntp_refclock.c     2019-06-07 09:42:47.000000000 
+0200
+++ ntp-dev-4.3.99/ntpd/ntp_refclock.c  2019-08-07 19:17:08.947049304 +0200
@@ -494,6 +494,7 @@
        }
        pp->offset /= m;
        pp->jitter = max(SQRT(pp->jitter / m), LOGTOD(sys_precision));
+       pp->jitter = max(pp->jitter, pp->fudgeminjitter);
  #ifdef DEBUG
        if (debug)
                printf(
@@ -1080,6 +1081,7 @@
                        pp->sloppyclockflag &= ~CLK_FLAG4;
                        pp->sloppyclockflag |= in->flags & CLK_FLAG4;
                }
+               pp->fudgeminjitter = in->fudgeminjitter;
        }
/*
diff -u -r ntp-dev-4.3.99-orig/include/ntp_refclock.h 
ntp-dev-4.3.99/include/ntp_refclock.h
--- ntp-dev-4.3.99-orig/include/ntp_refclock.h  2016-03-27 23:59:49.000000000 
+0200
+++ ntp-dev-4.3.99/include/ntp_refclock.h       2019-08-07 19:07:13.902963553 
+0200
@@ -81,6 +81,7 @@
        double  fudgetime2;     /* configure fudge time2 */
        int32   fudgeval1;      /* configure fudge value1 */
        u_int32 fudgeval2;      /* configure fudge value2 */
+       double  fudgeminjitter; /* configure fudge minjitter */
        u_char  currentstatus;  /* clock status */
        u_char  lastevent;      /* last exception event */
        u_char  leap;           /* leap bits */
@@ -176,6 +177,7 @@
         */
        double  fudgetime1;     /* fudge time1 */
        double  fudgetime2;     /* fudge time2 */
+       double  fudgeminjitter; /* manually set lower bound for jitter */
        u_char  stratum;        /* server stratum */
        u_int32 refid;          /* reference identifier */
        u_char  sloppyclockflag; /* fudge flags */
diff -u -r ntp-dev-4.3.99-orig/ntpd/keyword-gen.c 
ntp-dev-4.3.99/ntpd/keyword-gen.c
--- ntp-dev-4.3.99-orig/ntpd/keyword-gen.c      2019-06-07 05:54:31.000000000 
+0200
+++ ntp-dev-4.3.99/ntpd/keyword-gen.c   2019-08-06 19:54:05.362952788 +0200
@@ -199,6 +199,7 @@
  { "stratum",                T_Stratum,              FOLLBY_TOKEN },
  { "time1",          T_Time1,                FOLLBY_TOKEN },
  { "time2",          T_Time2,                FOLLBY_TOKEN },
+{ "minjitter",               T_Minjitter,            FOLLBY_TOKEN },
  /* system_option */
  { "auth",           T_Auth,                 FOLLBY_TOKEN },
  { "bclient",                T_Bclient,              FOLLBY_TOKEN },
diff -u -r ntp-dev-4.3.99-orig/ntpd/ntp_config.c 
ntp-dev-4.3.99/ntpd/ntp_config.c
--- ntp-dev-4.3.99-orig/ntpd/ntp_config.c       2019-06-07 10:59:13.000000000 
+0200
+++ ntp-dev-4.3.99/ntpd/ntp_config.c    2019-08-07 19:04:12.254768986 +0200
@@ -3703,6 +3703,13 @@
                                        clock_stat.flags &= ~CLK_FLAG4;
                                break;
+ case T_Minjitter:
+#if 0
+                               clock_stat.haveflags |= CLK_HAVEMINJITTER;
+#endif
+                               clock_stat.fudgeminjitter = curr_opt->value.d;
+                               break;
+
                        default:
                                msyslog(LOG_ERR,
                                        "Unexpected fudge flag %s (%d) for %s",
diff -u -r ntp-dev-4.3.99-orig/ntpd/ntp_parser.y 
ntp-dev-4.3.99/ntpd/ntp_parser.y
--- ntp-dev-4.3.99-orig/ntpd/ntp_parser.y       2019-06-07 09:42:47.000000000 
+0200
+++ ntp-dev-4.3.99/ntpd/ntp_parser.y    2019-08-06 19:55:06.822342155 +0200
@@ -170,6 +170,7 @@
  %token        <Integer> T_Mindepth
  %token        <Integer> T_Mindist
  %token        <Integer> T_Minimum
+%token <Integer> T_Minjitter
  %token        <Integer> T_Minpoll
  %token        <Integer> T_Minsane
  %token        <Integer> T_Mode
@@ -1024,6 +1025,7 @@
  fudge_factor_dbl_keyword
        :       T_Time1
        |       T_Time2
+       |       T_Minjitter
        ;
fudge_factor_bool_keyword
diff -u -r ntp-dev-4.3.99-orig/ntpd/refclock_parse.c 
ntp-dev-4.3.99/ntpd/refclock_parse.c
--- ntp-dev-4.3.99-orig/ntpd/refclock_parse.c   2019-06-07 10:59:13.000000000 
+0200
+++ ntp-dev-4.3.99/ntpd/refclock_parse.c        2019-08-07 19:09:52.371388507 
+0200
@@ -3424,6 +3424,8 @@
  #endif
                    }
                }
+
+               parse->generic->fudgeminjitter = in->fudgeminjitter;
        }
  }


Enjoy

Jakob
--
Jakob Bohm, CIO, Partner, WiseMo A/S.  https://www.wisemo.com
Transformervej 29, 2860 Søborg, Denmark.  Direct +45 31 13 16 10
This public discussion message is non-binding and may contain errors.
WiseMo - Remote Service Management for PCs, Phones and Embedded

_______________________________________________
questions mailing list
questions@lists.ntp.org
http://lists.ntp.org/listinfo/questions

Reply via email to