看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发送。看起来并没有减少拷贝次数,也没有减少内存分配的次数,那为什么效率有提升呢?

最新文章

  1. springMVC之配置
  2. POJ 2492 (简单并查集) A Bug's Life
  3. 非Page类使用session(Httpcontext.session和page.session区别)
  4. Java基础知识强化之网络编程笔记09:TCP之客户端键盘录入服务器写到文本文件中
  5. Pki原则
  6. Flex性能调优相关的一些总结
  7. zabbix_server---微信报警
  8. vtigercrm特色功能介绍
  9. seata-server安装、运行(ubuntu)
  10. VPS安全配置
  11. android dm-verity 功能【转】
  12. double 类型转化为Integer
  13. .NET 序列化成XML, 并且格式化
  14. C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)【转】
  15. Shader Object及Program操作API
  16. Python之zip
  17. `ECS弹性计算服务
  18. BZOJ3451 Tyvj1953 Normal 【期望 + 点分治 + NTT】
  19. Activiti - 新一代的开源 BPM 引擎 (zhuan)
  20. stristr函数

热门文章

  1. 实操ES6之Promise
  2. 小程序开发-使用xpath解析网页html中的数据
  3. Mysql用户权限控制(5.7以上版本)
  4. 微信小程序常用样式
  5. Mybatis如何执行Select语句,你真的知道吗?
  6. 论文:Show, Attend and Tell: Neural Image Caption Generation with Visual Attention-阅读总结
  7. awk使用说明(复制别人的)
  8. [程序员代码面试指南]二叉树问题-找到二叉树中的最大搜索二叉树(树形dp)
  9. 小白的springboot之路(十七)、阿里云OSS 的使用
  10. pytest封神之路第四步 内置和自定义marker