免费注册 查看新帖 |

Chinaunix

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

[网络子系统] swiotlb的作用请教 [复制链接]

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-26 10:09 |只看该作者 |倒序浏览
请教:swiotlb的具体作用和原理。
目前发现我们的万兆网卡环境,Dom0中,当开启swiotlb=force选项后,网卡会出现丢包,关闭后正常。
请大牛们指教。

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
2 [报告]
发表于 2013-12-26 10:32 |只看该作者
回复 1# humjb_1983


dma_addr_t swiotlb_map_page(struct device *dev, struct page *page,
                            unsigned long offset, size_t size,
                            enum dma_data_direction dir,
                            struct dma_attrs *attrs)
{

        /*
         * If the address happens to be in the device's DMA window,
         * we can safely return the device addr and not worry about bounce
         * buffering it.
         */
        if (dma_capable(dev, dev_addr, size) && !swiotlb_force)
                return dev_addr;

        /* Oh well, have to allocate and map a bounce buffer. */
        map = map_single(dev, phys, size, dir);
}

没仔细去研究dma_ops的初始化了,不过这个地方跟swiotlb=force有点关系,不知道你是不是使用了streaming dma mapping!

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
3 [报告]
发表于 2013-12-26 10:34 |只看该作者
回复 1# humjb_1983

http://lwn.net/Articles/91870/

The Itanium architecture took a different approach, known as the "software I/O translation buffer" or "swiotlb." The swiotlb code simply allocates a large chunk of low memory early in the bootstrap process; this memory is then handed out in response to DMA allocation requests. In many cases, use of swiotlb memory involves the creation of "bounce buffers," where data is copied between the driver's buffer and the device-accessible swiotlb space. Memory used for the swiotlb is removed from the normal Linux memory management mechanism and is, thus, inaccessible for any use other than DMA buffers. For these reasons, the swiotlb is seen as, at best, inelegant.


lwn上也有,估计是bounce buffer带来的性能损失。。。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
4 [报告]
发表于 2013-12-26 11:07 |只看该作者
本帖最后由 humjb_1983 于 2013-12-26 11:09 编辑
asuka2001 发表于 2013-12-26 10:32
回复 1# humjb_1983

感谢,就是流式映射,之前也大致看了下这段代码,没看明白为啥会丢过,还没仔细研究~~

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
5 [报告]
发表于 2013-12-26 11:08 |只看该作者
asuka2001 发表于 2013-12-26 10:34
回复 1# humjb_1983

http://lwn.net/Articles/91870/

原来跟bounce buffer有关,我再查查资料,感谢感谢!

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
6 [报告]
发表于 2013-12-26 11:44 |只看该作者
回复 4# humjb_1983

你用streaming dma mapping,开启了swiotlb_force,结果map开始的时候所有的dma buffer都要重新复制到bounce buffer,然后dma完成了再复制回来,自然效率大大降低,估计网卡的dma ring满了,就丢包了!

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
7 [报告]
发表于 2013-12-26 12:16 |只看该作者
asuka2001 发表于 2013-12-26 11:44
回复 4# humjb_1983

你用streaming dma mapping,开启了swiotlb_force,结果map开始的时候所有的dma bu ...

问题现象很奇怪,就是简单的ping包,第一个包就会丢,然后就是间断性丢包(丢包率很高),按理这样的ping包应该不至于导致ring buffer满才对~
不知是否有好的确认方法?

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
8 [报告]
发表于 2013-12-26 12:28 |只看该作者
回复 7# humjb_1983

ping包第一个包掉包好像是其他原因,记得版主曾经解答过。。。

另外虽然你只是使用ping,不过你的其他虚拟机中没有大量的网络通信么?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
9 [报告]
发表于 2013-12-26 13:56 |只看该作者
asuka2001 发表于 2013-12-26 12:28
回复 7# humjb_1983

ping包第一个包掉包好像是其他原因,记得版主曾经解答过。。。

确认确实没有大的网络流量~,第一个包丢包的问题不知哪位版主能帮忙解答下?这个东东看似不太好打点分析,从目前的打点看,应该是在硬件做dma的时候,包就丢了,驱动层抓不到丢的包。
感谢asuka2001兄的支持!

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
10 [报告]
发表于 2013-12-27 09:47 |只看该作者
回复 9# humjb_1983

http://blog.csdn.net/wangxujun163163/article/details/8135130

第一个PING包,网卡需要学习对端的MAC地址用以封装数据包,这样会超过PING包的时间限制,导致第1个PING包无回复,显示为丢包。在MAC地址学习完成以后,后面的数据包就可以正常发送,PING回复正常。
第一次PING通以后,以后再PING时不会再有丢包情况。
如果此时将计算机网卡的ARP清除,再次PING时,仍然会第一个包丢包。
第一包的时候,交换机或路由器还没生产mac地址表,所以第一个包会通过ARP广播出去寻找mac地址,如果延时过大,通常就会产生掉包。


你们是使用xen做pci passthrough?对比下开启swiotbl=force前后的dma_ops呢。

arch/x86/kernel/pci-swiotlb.c: static struct dma_map_ops swiotlb_dma_ops

或者是

arch/x86/xen/pci-swiotlb-xen.c: static struct dma_map_ops xen_swiotlb_dma_ops

看你们配置的是 CONFIG_SWIOTLB_XEN还是 CONFIG_SWIOTLB。

虽然没有仔细去看代码,但是估计变动的比较大的也就是强制使用bounce buffer。。。网络流量不大却掉包很奇怪!你确认是因为swiotlb=force造成的?不是网络环境或者是ping的对端的问题吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP