On some hardware, the system the clock speed is somewhat different from what the hardware claims. This will cause the kernel’s idea of the current time to drift from the actual time, since the actual amount of time that elapses each kernel tick is different from what the kernel thinks (which is typically 10,000 microseconds by default).
If this drift is large enough, ntpd will unable to keep the system time synchronized with the servers to which it is talking. What you’ll typically see in this situation is that
ntpdc -p will show no servers with an asterisk next to the name (indicating it’s not synchronizing to any of them) and you’ll see the offsets creeping higher and higher in magnitude.