免费注册 查看新帖 |

Chinaunix

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

可否实现网卡到磁盘的零拷贝? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-21 10:54 |只看该作者 |倒序浏览
前阵子在版里看了很多 网卡到用户空间 零拷贝的帖子,最近突然想到,可否实现网卡到磁盘的零拷贝呢?有几个问题想请教大家:

1.绕过page buffer,把网卡DMA_Ring上的skb写到raw devices上,或者用Direct I/O方式写到磁盘分区。
  磁盘的Direct I/O 是由DMA搞定,不需要CPU参与?

  另:读写raw devices == 使用Direct I/O方式读写没有格式化(文件系统)的分区 ?


2.考虑到page buffer的好处,把网卡DMA_Ring上的skb映射到page buffer上,这样就避免了CPU参与拷贝。
  但是不知能否映射?

3. sendfile()方式是否就是把page buffer复制到TX_Ring,再由网卡DMA到其FIFO上?

论坛徽章:
0
2 [报告]
发表于 2009-04-21 10:58 |只看该作者
从设备到设备的DMA?还得是跨几种总线?硬盘好象也要内存cache啊
如果是不走内存的话,就是2个是设备的互访问,连host桥都不走.

[ 本帖最后由 epegasus 于 2009-4-21 11:26 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-04-21 11:11 |只看该作者
原帖由 epegasus 于 2009-4-21 10:58 发表
从设备到设备的DMA?还得是跨几种总线?硬盘好象也要内存cache啊
如果是不走内存的话,就是2个是设备的互访问,两host桥到不走.


厄....我是想能否设计一种网卡到磁盘的数据通路,尽量避免CPU参与复制
附件里是棒子的一篇论文,他们的思路是把 skb复制到page buffer里

[ 本帖最后由 okr001610 于 2009-4-21 11:15 编辑 ]

datapath.JPG (67.84 KB, 下载次数: 15)

datapath.JPG

Design and implementation of zero-copy data path for efficient file transmission.pdf

608.9 KB, 下载次数: 61

论坛徽章:
0
4 [报告]
发表于 2009-04-21 11:20 |只看该作者
这个问题我前几天也问过,不过我比较菜,找不到答案
我想如果硬件驱动本身和复杂的,你要在2中设备数据上做解析,那在dma前就要做这些工作,貌似要重设计硬件,不太现实.
http://linux.chinaunix.net/bbs/thread-1096162-1-4.html

论坛徽章:
0
5 [报告]
发表于 2009-04-21 11:23 |只看该作者
上图说明经过内存的中转,确实能做到..

论坛徽章:
0
6 [报告]
发表于 2009-04-21 11:33 |只看该作者
原帖由 epegasus 于 2009-4-21 11:23 发表
上图说明经过内存的中转,确实能做到..


棒子的设计,skb 与 page buffer之间还是得有一次cpu copy...
所以我想问的是,
1.skb 与 page buffer间能否映射(改网卡驱动也可以)
2.使用Direct I/O把skb写到磁盘上是不是就 zero copy了...?

论坛徽章:
0
7 [报告]
发表于 2009-04-21 16:49 |只看该作者
看看 splice 系统调用 真正的零拷贝,只是拷贝指针就实现buffer的拷贝

论坛徽章:
0
8 [报告]
发表于 2009-04-21 23:17 |只看该作者
只要修改硬件什么都可以。
在网卡和硬盘之间添加一个dma设备,就能完成。
如果只是现在x86单靠软件是做不到得

论坛徽章:
0
9 [报告]
发表于 2009-04-22 11:12 |只看该作者
iscsi enterprise target中,如果用block i/o就应该是0拷贝吧。
它把skb封装成bio,直接提交给block layer,相当于direct i/o。 bio生成request,提交到驱动,然后再到控制器。其中没有拷贝。
比如lsi的scsi host controller。request被scsi 层转化成命令后,提交各lsi驱动,该驱动把发送的数据和命令地址放在自己的ring buffer里,然后交给host controller dma。
block i/o的整个过程,没有memcpy操作,数据从网卡ring buffer到磁盘控制器ring buffer。
不知道这样算不算零拷贝?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP