3

我想知道是否每个人都知道在 Windows Server 2008 上如何保证精确的PTP同步。

我知道这个线程:Windows 中进程的最短保证时间是多少? 其中讨论了 Windows 的本地时间,是的,这根本不提供任何保证。

但是在硬件解决方案 (PTP) 方面呢?是否有任何限制阻止保证 < 1 毫秒?我知道取决于时间的进程会争夺 CPU 时间,但是如果进程在需要时确实有 CPU 时间,那么还有其他可能会阻碍的吗?

编辑 1:我在标题中添加了“(与 Linux 相比)”,因为这原本是我关心的问题之一。

4

1 回答 1

3

可以安排一些事情来获得 Windows Server 2008 上的可靠处理时间。其中一些是:

  1. 避免CPU负载过重。

  2. 安排代码的小内存占用。

  3. 设置进程优先级线程优先级高。REALTIME_PRIORITY_CLASS甚至可能分别与和一样高THREAD_PRIORITY_TIME_CRITICAL

  4. 设置线程关联掩码以避免时间关键部分在Core 0. Core 0 专用于一些系统服务。使用不同的代码可以避免依赖。

  5. Sleep(0)适时使用。Sleep(0) 是一个异步服务,它强制调度程序做出反应。通过这种方式,您可以触发调度程序,该调度程序将选择您的进程/线程以立即获取 CPU,因为它具有最高优先级。

  6. 确保代码也确实为其他服务留出了时间。最高优先级将导致所有其他线程基本停止。(没有鼠标事件或任何将被处理)

  7. 可能通过多媒体定时器 API 增加系统中断频率。使用timeGetDevCaps函数查询系统允许的最大中断频率,并在结构体中使用timeBeginPeriodwPeriodMin返回的 by 。这将强制您的系统以最大中断频率运行。完成后不要忘记通过调用timeEndPeriod来释放多媒体计时器资源。timeBeginPeriodTIMECAPS

当认真遵循这些规则时,可以获得非常高可靠性的 10 微秒范围内的准确计时。然而,上述所有因素的总和导致了一些复杂性。因此,永远无法提供保证。但即使在 RTOS 系统上也没有这样的保证。当编码没有正确完成时,无论调用什么/如何调用操作系统,事情都不会按照他们应该做的方式工作。可以在此处找到更多注释和等效 .Net 服务的链接。

考虑到所有这些,可以将时间同步(精确时间协议)的实现时间缩短到 10 微秒。

精确时间协议开发人员常见问题解答可在此处找到。

在要求 Linux 后进行编辑:有一些可用的软件包,例如这个。这里报告的典型精度也在 10 到 100 微秒范围内。

毫不奇怪,在可比较的标准硬件上运行时,Windows 和 Linux 的结果非常相似。两者都不能做任何魔术。

于 2012-10-30T11:30:46.153 回答