Linux 操作系统原理 — 网络硬件卸载

你说的曾经没有我的故事 提交于 2020-05-05 15:52:13

目录

网络 Offload

网络 Offload,主要是指将原本在内核网络协议栈中进行的 IP 分片、TCP 分段、重组、checksum 校验等操作,转移到网卡硬件中进行,使得 CPU 的发包路径更短,消耗更低,从而提高处理性能。

一开始这些 Offload 功能都是在网卡上针对特定功能设计一个专门的电路并且带有很小的缓存,去做专门的事情。后来直接在网卡上部署一个可编程的通用的小型 CPU,一般称为网络协处理器,就是现在的智能网卡。智能网卡的协处理器可以先对该数据包进行一些预处理,根据处理结果考虑是不是要把数据包发送给主机 CPU,智能网卡中的 Offload 功能一般是使用 eBPF 编程来实现的。

交换 Offload

Linux 4.0 引入了 switchdev 框架,它代表对一类拥有 “交换” 能力芯片的多网口设备的抽象。其中每一个网口就是一个 Port,在 switchdev 框架中被注册成为一个 net_device。

switchdev 起源于 Open vSwitch 项目,由 Jiři Pirko 在 2014 年 9 月首次提出。在 2015 年 2 月的 Netdev 0.1 会议上,网络开发人员决定扩展并采用 switchdev 作为硬件交换机芯片的通用解决方案。switchdev 驱动模型出现之前,Linux 需要交换机厂商的专门工具套件操作交换机,而在 switchdev 驱动模型之后,通用接口被实现。交换机正式纳入 Linux 网络设备体系,Linux 可以用标准接口实现交换机的控制面和管理面

在 switchdev 驱动框架下,硬件交换机设备上的每个物理端口都在内核中注册为一个 net_device,就像对现有的网卡设备所做的那样。可以使用现有的指令工具(e.g. brctl、ip 和 iproute2)将端口绑定或桥接、隧道化或划分 VLAN。

switchdev 驱动程序的优点是这样的交换结构可以被卸载到交换机硬件上。因此,驱动程序将转发数据库(FDB)中的每个条目镜像到硬件,并监视其更改情况。

在这里插入图片描述
最初,switchdev 支持的唯一设备是 QEMU 的 Rocker 软件交换机。后来 Mellanox 和 Broadcom 等公司均提供了支持 switchdev 的交换机器。OpenStack Pike 版本中引入了对 switchdev 的支持,实现了 Open vSwitch 硬件卸载(offloading)功能。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!