前言
说到互联网,大家很容易想到的有 CPU、服务器、操作系统、应用程序(App)、小程序、网页(html)等 。然而,还有一个要素是很容易被忽略的,却是最重要的,那就是网卡 。如果没有网卡,那么所有的主机将会是孤立的,没法实现相互间通信,也就不存在互联网了 。两台主机之间要实现通信,互相收发报文,最底层的基础设施,除了传输链路(光纤、网线等),就是安装在主机上的网卡了,它将主机上应用软件产生的数据打包,然后从物理链路上发送出去,同理,它还可以从物理链路上接收报文,送往主机上的应用程序 。
在这篇文章中,你将会了解到什么是中断,什么是 PCIe,什么是 uio,什么是 igb_uio,什么是 pmd,什么是 DPDK 等一系列与网卡相关的概念及网卡工作的原理 。
文章插图
物理网卡
这里以 Intel 网卡为例,有 10G、25G、100G 等,表示最大的传输速度,单位 Gbit/s 。网卡可以有一个端口,也可以有多个端口 。
网卡驱动知多少
假如我们从 Intel 买回来一张网卡,是不是直接插到电脑上,就可以用呢?答案是否定的 。从一张物理网卡到真正能够实现收发报文,中间可是有一堆工作要做的 。
- PCIe
- 中断
所谓中断,就是外部设备向处理器发起的请求事件,但这还不够本质 。更本质的理解是处理器对外开放的实时受控接口 。中断绝对不是硬件代替软件去轮询,而是硬件的结构决定了,当某个管脚电平变低(或者变高)的时候,CPU 就会被打断,并从特定地址开始执行 。比如,当 CPU 的 RESET 被拉低的时候一定会复位并从某个特定地址重新开始执行,这是由硬件的结构决定的 。
- uio
文章插图
- pmd
pmd 有哪些功能呢?比如对网卡硬件进行一些配置,例如设置网卡接收缓冲区,发送缓冲区的大小 。所谓对网卡进行配置,也就是对网卡寄存器进行配置 。每个网卡都有自己的配置空间,对应了很多寄存器,每种寄存器各自负责不同的功能 。比如接收控制寄存器,用于对网卡收发包的一些设置; 中断寄存器,用于设置允许哪里产生中断事件,例如链路中断 。
- igb_uio
- i40e、ixgbe 等
- 虚拟网卡
总结
我们拿到 Intel 的一张网卡时,一般加载其对应的网卡驱动就可以使用了,比如 i40e、ixgbe 等 。但如果我们要用 DPDK 实现用户态网卡收发包,就需要下载 Intel 等开源代码 - DPDK,内核需要加载 igb_uio,用户态 pmd 驱动框架需要加载 librte_i40e.so 等 。
Linux 系统中 DPDK 编程常用命令
ifconfig/sys/config/net-scripts/ 下的文件可以用来配置 eth 口的 ip 地址等ip link showlspci // 有很多可选参数lsmodsu modprobe uiosu insmod igb_uiodpdk主目录/usrtools/ 下的 dpdk-devbind.py、dpdk-setup.sh 等自带脚本linux 用户空间和内核空间通信通过 sysfs 实现
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 郭开为什么投靠秦国 郭开是秦国的
- 称女婿为东床出自哪个典故
- CD的音质已经不行了,HIFI必须DSD?简单说说DSD到底是什么
- 秦国修的郑国渠是现在的哪里 郑国为什么帮秦国修渠
- 清朝皇帝不能娶汉女 清朝为什么不让汉人女子进宫
- 上官婉儿墓为什么被毁?上官婉儿墓被谁毁的
- 陕西|人在职场,有这四种迹象,恭喜你,说明领导要重用你了
- 12123为什么不能缴纳罚款?
- 秦始皇为什么要多次巡游天下 秦始皇为什么要巡游
- 嘉庆皇帝重用的大臣 嘉庆皇帝为什么没作为