[发明专利]一种网卡发包功能的实现装置和方法无效
申请号: | 201110383377.6 | 申请日: | 2011-11-28 |
公开(公告)号: | CN102420749A | 公开(公告)日: | 2012-04-18 |
发明(设计)人: | 窦晓光;姬乃军;李旭;李锋伟;刘朝辉 | 申请(专利权)人: | 曙光信息产业(北京)有限公司 |
主分类号: | H04L12/56 | 分类号: | H04L12/56 |
代理公司: | 北京安博达知识产权代理有限公司 11271 | 代理人: | 徐国文 |
地址: | 100084 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 网卡 发包 功能 实现 装置 方法 | ||
技术领域
本发明属于计算机网络通信领域,具体讲涉及一种网卡发包功能的实现装置和方法。
背景技术
现有技术中实现网卡发包功能时一般都是CPU将待发送报文内容拷贝到一块内存区域,然后CPU通知网卡报文已经准备好,并将待发送报文的描述符信息(报文在主机内存中的地址和长度)通知网卡。网卡收到发包描述符信息后启动DMA读操作从主存读取报文内容发送,并在发送完成之后通过中断通知CPU。
在上述发包过程中,存在几个影响发包性能的问题:
每个发送报文都需要CPU将描述符告知外设,每次发包完成之后网卡都需要通知CPU,这增加了CPU的负担;而且由于IO总线的特性,DMA操作在数据包长度较大时效率较高,如果发送大量长度较小的数据包,将严重影响带宽利用率;还有当发包应用程序存在多个线程(进程)同时发包时,各个线程之间对内存的访问会存在竞争,这将导致系统性能下降。
专利号为ZL200710120039.7的、名称为“一种产生网络流量的方法及其装置”的发明披露了一种网卡发包方法,该方法的主要步骤有:主控单元将需要发送的每个数据流的发包控制参数和数据包模板写入缓冲区中;发送单元读取所述缓冲区中的发包控制参数和数据包模板,并分别根据每个发包控制参数和数据包模板生成对应的数据流发送出去。但是该方法主要用于构造发送报文,并不涉及报文的具体发送。
发明内容
为克服上述缺陷,本发明提供了一种网卡发包功能的实现装置和方法,解决了现有的网卡发送长度小的数据包导致发包性能不高以及多发包线程(进程)之间资源竞争导致性能下降的问题。
为实现上述目的,本发明提供一种网卡发包功能的实现装置,其包括主机单元和网卡单元;所述主机单元包括内存区域BUF和控制所述内存区域BUF的CPU;其改进之处在于,所述网卡单元包括依次连接的寄存器组、DMA读引擎模块和发送引擎模块。
本发明提供的优选技术方案中,所述寄存器组包括:基地址寄存器、长度寄存器、写指针寄存器和读指针寄存器;所述基地址寄存器、所述长度寄存器、所述写指针寄存器和所述读指针寄存器并列设置。
本发明提供的第二优选技术方案中,所述基地址寄存器、所述长度寄存器、所述写指针寄存器和所述读指针寄存器分别存储缓冲区基地址base_addr、缓冲区长度len、缓冲区写指针wr_ptr和缓冲区读指针rd_ptr;所有寄存器初始化为0。
本发明提供的第三优选技术方案中,所述CPU包括读指针变量rd_ptr_cpu和写指针变量wr_ptr_cpu。
本发明提供的第四优选技术方案中,所述读指针变量rd_ptr_cpu用于存储CPU定时读取的所述读指针寄存器的值;所述写指针变量wr_ptr_cpu用于将wr_ptr_cpu的数值写入所述写指针寄存器。
本发明提供的第五优选技术方案中,所述DMA读引擎模块,比较读、写指针wr_ptr和rd_ptr,计算出当前待读取数据长度cur_rd_len;并向主机单元发送DMA读请求,请求地址为base_addr+rd_ptr,长度为cur_rd_len;之后等待DMA读请求返回,更新读指针rd_ptr到rd_ptr+cur_rd_len。
本发明提供的第六优选技术方案中,所述发送引擎模块将从所述内存区域BUF读回来的数据包解析成单个报文,并向外发送。
本发明提供的第其优选技术方案中,提供一种网卡发包功能的实现方法,其改进之处在于,所述方法包括如下步骤:
(1).对所有寄存器进行初始化;(2).从内存区域中申请发包缓冲区;(3).得到缓冲区空闲区域大小free_buf_len;(4).若free_buf_len的长度大于待发送报文pkt_len的大小,则分别读取wr_ptr reg和rd_ptr reg的值,并再次得到缓冲区空闲区域大小free_buf_len,其中,free_buf_len=(wr_ptr+len-rd_ptr)%len;(5).将待发送报文拷贝到缓冲区的写指针,并将写指针寄存器更新为wr_ptr_pkt_len;(6).计算cur_rd_len,如果cur_rd_len的值为0,则进行DMA读操作;(7).将返回的数据解析成单个报文格式,并从指定网口发送出去。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于曙光信息产业(北京)有限公司,未经曙光信息产业(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110383377.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种车辆通行计重系统及车辆计重方法
- 下一篇:连铸长水口专用托架