你会学到什么?
本文档描述怎样启用一个高精度时间解决方案。这个方案通过在思科Nexus3100平台交换机和Nexus9000系列交换机上面利用IEEE1588-2008(PTP)版本2(PTPv2)可以给现在的数据中心网络和金融交易应用提供亚微妙精度的时间。PTP是一个可以给包交换网络提供纳秒精度的分布式时间同步协议。
本文档解释现在的网络和应用所面对的挑战以及为什么我们需要PTP来提供亚微妙精度的时间,以及PTP这个协议是怎么工作的。本文档解释了PTP概念并且比较了硬件和软件时间戳。本文档也阐述了Nexus3100和9000系列交换机支持的PTP特性,包括封装远程SPAN(ERSPAN)中的PTP时间戳。本文档还提供了Nexus3100和Nexus9000系列交换机的PTP best practice。本文档还描述了nexus 3100和Nexus 9000系列交换机可以实现的PTP精度,并且解释了我们是怎么做测量的。
介绍
对于今天的数据中心网络和金融交易系统应用来说,精确严格的时间信息是非常重要的。网络和系统管理员需要visibility来观察网络上正在发生什么事情以及什么时候这些事情发生。应用开发和管理员需要在一个非常大和复杂的计算环境下关联各种各样的进程和应用产生的事件日志。作为数字证据也要求每个数据事务都被精确的打上时间戳。对于今天的数据网络来说,一个基础的要求是要有一个可靠、精确和可部署的时间同步协议。这个洗衣可以给数据通信网络中的每个元素,包括路由器、交换机、服务器和应用一个精确的时间信息。
挑战
传统的,网络时间协议(NTP)已经被用来在包交换网络中提供毫秒级时间。但是毫秒级别的精度已经不够了。
今天,为了看到每个进程、每个服务器、交换机上面正在发生的事情。组织需要一个时间同步协议来提供整个网络的微妙级别的细节。
GPS可以提供+/-100纳秒的精度,但是需要一个媒介来把信号发给用户。这就意味着网络中的每个设备都需要一个带有IRIG-B的BNC或者一些其它的串行接口来从其它网络中的获取时间信息。这样的需求使得在数据中心网络中部署GPS变的不大可能,即使是最小的数据中心也有几百台服务器、路由器、交换机以及其它并不支持特殊时间协议的接口的设备。实际一点来说,组织需要一个基于包的解决方案来提供精确的时间,而且要易于实现和管理。
解决方案
IEEE 1588-2008 PTPv2是一个适用于今天的数据中心和金融应用的时间解决方案。它有以下的这些优势:
- 空间局部化系统,可以部署在更大的系统上
- 基于包的时间分发和同步
- 纳秒到亚微妙级别的精度
- 简单的管理和维护,只需要几条管理指令
- 有能力管理冗余和容错系统
- 低成本和低资源使用,对于高端设备和低端设备都很友好
PTP的精度来源于交换机和服务器中的网络接口卡(NICs)对于PTP的硬件支持。这些硬件支持可以允许协议去精确的补偿消息在整个网络上的延迟和变化。这样的对于PTP的硬件支持使得协议可以获得纳秒级的精度。
PTP概念
这个部分给出了PTP中的一些主要的概念
PTP时钟类型
主要的时钟类型总结如下:
- Grandmaster clock (GM): grandmaster clock是在它所在的PTP域中的最高级别的时钟,所有其它PTP元素都把它当成主要的参考源。
- Secondary clock: secondary clock通过把自己和基本参考源进行同步从基本时钟获取时间信息。它不会把时间重新分发到其它的时钟。在数据中心,服务器是典型的PTP secondary clock。
- Ordinary clock: 一个ordinary clock是一个只有一个PTP port的 PTP clock。它可以是一个基本时钟(grandmaster)或者一个secondary clock。
- Boundary clock:一个boundary clock是PTP grandmaster和它的PTP secondary客户端之间的一个中间设备。它在这个PTP域当中有多个PTP端口,并且维护着域当中使用的时标。boundary clock中不同的端口可以是一个基本端口也可以是一个secondary端口。boundary clock会终止PTP流,恢复时钟和时间戳并且重新生成PTP流。secondary port是恢复时钟,primary port是重新生成PTP包。
- Transparent时钟(TC):一个透明时钟测量一个PTP事件消息经过设备的时间并且补偿这个包的延迟。
PTP拓扑结构
最佳主时钟算法(BMCA)可以被用来选择每个link上面的基本时钟,并且最终选出整个PTP域上的grandmaster clock。BMCA运行在ordinary clock和boundary clokc的每个端口上面,它比较本地数据集和从Announce消息当中收到的数据来选择链路上的最佳时钟。图1展示了数据中心当中的一个PTP拓扑结构。
在一个IEEE 1588-2008 PTPv2网络,在一个PTP域内,时钟同步开始之前,primary-secondary的时钟拓扑架构需要先建立起来。这个树形拓扑有点像生成树拓扑,grandmaster时钟是这个架构系统当中最精准的时钟,所以每一个PTP secondary时钟都和它进行同步。在一个PTP网络内,ordinary clock和boundary clock的PTP使能的端口会检查端口上收到的PTP Announce报文里面的内容,然后每个端口跑一个独立的PTP状态机来确定端口的状态。通过使用BMCA算法,Announce报文,以及ordinary和boundary时钟的数据集,PTP端口可以确定端口所属的状态:
- Primary:端口是它所在路径上的时钟源。一个有primary端口的时钟成为它的下游PTP节点的primary时钟。
- Secondary: 端口同步到它所在路径处在primary状态的对端端口。
- Passive:端口不是路径上的primary,也没有和另一个primary进行同步。这个状态防止PTP域内出现时间环。
图1展示了当一个网络拥有多个primary时钟,比如,因为一个新的grandmaster时钟被加到系统当中,最后只有一个被选为grandmaster clock,它成为primary-secondary拓扑的根。boundary clock 1连接到primary clock 2的端口会变成passive状态,这两个时钟之间没有建立起primary-secondary关系。图中的虚线表示两个boundary clock之间没有建立起primary-secondary关系,两个端口中的一个根据状态机变换到passive状态。
PTP算法
从宏观上看,PTP交换带有当前时间的时间戳的包来调整时钟。比如,假设有一个PTP源发送一个PTP消息,通知当前时间是1:00:00p.m.。但是,这个消息到达目的地需要时间。如果需要1秒钟才能到达目的地,那么时间将变成1:00:01p.m.。当一个源接收到了一个1:00:00p.m.的PTP包,PTP怎么补偿网络延迟?
如图2,同步是通过primary和secondary时钟之间一系列的消息交换获得的。
- primary时钟发送Sync报文。Sync报文离开primary的时间戳是t1,可以被嵌入到Sync消息里面(one-step 操作)或者通过Follow_Up报文发送出去(two-step操作)
- secondary收到Sync消息;t2是secondary收到Sync报文的时间。
- secondary发送Delay_Req消息,它离开secondary的时候带有t3时间戳,当primary收到的时候打上时间戳t4
- primary发送包含t4时间戳的Delay_Resp响应消息
在图3的例子中,primary的初始时间是100s,secondary的初始时间是80s。secondary需要调整到和primary匹配的时间。
时钟偏差(primary和secondary时钟之间的差别)可以计算如下:
从primary到secondary的链路时延是 t2 - t1
从secondary到primary的链路时延是 t4 - t3
IEEE1588-2008假设primary和secondary之间的路径时延是对称的,那么平均路径时延可以计算如下:
我们可以用这个公式来计算上面这个例子中primary和secondary的时钟偏差:
所以在这个例子中,secondary时钟比primary时钟慢了20s,我们通过+20s到secondary时钟进行调整。
一个实现这种算法的设备叫做two-step时钟,因为时间信息是通过Sync和Follow_Up报文获得的。
另一个算法版本是one-step操作,它会在Sync报文里面包含时间戳,而不是使用一个Follow_Up报文。one-step PTP会更加精确,但是在硬件实现上会更加复杂。复杂主要来自于实时更新时间戳更改校验和。
one-step的主要优势是可以减少对于链路和CPU的负载。
硬件和软件时间戳
交换机上面实现PTP的目的是给连接的服务器提供PTP时间信号,这样的话系统时钟可以精确的同步。
在一个软件实现的PTP版本下,CPU会给packets打上时间戳。这个解决方案和硬件时间戳比起来设计和实现更加简单并且更加低成本。但是这样做不够精确:包需要到CPU上面打时间戳,而CPU运行着整个操作系统,它除了PTP进程还包含很多进程。即使PTP进程有最高的优先级,软件PTP还是没有硬件PTP那么精确。
在一个硬件实现的PTP里面,提取和插入时间戳到PTP包里面是通过交换机里面的ASIC或者是server上面的NIC。这个过程最理想是在PHY层实现。对于ingress,这个过程的最佳时机是包刚刚从线上面收到。对于egress,最佳的时机是在包离开buffer,刚刚要串行化输出到线上的时候,这样的话时间戳精确度就不会受到潜在的由拥塞控制或者速度不匹配引起的buffer use。
使用Nexus3100平台和Nexus9000平台做端到端数据中心PTP部署
拓扑和组件
因为PTP是基于以太网的,它可以跑在现有的数据中心架构上面,而不需要重新设计数据中心。图4展示了一个典型的带有PTP组件的leaf-and-spine数据中心设计。
端到端数据中心PTP部署的组件包括Nexus交换机和grandmaster clock。
grandmaster clock
grandmaster clock一般是专用的设备。这个设备连接到GPS,它提供一个精确的时间源输入。然后这个primary clock就生成PTP包到整个网络上。Symmetricom TimeProvider 5000是一个PTP grandmaster时钟的例子:
PTP使能的思科Nexus 3100平台和9000系列数据中心交换机
Nexus 3100是一个1RU和2RU交换机,可以作为ToR或者EoR进行部署。通过NX-OS提供2层和3层的交换。
9000系列交换机由9500系列modular交换机和9300系列固定配置交换机组成。9000系列可以跑NX-OS也可以跑ACI。
在ACI模式下,9000系列交换机和Cisco Application Policy Infrastructure Controller (APIC)一起使用,提供一个应用为中心的架构。
在NX-OS模式下,9000系列交换机作为一个经典的交换机,提供传统的网络互联服务,但是具有更好的性能和增强的网络弹性和可编程性。
本文档主要关注NX-OS模式下9000系列交换机的PTP
随着NX-OS 7.0(3)I7(1)的release,所有的3100和9000系列交换机和线卡,除了X9408PC-CFP2,M4PC-CFP2 uplink模块,和9500-R chassis之外都支持PTP。
主要特性如下:
- IEEE 1588-2008 PTPv2标准
- Two-step boundary clock
- UDP over IPv4组播,使用1588定义的组播地址224.0.1.129
- 硬件辅助PTP实现
- 默认通过提高处理和转发PTP消息的优先级来有效的处理网络拥塞,而不需要额外的配置QoS
- 通过ERSPAN version 3(它包含时间戳)支持ERSPAN
- 在2层和3层接口上支持PTP
3100平台和9000系列PTP架构
3100和9000支持硬件辅助下的PTP。ASIC在硬件层面上ingress和egress上给PTP报文打上时间戳。如图10:
在思科9300平台交换机上,PTP硬件时钟是来自 Application Leaf Engine (ALE) 和 ALE-2 ASICs。在3100平台上,是独立的FPGA。在9500上是sup卡上的FPGA,所有的线卡都可以用。
nexus 3100平台和9000系列 PTP包的轨迹
有两个可能的场景:3100或9000系列交换机中的一个port是secondary一个port是primary。
如果有个3100/9000交换机的一个port是一个secondary,那么它就要从一个PTP primary接收时间信息并修正它自己的时钟。packet flow如下:
- 交换机在secondary port上,从一个PTP primary接受到PTP Sync报文。转发ASIC对PTP硬件时钟做一个时钟同步。转发ASIC记下Sync报文的到达时间,它通过一个内部头给这个包增加刚刚从硬件时钟同步过来的时间戳,然后转发给CPU。CPU上面运行的PTP软件进程接收到这个数据包并且把时间戳存下来。这个时间戳就是图2中的t2。
- PTP primary给交换机发送一个PTP Follow_Up报文。这个消息包含t1时间戳,这个t1时间戳是在primary发送PTP Sync报文的时候记录下来的。3100和9000交换机PTP软件进程接收到报文并且把时间戳存下来。PTP软件现在有了t1和t2。
- 3100或者9000发送一个Delay_Req消息给primary。当Delay_Req报文离开转发ASIC的时候,离开的时间戳被记录下来。PTP软件进程存储这个时间戳,也就是t3。现在PTP软件进程已经有了t1、t2、t3。
- PTP primary记录下它受到Delay_Req报文的时间。也就是时间戳t4。它发送包含时间戳t4的Delay_Resp报文给交换机secondary。现在PTP软件进程已经有了t1、t2、t3、t4。
- 交换机上的 PTP软件根据PTP算法那一章的公式从t1-4计算交换机的时间偏差。然后交换机的硬件时钟根据这个偏差进行调整。这个调整就是所谓的PTP boundary时钟做的时钟恢复。
以上总结了3100、9000交换机上面的secondary port进行PTP报文交换的过程。这个交换机的secondary port和它所连接的primary port之间的报文交换过程是持续不断的进行的,因此交换机的时钟一直是和primary同步。
当交换机的的前端port作为一个PTP primary的时候,交换机给secondary设备提供用于同步的时间。packet flow如下:
- 交换机发送PTP Sync报文给secondary。使用PTP硬件时钟,它记录下时间戳t1,也就是packet离开转发ASIC的时间。
- 交换机通过Follow_Up将t1时间戳发送给secondary
- 交换机从secondary接收Delay_Req消息。它记下时间戳t4,也就是它受到Delay_Req报文的时间。
- 交换机通过Delay_Resp报文把t4发给secondary。
- secondary设备可以根据从primary收到和记录下来的时间戳调整它自己的时间戳。交换机不需要调整自己的时钟,因为这些PTP报文交换都发生在primary port上面。
3100和9000的PTP实现方式不会受到buffering和拥塞的影响。packet在串行之前以及在被buffer之后,交换机在PHY级别加的时间戳。这种方法就可以获得非常高的PTP精度,后面的章节会具体介绍。
3100和9000系列的网络配置和最佳实践
3100和9000的PTP配置
这一部分描述3100、9000上的最重要的PTP配置命令。一个综合的配置指导可以从系统管理配置页面找到。
强制配置
这里提到的命令需要在交换机上运行
全局配置命令
switch(config)# feature ptp
这个命令使能了交换机上的ptp功能
switch(config) # ptp source <ip>
这个命令指定了交换机生成的数据包的源IP地址
接口配置命令
switch (config)# interface Ethernet slot/port
switch (config-if)# ptp
这些命令使能一个端口上的PTP功能。3100和9000交换机是一个boundary时钟,所以它既有primary也有secondary端口。primary 端口和secondary端口没有配置上的差别。他们都是通过ptp选项来进行配置,BMCA确定了一个端口是primary端口还是secondary端口。
最优配置
一下的命令是可选的
switch(config)# clock protocol ptp
这个命令配置交换机,使得交换机通过PTP来更新系统日历。这个配置使得交换机时钟和PTP同步。如果没有用这个命令,交换机还是会在它的primary口上传输PTP时钟,但是时钟源会变成本地时钟。
switch(config) # interface ethernet slot/port
switch(config-if) # sync interval value
这个命令配置在一个接口上的PTP Sync报文速率。如果没有指定这个值,那么这个值默认是0。
PTP logSyncInterval (sync interval)值表示,接口上每秒钟发送出去的PTP Sync报文的数量。
你应该把这个间隔时间设置成默认的0,除非你有一个特殊的需求,比如要求更高的精度。
Nexus 3100、9000配置验证
以下命令可以用来验证3100、9000上的PTP功能。
switch# show clock
这个命令可以用来验证交换机时钟是和grandmaster时钟同步的。你不能够通过这个命令验证时钟的精确度。但是,如果你用了clock protocol ptp你可以至少验证时间和grandmaster匹配。
switch# show ptp clock
这个命令展示本地时钟的特性,包括时钟的ID。
switch# show ptp parent
这个命令展示了PTP parent的特性。这个在验证parent clock身份的时候很有用,以下是一个输出的例子:
switch # show ptp brief
这个命令展示了所有接口的PTP状态。一个PTP端口可以有以下4种状态中的一种:
- Primary: 这个端口是路径上的时间源
- Secondary:这个端口和路径上处于primary状态的时钟进行同步
- Disabled:PTP没有在这个端口上使能
- Passive: 这个端口在路径上不是primary也不和另一个primary同步。
因为3100和9000交换机是一个PTP boundary时钟,并且只支持一个PTP域,这个交换机可以只有一个secondary port。如果一个交换机已经有了一个secondary port,那么另外一个连接到grandmaster的secondary port会处在passive状态。当第一个grandmaster或者第一个secondary port挂掉的时候,BMCA会将之前的passive port转换到secondary状态。通过这个过程,我们可以获得grandmaster冗余。
以下是一个show ptp brief的例子:
switch # show ptp corrections
这个CLI命令展示最后几个PTP修正
3100、9000系列交换机构建的数据中心PTP性能
PTP性能衡量定义和概念
本章描述了表征PTP性能锁必须的定义和概念。
时钟偏移是两个时钟之间的差异。以下的测试结果都是通过offset时钟偏移来表征secondary同步primary是多么的精确。这个测量表明了用3100、9000系列交换机作为boundary clock有多么的不精确。这个offset越小越好。
平均路径延迟是PTP报文在primary和secondary之间传输所需要的平均时间。这个测量并不能表明交换机或者服务器的性能或者准确度。一个小的平均路径延迟可以用来获取基准结果。一个大的平均路径延迟,带有很多抖动,可以表示一个复杂的数据中心。这个复杂的数据中心有buffering和延迟尖峰,运行着控制协议,高速的流量等等。这样的测量在真实的有很多处理的环境下的PTP性能测试中会很有趣。
标准偏差表明了偏离平均值的程度。一个小的标准偏差表明数据点很有可能会和平均值(也被叫做期望值)很接近。一个大的标准偏差表明数据点会散布在一个比较大的范围内。
在文档的后面部分,我们会用以下的这些定义来描述PTP的性能:
- 平均偏移
- 偏移标准差
- 最小和最大偏移峰值
- 平均路径延迟
这些值通过使用相同的稳定参考时钟的外部工具进行测量。
平均偏移往往接近于0,因为正偏差往往和负偏差相互抵消了。
最小和最大偏差峰值非常有用。但是,仅仅是这些值并不能表明出现这样的峰值的频率。因此偏差标准差就很有用。另一个可以看到偏差标准差的就是抖动。这四个数据点加上平均路径延迟就提供了一个很好的设备PTP性能的表征。
图11就是一个偏差图的例子,它表明了平均偏差、偏差标准差、最大最小峰值。纵轴是偏差值,横轴是PTP客户端集合。
3100、9300系列性能测量方法论和设备
这里描述的测试使用一个Spirent流量生成器来生成PTP报文,primary和secondary仿真以及背景流量。我们使用Spirent 9RU chassis (SPT-9000)和HyperMetrics CV 8x10 G以太网增强SFP+卡。Spirent Release 4.33.0086。
Spirent 9RU chassis连接到Symmetricom TimeProvider 5000 grandmaster时钟。Spirent从时间接口接收时钟。TimePovider从嵌入式GPS接收器接收时间。
Spirent有一个primary port连接到交换机。Spirent剩下的接口作为PTP secondary从交换机接口接收时钟。因此Spirent可以计算从primary port发出去和从secondary接收到的时钟偏差。这个结果就表明了交换机的精度。
对于所有的测试,交换机都是使用默认的PTP配置,尤其值得注意的是sync interval这个参数默认是0。
3164Q PTP的性能
3164Q配置成4x10G breakout模式,有44个10G端口连接到Spirent。也就是说Spirent有43个PTP secondary。另外Spirent上面配制了212个仿真PTP secondary。这样就是说有255个PTP secondary需要从交换机获取时间。
通过6个小时的测试,我们得到以下结果:
- 平均偏差:4ns
- 偏差标准差:50ns
- 最小偏差峰值:-300ns
- 最大偏差峰值:302ns
- 平均路径延时:110ns
平均偏差非常接近于0,偏差标准差是50ns表明在整个测试周期里面偏差都非常接近平均值。因此,3164Q提供了一个只有非常小偏差的PTP客户时钟同步进程,即使有大量的PTP secondary。
9396PX PTP性能
9396PX也有44个物理10G口连接到Spirent。也就是有43个 PTP secondary,另外加上4个仿真PTP secondary。总共有47个PTP secondary需要交换机提供时间。
6小时测试之后的结果:
- 平均偏差:-5ns
- 偏差标准差:11ns
- 最小偏差峰值:-101ns
- 最大偏差峰值:98ns
- 平均路径时延:120ns
9504,X9636PQ线卡的PTP性能
同样的43个物理PTP secondary,但是用99个仿真PTP secondary。
6小时测试之后:
- 平均偏差:3ns
- 偏差标准差:9ns
- 最小偏差峰值:-95ns
- 最大偏差峰值:81ns
- 平均路径延迟均值:108ns
9000系列 ERSPAN和PTP时间戳
ERSPAN的概念
ERSPAN在一个IP网络上传输镜像流量。流量在源路由器进行封装,然后再整个网络上传播。packet在目的路由器上解码然后发送到目的接口。