time - Windows 服务器上的 PTP 同步(与 Linux 相比)- 可以保证什么精度

标签 time synchronization windows-server-2008 precision

想知道大家知道精度吗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 上可靠的处理时间。 其中一些是:

  1. 避免 CPU 负载过重。

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

  3. 设置process priority classthread priority高的。甚至可能分别高达 REALTIME_PRIORITY_CLASSTHREAD_PRIORITY_TIME_CRITICAL

  4. 设置thread affinity mask以避免时间关键部分在 Core 0 上运行。 Core 0 专用于某些系统服务。使用不同的代码可以避免依赖性。

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

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

  7. 可能通过多媒体计时器 API 增加系统中断频率。使用 timeGetDevCaps函数查询系统允许的最大中断频率并使用timeBeginPeriod wPeriodMinTIMECAPS 结构中的 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/

相关文章:

time - Go time.Now().UnixNano() 转换为毫秒?

python - 时间数据 '2018-06-19 11:21:13.311' 与格式不匹配

php - PHP 中减去时间字符串

javascript - 保持 JavaScript 和 CSS 同步的做法?

java - 没有打印语句,循环看不到其他线程更改的值

powershell - 设置在 Linux 上运行的 Jenkins 来执行 PowerShell 脚本

windows - WMIprvse 进程在 2008 服务器 R2 上泄漏内存

c++ - strftime() 在 Raspberry Pi (Raspbian) 上失败

c++ - 两个线程共享变量 C++

jenkins - xUnit 在 Jenkins 下失败 : BadImageFormatException