对NETIF_F_GSO的一些理解
2024-10-09 20:34:23
看linux内核协议栈的时候看到tcp_sendmsg函数,看起来并不难理解,但是申请skb的时候主buff大小让我很困惑。我以前一直以为会根据sack/ip option/pmtu等计算一个mss,然后申请主buff大小为mss的skb。看到代码我发现我想的太简单了,linux有一个特性就是推迟分片(GSO),根据https://lwn.net/Articles/188489/这篇文章的说法GSO在支持SG的网卡上效率大概能提升17.5%,但是在不支持SG的网卡上反而会慢很多(毕竟需要拷贝两次)。
什么是SG(scatter/gather)
SG就是说网卡支持一次发送多个不连续的数据段。
GSO就是利用上面这个特性,在tcp_sendmsg的时候申请的skb的主buff只存L2/L3/L4的协议头,把所有的数据先放到skb_shinfo(skb)->frags里。等到skb交给网卡驱动前再分片。
在sendmsg函数里只申请了左边这样的skb,在发给驱动之前把skb分片成右边这样,然后利用网卡的SG发送。看起来并没有减少拷贝次数,也没有减少内存分配的次数,那为什么效率有提升呢?
最新文章
- springMVC之配置
- POJ 2492 (简单并查集) A Bug's Life
- 非Page类使用session(Httpcontext.session和page.session区别)
- Java基础知识强化之网络编程笔记09:TCP之客户端键盘录入服务器写到文本文件中
- Pki原则
- Flex性能调优相关的一些总结
- zabbix_server---微信报警
- vtigercrm特色功能介绍
- seata-server安装、运行(ubuntu)
- VPS安全配置
- android dm-verity 功能【转】
- double 类型转化为Integer
- .NET 序列化成XML, 并且格式化
- C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)【转】
- Shader Object及Program操作API
- Python之zip
- `ECS弹性计算服务
- BZOJ3451 Tyvj1953 Normal 【期望 + 点分治 + NTT】
- Activiti - 新一代的开源 BPM 引擎 (zhuan)
- stristr函数
热门文章
- 实操ES6之Promise
- 小程序开发-使用xpath解析网页html中的数据
- Mysql用户权限控制(5.7以上版本)
- 微信小程序常用样式
- Mybatis如何执行Select语句,你真的知道吗?
- 论文:Show, Attend and Tell: Neural Image Caption Generation with Visual Attention-阅读总结
- awk使用说明(复制别人的)
- [程序员代码面试指南]二叉树问题-找到二叉树中的最大搜索二叉树(树形dp)
- 小白的springboot之路(十七)、阿里云OSS 的使用
- pytest封神之路第四步 内置和自定义marker