【Linux的以太网驱动的收发流程比较】

一、数据接收的存储空间:

1、ring-buff:

ring-buff环形缓存区域,存储发送或者接收的dma-des描述符,描述符中记录dma物理地址,数据长度以及flag标志。

2、接收缓存:

传统方式:

e1000、emac1000等网卡,采用传统的方式:

1)、setup_rx_buff()初始化的时候,通过netdev_alloc_skb()方式分配skb,rx_desc->dma=dma_map_single(skb->data)的方式。

2)、数据接收rx_recv的硬中断中,只需要rx_desc->status和rx_desc->len填充。

3)、数据接收软中断中:

dma_unmap_single();

skb交给协议栈处理.

netdev_alloc_skb(),dma_map_single()。

现代方式:

igx高性能网卡,采用现代的方式:

1)、setup_rx_buff()初始化的时候,通过alloc_page()方式分配page内存,dma_map_page()方式映射内存;

2)、数据接收rx_recv的软中断中,netdev_alloc_skb()分配,memcpy(skb->data, page_address(page))拷贝一次数据,skb交给协议栈处理。

优点比较:

传统方式:零拷贝,适合小数据报文实时传输;

现代方式:非零拷贝,适合大数据报文高带宽传输。

二、发送数据:

dma_map_single()

tx_desc->dma=dma。

发送数据比较简单的原因: tcp发送有流控机制,udp发送缓存满时会阻塞或者返回失败;使用的是协议栈已经存在的skb。

相关推荐
Apipi*2 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
天启HTTP3 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
广州浮点FLOATLIC5 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
BLUcoding6 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK6 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil2086 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)6 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter6256 小时前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器
xh didida7 小时前
Linux -- 基础IO
linux·服务器·开发语言·c++
zly35008 小时前
centos7 mount设备挂载 /dev/sda1/硬盘挂载
linux·运维·服务器