<style>
H2{color:#BF0060 !important;}
H3{color:#009393 !important;}
p{color:Black !important;}
li strong {color:#4682b4 !important;}
</style>
# Clock Synchronization in Distributed System
## **Physiacal clock**
* 時鐘有 skew
* 電腦 are synchronized to UTC(=GMT), which is based on Atomic Clock.
### **名詞定義**
* **Perfect clock C~p~(t) = t**
* **Frequency**
* Frequency is the rate at which a clock progresses
* ==C~p~'(t)== is the frequency at time t of clock C~p~
* Cp'(t) = ${dCp(t)\over dt} = \lim_{Δ\to\ 0}{Cp(t)-Cp(t-Δ) \over Δ}$ = 1 for perfect clock
<img src="https://i.imgur.com/EUY6Sm6.png" width = "200"/></img>
* **Offset**
* 時間差
<img src="https://i.imgur.com/7TOG6eT.png" width = "350"/></img>
* **Precision and Accuracy**
* Precision π
* 精確度是相對概念
$∀t,\ ∀p, q : |C~p~(t)-C~q~(t)| ≤ π$
* the offset between two clocks is bounded by π
* Accuracy α
* 準確度代表絕對
* $∀t,\ ∀p : |C~p~(t)-t| ≤ α$
* the offset between a clock and a reference point (e.g., UTC) is bounded by α
* Note :
* clocks that are accurate within bound α, will be precise within bound π = 2α
* **Skew**
* ==C~a~’(t) – C~b~’(t)== : The skew of a clock C~a~ `relative to `clock C~b~ at time t
* ==C~a~’(t) – 1== : The skew of C~a~, since perfect clock C~p~(t)' = 1
* **Skew Tolerance: Max Drift Rate**
* Clock drift rate : the difference per unit of time from a perfect reference clock
* ==Max Drift Rate $ρ$== is specified by manufactors
* $1-ρ ≤ {dCp(t)\over dt} ≤ 1+ρ \ , \ ∀t$
* 2 clock may differ by ==2$ρ$Δt in Δt==
* **題目**
* Given Max Drift Rate $ρ$, 要求 Precision π
* 解:
* $2ρΔt ≤ π$
$Δt ≤ {π \over 2ρ}$ ,所以每 ${π \over 2ρ}$ 秒應 resynchronize 一次
### **Cristian’s Algorithm**
* **原因**
* 電腦向 UTC =t 對齊時,msg delay Δ 導致收到的 t 實際上是 t+Δ
* **假設**
* Clock A B 有相同 offset & frequency
* ==round-trip delay = delay(m) + delay(m’)== : 一來一回的 delay
* round-trip delay = ==(T4-T3) - (T1-T2)==
<img src="https://i.imgur.com/zjCo4P5.png" width = "300"/></img>
* **Estimate the Offset**
* Assume
* O = C~B~(t) – C~A~(t)
* delay(m) ~= delay(m’)
* ==O = (T1 - T3 + T2 - T4) /2==
<img src="https://i.imgur.com/rTpQF59.png" width = "250"/></img>
* 例題
<img src="https://i.imgur.com/BfJOZ12.png" width = "500"/></img>
### **Network Time Protocol (NTP)**
* **特色**
* 向階層化 server 要時間 : primary, secondary...server
* accuracy : 1~50ms
* statically technique for filtering (去除outlier)
* 保留最近 8 次 (O~i~,D~i~) pair
* O~i~ = offset, D~i~ = round-trip time
* ==O = 最小 D~i~ 那次的 O~i~==
* survive lengthy losses of connectivity (克服斷線)
* Reduntant server and paths to server
, which provides protection against malicious interference
### **Berkeley Algorithm**
* **特色**
* 電腦間彼此同步
* 一台為 master 定期 poll slaves,取大家 Avg time 差值
<img src="https://i.imgur.com/CqRWJU9.png" width = "500"/></img>
### **Decentralized Averaging Algo**
* **特色**
* 每台電腦定期廣播 local time,算 Avg time 自我校正
### **Reference Broadcast Sync (RBS)**
* **前情提要**
* 同步時的 4 種 time error
<img src="https://i.imgur.com/OVed7Yw.png" width = "400"/></img>
* **原理**
* <img src="https://i.imgur.com/1gUUYCt.png" width = "300"/></img>
* Sender 同時發 m∈M 的 referenced packets 給 receivers
* 假設所有 receivers 應該同時收到 packets
* removes send and access time errors (因為同 sender 送出)
* sensitive to receive time and propagation delay (因為此 Algo 假設這兩種 error 一樣)
* 範例 :上圖 receiver 1 & 2 彼此內部時間差 1s
* 所有 receivers 互相同步,計算彼此時間差 Offset[p,q]
* 忽略 clock skew : `Offset[p,q]` = ${\sum\limits_{m∈M}^{}Tp,m - Tq,m \over |M|}$
* 考慮 clock skew:令 `Offset[p,q](t)` = 時間函數 αt + β
* **特性**
* Broadcast 使用 relative time reference
* 因為實際時間不重要,Msg 只是當作共同參考點
* Each receiver synchronizes to a reference packet
* Msg ==沒有 timestamp==
* 所以任一種 broadcast protocol 都可以
e.g. ARP, RTS/CTS, route discovery packets, etc.
### **Multihop RBS**
* **前提: Phase Offset Estimation**
* Receivers 紀錄收到脈衝時的 local time
* Receivers exchange observations
* form a local (relative) timescale
* **原理**:
* <img src="https://i.imgur.com/DpQLgCJ.png" width = "500"/></img>
## **Model of distributed computation**
### **Actions and events**
* The states of processes and channels change as the events occur.
* **3 type of events**
| | internal event| msg send event | msg receive event |
| --------| -------- | -------- | -------- |
| Change the state of | process itself | sending process & channel | receiving process & channel|
### **From Causality(因果) to Event ordering**
* 利用 Event ordering 推斷因果關係
* Event Relation 是 partial order,因為 DS 中無 global clock,不可能有 total order
* **Happened-Before (HB) Relation**
* Induced By Message Passing
* Strict Partial Order
* irrefexivity, antisymmetry(因到果,不能果到因), transitivity
### **2 Rules**
1. e~i~ 到不了 e~j~ ,但 e~j~ 到/到不了 e~i~ 都有可能
2. e~i~ 能到 e~j~,則 e~j~ 必到不了 e~i~
<img src="https://i.imgur.com/V9H2xI7.png" width = "400"/></img>
### **Concurrent**
* **Def**
* Neither e~i~ -> e~j~ nor e~j~ -> e~i~ 則 e~i~ || e~j~
* <img src="https://i.imgur.com/srGP4UD.png" width = "200"/></img>
* **Concurrent relation 沒有遞移性**
* <img src="https://i.imgur.com/O6ttTNT.png" width = "400"/></img>
* **將 Logically concur 視作 physically concur**
* 因為不影響 causality
* LogiC 出錯,不代表 PhyC 會出錯
### **結論**
* <img src="https://i.imgur.com/uxkde99.png" width = "400"/></img>
## **Logical time and logical clock**
### **Logical clock**
* **Definition**
* C: H ↦ T
* ==Maps event e to timestamp C(e)==, e∈H, C(e)∈T
* ==Clock consistent conditions==
* (1) ei ➞ ej ⇒ C(ei) < C(ej)
* satisfied protocal : Lamport's Scalar Time
* (2) ei ➞ ej ⇔ C(ei) < C(ej) : strongly consistent
* satisfied protocal : Vector time
* **physical vs. logocal clock**
* <img src="https://i.imgur.com/uUW79CC.png" width = "300"/></img>
### **Implementing logical clock**
* **2 issue**
* (1) Data Structure
* local logical clock:lc~i~
* global logical clock:gc~i~
* (2) ==Protocal== to update the DS that ensures the consistency
* 2 rules
* ==R1== : how ==lc ~i~== is udated as the events (send/receive/internal) occurs
* ==R2== : how ==gc~i~== is udated
* **Protocal**
* ==(1) Lamport's scalar time==
* Use C~i~ to represent both lc~i~ and gc~i~
* R1 : C~i~ := C~i~ + d
* R2 : C~i~ = max(C~i~, C~msg~)+d
* d=1 as an example
* <img src="https://i.imgur.com/oluSybO.png" width = "300"/></img>
* <img src="https://i.imgur.com/GnEyOj8.png" width = "350"/></img>
* ==(2) Vector time==
* R1 : vt~i~[i] := vt~i~[i] + d
* R2 :
* 1 ≤ k ≤ n : vt~i~[k] := max(vt~i~[k], vt[k]) + d
* vt~i~[i] := vt~i~[i] + d
* d=1 as an example
* <img src="https://i.imgur.com/qkKIv6I.png" width = "400"/></img>
## **Lamport’s Scalar Time**
### **Construct Consistent Total Order**
* **問題**
* Scalar Clocks 可以排出 Consistent Total Order,但不能排出所有可能
* **目標 : Construct Unique Total Order**
* 作法:時間相同時比 process id
* 範例:
* 原來有 2!2!種排法,變成 1 種
* <img src="https://i.imgur.com/lIWA8hk.png" width = "300"/></img>
### **Totally-ordered Multicasting**
* **原理**
* Msg timestamped 後 multicast 出去
* 收到 Msg 後放進 ==local queue== 按照 C(m) ==排序==,回覆 ==Ack==
* Scalar time 中,若有 hb 關係則 C(m1) < C(m2)
* Msg 在 queue 的 head 且收到所有 processes 的 Ack,才會把 Msg 交給 Application
* **Ack 用處**
* 因為 channel 是 FIFO 所以當 Pa 收到 Pb 的 Ack,表示 Pb 在 Ack 以前的訊息都送完了
## **Vector Time**
### **Relation**
* `vh < vk` : less than, 存在 vh < vk ,其他維度 vh <= vk
* `vh || vk` : incomparable, 某些維度上 vh < vk 有些 vk < vh
* **Isomorphism**
* Set of events <---isomorphic to---> Set of timestamp
* Strong consistency holds
* ei ➞ ej ⇔ C(ei) < C(ej)
* ei || ej ⇔ C(ei) || C(ej)
### **Singhal–Kshemkalyani’s differential technique**
* **目的**
* 減少 msg overhead
* **原理**
* 每個 process 只花 2n storage
* 存上次 send/update 的本地時間vt~i~[i]
* LS~i~[j] : last sent to process j
* LU~i~[j] : 上次 update vt~i~[j]
* 當 LS~i~[j] < LU~i~[k] 時,發送 {(k, vt~i~[k])} 給 process j
* 範例:
* LS~i~[j] = 4, LU~i~[k]=9, LU~i~[l]=10
* 發送 {(k,vt~i~[k]),(l,vt~i~[l])} 給 process j
* **例題**
* <img src="https://i.imgur.com/EStmH3O.png" width = "500"/></img>
###### tags: `OS`