可程式數據平面上的流事件遙測 - SIGCOMM'20#
動機#
- 網絡性能異常(NPA)比連接丟失更容易發生且更難緩解,因為 NPA 通常在較短的時間範圍內隨機發生,對網絡留下微小的指紋。
- NPA 的原因位置通常是大多數情況下耗費 90% 時間或更多的瓶頸。
- 只有一小部分 NPA 是由網絡引起的,但許多應用通常將 NPA 視為網絡故障的後果,這浪費了大量時間來定位原因。
- 即使網絡確實導致了某個 NPA,整個雲網絡中仍有無數潛在的根本原因和位置可能導致 NPA。
- 結合粗粒度計數器定位原因浪費了大量時間且容易出錯,而細粒度流量鏡像可能會引入擁塞和數據包丟失。
- 在找到 NPA 原因位置後,實際的恢復操作通常很快。
- NPA 的原因位置通常是大多數情況下耗費 90% 時間或更多的瓶頸。
- 在可程式數據平面(PDP)上完全實現流事件遙測(FET)是合理的。
- 直接在數據平面運行 FET 可以減少監控流量和數據處理開銷。
- PDP 中的 ASIC 在運行自定義數據包處理邏輯時可以保持線速,與 CPU 不同。
目標#
- 設計一個基於流事件遙測的網絡監控器,持續(始終開啟)並同時監視(區分)所有單獨流,全面檢測(捕捉)亞秒級流事件,並滿足以下要求:
- 覆蓋範圍:能夠從高速持續流量中發現所有流事件。
- 不僅是 ASIC 中的事件,還包括接口和光纖上的事件。
- 可擴展性:足夠可擴展,即使在大規模生產雲網絡中也能有效運作。
- 需要壓縮事件數據。
- 需要重組小型事件。
- 準確性:
- 零假陽性(FN)。
- 極少的假陽性(FP)。
- 覆蓋範圍:能夠從高速持續流量中發現所有流事件。
主要思想#
- 流事件:擁塞、數據包暫停、路徑變更、數據包丟失(內交換機丟失、跨交換機丟失)。
- 每個可程式交換機採取以下步驟從原始流量中推導出全面且緊湊的流事件:
- 事件數據包檢測:追蹤數據平面中數據包處理的每一步,以檢測每個數據包發生的所有事件,特別是數據包丟失:
- 內交換機數據包丟失
- 類型:管道丟失、擁塞丟失。
- 挑戰:可程式交換 ASIC 的限制。
- 現有解決方案:在可程式管道的開始記錄數據包的出現,並在管道尾部確認數據包的退出。
- 需要不可接受的大內存,如哈希表。
- 需要為每個數據包維護計時器。
- 需要一個同步機制。
- 作者的解決方案:將丟失檢測邏輯嵌入到 ASIC 中的整個數據包處理邏輯中,以報告所有數據包丟失。
- 對於每種類型和原因的數據包丟失,NetSeer 使用相應的方法來檢測它們。
- 跨交換機數據包丟失
- 類型:靜默數據包丟失或損壞。
- 挑戰:缺乏對兩個相鄰交換機之間的電氣和光學元件的直接可見性。
- 作者的解決方案:在兩個相鄰交換機之間使用四字節連續數據包 ID 來檢測數據包丟失。
- 在環形緩衝區中對數據包編號和記錄。
- 數據包傳輸。
- 丟失檢測。
- 丟失通知。
- 丟失檢索。
- 擁塞、路徑變更和暫停檢測。
- 擁塞:測量每個數據包的排隊延遲,並選擇排隊延遲超過閾值的數據包。
- 路徑變更:選擇新流的第一個數據包或端口已更改的舊流作為路徑變更事件數據包。
- 暫停:通過隊列狀態檢測器查找進入端口的相應隊列狀態,並在隊列暫停時將數據包標識為暫停事件數據包。
- 內交換機數據包丟失
- 流事件生成與壓縮:將屬於一個流的順序事件數據包聚合為單個流事件。
- 事件數據包到流事件:通過將事件數據包聚合為流事件來消除冗餘,並為每個流事件維護一個計數器 - 基於組緩存的去重算法。
- 事件信息提取:通過僅從流事件中提取必要的信息來壓縮監控流量,包括流標頭、交換機 - 端口 - 隊列和事件特定數據。
- 循環流事件批處理:批量處理事件數據包,即在每個數據包中打包 $\ge 1$ 事件,以減少帶寬開銷並對 CPU 友好。
- 設計一個堆棧數據結構,將每個進來的事件推入堆棧以進行臨時緩存。
- 生成循環事件批處理數據包(CEBP),這些數據包在管道內通過一個單獨的內部端口不斷循環。
- 當 CEBP 命中堆棧時,它彈出一個事件並將該事件附加到其有效載荷中。
- 當有效載荷長度超過閾值或所有事件都已收集時,CEBP 被轉發到 CPU 並以空有效載荷克隆以收集後續事件。
- 假陽性消除。
- FP 的定義:對同一流事件的重複事件報告。
- 作者的解決方案:
- 使交換機管道提前計算哈希值並將其附加到事件上。
- 交換機 CPU 可以直接檢索該值以進行索引。
- 事件數據包檢測:追蹤數據平面中數據包處理的每一步,以檢測每個數據包發生的所有事件,特別是數據包丟失:
- 用於故障排除網絡事件:NetSeer 可以幫助網絡運營商聲明網絡無辜或快速定位 NPA 原因,通過全面捕捉事件。
- 確定由故障更新引起的路徑變更事件 - 由於網絡更新導致的路由錯誤。
- 通過 ACL 發現管道丟失 - ACL 配置錯誤。
- 捕捉由於表查找錯過而導致的管道丟失,識別流 - 由於奇偶錯誤導致的靜默丟失。
- 通過檢查 MMU 擁塞丟失計數器找到對擁塞貢獻最大的流,並相應地進行調度 - 由於意外流量導致的擁塞。
- 找到哪些交換機丟失了多少存儲數據包,並通過明確說明網絡責任來加速調試過程 - SSD 固件驅動程序錯誤。
優勢#
- 全面覆蓋流事件:利用鏈路兩側的可程式性協同發現跨交換機丟失事件並恢復丟失或損壞數據包的流信息。
- 良好的可擴展性與網絡規模:
- 充分利用數據可程式性來識別和聚合數據包,壓縮流事件。
- 將小型事件消息批量處理為大型數據包,並採用新穎的數據平面內圓形數據包驅動事件收集設計。
- 以分散的方式執行 FET。
- 高數據準確性:確保事件生成中的 0 假陽性,並使用交換機 CPU 進行 ASIC 卸載以發現和消除假陽性,開銷小。
劣勢#
- NetSeer 無法覆蓋由於 ASIC 或 MMU 硬件故障導致的丟失。
- 中間盒必須遵循一些原則,例如設備間丟失意識、基於事件的異常檢測和可靠報告。