👉个人主页: highman110
👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容
目录
1网卡分类
2网卡原理框架
3智能网卡和网络虚拟化
1网卡分类
网卡全称Network interface card,简称NIC,又叫网络适配器,是计算机、服务器和局域网进行通信的接口卡。诸如EISA、ISA、VESA等接口的网卡已基本淘汰,在此不再详述。目前用得多的是PCIE网卡,服务器和台式机上大多用此类。详细的网卡分类如下图,当然还有其他更多的分类方式,不一一赘述:
2网卡原理框架
通常的网卡包括OSI模型的两个层,物理层和数据链路层,网卡主芯片将MAC和PHY集成在一起:
1、物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。
2、数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。
当然也有的板载网卡,MAC部分被集成在CPU中,外部再增加PHY芯片,这个PHY芯片就是俗称的“软网卡芯片“。
如下图是intel网卡主控芯片基本框图。系统侧支持PCIE 3.0,线路侧支持10Gbase-T。芯片实现PCIE—MAC—PHY—线路的数据处理。
下图是网上找到的两张PCI网卡的实物图,一款MAC和PHY分开,一款MAC和PHY集成:
图中的各标号器件分别是:
①RJ-45接口
②Transformer(隔离变压器)
③PHY芯片
④MAC芯片
⑤EEPROM(存放网卡芯片的供应商ID,子系统供应商ID,网卡的MAC地址,网卡的一些配置,如SMI总线上PHY的地址等信息)
⑥BOOTROM插槽(用于存放无盘工作站引导操作系统的相关代码,如PXE功能,当然这部分代码也可以放在主板BIOS里)
⑦WOL接头(网络唤醒功能,用以连接主板的standby电源)
⑧晶振
⑨电压转换芯片
⑩LED指示灯
3智能网卡和网络虚拟化
随着数据中心内部数据和带宽的爆炸式增长,传统软件实现虚拟化以及数据处理的方式遇到了一系列问题。智能网卡的出现,将网络、存储以及安全任务从CPU卸载到了硬件进行加速,解决了在大带宽场景下CPU的消耗以及延迟和抖动等问题。现在,越来越多的网卡设备支持offload特性,来提升网络收/发性能。offload 是将本来该操作系统进行的一些数据包处理(如分片、重组等)放到网卡硬件中去做,降低系统CPU消耗的同时,提高处理的性能。
LSO/LRO是常用的卸载技术之一,分别对应到发送和接收两个方向,是 Large Segment Offload 和 Large Receive Offload。我们知道计算机网络上传输的数据基本单位是离散的以太网包,既然是包,就有大小限制,这个限制就是 MTU(Maximum Transmission Unit)的大小,一般是1518字节。比如我们想发送很多数据出去,经过os协议栈的时候,会自动拆分成几个不超过MTU的网包。然而,这个拆分是比较费计算资源的(比如很多时候还要分别计算拆分后checksum),由CPU来做的话,往往会造成使用率过高,这和虚拟化的目的—提升硬件资源利用率是背道而驰的,那可不可以把这些简单重复的操作 offload 到网卡上呢?于是就有了LSO,在发送数据超过 MTU 限制的时候(太容易发生了),OS只需要提交一次传输请求给网卡,网卡会自动的把数据拿过来,然后进行切片,并封包发出,发出的网包不超过MTU限制。而当网卡收到很多碎片包的时候,LRO可以辅助自动组合成一段较大的数据,一次性提交给OS处理。一般的,LSO和LRO主要面向TCP报文。
网卡的这些offload特性,对虚拟化有什么帮助?
在网络虚拟化中,一个最常见的技术就是隧道,这是实现overlay的通用手段。而实现隧道无非就两种思路,一种是把转发信息放到包头上,即封装/解封装(无论VXLAN还是STT都是这个思路);另外一种是由额外的数据库管理,转发时候进行查询。这两种思路各有利弊,这里不细说,如果我们采用封装/解封装的作法,那么可能原来网包并没有超过MTU限制,加上封装包头就超了,这就需要进行切片了,那切片这个动作由网卡硬件完成,将有效提升数据的传输效率。有人统计过,想要线速处理10G的网络,需要的大约4个Xeon CPU的核。也就是说,仅仅是进行⽹络数据包的处理,就要占用⼀个8核⾼端CPU⼀半的算力。
总的来说,智能网卡有如下优势:
- 对于运营大型数据中心的云服务提供商来说,智能网卡可以释放宝贵的CPU内核,来为最终用户运行业务应用,从而提高服务器利用率。
- 智能网卡可以满足各种offload需求,包括传输和存储协议,例如RoCE,TCP,NVMe-over-Fabrics。
某些智能网卡是可编程的,可以针对各种应用进行定制,并可以重新配置以满足新的要求。比如英特尔的IPU、英伟达的DPU,都是类似于智能网卡的升级概念,为了减轻CPU的负担,在现代新型数据中心网卡上使用了FPGA或ASIC硬件来做一些原本要CPU做的事情,比如英特尔的IPU上就放了一片志强-D处理器。