免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6531 | 回复: 7
打印 上一主题 下一主题

[内核模块] linux内核中TCP源码:tcp_sendpage 和 tcp_sendmsg的区别在那里 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-03 15:02 |只看该作者 |倒序浏览
我们知道在linux内核中TCP发送数据的的基本的流程图如下: 请问一下函数 tcp_sendpage 和 tcp_sendmsg的区别在那里??? 字面的意思好理解,我只是清楚,根据数据来至用户层( tcp_sendmsg)和页面缓存(tcp_sendpage)的却别来选择。不是那么清楚,希望高手能给一个更加详细的说明!
我在内核打印发现:
  建立了一个FTP连接,前面的数据都是走的tcp_sendmsg
后面我get了一个文件(几十K) 走的是 tcp_sendpage


求大家帮我分析分析 谢谢!!

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2014-01-03 15:23 |只看该作者
回复 1# SCDXMOE

你看下 splice 或者 sendfile 系统调用陷入 kernel 之后,执行的函数调用流程。



   

论坛徽章:
0
3 [报告]
发表于 2014-01-03 15:34 |只看该作者
回复 2# Godbach


   您说的对,流程我是看了,但是不太明白为什么要分开,都是一个连接上的数据,为什么要分两种路径发送!

论坛徽章:
0
4 [报告]
发表于 2014-01-03 16:00 |只看该作者
回复 2# Godbach


   谢谢您的知道,我去详细的看了sendfile系统 而sendfile系统将,磁盘文件被直接发送到了网卡的内存缓冲区,减少了数据复制和内核态切换的开销 。


但是有个问题是,不知道我建立的FTP,发送数据的时候有时候走tcp_sendpage 有时候 走 tcp_sendmsg


不知道他们是怎么选择的!!! 中间的过程我步清楚  
谢谢

论坛徽章:
2
天秤座
日期:2014-01-09 21:41:17双鱼座
日期:2014-02-20 21:50:54
5 [报告]
发表于 2014-01-04 17:01 |只看该作者
同样想知道,希望大神帮忙解答下
回复 2# Godbach


   

论坛徽章:
1
白羊座
日期:2014-01-05 12:42:56
6 [报告]
发表于 2014-01-05 13:04 |只看该作者
TCP传输方式:
1)程序直接由磁盘到内存缓冲区的数值形参 (过程)
2)匿名软件由系统提取参数并调用外部函数运行 (模块)

论坛徽章:
0
7 [报告]
发表于 2014-01-05 18:44 |只看该作者
回复 6# gacad


   您好:感谢您的回复:

您说:“
TCP传输方式:
1)程序直接由磁盘到内存缓冲区的数值形参 (过程)
2)匿名软件由系统提取参数并调用外部函数运行 (模块



对我很有启发,这就是为什么我在linux系统中安装了ftp软件之后(server) ,在client端get文件的时候,在client与server通信的时候,server走的是tcp_sendmsg,在真正发送数据的时候走的是tcp_senpage


对于您上面的说TCP传输的方式,我理解是 :
       1.,在client与server通信的时候,是您所说的  程序直接由磁盘到内存缓冲区的数值形参 (过程)
     2. 在真正发送数据,server发送文件的时候 走的是   tcp_senpage  但是不是很理解您说的 “匿名软件由系统提取参数并调用外部函数运行 (模块


可以详细的讲解一下“”匿名软件由系统提取参数并调用外部函数运行 “ 可以吗?给个相关的连接也行....谢谢

论坛徽章:
2
天秤座
日期:2014-01-09 21:41:17双鱼座
日期:2014-02-20 21:50:54
8 [报告]
发表于 2014-01-09 17:47 |只看该作者
你好,想问下 你是在哪做修改,可以实现
“我在内核打印发现:
  建立了一个FTP连接,前面的数据都是走的tcp_sendmsg
后面我get了一个文件(几十K) 走的是 tcp_sendpage ”
能具体些吗?谢谢
回复 7# SCDXMOE


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP