
- 网卡 eth0 收到数据包。
- 网卡通过 DMA 将数据包拷贝到内存的环形缓冲区(Ring Buffer,在网卡中有 RX Ring 和 TX Ring 两种缓冲)。
- 数据从网卡拷贝到内存后, 网卡产生 IRQ(Interupt ReQuest,硬件中断)告知内核有新的数据包达到。
- 内核收到中断后, 调用相应中断处理函数,开始唤醒 ksoftirqd 内核线程处理软中断。
- 内核进行软中断处理,调用 NAPI poll 接口来获取内存环形缓冲区(ring buffer)的数据包,送至更上层处理。
- 内核中网络协议栈:L2 处理。
- 内核中网络协议栈:L3 处理。
- 内核中网络协议栈:L4 处理。
- 网络协议栈处理数据后,并将其发送到对应应用的 socket 接收缓冲区。
DMADMA 复制,全称为直接内存访问复制,是一种计算机数据传输技术,允许两个设备(例如内存和外设)在不经过中央处理器 (CPU) 的情况下直接相互传输数据。这可以显著提高数据传输速度,因为 CPU 不需要参与数据传输过程,可以腾出更多时间处理其他任务。DMA 复制通常用于需要快速数据传输的应用,例如视频和音频编辑、游戏和科学计算。它还用于将数据从一个存储设备复制到另一个存储设备,例如从硬盘驱动器复制到固态硬盘。DMA 复制的过程通常如下:
- 启动 DMA 传输:CPU 向 DMA 控制器的寄存器写入命令和源/目标地址。
- DMA 控制开始传输:DMA 控制器将数据从源地址复制到目标地址,无需 CPU 的干预。
- DMA 传输完成:当 DMA 传输完成时,DMA 控制器会向 CPU 发送中断信号。
DMA 复制可以显著提高数据传输速度,因为它无需 CPU 的参与。这对于需要快速数据传输的应用非常有益。需要注意的是,DMA 复制可能会导致数据损坏,如果源和目标地址重叠,或者 DMA 传输过程中发生中断。因此,在使用 DMA 复制时需要格外小心.
关键节点的挑战是用户态内核态的频繁转换、网络协议栈的冗长流程,也就是说内核才是高并发下导致瓶颈的原因所在.