想知道大家知道精度吗PTP在 Windows Server 2008 上可以保证同步。
我知道这个线程:What is the minimum guaranteed time for a process in windows? 其中讨论了 Windows 的本地时间,是的,这根本不提供任何保证。
但是当谈到硬件解决方案 (PTP) 时呢?是否有任何限制阻止 < 1ms 的保证?我知道取决于时间的进程会竞争 CPU 时间,但如果进程在需要时确实有 CPU 时间,是否还有其他可能的阻碍?
编辑 1:我在标题中添加了“(与 Linux 相比)”,因为这本来是我关注的问题之一。
最佳答案
可以安排一些事情来获得 Windows Server 2008 上可靠的处理时间。 其中一些是:
避免 CPU 负载过重。
安排代码的小内存占用。
设置process priority class和 thread priority高的。甚至可能分别高达
REALTIME_PRIORITY_CLASS
和THREAD_PRIORITY_TIME_CRITICAL
。设置thread affinity mask以避免时间关键部分在
Core 0
上运行。 Core 0 专用于某些系统服务。使用不同的代码可以避免依赖性。在适当的时候使用
Sleep(0)
。 Sleep(0) 是一个异步服务并强制调度程序使用react。通过这种方式,您可以触发调度程序,它会选择您的进程/线程以立即获取 CPU,因为它具有最高优先级。确保代码也为其他服务提供时间。最高优先级将导致所有其他线程基本停止。 (不会处理鼠标事件或任何事件)
可能通过多媒体计时器 API 增加系统中断频率。使用 timeGetDevCaps函数查询系统允许的最大中断频率并使用timeBeginPeriod
wPeriodMin
由TIMECAPS
结构中的timeBeginPeriod
返回。这将强制您的系统以最大中断频率运行。不要忘记通过调用 timeEndPeriod 来释放多媒体计时器资源。完成后。
当仔细遵守这些规则时,可以获得 10 微秒范围内的精确计时,并且具有非常高的可靠性。然而,上述所有结果的总和导致了一些复杂性。因此永远无法提供保证。但即使在 RTOS 系统上也没有这样的保证。当编码没有正确完成时,无论操作系统被调用什么/如何调用,事情都不会按照他们应该做的方式工作。可以找到更多注释和指向等效 .Net 服务的链接 here .
采用所有这些可以将时间同步 (Precision Time Protocol) 的实现时间缩短到几十微秒。
可以找到精确时间协议(protocol)开发人员常见问题解答 here .
在 Linux 也被要求后编辑: 有一些可用的包,例如 this一。此处报告的典型精度也在 10 到 100 微秒范围内。
毫不奇怪,Windows 和 Linux 在类似的标准硬件上运行时,结果非常相似。两者都不能做任何魔术。
关于time - Windows 服务器上的 PTP 同步(与 Linux 相比)- 可以保证什么精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13136320/