PTP时间同步概念简介
目前在做一些車載多傳感器時間同步方面的工作,以此記錄總結一下學習過程中碰到的一些概念和問題。文中大部分知識源于網絡,且均標明了文章來源,如有侵權,請聯系我刪除,謝謝。
內容來源
標*的是我認為需要仔細閱讀的文章。
一、主機上的時間
以Linux(Ubuntu)操作系統為例,主要包含兩個時鐘:系統時鐘和硬件時鐘。硬件時鐘,即BIOS時間;系統時鐘,即linux系統Kernel(內核)時間。每次Linux啟動時,系統Kernel(內核)會先去讀取硬件時鐘的設置(但是此時的硬件時間不一定是準確的),然后系統時鐘就會獨立于硬件繼續運作。在linux系統上程序運行時讀取的時間都是系統Kernel(內核)時間。
綜上所述,想要永久修改linux時間并使得時間準確,就需要永久修改硬件時間,并實現系統時間對硬件時間的同步。不然要么每次重新啟動linux時,系統時間又變回之前錯誤的硬件時間,要么硬件時間同步完成,但系統時間未同步到硬件時間,導致程序獲取到的時間(系統時間)仍是錯誤的。但這里我還有個問題,在我使用PTP的過程中,發現部分網絡接口控制器 (NIC) 自身帶有時鐘,那么這個時鐘與主機自身的硬件時鐘又有什么關系呢?
二、同步的概念
時鐘同步包含三個概念:
????????頻率同步(Frequency Sync):指單位時間內產生時鐘脈沖的次數保持一致,與具體的時間值無關。
????????相位同步(Phase Sync):除包含頻率同步外,還指產生的時鐘脈沖邊界保持一致,即在同一時刻觸發時鐘脈沖的上升沿或下降沿,與具體時間值無關。
????????時間同步(Time of Day Sync):除包含相位同步外,還要求具體時間一致。這也是PTP同步的要求。
三、PTP中的概念
PTP
Precision Time Protocol,共有三版,分別為IEEE1588-2002,IEEE1588-2008,IEEE1588-2019,具體可參考參考4。目前市面上大多數的PTP設備應該都支持到了第二版即IEEE1588-2008。冷知識:該標準的pdf售價為280美元。
Linuxptp
PTP協議在Linux系統上的實現,具體包含ptp4l和phc2sys兩個軟件,具體使用可參看我另一篇文章鏈接。
PTP中的設備類型
PTP作用的對象是時鐘,主要分為全局主時鐘(GrandMaster),主時鐘(MasterClock),透明時鐘(TransparentClock),邊界時鐘(BoundaryClock)和普通時鐘(OrdinaryClock)。
全局主時鐘(GM),全局唯一,為PTP域中的所有設備提供時間基準。
主時鐘(MC),OC和BC的基準時鐘稱為主時鐘。
邊界時鐘 (BC) , 指在兩個或多個通信路徑中具有端口的設備(即它可以是從設備,也可以同時是其他從設備的主設備)。
普通時鐘(OC),指只有一個端口的時鐘(即只能作為從設備進行時間同步)。
透明時鐘(TC),指不與其它時鐘節點保持時間同步的時鐘,如交換機。
PTP中的端口類型
時鐘通過端口進行通信,這些端口按類型可分為主端口(Master Port),從端口(Slave Port),被動端口(Passive Port)。
主端口(Master Port)指發布同步時間的端口。
從端口(Slave Port)指接收同步時間的端口。
被動端口(Passive Port)指既不接收同步時間、也不對外發布同步時間的端口。
PTP中的角色
Master 提供同步時間。
Slave 以Master時間為基準進行同步。
PTP中的同步
PTP 中Master定期發送同步消息,由Slave接收。這給了Slave兩個時間戳,Master發送消息時的遠程時間t1和Slave接收消息時的本地時間t2。t2與t1的關系可表示為
????????????????????????????????????????????????????????????????????????t2 = t1 + offset + RTT/2,
因此只有t1和t2兩個時間戳不足以計算時鐘偏移offset。必須首先測量Master和Slave之間的網絡延遲RTT。測試網絡延遲的方法有兩種:延遲請求/響應的端到端方法(E2E) 和對等延遲請求/響應的點對點方法 (P2P),原理詳見參考5及參考8。簡單來說就是前者(E2E)使用了上述的兩個時間戳來計算往返時延RTT,后者(P2P)不使用t1和t2,而是重新獲得四個時間戳來計算往返時延RTT。總而言之,二者都以某種方式獲得了往返時延RTT,之后利用往返時延RTT結合t1和t2即可得到時鐘偏移offset,從而實現時鐘同步。
其它
PTP消息類型,PTP時鐘等級規格可參考參考7。
PTP的配置文件及方式可參考參考2,參考7。
PTP與NTP的關系詳見參考6,這是很棒的一篇文章。
四、PTP的優勢
PTP本身用于設備之間的高精度時間同步,但也可用于頻率同步。相比現有的各種時間同步機制,PTP具備以下優勢:
????????相比NTP(Network Time Protocol,網絡時間協議),PTP能夠滿足更高精度的時間同步要求:NTP一般只能達到亞秒級的時間同步精度,而PTP則可達到亞微秒級。關于NTP和PTP的詳細討論,參見文章*Combining PTP with NTP to Get the Best of Both Worlds*
????????相比GPS(Global Positioning System,全球定位系統),PTP具備更低的建設和維護成本,并且由于可以擺脫對GPS的依賴,在國家安全方面也具備特殊的意義。
五、PTP精度誤差及故障來源
網絡延遲不對稱
PTP測量誤差的假設前提就是報文在Master和Slave之間的傳輸延遲是相同的。由于該因素導致的誤差上限值為±RTT(往返時延),此時報文往返的一端時延為0,另一端時延為RTT,進一步的討論見參考6。
時間戳錯誤
在 Linux 機器上,基本上可以在三個不同的地方生成時間戳:
????????在用戶空間(即 NTP/PTP 守護進程)中,通常在進行 send()系統調用之前和 select() 或 poll() 系統調用之后。
????????在內核中,在將數據包復制到網卡環形緩沖區之前以及網卡在收到數據包后發出中斷時。這稱為軟件時間戳。
????????在網絡接口控制器 NIC 本身中,當數據包進入和離開鏈路或物理層時。這稱為硬件時間戳。
軟件時間戳比用戶空間時間戳更準確,因為它不包括上下文切換、內核中數據包的處理和網絡堆棧中的等待。硬件時間戳比軟件時間戳更準確,因為它不包括在 NIC 中等待。但是,硬件和軟件時間戳存在一些問題,使它們比用戶空間時間戳更難使用。進一步的討論見參考6。
閏秒
PTP 按國際原子時 (TAI) 運行,而系統時鐘使用的是協調世界時 (UTC),來源于參考2。
按照百度百科的說法,閏秒是指為保持協調世界時(UTC)接近于世界時(TAI)時刻,由國際計量局統一規定在年底或年中(也可能在季末)對協調世界時(UTC)增加或減少1秒的調整。由于地球自轉的不均勻性和長期變慢性(主要由潮汐摩擦引起的)使世界時(UTC)和原子時(TAI)之間相差超過到±0.9秒時,就把協調世界時向前撥1秒(負閏秒,最后一分鐘為59秒)或向后撥1秒(正閏秒,最后一分鐘為61秒); 閏秒一般加在公歷年末或公歷六月末。截至2017年1月2日,全球已經進行了27次閏秒,均為正閏秒。最近一次閏秒在北京時間2017年1月1日7時59分59秒(時鐘顯示07:59:60)出現。這也是本世紀的第五次閏秒。至于是否會出現該問題取決于PPT服務器中的GPS接收機。
GPS周翻轉
全球導航定位系統GPS的時間是通過“周數”+“周內秒”的方式編碼的。而GPS系統設計之初分配給“周數”的字長為10比特位,即GPS系統只能表示0~1023周,GPS系統運行時間超出1023周后,“周數”會發生溢出翻轉,即從0開始計數,從而導致接收機直接解算出來的時間會回退到1024周之前。第一個GPS系統時間起點為1980年1月6日00:00:00,結束時間為1999年的8月21日23:59:47。第二次GPS系統時間于2019年4月6日23:59:41結束。在這一天,GPS周翻轉可能會造成一些GPS接收機的數據和時間功能發生故障,無法正常運轉。這一問題是由GPS系統本身的設計決定的,在GPS系統整體升級之前,每經過19.7年便會發生一次周翻轉事件,無法避免。北斗衛星系統采用13比特的周數信息,157年內不會出現這一問題,無需擔心。至于是否會出現該問題取決于PPT服務器中的GPS接收機。
總結
以上是生活随笔為你收集整理的PTP时间同步概念简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web项目报404一直找不到图片(路径绝
- 下一篇: 等边三角形的积木编程