早在一月份我就写过 英特尔正在为Linux开发定时I/O驱动程序使用PPS(每秒脉冲)来帮助实现多个设备之间的时间同步。外界对这一定时I/O/PPS功能的讨论并不多,而今天,当我们接近年底时,发布了一组新的Linux内核补丁,用于连接这一英特尔PPS生成器功能。
Intel Timed I/O PPS功能旨在确保多个设备之间更准确的时间同步。这些补丁证实,自2019年以来,英特尔平台一直支持英特尔定时I/O PPS,而且这一功能已经在谷歌和Facebook(Meta)等公司中使用。
发出了一份新的“征求意见书”新的补丁。英特尔工程师Lakshmi Sowjanya将这项工作总结为:
PPS(每秒脉冲)硬件/软件的目标是在电线上从系统产生信号,以便一些第三方硬件可以观察到该信号,并判断系统的时间与另一个系统或硬件的距离有多近。
现有的方法(如并行端口)需要软件在正确的时间翻转比特以创建PPS信号。很多事情都可以阻止软件准确地做到这一点。这种(定时I/O)方法更好,因为软件只是提前“武装”硬件,然后依靠硬件“启动”并在正确的时间翻转信号。
为了使用这种新硬件生成PPS信号,内核每秒唤醒两次,一次用于1- 0边缘,另一次用于0- 1边缘。它在需要进行信号的实际改变之前不久(~ 10 ms)完成此操作。它计算边缘将发生的TSC值,转换为硬件理解的值,并将该值编程到定时I/O硬件。实际的边缘过渡发生时,内核没有任何进一步的动作。
这里的结果是系统输出的信号比旧方法精确大约1,000倍。如果系统负载很重,则在旧方法中精度的差异更大。Facebook和Google是使用此功能的客户。
应用程序界面:
使用Timed I/O的API非常简单。通过向与定时I/O PPS设备关联的sysfs启用属性写入“1”或“0”值来启用和禁用该功能。每个定时I/O引脚由一个PPS器件表示。使能时,定时I/O引脚会持续产生与系统时钟同步的每秒脉冲数(PPS),否则会拉低。主板上的定时I/O信号在BIOS设置中启用。”
所以我们看看 这些补丁 lead and hopefully it won't be another 12 months before next hearing about this Intel Timed I/O PPS functionality. Granted the uses for this are rather nice but interesting to note the "roughly 1,000 times more accurate than the old methods."