云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

分布式存储_自己搭建网站服务器_12月免费

小七 141 0

部分内核旁路合并到netmap main中

在上一篇文章中,我们描述了我们在一种新的网络地图模式,称为单rx队列的工作。在提交了pull请求之后,netmap维护人员告诉我们这个补丁很有趣,但是他们更喜欢更可配置的东西,而不是定制的定制模式。经过交换意见和更多的工作,我们的补丁刚刚合并到主线网络地图。了解新的网络地图在我们的补丁之前,netmap曾经是一个全有或全无的交易。也就是说:无法将网络适配器部分置于netmap模式。所有队列都必须与主机网络堆栈分离。即使是名为"单环对"的网络地图模式也没有帮助。我们的最后一个补丁是扩展的和更通用的,同时仍然支持我们最初的单rx队列模式的简单功能。首先,我们修改了netmap,使未显式请求处于netmap模式的队列附加到主机堆栈。这样,如果用户请求一对环(例如使用nm_open("网络地图:eth0-4)它将实际获得对第4个RX和TX环的引用,同时保持其他环连接到内核堆栈。但是,由于网卡仍然部分连接到主机堆栈,一个新的问题出现了:我们应该如何处理将要由操作系统传输到处于netmap模式的TX环的数据包?解决方案很简单:只需将它们移到RX主机环上。通过这种方式,我们可以从netmap访问这些数据包,只需在netmap模式下再次打开接口并请求其软件环对。最后,对于更简单的用例,我们需要一种方法来只请求RX环,而不需要TX对应物-对于我们的特定用例,我们不需要TX环。为了实现这一点,我们引入了两个标志,NR_TX_RINGS_ONLY和NR_RX_RINGS ONLY(当我们使用nm_open()时,这转换为/T和/R)来只请求TX或RX环。通过这些更改,我们需要在代码中编辑的唯一一行就是传递给nm_open()的netmap接口名称。这个:snprintf(nm_if,sizeof(nm_if)"网络地图:%s~%d",如果是\ name,则为ring_nr);变成这样:snprintf(nm_if,sizeof(nm_if),"网络映射:%s-%d/R",iface_name,ring_nr);一切如期进行!试试看您可以按照这些说明在Linux下构建一个测试程序。在本例中,我们使用的是ixgbe驱动程序。测试程序源代码在github上提供:2015-12-nm-single-rx-queue/main.c首先克隆测试应用程序和netmap存储库:$git克隆https://github.com/cloudflare/cloudflare-blog单云FLARE-cd-2015年版$git克隆https://github.com/luigirizzo/netmapdeps公司构建它:$制造构建并加载网络地图:$cd deps/netmap/LINUX$./configure--kernel sources=/path/to/kernel/sources--driver=ixgbe$制造$sudo insmod公司网络地图.ko$sudo insmod ixgbe/ixgbe.ko公司并启动应用程序:$sudo./nm单个接收队列eth0 1谢谢我们要感谢Luigi和Giuseppe对最终补丁的塑造以及他们在netmap上所做的工作。