FBOSS: Building Switch Software at Scale
BOSS: 大规模环境下交换机软件构建
本文为SIGCOMM 2018 论文,由Facebook提供。
本文翻译了论文的关键内容。
摘要:
在网络设备(例如交换机和路由器)上运行的传统软件,通常是由供应商提供的、专有的和闭源软件;因此,它往往包含操作员不太可能充分使用的无关功能。此外,云规模数据中心网络通常具有交换机供应商可能无法很好地解决的软件和操作要求。本文中,我们将介绍在设计、开发、部署和运营数据中心交换机所需的一组功能的软件(用于内部管理和支持大规模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部署的总量度量。
FBOSS设计具有两个高级设计原则:(1)和在我们的服务器上一样,在交换机上部署和发展软件(Switch-as-a-Server,交换机作为服务)。 (2)尽早使用部署和快速迭代迫使我们拥有一个最简复杂度的网络,只使用有严格需求的功能(Deploy-Early-and-Iterate,早期部署和迭代)。
软件作为服务。对我们来说,通用软件模型在可靠性、灵活性和操作简单性方面取得了更多成功。 我们部署了数以千计的非功能完整或非无错误的软件服务。 但是,我们仔细监控我们的服务,一旦发现任何异常,我们快速进行修复,并部署更改。 我们发现这种做法在建立和扩展我们的服务方面非常成功。我们在通用软件服务方面的经验表明,交换机作为服务原则在可扩展性、代码重用和部署方面很大程度上是成功的。 因此,我们基于同样的原则设计了FBOSS。 但是,由于数据中心网络的操作要求与通用软件服务不同,采用这一原则需要注意一些事项。
早期部署和迭代。使用这个原则,我们能够为我们的环境派生和构建最简单的网络,并尽快对生产网络产生积极影响。 例如,当我们发现控制平面策略的缺乏导致BGP会话超时,我们快速实现并部署它来解决问题。通过尽早对生产网络产生积极影响,我们能够为其他工程师提供令人信服的案例,并提供更多帮助。 到目前为止,我们仍然没有实现IP分段/重组、STP或是大量被认为“必备”的特征。
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采用灵活,可靠和可扩展的大规模软件开发和测试方案。