<From IEEE-1588 clause 9.3>
TL;DR
BMCA主要分為兩部分:
- 使用data set comparison algorithm势木,得出每個port上最優(yōu)的announce msg蛛倦,記為
,以及所有port中最優(yōu)的announce msg啦桌,記為
溯壶。
- 使用state decision algorithm,根據(jù)port自己的
甫男,以及clock的
且改,defaultDS(主要是其中的clock quality信息),得出port的state machine應(yīng)該收到的BMC event板驳。
1. Selection of the best master clock algorithm
PTP中有2種best master clock algorithm:
- default mechanism(默認(rèn))又跛,見9.3.2, 9.3.3, 9.3.4
- alternate bmca(如果在profile中指定)。
alternate bmca algorithm在協(xié)議中沒有明確規(guī)定若治,支持自行定義慨蓝。
但是,任何的alternate bmca端幼,都應(yīng)該滿足以下要求:
- algorithm的output應(yīng)該提供一個推薦state礼烈,用于在9.2.5, 9.2.6.8, 9.2.6.9中提到的PTP state machine和state decision event中。 推薦的state應(yīng)該滿足9.2.4中的要求婆跑。
可選的此熬,alternate algorithm可以是一個dynamic algorithm,也可以是一個簡單地指定port的推薦state的static algorithm滑进。 - algorithm的output應(yīng)該提供用于更新data set的state decision codes(見9.3.5)摹迷,以及所有更新中需要用到的data。
decision code如下:- M1:此port為MASTER state郊供,因為它在clockClass 1~127的node上峡碉。且它是整個system的grandmaster port。
- M2:此port為MASTER state驮审,因為它在clockClass 128或以上的node上鲫寄。且它是整個system的grandmaster port吉执。
- M3:此port為MASTER state,但它不在grandmaster clock上地来。
- S1:此port為SLAVE state戳玫。
- P1:此port為PASSIVE state,因為它在clockClass 1~127的node上未斑。It is either not on the grandmaster clock of the system or is PASSIVE to break a timing loop
- P2:此port為PASSIVE state咕宿,因為它在clockClass 128或以上的node上。It is PASSIVE to break a timing loop
BMC algorithm運(yùn)行在domain的每一個OC和BC的所有port上蜡秽。它持續(xù)地運(yùn)行府阀,持續(xù)地根據(jù)network或clock的變化進(jìn)行調(diào)整。
2. BMC algorithm
overview
本節(jié)介紹local clock如何確定所有clock中哪一個是最好的芽突。根據(jù)這個結(jié)果试浙,它進(jìn)一步確認(rèn)其port的state;見Table 10寞蚌。
本算法在domain的每一個clock上獨(dú)立地運(yùn)行田巴,換句話說,clock不通過協(xié)商確定誰是master挟秤,它們通過自己的計算給出結(jié)論壹哺。
本算法避免出現(xiàn)選出2個master,0個master艘刚,或有故障的1個master的情況管宵。
BMCA由2部分組成:
- data set comparison algorithm,確定兩個clock中哪個更好昔脯。詳見9.3.4
- 一個可以計算出每個port的合理state的算法啄糙。詳見9.3.3笛臣,得出的結(jié)果在圖23,24,26中稱為"recommended state"
data set的比較云稚,圍繞clock的各個port上收到的announce message中攜帶的信息,和clock的defaultDS中的信息展開沈堡。
general BMC specifications
一個ordinary or boundary clock 静陈,有 defaultDS data set
,以及N個ports诞丽。在它上進(jìn)行BMC algorithm鲸拥,內(nèi)容如下:
- 對于
的每一個port "r",來自其他clock的qualified Announce messages被port "r"接收后僧免,需要進(jìn)行比較刑赶。
- 對于
的每一個port "r",要通過data set comparison algorithm懂衩,決定出這些message中最好的一條
- 對于
上的所有N個port撞叨,要通過data set comparison algorithm金踪,從N個
中選出最好的message,
牵敷。
- 對于
上的每個port胡岔,要用state decision algorithm,根據(jù)
枷餐、
靶瘸、
的defaultDS,決定出給每個port的state machine發(fā)什么BMC event毛肋。
- 當(dāng)收到alternateMasterFlag為TRUE的announce message時怨咪,應(yīng)當(dāng)把它丟棄。
computation of
每個port獨(dú)立地計算村生。
的選擇惊暴,state decision algorithm的運(yùn)行,任何state change趁桃,這些操作都是atomic的辽话;詳見3.1.2
計算時,port "r"應(yīng)該:
- 只考慮port "r"上接收的qualified Announce messages
- include來自一個foreign master至少2條qualified Announce messages(如果有的話)卫病,然后從對應(yīng)的foreignMasterDS中刪掉沒有被選為
的msg的information油啤。
- 若port "r"為SLAVE state,則Include之前計算出的
結(jié)果蟀苛。但若有新的qualified Announce message被port "r"接收益咬,則應(yīng)該轉(zhuǎn)而考慮它。 若在選擇了之前的
的port "r"上發(fā)生了ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES event帜平,那么這個
就不應(yīng)該被include幽告。
在資源允許的情況下,應(yīng)該從盡可能多的foreign master clock上include盡可能多的Announce messages裆甩。
foreignMasterDS data set specifications
foreignMasterDS用于qualifying Announce messages冗锁。
此data set包含2個member:
- foreignMasterDS.foreignMasterPortIdentity
唯一指定一個foreign master clock - foreignMasterDS.foreignMasterAnnounceMessages
在FOREIGN_MASTER_TIME_WINDOW內(nèi),從一個foreign master clock處收到的Announce messages的數(shù)量嗤栓。
作為保留Announce message的標(biāo)準(zhǔn)冻河,規(guī)定了2個參數(shù):
- FOREIGN_MASTER_TIME_WINDOW: 4 announceInterval.
- FOREIGN_MASTER_THRESHOLD: 2 Announce messages received FOREIGN_MASTER_TIME_WINDOW。
foreignMasterDS應(yīng)該至少能保存5條foreign master的record茉帅。
qualification of Announce messages
對port "r"上接收的Announce message "S" qualify的過程如下:
- 若S來自同clock叨叙,則停止qualify
- 若S不是port "r"上接收的最新的announce message,停止qualify
- 若來自foreign master clock F的announce message數(shù)量堪澎,在FOREIGN_MASTER_TIME_WINDOW內(nèi)少于FOREIGN_MASTER_THRESHOLD擂错,則停止qualify。
(這是為了只處理來自stable foreign master的信息) - 若S的stepsRemoved不小于255樱蛤,停止qualify
(主要是為了區(qū)別rogue frame钮呀。在使用PATH_TRACE的時候桃犬,這個條件是必要的。這樣做可能會導(dǎo)致在真有這么大的network中導(dǎo)致failure行楞,但這種情況確實很罕見) - 否則攒暇,S被qualifiied。
3. State decision algorithm
詳見下圖子房。
當(dāng)一個decision被得出形用,則local clock需要根據(jù)9.3.5中的規(guī)則來更新本地data set。
我們通過data set comparison algorithm進(jìn)行证杭、
和
之間的比較田度。 對于下圖中的decision block "
better by topology than
",它們之間的比較就應(yīng)該用data set comparisom algorithm解愤。
4. Data set comparison algorithm
BMCA通過比較clock的data set來比較它們的好壞镇饺。
data set comparison的具體流程見下面2圖。其中兩個data set分別稱為set A送讲、set B奸笤。data set中的值的來源見下表。
如果在比較哼鬓、
和
中的任意兩個時监右,其中一個為空,則另一個非空的勝出异希。
一般不會為空健盒,但是
和
可能為空。
參數(shù) | source of |
source of |
---|---|---|
GM priority1 | grandmasterPriority1 | defaultDS.priority1 |
GM identity | grandmasterIdentity | defaultDS.clockIdentity |
GM class | grandmasterClockQuality.clockClass | defaultDS.clockQuality. clockClass |
GM accuracy | grandmasterClockQuality.clockAccuracy | defaultDS.clockQuality. clockAccuracy |
GM offsetScaledLogVariance | grandmasterClockQuality. offsetScaledLogVariance | defaultDS.clockQuality. offsetScaledLogVariance |
GM priority2 | grandmasterPriority2 | defaultDS.priority2 |
Steps Removed | stepsRemoved | 0 |
Identity of Senders | sourcePortIdentity | defaultDS.clockIdentity |
Identity of Receiver | parentDS.portIdentity (of portDS data set of port receiving message) | defaultDS.clockIdentity |
Port Number of Receivers | parentDS.portIdentity.portNumber (of portDS data set of port receiving message) | 0 |
上圖中的error不會用于state decision称簿,也不會用于data set update扣癣,但對于錯誤診斷來說應(yīng)該有用。error1說明message收發(fā)在同一個port憨降,error2說明2條message相同父虑,或者是來自相同grandmaster的先后2條msg。
5. Update of data sets
根據(jù)不同的state decision code券册,進(jìn)行對應(yīng)的data set 調(diào)整频轿。
具體見協(xié)議9.3.5