與傳統商業交換機相比,SONiC采用容器技術、redis數據庫技術、并抽像出SAI的概念做到軟硬件解耦,南向可以兼容各廠商ASIC,北向適配統一的SONIC軟件系統。SAI是SONiC的核心,并為SONiC提供了統一的API。設備廠家、網絡開發者可以基于芯片廠家提供的SAI接口開發應用,而不需要關心底層硬件實現,加速產品迭代與創新。在數據庫架構方面,SONiC使用數據庫架構代替原有的模塊化耦合架構,將應用模塊之間的傳遞數據模式變成應用模塊之間通過數據庫進行數據交換的模式,從關注流程轉變為關注數據,實現了功能模塊之間的解耦。數據庫成為了所有模塊的樞紐,模塊與模塊之間解耦,數據庫是穩定的,各個模塊升級與故障不會影響其他模塊,在整個切換過程中轉發面不受到影響。容器化使得SONiC具有極高的可擴展性,網絡運營管理人員能夠快速引入第三方、專有或開源組件,而不對原有業務造成影響。本文主要介紹基于容器技術、數據庫技術及SAI的端口狀態交互流程,SONiC端口狀態交互分為端口初始化以及端口狀態變化兩部分,以下將對這兩個部分做詳細說明。
端口初始化
(0) 初始化階段,portsyncd構建與redis-engine的主要databases間的通信通道。Portsyncd 是 APPL_DB 和 STATE_DB 的發布者,是 CONFIG_DB 的訂閱者。同樣的,portsyncd 也訂閱了系統的netlink 通道來傳輸 port/link-state信息。
(1) Portsyncd 通過解析端口配置文件(port_config.ini) 和被系統正在使用的hardware-profile/sku 開始啟動。端口相關信息例如lanes, interface name, interface alias, speed等等,都通過此通道到達APPL_DB。
(2) Orchagent 監聽所有的新狀態,但是會延遲操作直到portsyncd 通知已經完全解析完port_config.ini。一旦解析結束,orchagent將繼續進行硬件/內核中相應端口接口的初始化。Orchagent調用sairedis APIs 發送請求到syncd 通過常規ASIC-DB接口。
(3) Syncd 通過 ASIC_DB 接收到請求,準備調用 SAI APIs 來滿足 Orchagent’s 請求。
(4) Syncd利用SAI APIs + ASIC SDK 創建與正在初始化物理端口相關的內核 host-interfaces 。
(5) 上一步將生成 netlink 信息,會被portsyncd接收。 與先前從port_config.ini解析的所有端口相關的消息到達portsyncd后,portsyncd 會繼續聲明已完成初始化步驟。
(6) 作為上一步的一部分,portsyncd記錄 record-entry到STATE_DB,對應于每個成功初始化的端口。
(7) 此時起,應用之前訂閱的STATE_DB 內容會接收到一個通知,允許他們開始利用他們需要的端口。換句話說,如果沒有在STATE_DB 中發現某個端口的有效的entry,沒有應用可以使用他們。
端口狀態變化
(0) 和之前提到的一樣,syncd既作為ASIC_DB的發布者也是訂閱者。訂閱模式被syncd評判來獲取北向綁定的應用狀態,例如所有模塊交互的例子。發布模式被需要允許syncd通知高層次組件硬件衍生事件的到達。
(1) 通過ASIC對應光學模塊,一點檢測到有loss-of-carrier,一個通知就被發送到相關驅動,最終傳輸到syncd。
(2) Syncd 調用合適的通知處理機制發送port-down事件給ASIC_DB。
(3) Orchagent 利用通知線程(專門用于此任務)來收集ASIC_DB的新狀態,并且執行 ‘port-state-change’ ,即:
- 生成APPL_DB的更新來警告依賴此狀態的操作(例如,CLI – "show interface)
- 調用 sairedis APIs 來警告syncd需要更新與端口的主機接口相關的內核狀態,orchagent 傳輸這個需求到syncd通過常規ASIC_DB接口。
(4) Syncd 接收來自ASIC_DB的請求準備調用SAI APIs 來滿足此請求。
(5) Syncd 利用 SAI APIs + ASIC SDK 來用受影響的主機接口的最新操作狀態(DOWN)。
(6) portsyncd獲得一個與上述步驟相關的netlink消息,由于所有SONiC組件現在都已完全意識到port-down事件,因此該消息被丟棄。
通過對SONiC端口狀態交互流程可以學習到SONiC的交互機制,其中涉及到與內核的通信機制,數據庫的訂閱及發布,應用層容器與syncd及ASIC的交互流程。同時端口狀態的交互也是協議交互及路由交互的基礎。