本文爲SIGCOMM 2018 論文,由Facebook提供。git
本文翻譯了論文的關鍵內容。算法
摘要:編程
在網絡設備(例如交換機和路由器)上運行的傳統軟件,一般是由供應商提供的、專有的和閉源軟件;所以,它每每包含操做員不太可能充分使用的無關功能。此外,雲規模數據中心網絡一般具備交換機供應商可能沒法很好地解決的軟件和操做要求。本文中,咱們將介紹在設計、開發、部署和運營數據中心交換機所需的一組功能的軟件(用於內部管理和支持大規模Internet內容提供商的交換機)時,咱們在克服所面臨的複雜性和擴展方面的持續經驗。咱們介紹了FBOSS(Facebook Open Switch Software,臉書開放交換機軟件),它是咱們本身數據中心交換機的軟件;它是基於咱們的交換機做爲服務(switch-as-a-server)和部署早期迭代(deploy-early-iterate)原則設計的。咱們將數據中心交換機上運行的軟件看做與在商用服務器上運行的任何其餘軟件服務同樣。咱們也創建並部署只具備最少數量的功能並進行迭代。這些原則容許咱們快速迭代、測試、部署並在大規模環境下管理FBOSS。在過去的五年中,咱們的經驗代表FBOSS的設計原則容許咱們快速構建穩定且可擴展的網絡。做爲證據,在過去兩年,咱們已經成功將數據中心中運行的FBOSS實例的數量增長了超過30倍。服務器
Our network size and the rate of growth of the network (Figure 1) are unlike most other data center networks. Thus, they imply that our requirements are quite different from most customers. 網絡
咱們的網絡規模和網絡增加率(圖1)與大多數其餘數據中心網絡不一樣。 所以,這意味着咱們的要求與大多數客戶徹底不一樣。架構
圖1:過去2年咱們數據中心中交換機數量的增加,經過FBOSS部署的總量度量。app
FBOSS設計具備兩個高級設計原則:(1)和在咱們的服務器上同樣,在交換機上部署和發展軟件(Switch-as-a-Server,交換機做爲服務)。 (2)儘早使用部署和快速迭代迫使咱們擁有一個最簡複雜度的網絡,只使用有嚴格需求的功能(Deploy-Early-and-Iterate,早期部署和迭代)。異步
軟件做爲服務。對咱們來講,通用軟件模型在可靠性、靈活性和操做簡單性方面取得了更多成功。 咱們部署了數以千計的非功能完整或非無錯誤的軟件服務。 可是,咱們仔細監控咱們的服務,一旦發現任何異常,咱們快速進行修復,並部署更改。 咱們發現這種作法在創建和擴展咱們的服務方面很是成功。咱們在通用軟件服務方面的經驗代表,交換機做爲服務原則在可擴展性、代碼重用和部署方面很大程度上是成功的。 所以,咱們基於一樣的原則設計了FBOSS。 可是,因爲數據中心網絡的操做要求與通用軟件服務不一樣,採用這一原則須要注意一些事項。async
早期部署和迭代。使用這個原則,咱們可以爲咱們的環境派生和構建最簡單的網絡,並儘快對生產網絡產生積極影響。 例如,當咱們發現控制平面策略的缺少致使BGP會話超時,咱們快速實現並部署它來解決問題。經過儘早對生產網絡產生積極影響,咱們可以爲其餘工程師提供使人信服的案例,並提供更多幫助。 到目前爲止,咱們仍然沒有實現IP分段/重組、STP或是大量被認爲「必備」的特徵。ide
To provide FBOSS’s design context, we first review what typical switch hardware contains. Some examples are a switch application-specific integrated circuit (ASIC), a port subsystem, a Physical Layer subsystem (PHY), a CPU board, complex programmable logic devices, and event handlers. The internals of a typical data center switch are shown in Figure 2 [24].
爲了提供FBOSS的設計上下文,咱們首先回顧典型的交換機硬件包含的內容。 一些例子是交換機專用集成電路(ASIC),端口子系統,物理層子系統(PHY),CPU板,複雜可編程邏輯設備和事件處理器。 典型數據中心交換機的內部結構如圖2所示[24]。
圖2:典型數據中心交換機架構。
Switch ASIC. Switch ASIC is the important hardware component on a switch. It is a specialized integrated circuit for fast packet processing, capable of switching packets up to 12.8 terabits per second [49]. Switches can augment the switch ASIC with other processing units, such as FPGAs [53] or x86 CPUs, at a far lower performance [52]. A switch ASIC has multiple components: memory, typically either CAM, TCAM or SRAM [19], that stores information that needs to be quickly accessed by the ASIC; a parse pipeline, consisting of a parser and a deparser, which locates, extracts, saves the interesting data from the packet, and rebuilds the packet before egressing it [19]; and match-action units, which specify how the ASIC should process the packets based on the data inside the packet, configured packet processing logic and the data inside the ASIC memory.
交換機ASIC。 交換機ASIC是交換機上重要的硬件組件。 它是一種用於快速數據包處理的專用集成電路,可以以高達每秒12.8Tb的速率交換數據包[49]。 交換機能夠用其餘處理單元(例如FPGA [53]或x86 CPU)來加強交換機ASIC,但性能要低得多[52]。 交換機ASIC有多個組件:存儲器,一般是CAM,TCAM或SRAM [19],用於存儲須要由ASIC快速訪問的信息; 一個解析流水線,由一個解析器和一個逆解析器組成,它從數據包中定位、提取、保存感興趣的數據,並在發出以前重建數據包[19]; 和匹配動做單元,它們指定ASIC應如何根據數據包內的數據,配置的數據包處理邏輯和ASIC存儲器內的數據處理數據包。
PHY. The PHY is responsible for connecting the link-layer device, such as the ASIC, to the physical medium, such as an optical fiber, and translating analog signals from the link to digital Ethernet frames. In certain switch designs, PHY can be built within the ASIC. At high-speeds, electrical signal interference is so significant that it causes packet corruption inside a switch. Therefore, complex noise reduction techniques, such as PHY tuning [43], are needed. PHY tuning controls various parameters such as preemphasis, variable power settings, or the type of Forward Error Correction algorithm to use.
PHY。PHY負責將鏈路層設備(例如ASIC)鏈接到物理介質(例如光纖),並將鏈路的模擬信號轉換爲數字以太網幀。 在某些交換機設計中,PHY能夠在ASIC內構建。 在高速時,電信號干擾很是嚴重,會致使交換機內部數據包損壞。 所以,須要複雜的降噪技術,如PHY調諧[43]。 PHY調諧控制各類參數,例如預加劇、可變功率設置或要使用的前向糾錯算法的類型。
Port Subsystem. The port subsystem is responsible for reading port configurations, detecting the type of ports installed, initializing the ports, and providing interfaces for the ports to interact with the PHY. Data center switches house multiple Quad Small Form-factor Pluggable (QSFP) ports. A QSFP port is a compact, hot-pluggable transceiver used to interface switch hardware to a cable, enabling data rates up to 100Gb/s. The type and the number of QSFP ports are determined by the switch specifications and the ASIC.
端口子系統。 端口子系統負責讀取端口配置,檢測已安裝端口的類型,初始化端口以及爲端口提供與PHY交互的接口。 數據中心交換機包含多個四元小型可插拔(QSFP)端口。 QSFP端口是一種緊湊的熱插拔收發器,用於將交換機硬件與電纜鏈接,使數據速率高達100Gb/s。 QSFP端口的類型和數量由交換機規範和ASIC決定。
FBOSS interacts with the port subsystem by assigning dynamic lane mapping and adapting to port change events. Dynamic lane mapping refers to mapping multiple lanes in each of the QSFPs to appropriate port virtual IDs. This allows changing of port configurations without having to restart the switch. FBOSS monitors the health of the ports and once any abnormality is detected, FBOSS performs remediation steps, such as reviving the port or rerouting the traffic to a live port.
FBOSS經過分配動態通道映射和適應端口更改事件來與端口子系統交互。 動態通道映射是指將每一個QSFP中的多個通道映射到適當的端口虛擬ID。 這容許更改端口配置,而無需從新啓動交換機。 FBOSS監視端口的健康情況,一旦檢測到任何異常,FBOSS就會執行修復步驟,例如恢復端口或將流量從新路由到存活端口。
CPU Board. There exists a CPU board within a switch that runs a microserver [39]. A CPU board closely resembles a commodity server, containing a commodity x86 CPU, RAM and a storage medium. In addition to these standard parts, a CPU board has a PCI-E interconnect to the switch ASIC that enables quick driver calls to the ASIC. The presence of a x86 CPU enables installation of commodity Linux to provide general OS functionalities. CPUs within switches are conventionally underpowered compared to a server-grade CPUs. However, FBOSS is designed under the assumption that the CPUs in the switches are as powerful as server-grade CPUs, so that the switch can run as much required server services as possible. Fortunately, we designed and built our data center switches in-house, giving us flexibility to choose our own CPUs that fits within our design constraints. For example, our Wedge 100 switch houses an Quad Core Intel E3800 CPU. We over-provision the CPU, so that the switch CPU runs under 40% utilization to account for any bursty events from shutting down the switch. Such design choice can be seen in various types of switches that we deploy, as seen in Figure 3. The size allocated for the CPU board limited us from including an even powerful CPU [24].
CPU板。在交換機中存在一個運行微服務器的CPU板[39]。 CPU板很是相似於商品服務器,包含商品x86 CPU、RAM和存儲介質。除了這些標準部件外,CPU板還具備與交換機ASIC的PCI-E互連,可實現對ASIC的快速驅動調用。 x86 CPU的存在使得可以安裝商用Linux以提供通常的OS功能。與服務器級CPU相比,交換機內的CPU一般功能不足。可是,FBOSS的設計假設交換機中的CPU與服務器級CPU同樣強大,所以交換機能夠運行儘量多的所需的服務器服務。幸運的是,咱們在內部設計和構建了數據中心交換機,使咱們可以靈活地選擇適合咱們設計約束的CPU。例如,咱們的Wedge 100交換機配備一個四核Intel E3800 CPU。咱們過分配置CPU,以便交換機CPU在40%的利用率下運行,以解決關閉交換機時發生的任何突發事件。這種設計選擇能夠在咱們部署的各類類型的交換機中看到,如圖3所示。分配給CPU板的大小限制了咱們包括一個功能更強大的CPU [24]。
圖3:Facebook某數據中心中不一樣類型交換機的FBOSS平均CPU利用率。
Miscellaneous Board Managers. A switch offloads miscellaneous functions from the CPU and the ASIC to various components to improve overall system performance. Two examples of such components are Complex Programmable Logic Device (CPLD) and the Baseboard Management Controller (BMC). The CPLDs are responsible for status monitoring, LED control, fan control and managing front panel ports. The BMC is a specialized system-on-chip that has its own CPU, memory, storage, and interfaces to connect to sensors and CPLDs. BMC manages power supplies and fans. It also provides system management functions such as remote power control, serial over LAN, out-of-band monitoring and error logging, and a pre-OS environment for users to install an OS onto the microsever. The BMC is controlled by custom software such as OpenBMC [25].
雜項主板管理器。 交換機將各類功能從CPU和ASIC卸載到各類組件,以提升總體系統性能。 這些組件的兩個例子是複雜可編程邏輯器件(CPLD)和基板管理控制器(BMC)。 CPLD負責狀態監控,LED控制,風扇控制和前面板端口管理。 BMC是一種專用的片上系統,具備本身的CPU,存儲器,存儲器和鏈接傳感器和CPLD的接口。 BMC管理電源供應和風扇。 它還提供系統管理功能,如遠程電源控制、LAN上串行、帶外監控和錯誤記錄,以及用戶將操做系統安裝到微服務器上的操做系統預置環境。 BMC由OpenBMC等定製軟件控制[25]。
The miscellaneous board managers introduce additional complexities for FBOSS. For example, FBOSS retrieves QSFP control signals from the CPLDs, a process that requires complex interactions with the CPLD drivers.
雜項主板管理器爲FBOSS帶來了額外的複雜性。 例如,FBOSS從CPLD中獲取QSFP控制信號,這一過程須要與CPLD驅動程序進行復雜的交互。
Event handlers enable the switch to notify any external entities of its internal state changes. The mechanics of a switch event handler are very similar to any other hardware-based event handlers, thus the handlers can be handled in both synchronous or asynchronous fashion. We discuss two switch specific event handlers: the link event handler, and the slow path packet handler.
事件處理程序使交換機可以通知任何外部實體其內部狀態的更改。 交換機事件處理程序的機制與任何其餘基於硬件的事件處理程序很是類似,所以處理程序能夠同步或異步方式處理。 咱們討論兩個特定於交換機的事件處理程序:鏈路事件處理程序和慢速路徑數據包處理程序。
鏈路事件處理程序。 鏈路事件處理程序通知ASIC和FBOSS在QSFP端口或端口子系統中發生的任何事件。 此類事件包括鏈路開啓和關閉事件以及鏈路配置的更改。 鏈路狀態處理程序一般使用繁忙的輪詢方法實現,交換機軟件有一個活躍線程,它不斷監視PHY的鏈路狀態,而後當檢測到更改時調用用戶提供的回調函數。FBOSS提供對鏈路事件處理程序的回調,並在激活回調函數時同步其本地鏈路狀態的視圖。
慢路徑數據包處理程序。大多數交換機容許數據包發送到指定的CPU端口(慢速路徑)。相似於鏈路狀態處理程序,慢速數據包處理程序不斷輪詢CPU端口。一旦在CPU端口接收到數據包,慢速路徑包處理程序通知交換機軟件捕獲的數據包並激活所提供的回調函數。該回調函數提供了各類信息,可能包括捕獲的實際數據包。這容許慢路徑數據包處理程序能夠極大地擴展交換機的功能集,由於它能夠啓用自定義數據包處理而無需更改數據平面的功能。例如,能夠對某些數據包進行採樣以進行帶內監控或修改數據包以包含自定義信息。然而,如其名稱所示,慢速路徑數據包處理程序處理數據包的速度很慢,沒法線速實現自定義數據包處理。所以它僅適用於處理交換機接收的一小部分數據包樣本的案例。
爲了管理數據中心交換機,咱們開發了供應商無關的交換機軟件FBOSS,其能夠運行於標準的Linux發行版。 FBOSS目前已部署在咱們生產數據中心的ToR和匯聚交換機。爲了給出一個功能須要多少代碼行的範圍,在FBOSS中實現鏈路聚合須要5,932行新添加的代碼。圖4給出了自開源以來本項目的增加。2017年9月發生的代碼庫大小的跳躍是由於FBOSS添加大量硬編碼參數,以支持特定供應商NIC。
FBOSS負責管理交換機ASIC和提供更高級別的遠程API,其可轉換爲特定的ASIC SDK方法。 外部流程包括管理、控制、路由、配置和監控流程。 圖5說明了FBOSS,交換機中的其餘軟件進程和硬件組件。 請注意,在咱們的生產部署中,FBOSS與咱們的服務器共享相同的Linux環境(例如,OS版本,打包系統),以便咱們能夠在服務器和交換機上使用相同的系統工具和庫。
圖5:交換機軟件和硬件組件。
FBOSS由多個互連組件組成,咱們分類以下:交換機軟件開發工具包(SDK),硬件交換機,硬件抽象層,軟件交換機,狀態觀察者,本地配置生成器,Thrift [2]管理接口和QSFP服務。 FBOSS代理是主要進程,運行FBOSS的大部分功能。 交換機SDK與FBOSS代理捆綁並編譯,由外部交換機ASIC供應商提供。 QSFP服務之外的其餘所有組件,做爲獨立的進程,駐留在FBOSS代理內部。
交換機SDK。 交換機SDK是ASIC供應商提供的軟件,它公開了與底層ASIC功能交互的API。 這些API包括ASIC初始化,安裝轉發表規則,並監聽事件處理程序。
HwSwitch。 HwSwitch表明了一個抽象交換機硬件。 HwSwitch的接口提供用於配置交換機端口,發送和接收數據包到這些端口的通用抽象,並註冊端口狀態更改和發生在這些端口的數據包輸入/輸出事件的回調函數。 除了通用的抽象,ASIC特定的實現被推送到硬件抽象層,容許與交換機硬件的交換機無關的接口。 雖然不是一個完美的抽象,FBOSS已被移植到兩個ASIC系列,而且有更多的移植正在進行。 HwSwitch實現的一個例子能夠在文獻[14]中找到。
硬件抽象層。 經過擴展HwSwitch接口,FBOSS容許用戶輕鬆添加支持特定ASIC的實現。這也容許輕鬆支持多個ASIC而無需更改主要的FBOSS代碼庫。 自定義實現必須支持指定HwSwitch定義的最小功能集。 可是,鑑於HwSwitch只定義了少許功能,FBOSS容許自定義實現包括其餘功能。 例如,FBOSS的開源版本實現了一些自定義功能,例如指定鏈路聚合,添加ASIC狀態監視器和配置ECMP。
SwSwitch。 SwSwitch爲交換和路由數據包提供硬件獨立的邏輯,並提供與HwSwitch的接口以將命令傳輸到交換機ASIC。 SwSwitch的一些功能示例包括L2和L3表的接口,ACL條目,和狀態管理。
狀態觀察器。 經過保持協議狀態變化,SwSwitch使其能夠實現底層控制協議,如ARP,NDP,LACP和LLDP。該協議經過一種叫作狀態觀察的機制通知狀態變化。 具體來講,任何對象在初始化時能夠將本身註冊爲狀態觀察者。 所以,每一個將來的狀態變動都會調用由對象提供的回調函數。 回調函數提供了所關心的狀態變化,容許對象作出相應的反應。 例如,NDP將本身註冊爲狀態觀察者,以便它能夠對端口改變事件做出反應。 這樣,狀態觀察機制容許協議實現與狀態管理有關的問題的解耦。
Thrift管理接口。 咱們以分離控制配置的方式運行網絡。 每一個FBOSS實例都包含本地控制平面,在一個與集中網絡管理系統通訊(經過Thrift管理接口)的微服務器上運行BGP或OpenR [13]等協議。它們之間發送的消息類型如圖7所示的格式。 鑑於能夠修改接口以知足咱們的需求,Thrift爲咱們提供了簡單而靈活的服務管理和運營網絡的方式,使得穩定性和可用性增長。
圖7: 由交換機獲取L2表項的Thrift接口定義示例。
QSFP服務。 QSFP服務管理一組QSFP端口。 此服務檢測QSFP插入或拔除,讀取QSFP產品信息(例如,製造商),控制QSFP硬件功能(即更改電源配置),並監控QSFP。 FBOSS最初在FBOSS代理內部實現QSFP服務。 可是,隨着服務的不斷髮展,咱們必須從新啓動FBOSS代理和交換機以應用更改。 所以,咱們將QSFP服務分隔爲一個單獨的過程,以提升FBOSS的模塊化和可靠性。 結果是,FBOSS代理更可靠,由於QSFP服務中的任何重啓或錯誤都不會直接影響代理。 可是,因爲QSFP服務是一個單獨的過程,它須要單獨的工具來進行打包,部署和監控。 此外,QSFP服務和FBOSS代理之間須要仔細的過程同步。
咱們的中斷記錄(圖9)顯示約60%的交換機中斷是由軟件錯誤引發的。 這相似於已知數據中心設備的軟件故障率,約爲51%[27]。 爲了儘可能減小這些中斷事件的發生和影響,FBOSS採用靈活,可靠和可擴展的大規模軟件開發和測試方案。