iT邦幫忙

2026 iThome 鐵人賽

DAY 18
0
IT Operation

低延遲網路的維運工程:從 HFT 現場長出來的 30 天系列 第 18 篇

Day 18:LANZ 佇列紀錄與 microburst 實測

  • 分享至 

  • xImage
  •  

一條 10G 進、一條 10G 出,出口的頻寬剛好夠用,佇列堆不起來,discards 自然是 0。進出速率相同的時候,要讓佇列堆起來,得有兩條以上的流量擠同一個出口。

這種擠法常常只持續幾百 µs 到幾十 ms:出口在很短的時間裡收到的比送得出去的多,佇列堆高又消掉,看每秒的平均值看不出來,這就是 microburst。今天讓兩條流量擠同一個 10G 出口,用 LANZ 把它記下來。

LANZ 的啟用與門檻

LANZ 在這台預設是關的,show queue-monitor length 只回一句 Lanz agent not running.。在全域設定打開,不用 reload:

configure terminal
queue-monitor length
end

https://ithelp.ithome.com.tw/upload/images/20261001/20184063qSOCN3NC5a.png

每個 port 的佇列以 480 bytes 的 segment 計,高門檻 512、低門檻 256、上限 5,615。佇列超過 512 開始記一次擁塞,掉到 256 以下結束,到上限才開始丟(這次 LANZ 記到的最長佇列是 5,616,比 status 多 1)。

兩條流量擠一個 10G 出口

Et3 接一張 Solarflare X4522 當接收端,跟 Et1、Et2 放在同一個 VLAN。ExaNIC X25 的兩個 port 當發送端,用 exanic-measure 加 -T(只送不收):

  1. port0 先連續送 200 萬個 1518 bytes 的廣播,當作背景流量
  2. 一秒後,port1 插進一段 burst
exanic-measure -d exanic0 -t 0 -r 1 -T -s 1518 -c 2000000 &
sleep 1; exanic-measure -d exanic0 -t 1 -r 0 -T -s 1518 -c 5000

兩條都是廣播,交換器都會往 Et3 送。burst 那條從 TX 時戳算出來約 5.5 Gbit/s,兩條加起來超過 10G,多出來的就在 Et3 的出口排隊。burst 從 500 個 1518 bytes 的 frame 做到 20,000 個:

burst(個) 送完需要 LANZ 最長佇列(segments) 擁塞持續 Et3 丟掉的封包
500 1.1 ms 沒有紀錄 — 0
1,000 2.2 ms 710 0.9 ms 0
2,000 4.5 ms 1,363 3.5 ms 0
5,000 11.2 ms 3,528 11.8 ms 0
10,000 22.4 ms 5,616 24.4 ms 362
20,000 44.8 ms 5,616 46.9 ms 2,206

https://ithelp.ithome.com.tw/upload/images/20261001/20184063SCnwRim8uU.png

門檻、上限與擁塞紀錄的讀法

結果分成三段:

  • 500 個:LANZ 沒有紀錄。佇列應該有堆,但沒超過門檻 512。
  • 1,000 到 5,000 個:LANZ 記下了擁塞,discards 還是 0。只看 discards,這三次什麼事都沒發生。
  • 10,000 個以上:佇列頂到上限才開始丟,burst 越長,停在上限的時間越久,丟得越多。

LANZ 把一次擁塞記成好幾行,由新到舊排:S 是佇列剛過 512,E 是掉回 256 以下。E 那行記著這次擁塞持續多久、佇列最長到多少,以及最長出現在開始後第幾 µs。中間的 U 大約每 80 µs 一行,一次擁塞最多 25 行,只涵蓋開頭約 2 ms,長的擁塞要看 E。

status 裡的 update interval 是 5,000,000 µs,也就是 5 秒。EOS 文件說它是佇列持續擁塞時,擁塞資訊多久更新一次。這次最長的擁塞 46.9 ms,撐不到 5 秒,報表裡每 80 µs 一行的 U 不是照這個間隔產生的。

佇列監看的維運做法

打開 LANZ 後,用 show queue-monitor length status 確認有啟用。擁塞只會出現在收的比送的多的出口,例如多條流量匯進同一個 port(像這次的 Et3),或入口比出口快,監看就從這種 port 開始。紀錄只存在交換器上,要定期收走,事後查問題才有資料。

低延遲環境只看 discards 不夠。5,000 那次佇列堆到 3,528 segments、擁塞持續 11.8 ms,discards 還是 0,因為封包只是晚到,沒有被丟。

LANZ 自己也有看不到的範圍:佇列沒超過門檻就不會留紀錄,500 那次就是。門檻訂多低,決定了多小的 microburst 看得到,這是後面要談的題目。

明天把廣播換成多播,看行情爆量在交換器上留下什麼痕跡。


上一篇
Day 17:錯誤計數器的判讀與重現測試
系列文
低延遲網路的維運工程:從 HFT 現場長出來的 30 天 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言