用户态buffer里的一份数据通过网络发送出去,一共进行几次的copy操作?

5 views
Skip to first unread message

hank peng

unread,
Apr 30, 2010, 4:52:29 AM4/30/10
to linux-...@zh-kernel.org
比如一份用户态的buffer通过套接字函数接口直到从网卡发送出去,一共进行了几次copy操作?
我现在想到是两次,一次是从用户态到内核态,还有一次是内核态到网卡驱动,但不知道网络协议栈中各层之间是否有copy操作?
有读过TCP/IP协议栈的大牛吗?

--
The simplest is not all best but the best is surely the simplest!
_______________________________________________
Linux 内核开发中文邮件列表
Linux-...@zh-kernel.org
http://zh-kernel.org/mailman/listinfo/linux-kernel
Linux 内核开发中文社区: http://zh-kernel.org

--
这是zh-kernel邮件列表内容的只读归档,如果想参与讨论请访问http://zh-kernel.org进行订阅。

zhangleo

unread,
Apr 30, 2010, 5:48:21 AM4/30/10
to peng...@gmail.com, linux-...@zh-kernel.org

各协议栈之间一般不会有copy操作,但广播,多播会有相关的复制,也要根据情况,可以看一下skb_clone这个函数被调用的地方

> Date: Fri, 30 Apr 2010 16:52:29 +0800
> Subject: 用户态buffer里的一份数据通过网络发送出去,一共进行几次的copy操作?
> From: peng...@gmail.com
> To: linux-...@zh-kernel.org

>
> 比如一份用户态的buffer通过套接字函数接口直到从网卡发送出去,一共进行了几次copy操作?
> 我现在想到是两次,一次是从用户态到内核态,还有一次是内核态到网卡驱动,但不知道网络协议栈中各层之间是否有copy操作?
> 有读过TCP/IP协议栈的大牛吗?
>
> --
> The simplest is not all best but the best is surely the simplest!
> _______________________________________________
> Linux 内核开发中文邮件列表
> Linux-...@zh-kernel.org
> http://zh-kernel.org/mailman/listinfo/linux-kernel
> Linux 内核开发中文社区: http://zh-kernel.org

_________________________________________________________________
SkyDrive电子画册,带你领略精彩照片,分享“美”时“美”刻!
http://www.windowslive.cn/campaigns/e-magazine/ngmchina/?a=c

Li Yu

unread,
Apr 30, 2010, 5:58:43 AM4/30/10
to hank peng, linux-...@zh-kernel.org
hank peng 写道:

> 比如一份用户态的buffer通过套接字函数接口直到从网卡发送出去,一共进行了几次copy操作?
> 我现在想到是两次,一次是从用户态到内核态,还有一次是内核态到网卡驱动,但不知道网络协议栈中各层之间是否有copy操作?
> 有读过TCP/IP协议栈的大牛吗?
>

多数情况下,硬件直接使用内核态的缓冲了,直接设置一下驱动的tx ring就发出去了。

Reply all
Reply to author
Forward
0 new messages