Hi,

I hit a problem which is caused by going back of monotonic time.  It
happens on hosts on VMware ESXi.

I wrote the program which repeats the problem.

 % cc -o monotime monotime.c -lpthread
 % ./monotime
 194964 Starting
 562210 Starting
 483046 Starting
 148865 Starting
 148865 Back 991.808048665 => 991.007447931
 562210 Back 991.808048885 => 991.007448224
 483046 Back 991.808049115 => 991.007449172
 148865 Stopped
 562210 Stopped
 483046 Stopped
 194964 Stopped
 % uname -a
 OpenBSD yasuoka-ob-c.tokyo.iiji.jp 6.8 GENERIC.MP#5 amd64
 % sysctl kern.version
 kern.version=OpenBSD 6.8 (GENERIC.MP) #5: Mon Feb 22 04:36:10 MST 2021
     
r...@syspatch-68-amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
 %

monotime.c
----
#include <sys/types.h>
#include <sys/time.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>

#define NTHREAD 4
#define NTRY    50000

void *
start(void *dummy)
{
        int i;
        struct timespec ts0, ts1;

        printf("%d Starting\n", (int)getthrid());
        clock_gettime(CLOCK_MONOTONIC, &ts0);

        for (i = 0; i < NTRY; i++) {
                clock_gettime(CLOCK_MONOTONIC, &ts1);
                if (timespeccmp(&ts0, &ts1, <=)) {
                        ts0 = ts1;
                        continue;
                }
                printf("%d Back %lld.%09lu => %lld.%09lu\n",
                    (int)getthrid(), ts0.tv_sec, ts0.tv_nsec, ts1.tv_sec,
                    ts1.tv_nsec);
                break;
        }
        printf("%d Stopped\n", (int)getthrid());

        return (NULL);
}

int
main(int argc, char *argv[])
{
        int i, n = NTHREAD;
        pthread_t *threads;

        threads = calloc(n, sizeof(pthread_t));

        for (i = 0; i < n; i++)
                pthread_create(&threads[i], NULL, start, NULL);
        for (i = 0; i < n; i++)
                pthread_join(threads[i], NULL);

}
----

The machine has 4 vCPUs and showing the following message on boot.

  cpu1: disabling user TSC (skew=-5310)
  cpu2: disabling user TSC (skew=-5335)
  cpu3: disabling user TSC (skew=-7386)

This means "user TSC" is disabled because of TSC of cpu{1,2,3} is much
delayed against cpu0.

Simply ignoring the skews by the following diff seems to workaround
this problem.

diff --git a/sys/arch/amd64/amd64/tsc.c b/sys/arch/amd64/amd64/tsc.c
index 238a5a068e1..3b951a8b5a3 100644
--- a/sys/arch/amd64/amd64/tsc.c
+++ b/sys/arch/amd64/amd64/tsc.c
@@ -212,7 +212,8 @@ cpu_recalibrate_tsc(struct timecounter *tc)
 u_int
 tsc_get_timecount(struct timecounter *tc)
 {
-       return rdtsc_lfence() + curcpu()->ci_tsc_skew;
+       //return rdtsc_lfence() + curcpu()->ci_tsc_skew;
+       return rdtsc_lfence();
 }
 
 void

So I supposed the skews are not calculated properly.  Also I found
NetBSD changed the skew calculating so that it checks 1000 times and
take the minimum value.

  https://github.com/NetBSD/src/commit/1dec05c1ae197b4acfc7038e49dfddabcbed0dff
  https://github.com/NetBSD/src/commit/66d76b89792bac1c71cd5507ba62b08ad02129ef


I checked skews on the machine by the following debug code.

diff --git a/sys/arch/amd64/amd64/tsc.c b/sys/arch/amd64/amd64/tsc.c
index 238a5a068e1..83e835e4f82 100644
--- a/sys/arch/amd64/amd64/tsc.c
+++ b/sys/arch/amd64/amd64/tsc.c
@@ -302,16 +302,42 @@ tsc_read_bp(struct cpu_info *ci, uint64_t *bptscp, 
uint64_t *aptscp)
        *aptscp = tsc_sync_val;
 }
 
+#define        TSC_SYNC_NTIMES 1000
+
+static int tsc_difs[MAXCPUS][TSC_SYNC_NTIMES];
+
+void
+tsc_debug(void)
+{
+       int i, cpuid = curcpu()->ci_cpuid;
+
+       for (i = 0; i < TSC_SYNC_NTIMES; i++) {
+               if (i % 10 == 0)
+                       printf("%5d", tsc_difs[cpuid][i]);
+               else
+                       printf(" %5d", tsc_difs[cpuid][i]);
+               if (i % 10 == 9)
+                       printf("\n");
+       }
+       printf("\n");
+}
+
 void
 tsc_sync_bp(struct cpu_info *ci)
 {
+       int i, mindif = INT_MAX, dif;
        uint64_t bptsc, aptsc;
 
-       tsc_read_bp(ci, &bptsc, &aptsc); /* discarded - cache effects */
-       tsc_read_bp(ci, &bptsc, &aptsc);
+       for (i = 0; i < TSC_SYNC_NTIMES; i++) {
+               tsc_read_bp(ci, &bptsc, &aptsc);
+               dif = bptsc - aptsc;
+               if (abs(dif) < abs(mindif))
+                       mindif = dif;
+               tsc_difs[ci->ci_cpuid][i] = dif;
+       }
 
        /* Compute final value to adjust for skew. */
-       ci->ci_tsc_skew = bptsc - aptsc;
+       ci->ci_tsc_skew = mindif;
 }
 
 /*
@@ -342,8 +368,10 @@ tsc_post_ap(struct cpu_info *ci)
 void
 tsc_sync_ap(struct cpu_info *ci)
 {
-       tsc_post_ap(ci);
-       tsc_post_ap(ci);
+       int i;
+
+       for (i = 0; i < TSC_SYNC_NTIMES; i++)
+               tsc_post_ap(ci);
 }
 
 void

----
Stopped at      db_enter+0x10:  popq    %rbp
ddb{0}> machine ddbcpu 1
Stopped at      x86_ipi_db+0x12:        leave
ddb{1}> call tsc_debug
-8445 -6643 -52183     0    -3    -4    -7   -11    -5     0
  -11    -9    -5    -3    -4    -3    -7     8    -5    -6
   -5    -9    -3    -9    -7    -1    -5    -5    -9    -2
   -6    -4    -6    -4   -11    -8    -3    -4    -8    -1
   -9    -1    -8     1    -8     6    -5    -4     2    -2
   -8    -3    -1    -5    -2    -2     1     2    -2    -9
  -12     0    -9    -2    -2    -5    -2     1     2     0
   -1     2    -2     6    -5    -1    -2    -4     2    -2
    0    -9    -9    -6    -2     2     3    -6    -1     3
    8     4    -2     2    -8     7     1     2    -2     1
   -2    -6    -2     5     0     0    -4    -9     6    -2
   -3    -6    -2   -12     1    -9    -2    -3   -10    10
    2    -1    -3    -2     3     1     1    -5     3    -3
   -5     1    -6    -2    -3     0     0     9     1     6
    8    -6     5     4   -12    -1     4     2    -1    -1
   -1     2     2     0    -5     1     2    -8     3     9
    0     6    -3     4     6     0     8     6   -14    -1
   -1     0    -6    -7     6   -10     7    -6    -5    -4
    6   -12     4     3    -5     5     1    -6     3     0
   -2     0     6    -9    -2    -1     1    -1     4     0
    4    10   -13     1    -8    -2    -8    -3    -5    -3
   -5    -5     1    -9    -9     0    -3    -1     2     6
   -2     2    -3    -9    -9   -11    -7    -6    -4    -9
   -4    -9    -3    -4     0    -5     0    -9   -12    -7
   -6    -9     1    -5    -4   -12     7    -3   -12    -4
   -5    -5    -6    -9    -7    -1     0     0    -1    -2
   -6    -8     0     1    -8    -5    -2    -4     0    -1
   -3   -10   -15    -3    -8   -11    -9    -9     2     0
   -2    -4    -2    -3   -13    -9    -9    -1   -10    -6
    0     0     2    -2    -4     1    -6     0     0    -5
   -2    -7    -5    -2    -2     1    -2    -6    -1    -7
   -6    -1    -9    -3    -2    -1    -4    -6    -3    -4
   -4    -3    -4   -11     1    -9     0    -3     2    -9
   -8     2    -1    -7    -5    -5    -9     2    -3    -5
    0     5   -12     0    -5    -3    -6    -1   -13   -10
   -9     0     0    -5    -7    -4    -3    -3    -3    -2
   -2     3    -5    -3    -5    -1    -7    -4   -10     0
   -3     0     2     1    -4    -1    -5    -3    -5    -6
   -4    -8    -3     0    -1    -2   -13   -10    -9    -5
  -11   -11    -4    -3     0     5    -2    -3    -6     0
   -6    -9    -1    -4    -1     2    -2    -7    -9     0
   -8    -4    -6    -5   -12    -9    -5   -11    -5    -8
   -8    -6    -2    -3    -9    -5    -9   -11   -10     1
   -3    -6    -1    -1    -6     0     0    -8    -4     0
   -3   -10    -4    -2    -3    -2    -1    -9   -11   -12
   -4     2    -2 -5012     5     2   -17     0     7    -5
    0    -4    -3     6    -7    -1    -1     4    -6     3
    0    -4    -9    -7   -11   -11     8    -7   -15   -10
    3    -4     1   -17    -4     3   -17     0     4     3
   -2     0    -3   -10    -2     1     3    -5   -12   -19
    1     2     5     1    -9     4    -2    -3    -4     0
   -1   -11    -3    -1    -9    -5     0    -8     7    -2
   -6    -7     4    -5    -2    -1    -5     0    -5    -5
  -14    -2    -8     0   -11     9   -10     2    -6   -17
   -3    -5    -6     2     0     9   -14     0    -4    -7
    6     2     2    -9    -9     5     5     0    -6     3
  -12     5    -2   -13   -10    -5    -7     2   -11    -3
   -6    -2   -13     1     8    -5   -14     2     4    -3
  -13    -5   -11    -9   -10     4    -3    -1     9   -17
  -11     2   -13    -2    -1    -9   -10     0    -5    -4
    0    10    -8    -5    -8    -3   -14    -6     3   -15
    1    -5     1   176    -8    -7    -7    -4    -1    -1
   -8    -7    -4     1    -6    -9     1    -2    -9    -4
   -4    -1    -7     0    -8    -3    -4    -3    -1    -2
   -5    -6    -9     2    -6     0    -8    -5     0    -9
  -10     0    -4     4    -6   -11    -3     2   -12     1
   -2    -6    -6    -3    -7    -7     0    -9    -1    -9
   -1    -8    -4    -3   -11     1     0     1    -2    -4
  -11    -1    -9    -9   -10    -1    -1    -9    -8    -6
   -3    -4    -2    -4     1     0    -5    -2    -1     4
   -9    -1    -4     1    -8   -11     0   -10    -4    -9
   -5    -2    -2     4     0    -7    -4     1    -2     1
   -4    -1    -5    -9    -9    -5   -10    -4   -12    -8
   -4    -9    -7    -5    -3     3    -5   -12    -3     0
   -8    -4    -9    -5    -6     0     0    -1    -2    -6
   -8   -12    -3     1     2    -6    -1    -7   -10    -9
   -6    -8     0    -2    -3    -7    -3    -2     6    -3
  -12     0     0    -7    -9    -6    -1    -5    -2    -9
   -6     1     0    -3    -1    -1    -2     2    -2    -3
   -7    -9    -1    -8    -4    -2     5    -5    -3   -10
    2     6    -3     0    -6    -8    -9    -1    -1    -7
   -8    -1    -1    -4    -4     7    -2   -10   -11    -6
    2     2    -4     3    -2    -1    -3     0     0    -7
   -1    -3    -4    -9    -5    -2    -5    -7    -5    -3
    0     1    -3     5    -3    -4    -1    -6    -9    -4
   -6     0    -9    -6     0    -2     4    -2    -4   -10
   -9    -4    -3    -9    -3    -6    -9    -8    -4     1
   -5    -6    -5     1     0    -2    -3    -6    -5    -9
   -4     1    -5    -4    -2    -4    -8    -3    -4     0
    2    -5    -3    -7    -1    -2    -1    -9    -6   -15
  -10    -6    -2    -7    -1    -3     3    -6    -6    -9
  -10    -8    -9    -2    -3     0    -6     3    -4     4
    3     3     8    -2    -2    -4     0    -3    -9    -3
   -6    -4     3     2     1     1    -3    -7   -15    -1
   -4    -6    -1    -2    -1   -12     2    -1    -4     1
    2     3    -5     3    -3    -7    -6    -5     0     1
    5   -13    -8     0    -5     2     0    -5    -3     6
   -4    -9    -2    -8    -1    -9   -10    -1   -10    -6
  -10    -4   -10    -9    -2     1     0    -4    -3     0
    1    -3    -1    -4    -7   -10   -13    -8    -1    -1

0x1
ddb{1}> machine ddbcpu 2
Stopped at      x86_ipi_db+0x12:        leave
ddb{2}> call tsc_debug
-8242 -6496 -50265    -1    -2    -2     1   109    -2    -3
    3     3    -8    -3    -4     4     0    -8    -7    -5
   -5     3    -7    -5    -4    -9    -7    -3     0     2
   -5     2     1     3    -2     3     8    -6   -11     8
    8    -5     1     5     0    -8     2     0     6     3
  -14     7    -2    -1    -3     1    -5    -6     0     5
    1    -1     0    -2    -5     2    -3     0    -3    -1
   -5   -12    -4    -4    -9     4     0    -2    -2    -8
    2     5     7    -2     0    -6   110    -8    -8    -4
    0     5    -7    -3    -5    -4     9    -2    -2     3
   -8    -2    -5     4    -3   217     0    -7    -7    -6
    7   -10    -9    -3     3   -14     3    -5     5   -12
    5    -8   -17    -5   286    -6     0    -3    -4    -2
    1    -5    -5    -9    -6    -7    -3    -5     6     0
    1    -1    -4    -2     2    -2    -2    -2    -5     2
   12     3   -18    -8     6    -4    -3     6     2    -3
   -7    -3     4    -5   -23     9     6     6    -6   -11
    9    -1   -10 50505    -1     2     6   -11     2    -2
   -4    -6   201     1     3     4    -9     6     0     1
   -4     0    -1     3     4     1     6    -7    -5     4
  -14    -3    -1    -8     5     6    -5     3    -7    -9
   -7     1    -2     5    -2     0    -2    -9     4    -3
   98    -5     7    -7     3     0    -5     0     9     2
   -7    -5    -3   -12   -11   -11     6    -5    -7    -6
  210     5    -3    -5    -4   -11    -6     0    -5    -9
    3     0    -9     5     1     0     0    -7    -5   210
    1    -6   -17    -8     0     1    -2    -8     1    -7
   10    -8    -8    -9     4    -2    -4    -3   204     5
   -9   -15     3    -1    -5     0   -12    -1     0     1
   -1    -6    -5    -9    -1     4    -1    -1     0     1
    4    -8   -13     1     0    -5    -6     0    -4     0
    6    -2    -4    -8    -7   -12    -2    -2    -6    -8
   -5     0    -8    -7   -11     0     6    -1    -8    -3
    2     6    -6     0   -10   285    -1    -2    -8    -6
   -6    -1    -5    -6     0    -5    -8    -5     1    -8
   -1     1     4    -3    -4   188    -3    -3   -10     5
    6     0    -7     4     1     2     0    -2    -2     2
   -3    -1    -9   -12   201    -1    -7    -1     8     0
    0     0    -5     0     7   -18     5     1    -2    15
    5    -6     4   -10   272     0    -4    -3     2   -10
   -7     7     3     4     1     6    -9    -8   -12    -2
   -2    -2    -6     8     3    97    -1    -7     5     1
   -7     4    -6    -9    -7    -2     0    -6     8   -13
   -1     3    -9    -4   233    -2     0     0    -5    -5
   -2     0     0     5    -7     6   -14     4    -6     5
    4     3     3    -3   103    -2    -6   -11     2    -2
   -3    -8     0    -1     1     0    -6     1     1   -10
   -1     0    -1     0     0    -1    -6    -4    -4    -3
    3     0    -5     0     2    -2     6     0   -13     3
    1   -16    -2   -12   206    -4    -6    -5    -3     2
   -8    -2    -9    -2     9     7    -1     1     3    -5
    6     6    10     0    99    -2    -1    -2     0    -6
   -8    -9     0     3     0   -11    -6     1    -4     9
  -11   -11     2    -1   276    -7     2     4    -4    -3
    4     2   -12     8     1    -4     0    -1    -1    -1
    5    -8     0     6   232    -4     2    -2   -11     2
   -6     0     4     6    -7     8    -6     3    -3    -9
    0     1    -7     2    -3    -5    -3    -2    -8    -4
  -14    -2     0     4    -4    -3    -4     9     3    -1
   -5    -8     1     0   210     0    -6    -4     2     2
    0    -3    -4     0     4   -12    10    -2    -3    -1
    3     7    -3     6    -9   190     4     6    -2    11
  -10    -2    -9     3     2     4    -4    -7    -9    -2
  -10    12     1    -7     3    -1     0    -1   -11     6
    6     0    -8     1     4     2    -2    -5     0     0
    5    -5    -3    -5   205    -1    -3    -1     0    -4
   -3    -7     3     0    -7    -5    -4    -3     7     1
  -14    -2     0   -14     2     0     7    11    -2    -7
    6    -6    -3    -4     0     4    -3    -4    -3    -7
   -6     3    -4     0     4    -3    -6     3     4    -4
   -6     7   -11     1   -10   -10   -12    -4    -3     6
   -5    -6     5   212    -8     1    -4     3    -3    -8
    0   -10     0     2     6    -3    -1   -13     1     6
   -6     5    -4     0    -7    -4    -5    -6     1    -2
    1   -10   -12    -3    -8     9   -11     0     1    -3
   -1     1   186     2   -12     3    -4     0     0    -1
   -5    -4     1    -1     4     5   -10     0    -4     1
   -1    -6   270     0   -17     5     0     0    -4    -1
    4     6     1     0    -6     6     5    -3     3    -2
   -6    -7    18   -16     0     9     4     3    -1     6
    4     1    -5     7   -11    -1    -6    -2     6    -2
   -8   256    -5    -2     1    -1    -5    -3    -9     0
   -1     3    -2   -11     4     3    -7    -3     3    -1
   -5    -5     0    -4    -1    -3    -3     6    -3     3
    3    -2   -11    -2    -3    11    -8     1     5    -7
    5   -12    -3     8    -9    -5     7     5    -3     2
   -7    -3    -6     2    -2    -1    -2    -9    -8    99
    6    -2     9    -1    -4    -2     0    -2    -7    -5
    0     1    -4    -8    -1    -2     2    -8     2   205
   -3   -10    -1    -1    -2    -5     2     2     5    -2
   -5    -6    -4     6     6    -6     4     1    -5     0
   -7     3     1     0   -11    -7    -3     5    -5     5
    1    -1     3    -5    -8     0    -1     0   183    -5
    0     4    -1    -6   -11   -10     1   -18     3    -1
   -5    -9    -2     2     2    -2     0    99    -7    -8
   -1    -3    -5    -1    12    -3    -1     2     1     4
    7     3   -14     2    -4     8    -9    -3    -8    -5
    6    -6     5   -12     6    -1    -9    -4    -4     1
   -6     0     0    -2    -3    -5    -9    -2    -9    -3
    3   -16    -2    -1     0     9    -4     5    -6     5

0x1
ddb{2}> machine ddbcpu 3
Stopped at      x86_ipi_db+0x12:        leave
ddb{3}> call tsc_debug
-8336 -6457 -45527     0    -1     0    -2     4     0     5
   -9    -6    -4    -4     6     4     0    -3    -4     5
    3     6   -12    -1     1     1    -3     6    -4    -2
   -2     2     4    -3     0    -1     3     0     1     3
   -3     3    -1     4    -5    -2    -2    -9     6    -9
    0     1    -2    -6     8    -4    -2    -2     6     1
   -1     1    -6    -6     4    -5    -1     6    -1    -1
    3     5     0    -6     5    -4    -2    -6    -3    -4
   -5     2    -3    -3    -5    -3    -5 -5720     0     5
   -1    -3     3    -2     4    -6     8   -16    -6    -3
   -2     4     8    -3     3    -1     2    -8    -3   -19
   -8     3    -7    -9    -6    -3     1    -3    -6     7
    4     1     3     2    -4     7    -3     2     2    -4
  -10    -8   -14    -2     2    -3     3    -2     3    -3
    5     5    -6     9    -3   -12    -6     1   -10     7
   -6     5    -4     1     6     3     2     2    -6    -1
    6    -8    -5     7     3    -3    -4    -6     1    -5
    4    -6     2     6    -6     3    -8    -5    -6     0
   -5    -2   -13    -8     3     0   -17    -7    -9     1
    6   -12     3     6     3    -3     4    -1    -7     0
    2     0    -7   -10    -6     3     1     2   -19     4
    1   -18     1    -3    -6   -14     4     6     3    -4
   -7   -11    -1    -1     3     0     6     6    -8   -14
    3    -2     6    -5     0     1     0    -7     0     4
   -3   -16    -2    -4   -12    -4     6     0    -8    -4
   -4    -4    -3     0    -6   -13   -10   -15    -6     2
    0    -3     0    -8     4    -1    -1     5    -4    -1
   -7     2     1     1     3    -3    -1   -18     6     8
   -2     3    -6     0    -6    -2     2    -2    -7     1
   -6   -13    -4    -2    -1    -6     6    -5    -9   -14
    4     5    -4    -2    -9    -2    -2   -13     1   -18
   -1     2    -5     6    -6    -7    -9    -6     1     6
  -13    -4     3     0    -8    -6    -6   -10    -2    -9
    5     2     4     1     6    -5    -8    -6     2    -4
   -3    -5    -2    -6   -10     0     5    -2     8    -3
    8   -11   -11    -7    -5   -13   -19    -5   -14    -3
    3     2     1     3     6    -1    -9   -16     3    -7
    1    -3    -5     0    -7     6     4    -2    -2     4
    4    -6    -6     8    -6    -7    -5    -2     0     4
   -1     3     1     3    -6    -2    -4    -9     1     0
   -2     3     2   -16     4   -15   -11    -3     8     0
   -6    -3   -18    -7    -8     8    -8     6    -7    -4
   -8    -7    -9     0    -2     3     7    -2     1    -6
    2    -6     8    -1   -12    -8    -4     3   -13    -2
  -11     1    -2    -7    -3     0   -16    -8     4    -9
  -15    -8    -9     8     5     7    -9     5   -10    10
    1     6    -6     3    -6    -4     5     0    -3    -7
   -1    -4   -10    -2     0   -11     8    -8    -3   -11
    4    -6     1    -8    -1    -6     3    -1   -12    -7
   11    -1     0    -4   -13     0   -10     7    -2     0
   -6     4     0   -12    -9     6    -2    -5    -5    -7
   -1    -9    -5     3     3    -7     3   -16    -2   -10
    0    -2     6     4     4    -6    -9    -3    -6     4
   -5    -1     7   -11   -21    -9    -3    -1     4   -13
   -7     0    -3     0   -10    -7     8    -9     7     6
   -9   -14     5    -9    -7    -8    11    -6     1    -3
   -9     7     5     0   -12    -3    -4   -18     0     4
   -1     8    -8     9     4     0     5   -10   -10    -8
    1     8    -1     4     1    -3    -6    -6    -5    -1
  -12    -6    -8   -14   -10     2    -1     9     0    -9
    0    -8    -6    -5     1   -14    -6     5     1    -7
    3    -9     6    -4     3     0   -21     8     7     5
    0     0    -2     2     1    -7   -11     1    -7     2
   -3    -2     9     1     3    -1    -8     0   -18    -7
   -3     6     1     1    -8    -5    -1     2    -4    -6
  -10    -5   -20   -18     5    -7     2     5    -3    -3
   -6    -3    -3     4    -7    -2    -4     2    -6   -11
   -4   -15    -6    -5     2    -1   -10    -4    -6    -3
   -1     0    -6   -10     5    -5     2     2    -8     6
   -1     5    -5    -9    12     0    -6   -17     2    -4
    4   -11    -1    -8     0    -3   -11    -8     0    -6
    2    -1    -4    -9   -12     3     6   -10    -2    -6
  -13     1   -10     1   -13     5    -4     3   -11     4
   -8     4     4   -17     6   -12     3   -13     0    -3
   -7     4   -11    -1     1     3     5    -8    -3     0
    4    -8    -1     4   -13     2    -1     2     5    -6
   -6     4    -4    -5     1    -4     4     5    -2   -10
   -9     0   -14    -2    -7     1    -1   -14   -15     8
   -3     9    -3    -4    -8     0     2     5   -11   -13
   -5   -13    -3    -7     9    -3    -7    -6    -9    -7
   -8   -10    -1     6     2     2     3   -13    -6    -5
    3   -13     2    -6     4     1     0    -9     4   -11
  -15     0     1   -12    -1     2   -11     2    -1   -13
  -13    -5     3     9   -11    -8     2   -12    -2    -5
    0    -3    -2     1    -6    -2    -1     0    -3     2
    0    -9    -4     1    -2     3    -6     0    -4    -6
    2     1   -14    -4    -7   -23    -1    -4    -8    -8
    2    -4     1     6   -10     5    -9    -6     6    -1
    4    -2    -9     0    -5    -1     8     0     3     4
   -4    -7    -4     2   -15    -6     2     1    -6    -4
   -3    -3     3    -7    -2    -9     9    -2    -9    -4
    3    -8   -10    -3    -4     1    -4   -10    -1     3
   -1   -15     5     0     2    -6     4     6    -2     0
    2     5     3   -12    -5    -5    -2    -4    -4     5
   -8    -4    -6   -16    -1     4    -4    -1    -8     0
    6   -10     5     0     1    -3    -9     8     0   -11
   -3   -13    -1     3     3    -6    -6    -2     3     5
    4    -6    12   -17     1    -5    -5    -2     1    -3
   -7     5    -4     8    -5    -1    -5     8   -12     4
   -6     2    -5    -9     2    -2     5     3    -5    -8

0x1
ddb{3}> 
----

I seems that we can fix the problem by comparing TSC more times and
choosing the minimum value.

The diff also includes a fix for the problem (use the minimum value of
1000 samplings).  With the diff, I tried "monotime" test program over
100 times, it didn't find any clock going back.


dmesg
----
OpenBSD 6.8 (GENERIC.MP) #5: Mon Feb 22 04:36:10 MST 2021
    
r...@syspatch-68-amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
real mem = 6425083904 (6127MB)
avail mem = 6215311360 (5927MB)
random: good seed from bootblocks
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.7 @ 0xbfbb401f (98 entries)
bios0: vendor VMware, Inc. version "VMW71.00V.0.B64.1506250318" date 06/25/2015
bios0: VMware, Inc. VMware7,1
acpi0 at bios0: ACPI 4.0
acpi0: sleep states S0 S1 S4 S5
acpi0: tables DSDT SRAT FACP APIC MCFG HPET WAET
acpi0: wakeup devices PCI0(S3) USB_(S1) P2P0(S3) S1F0(S3) S2F0(S3) S3F0(S3) 
S4F0(S3) S5F0(S3) S6F0(S3) S7F0(S3) S8F0(S3) S9F0(S3) S10F(S3) S11F(S3) 
S12F(S3) S13F(S3) [...]
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz, 2397.42 MHz, 06-3f-02
cpu0: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,MMX,FXSR,SSE,SSE2,SS,HTT,SSE3,PCLMUL,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,HV,NXE,RDTSCP,LONG,LAHF,PERF,ITSC,SENSOR,ARAT,MELTDOWN
cpu0: 256KB 64b/line 8-way L2 cache
cpu0: smt 0, core 0, package 0
mtrr: Pentium Pro MTRR support, 8 var ranges, 88 fixed ranges
cpu0: apic clock running at 65MHz
cpu1 at mainbus0: apid 1 (application processor)
cpu1: Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz, 2397.29 MHz, 06-3f-02
cpu1: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,MMX,FXSR,SSE,SSE2,SS,HTT,SSE3,PCLMUL,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,HV,NXE,RDTSCP,LONG,LAHF,PERF,ITSC,SENSOR,ARAT,MELTDOWN
cpu1: 256KB 64b/line 8-way L2 cache
cpu1: disabling user TSC (skew=-5310)
cpu1: smt 0, core 1, package 0
cpu2 at mainbus0: apid 2 (application processor)
cpu2: Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz, 2397.28 MHz, 06-3f-02
cpu2: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,MMX,FXSR,SSE,SSE2,SS,HTT,SSE3,PCLMUL,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,HV,NXE,RDTSCP,LONG,LAHF,PERF,ITSC,SENSOR,ARAT,MELTDOWN
cpu2: 256KB 64b/line 8-way L2 cache
cpu2: disabling user TSC (skew=-5335)
cpu2: smt 0, core 2, package 0
cpu3 at mainbus0: apid 3 (application processor)
cpu3: Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz, 2397.29 MHz, 06-3f-02
cpu3: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,MMX,FXSR,SSE,SSE2,SS,HTT,SSE3,PCLMUL,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,HV,NXE,RDTSCP,LONG,LAHF,PERF,ITSC,SENSOR,ARAT,MELTDOWN
cpu3: 256KB 64b/line 8-way L2 cache
cpu3: disabling user TSC (skew=-7386)
cpu3: smt 0, core 3, package 0
ioapic0 at mainbus0: apid 4 pa 0xfec00000, version 11, 24 pins, remapped
acpimcfg0 at acpi0
acpimcfg0: addr 0xe0000000, bus 0-127
acpihpet0 at acpi0: 14318179 Hz
acpiprt0 at acpi0: bus 0 (PCI0)
acpipci0 at acpi0 PCI0: 0x00000000 0x00000011 0x00000001
acpicmos0 at acpi0
"PNP0A05" at acpi0 not configured
acpiac0 at acpi0: AC unit online
acpicpu0 at acpi0: C1(@1 halt!)
acpicpu1 at acpi0: C1(@1 halt!)
acpicpu2 at acpi0: C1(@1 halt!)
acpicpu3 at acpi0: C1(@1 halt!)
cpu0: using Broadwell MDS workaround
pvbus0 at mainbus0: VMware
vmt0 at pvbus0
pci0 at mainbus0 bus 0
0:16:0: rom address conflict 0xffffc000/0x4000
pchb0 at pci0 dev 0 function 0 "Intel 82443BX AGP" rev 0x01
ppb0 at pci0 dev 1 function 0 "Intel 82443BX AGP" rev 0x01
pci1 at ppb0 bus 1
pcib0 at pci0 dev 7 function 0 "Intel 82371AB PIIX4 ISA" rev 0x08
pciide0 at pci0 dev 7 function 1 "Intel 82371AB IDE" rev 0x01: DMA, channel 0 
configured to compatibility, channel 1 configured to compatibility
pciide0: channel 0 disabled (no drives)
atapiscsi0 at pciide0 channel 1 drive 0
scsibus1 at atapiscsi0: 2 targets
cd0 at scsibus1 targ 0 lun 0: <NECVMWar, VMware IDE CDR10, 1.00> removable
cd0(pciide0:1:0): using PIO mode 4, Ultra-DMA mode 2
piixpm0 at pci0 dev 7 function 3 "Intel 82371AB Power" rev 0x08: SMBus disabled
"VMware VMCI" rev 0x10 at pci0 dev 7 function 7 not configured
"VMware SVGA II" rev 0x00 at pci0 dev 15 function 0 not configured
mpi0 at pci0 dev 16 function 0 "Symbios Logic 53c1030" rev 0x01: apic 4 int 17
mpi0: 0, firmware 1.3.41.32
scsibus2 at mpi0: 16 targets, initiator 7
sd0 at scsibus2 targ 0 lun 0: <VMware, Virtual disk, 1.0>
sd0: 16384MB, 512 bytes/sector, 33554432 sectors
sd1 at scsibus2 targ 1 lun 0: <VMware, Virtual disk, 1.0>
sd1: 81920MB, 512 bytes/sector, 167772160 sectors
mpi0: target 0 Sync at 160MHz width 16bit offset 127 QAS 1 DT 1 IU 1
mpi0: target 1 Sync at 160MHz width 16bit offset 127 QAS 1 DT 1 IU 1
ppb1 at pci0 dev 17 function 0 "VMware PCI" rev 0x02
pci2 at ppb1 bus 2
ppb2 at pci0 dev 21 function 0 "VMware PCIE" rev 0x01: msi
pci3 at ppb2 bus 3
vmx0 at pci3 dev 0 function 0 "VMware VMXNET3" rev 0x01: msix, 4 queues, 
address 00:0c:29:7d:49:9c
ppb3 at pci0 dev 21 function 1 "VMware PCIE" rev 0x01: msi
pci4 at ppb3 bus 4
ppb4 at pci0 dev 21 function 2 "VMware PCIE" rev 0x01: msi
pci5 at ppb4 bus 5
ppb5 at pci0 dev 21 function 3 "VMware PCIE" rev 0x01: msi
pci6 at ppb5 bus 6
ppb6 at pci0 dev 21 function 4 "VMware PCIE" rev 0x01: msi
pci7 at ppb6 bus 7
ppb7 at pci0 dev 21 function 5 "VMware PCIE" rev 0x01: msi
pci8 at ppb7 bus 8
ppb8 at pci0 dev 21 function 6 "VMware PCIE" rev 0x01: msi
pci9 at ppb8 bus 9
ppb9 at pci0 dev 21 function 7 "VMware PCIE" rev 0x01: msi
pci10 at ppb9 bus 10
ppb10 at pci0 dev 22 function 0 "VMware PCIE" rev 0x01: msi
pci11 at ppb10 bus 11
ppb11 at pci0 dev 22 function 1 "VMware PCIE" rev 0x01: msi
pci12 at ppb11 bus 12
ppb12 at pci0 dev 22 function 2 "VMware PCIE" rev 0x01: msi
pci13 at ppb12 bus 13
ppb13 at pci0 dev 22 function 3 "VMware PCIE" rev 0x01: msi
pci14 at ppb13 bus 14
ppb14 at pci0 dev 22 function 4 "VMware PCIE" rev 0x01: msi
pci15 at ppb14 bus 15
ppb15 at pci0 dev 22 function 5 "VMware PCIE" rev 0x01: msi
pci16 at ppb15 bus 16
ppb16 at pci0 dev 22 function 6 "VMware PCIE" rev 0x01: msi
pci17 at ppb16 bus 17
ppb17 at pci0 dev 22 function 7 "VMware PCIE" rev 0x01: msi
pci18 at ppb17 bus 18
ppb18 at pci0 dev 23 function 0 "VMware PCIE" rev 0x01: msi
pci19 at ppb18 bus 19
ppb19 at pci0 dev 23 function 1 "VMware PCIE" rev 0x01: msi
pci20 at ppb19 bus 20
ppb20 at pci0 dev 23 function 2 "VMware PCIE" rev 0x01: msi
pci21 at ppb20 bus 21
ppb21 at pci0 dev 23 function 3 "VMware PCIE" rev 0x01: msi
pci22 at ppb21 bus 22
ppb22 at pci0 dev 23 function 4 "VMware PCIE" rev 0x01: msi
pci23 at ppb22 bus 23
ppb23 at pci0 dev 23 function 5 "VMware PCIE" rev 0x01: msi
pci24 at ppb23 bus 24
ppb24 at pci0 dev 23 function 6 "VMware PCIE" rev 0x01: msi
pci25 at ppb24 bus 25
ppb25 at pci0 dev 23 function 7 "VMware PCIE" rev 0x01: msi
pci26 at ppb25 bus 26
ppb26 at pci0 dev 24 function 0 "VMware PCIE" rev 0x01: msi
pci27 at ppb26 bus 27
ppb27 at pci0 dev 24 function 1 "VMware PCIE" rev 0x01: msi
pci28 at ppb27 bus 28
ppb28 at pci0 dev 24 function 2 "VMware PCIE" rev 0x01: msi
pci29 at ppb28 bus 29
ppb29 at pci0 dev 24 function 3 "VMware PCIE" rev 0x01: msi
pci30 at ppb29 bus 30
ppb30 at pci0 dev 24 function 4 "VMware PCIE" rev 0x01: msi
pci31 at ppb30 bus 31
ppb31 at pci0 dev 24 function 5 "VMware PCIE" rev 0x01: msi
pci32 at ppb31 bus 32
ppb32 at pci0 dev 24 function 6 "VMware PCIE" rev 0x01: msi
pci33 at ppb32 bus 33
ppb33 at pci0 dev 24 function 7 "VMware PCIE" rev 0x01: msi
pci34 at ppb33 bus 34
isa0 at pcib0
isadma0 at isa0
fdc0 at isa0 port 0x3f0/6 irq 6 drq 2
com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
com0: console
com1 at isa0 port 0x2f8/8 irq 3: ns16550a, 16 byte fifo
pckbc0 at isa0 port 0x60/5 irq 1 irq 12
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0 mux 1
pms0 at pckbc0 (aux slot)
wsmouse0 at pms0 mux 0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
efifb0 at mainbus0: 1152x864, 32bpp
wsdisplay0 at efifb0 mux 1
wskbd0: connecting to wsdisplay0
wsdisplay0: screen 0-5 added (std, vt100 emulation)
vscsi0 at root
scsibus3 at vscsi0: 256 targets
softraid0 at root
scsibus4 at softraid0: 256 targets
root on sd0a (a5bd0d220920df21.a) swap on sd0b dump on sd0b
----

This happens on 2 ESXi hosts at least

- 1
  - ESXi 6.0.0, 3029758
  - Xeon E5-2620 x 2
- 2
  - ESXi 6.7.0 Update 3 (Build 14320388)
  - Xeon Silver 4208 x 2

Reply via email to