前言
其實寫本文之前,我原本是想寫「Time Delay, Phase Delay 跟 Group Delay」,結果發現靠杯有夠難寫。因為跟時間有關的常見名詞混在一起講,實在有夠亂。於是呢,我是這樣想,先把這些事情單獨講一講算了。
我們會談到 Delay、Latency、Skew、Uncertainty、Time Delay 跟 Phase Delay。群延遲(Group Delay)跟色散(Dispersion)有"時間"再說了。
相信剛剛提到的字眼,特別是 Delay、Latency 跟 Skew 大家應該在 E.E. 或 C.S. 領域都很常聽到。
Source: Pexels Credit: Andrea Piacquadio |
以下就個人的認識與理解,畫一下山水。如有謬誤,歡迎各方大德提點、指正。
Delay (延遲)
用來描述一件事情晚了多久實現、或者「比預期」晚了多久實現、或者用在比較兩件事花費的時間、或是推遲、牽拖東牽拖西,因為用這個字眼描述的情境真的太廣,好像怎麼用都可以的感覺 XD...
例如:
- 一人,從甲地走到乙地,花的時間是 10 分鐘,time delay 是 10 分鐘。雖然這樣講好像怪怪的,但是化作電路想像一下,clock 走這條路徑的 delay 是 10us,似乎也說得通。
- 兩人,同時從甲地走到乙地會合,各花 10 分鐘、12 分鐘。有一個人 delay 了 2 分鐘。
- 按下電風扇開關,delay 了 3 秒,葉片才開始轉動。
- 交付事項,比預定時間 delay 了 1 天才交付。
- 我們約晚上 8:00 整,在校門口釘孤枝,現在是 8:15PM,你 delay 了 15 分鐘。
- 族繁不及備載...
類似字眼:Lag、Laggy (延遲、遲鈍、落後),感覺在抱怨時很常用哈哈...
- 這台電腦很 lag。抱怨的時候說「電腦很 delay」,就有點滑稽了~
- 現在網路很 lag。
- 這支手機變得很 lag。
- 你 lag 了。
- A 訊號比 B 訊號 lag 了 10us。
- 電流比電壓 lag 30 度。
- 大腳一踩,轉速 lag 1 秒才上來。
- 族繁也是不及備載...
講 delay 的時候,都有一種怒髮衝的感覺。X,底累啦!
Latency (延遲)
描述一件事情實現「某種要求(或目標、條件、規格)」所耗費的時間、晚了多久。比起 delay 來講,latency 更傾向描述時間的「花費」。
比如說 (以下僅舉例示意,實務上有些說法需要搭配測試條件):
- Clock 走這條路徑的 latency 是 10us。
- 按下電風扇開關到葉片開始轉動的 latency 是 3 秒。
- 記憶體 IO 的平均 latency 是 1 毫秒。
- 伺服器處理請求的平均 latency 是 10 毫秒。
- 網路的平均往返的 latency 是 80 毫秒。
- 這次 REQ/RSP 的 latency 是 200 毫秒。
- 族繁不及備載...
講 latency 的時候,不覺得有一股高級感流洩出來嗎?啊啊啊... 累躺洗...
Skew (偏移)
通常用於描述一件事情想並行地(或同時)「在多處」實現,而這一件事情「在各處」實現的時間差。Skew 帶有一種跟"自己"比的味道在 (Offset 雖然也叫偏移,但是有跟某個基準比較的味道,而且 offset 的確定感比較強)。這個要想像一下。
例如:
- 有一 Clock source S,樹狀分佈出去,想要並行地(想要同時)觸發電路中的各個 flip-flops。Clock 走 A 路徑的 latency 是 10us、走 B 路徑的 latency 是 12us。同一個 clock 抵達 A 處跟 B處,兩者間的 skew 是 2 us。
- 這個系統中 clock 的最小 skew 是 0.1 us、最大 skew 是 18 us。一般而言,單獨講 skew 多指 maximum skew。
- 同一筆資料要同時儲存到 A 跟 B 兩台伺服器。成功儲存到 A 伺服器的 latency 是 100 ms、成功儲存到 B 伺服器的 latency 是 120 ms,之間的 skew 是 20 ms。
講 skew 的時候,很奇怪每次都會聯想到滑壘。啊啊啊... 使勾以~~ (三小朋友啊...)
註:以上不考慮事件的性質、訊號源是否為週期性,意思有到就好,事情不用搞得太複雜。
Jitter (抖動)
我沒有要講 Jitter。直接引用 NI 官網的說明如下:
「抖動 (jitter) 是指與事件的理想時間的誤差,通常是從參考訊號的過零點(zero-crossing)進行測量。抖動通常肇因於串音(cross-talk)、同時切換輸出,以及其它週期性發生的干擾訊號。」
但是補充一下:
我認為最後一句「及其它週期性發生的干擾訊號」雖然對、但又不太對勁。對是因為照頻譜的觀點來看是對的,又不太對勁是因為從時域上的觀點來看會讓人很難理解,難道非週期性發生的干擾就不行嗎。抱歉我沒辦法做很簡單的說明,但高手應該知道我的意思 XD...
圖片來源:NI 官網
講 Jitter 的時候,我只會想到洋基。啊啊啊... 欠名望 (那年一起看的大樹哥)
Uncertainty (不確定性)
因為要提到 Uncertainty,所以上面才會列出 Jitter。照前面 clock source tree 的例子,我們希望 clock 分佈到各個系統方塊,最理想的情況是 clock 之間沒有 skew,大家都在絕對的同一時刻、同時觸發。但因為實際上有 latency、skew 以及 jitter,所以我們可以把他們綜合考慮起來,用 clock 的 uncertainty 來描述這件事(設計上會再預留 margin)。
不管是硬體還是軟體,timing 對系統性能有巨大的影響,對於要求循序、順序、因果、強一致性等情境又特別重要,所以有時候你要有預備時間、保持時間、加鎖、打時間戳等方式來讓邏輯得到正確的實現(邏輯正確但速度不一定快)。但概括來說,處理 timing 造成的性能問題可以分兩個方面著手,一個是處理 latency,另一個則是處理 uncertainty。比如說,可以抓 clock 的 driving 能力改善 latency;抓 critial path 想辦法改善 latency (進而改善 skew);抓 reference source 或防干擾來改善 uncertainty。有些時候 latency 本身的不確定性就很高,可以歸類在 uncertainty (例如網路通訊),不過還是要依情境而定。有時候,物理極限就是在那裡,要提升性能(例如吞吐量)或許可以靠架構的方式來補。
情境討論不完、架構討論不完、trade-offs 討論不完、技巧討論不完、bugs 討論不完,那怎麼辦?沒關係,其實有時候不用想那麼多,就是回到基本面:latency + uncertainty 去思考,生命會自己找到出口。事情最怕做了老半天,根本不知道自己面對的問題是什麼。
Time Delay (時間延遲)
如果延遲用時間來描述,那就是 time delay,不要想太多。
Phase Delay (相位延遲)
專門用來描述「弦波訊號」或「週期性訊號」的延遲。比如說,1 kHz 的弦波,它的週期是 1 ms。如果一個弦波經過某裝置,在時間上延遲了 0.5ms (半週期),換成相位來描述的話,也可以說它相位延遲 180度 (或 pi rad,半週期)。
Group Delay (群延遲)
呃... 沒有打算講下去。你可以先思考,上面說 Phase Delay 是可以用來描述「弦波」或週期性訊號的延遲。我們以前在「傅立葉轉換到底在轉換什麼?」有說過:世界上所有的訊號,都是由不同頻率的弦波所組成。也在「電路的動態範圍:單調、雙調與多調測試」說過:Two-tone 訊號其實是一調制訊號的特例。
所以,為什麼要叫「群」延遲,有聯想到了嗎?
那為什麼我們通常會希望群延遲為一個常數呢?
群延遲為常數是什麼意思?不是常數又是什麼意思?
那就以後有"時間"再說啦!
最後,講 Group Delay 的時候,我都會聯想到四角內褲。
很奇怪,不知為何會有此等下流的畫面出現腦海中哈哈哈~~
你聯想到什麼?