CN102420749A - 一种网卡发包功能的实现装置和方法 - Google Patents
一种网卡发包功能的实现装置和方法 Download PDFInfo
- Publication number
- CN102420749A CN102420749A CN2011103833776A CN201110383377A CN102420749A CN 102420749 A CN102420749 A CN 102420749A CN 2011103833776 A CN2011103833776 A CN 2011103833776A CN 201110383377 A CN201110383377 A CN 201110383377A CN 102420749 A CN102420749 A CN 102420749A
- Authority
- CN
- China
- Prior art keywords
- ptr
- len
- register
- cpu
- read
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种网卡发包功能的实现装置和方法,所述装置包括主机单元和网卡单元;所述主机单元包括内存区域BUF和控制所述内存区域BUF的CPU;所述网卡单元包括寄存器组、DMA读引擎模块和发送引擎模块;所述方法在进行DMA读操作时可以一次读请求读取多个报文;本发明提供的网卡发包功能的实现装置和方法,解决了现有的网卡发送长度小的数据包导致发包性能不高以及多发包线程(进程)之间资源竞争导致性能下降的问题。
Description
技术领域
本发明属于计算机网络通信领域,具体讲涉及一种网卡发包功能的实现装置和方法。
背景技术
现有技术中实现网卡发包功能时一般都是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_ptrreg的值,并再次得到缓冲区空闲区域大小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).将返回的数据解析成单个报文格式,并从指定网口发送出去。
与现有技术比,本发明提供的一种网卡发包功能的实现装置和方法,解决了现有的网卡发送长度小的数据包导致发包性能不高以及多发包线程(进程)之间资源竞争导致性能下降的问题;而且避免了描述符交换和CPU中断,大大减少了CPU的参与,降低CPU负担,提高IO总线利用率;网卡发包功能的实现装置的网卡单元在进行DMA读操作时可以一次读请求读取多个报文,大大提高了总线带宽利用率,使发送大量长度较小的数据包与发送数据包长度较大的数据包的性能是一样的;再者,主机单元的CPU和网卡单元之间采用多通道发包,每个通道对应一个发包线程,这样降低了线程之间的竞争,降低发包时主机CPU的负载。
附图说明
图1为网卡发包功能的实现装置的结构示意图。
图2为网卡发包功能的实现方法的流程图。
具体实施方式
一种网卡发包功能的实现装置,其包括主机单元和网卡单元;所述主机单元包括内存区域BUF和控制所述内存区域BUF的CPU;所述网卡单元包括寄存器组、DMA读引擎模块和发送引擎模块;所述寄存器组、所述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读回来的数据包解析成单个报文,并向外发送。
一种网卡发包功能的实现方法为:
主机CPU侧:
1)主机CPU将每个发包线程(进程)的发包缓冲区BUF的基地址base_addr和长度信息len分别写到网卡对应的寄存器base_addrreg和len reg中。
2)主机CPU上发包线程(进程)需要发包时,首先读取该线程(进程)发包缓冲区读指针寄存器rd_ptr reg的值,并和wr_ptr比较,计算出当前缓冲区空闲空间大小free_buf_len;
优选的,由于读取外设寄存器的操作开销较大,主机CPU可以不用每个数据块传输都进行,而是采用定时读取的方式实现,即主机CPU定时读取外设上寄存器rd_ptr reg的值,并保存在主机侧变量rd_ptr_cpu中,主机CPU等待到网卡的数据传输请求,然后比较rd_ptr_cpu和wr_ptr计算出当前缓冲区空闲空间大小free_buf_len。
3)若free_buf_len小于当前待发送报文的大小cur_wr_len,则返回步骤3,否则主机CPU将该发送报文附加上一个分隔符信息(例如两字节的报文长度信息)写到缓冲区BUF的地址为base_addr+wr_ptr处,然后将wr_ptr更新到wr_ptr+cur_wr_len,并写到网卡寄存器wr_ptr reg中,并跳至步骤3;
优选的,由于写外设寄存器的操作开销较大,主机CPU可以不用每个数据块传输都进行,而是采用定时写的方式实现,主机CPU维护一个变量wr_ptr_cpu,并定时的将wr_ptr_cpu资额到外设寄存器wr_ptr_reg中。
网卡侧:
1)网卡DMAReadEngine比较读写指针wr_ptr和rd_ptr,计算出读写指针的差距,也即缓冲区BUF当前待读取数据长度cur_rd_len。
2)网卡DMAReadEngine向主机发送DMA读请求,请求地址为base_addr+rd_ptr,长度为cur_rd_len。
3)网卡DMAReadEngine等待DMA读请求返回,然后更新读指针rd_ptr到rd_ptr+cur_rd_len。
4)网卡SendPktEngine将从主机内存读回来的数据根据报文的分隔符信息解析成单个的报文从网口发送出去。
所述网卡发包功能的实现方法的具体步骤如下:
(1).网卡为每个发包线程定义寄存器base_addr reg、len reg、wr_ptr reg和rd_ptr reg,并初始化为0;
(2).CPU为每个发包线程申请发包缓冲区,并将缓冲区的基地址base_addr、大小len分别写到网卡寄存器base_addr reg、len reg;
(3).CPU读取wr_ptr reg和rd_ptr reg的值,并计算二者的差值得到缓冲区空闲区域大小free_buf_len;
(4).如果free_buf_len大于待发送报文大小pkt_len,则CPU读取wr_ptr reg和rd_ptr reg的值,并计算二者的差值再次得到缓冲区空闲区域大小free_buf_len;
(5).CPU将待发送报文拷贝到BUF的偏移为wr_ptr处,并将wr_ptrreg寄存器更新为wr_ptr_pkt_len并写到网卡单元上;
(6).网卡单元0比较寄存器wr_ptr reg和rd_ptr reg的值,计算出差值cur_rd_len;
(7).如果cur_rd_len的值为0,则网卡DMAReadEngine启动DMA读操作,从主机内存地址BUF+rd_ptr处开始读取cur_rd_len长度数据;
(8).网卡DMAReadEngine等待数据返回之后将数据交给SendPktEngine模块解析成单个报文格式,并从指定网口发送出去。
需要声明的是,本发明内容及具体实施方式意在证明本发明所提供技术方案的实际应用,不应解释为对本发明保护范围的限定。本领域技术人员在本发明的精神和原理启发下,可作各种修改、等同替换、或改进。但这些变更或修改均在申请待批的保护范围内。
Claims (8)
1.一种网卡发包功能的实现装置,其包括主机单元和网卡单元;所述主机单元包括内存区域BUF和控制所述内存区域BUF的CPU;其特征在于,所述网卡单元包括依次连接的寄存器组、DMA读引擎模块和发送引擎模块。
2.根据权利要求1所述的实现装置,其特征在于,所述寄存器组包括:基地址寄存器、长度寄存器、写指针寄存器和读指针寄存器;所述基地址寄存器、所述长度寄存器、所述写指针寄存器和所述读指针寄存器并列设置。
3.根据权利要求2所述的实现装置,其特征在于,所述基地址寄存器、所述长度寄存器、所述写指针寄存器和所述读指针寄存器分别存储缓冲区基地址base_addr、缓冲区长度len、缓冲区写指针wr_ptr和缓冲区读指针rd_ptr;所有寄存器初始化为0。
4.根据权利要求1所述的实现装置,其特征在于,所述CPU包括读指针变量rd_ptr_cpu和写指针变量wr_ptr_cpu。
5.根据权利要求4所述的实现装置,其特征在于,所述读指针变量rd_ptr_cpu用于存储CPU定时读取的所述读指针寄存器的值;所述写指针变量wr_ptr_cpu用于将wr_ptr_cpu的数值写入所述写指针寄存器。
6.根据权利要求1所述的实现装置,其特征在于,所述DMA读引擎模块,比较读、写指针wr_ptr和rd_ptr,计算出当前待读取数据长度cur_rd_len;并向主机单元发送DMA读请求,请求地址为base_addr+rd_ptr,长度为cur_rd_len;之后等待DMA读请求返回,更新读指针rd_ptr到rd_ptr+cur_rd_len。
7.根据权利要求1所述的实现装置,其特征在于,所述发送引擎模块将从所述内存区域BUF读回来的数据包解析成单个报文,并向外发送。
8.根据1-7项权利要求任一项所述的网卡发包功能的实现装置的网卡发包功能的实现方法,其特征在于,所述方法包括如下步骤:
(1).对所有寄存器进行初始化;(2).从内存区域中申请发包缓冲区;(3).得到缓冲区空闲区域大小free_buf_len;(4).若free_buf_len的长度大于待发送报文pkt_len的大小,则分别读取wr_ptr reg和rd_ptrreg的值,并再次得到缓冲区空闲区域大小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).将返回的数据解析成单个报文格式,并从指定网口发送出去。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103833776A CN102420749A (zh) | 2011-11-28 | 2011-11-28 | 一种网卡发包功能的实现装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103833776A CN102420749A (zh) | 2011-11-28 | 2011-11-28 | 一种网卡发包功能的实现装置和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102420749A true CN102420749A (zh) | 2012-04-18 |
Family
ID=45944989
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011103833776A Pending CN102420749A (zh) | 2011-11-28 | 2011-11-28 | 一种网卡发包功能的实现装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102420749A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103973802A (zh) * | 2014-05-19 | 2014-08-06 | 浪潮电子信息产业股份有限公司 | 一种基于数据压缩融合的网卡驱动设计方法 |
CN104753813A (zh) * | 2013-12-27 | 2015-07-01 | 国家计算机网络与信息安全管理中心 | Dma传送报文的方法 |
WO2016041375A1 (zh) * | 2014-09-19 | 2016-03-24 | 中兴通讯股份有限公司 | 一种cpu与芯片之间传输消息报文的方法及装置 |
CN108595351A (zh) * | 2018-05-11 | 2018-09-28 | 湖南华芯通网络科技有限公司 | 一种面向网络转发处理的dma发送控制方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090113211A1 (en) * | 2007-10-31 | 2009-04-30 | Chun-Hung Liu | Processing unit including a wireless module and method thereof |
CN101540727A (zh) * | 2009-05-05 | 2009-09-23 | 曙光信息产业(北京)有限公司 | 一种ip报文的硬件分流方法 |
CN101673253A (zh) * | 2009-08-21 | 2010-03-17 | 曙光信息产业(北京)有限公司 | 直接存储器访问的实现方法 |
CN102006241A (zh) * | 2010-12-17 | 2011-04-06 | 天津曙光计算机产业有限公司 | 一种多个应用共享一个缓冲区的报文接收方法 |
-
2011
- 2011-11-28 CN CN2011103833776A patent/CN102420749A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090113211A1 (en) * | 2007-10-31 | 2009-04-30 | Chun-Hung Liu | Processing unit including a wireless module and method thereof |
CN101540727A (zh) * | 2009-05-05 | 2009-09-23 | 曙光信息产业(北京)有限公司 | 一种ip报文的硬件分流方法 |
CN101673253A (zh) * | 2009-08-21 | 2010-03-17 | 曙光信息产业(北京)有限公司 | 直接存储器访问的实现方法 |
CN102006241A (zh) * | 2010-12-17 | 2011-04-06 | 天津曙光计算机产业有限公司 | 一种多个应用共享一个缓冲区的报文接收方法 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104753813A (zh) * | 2013-12-27 | 2015-07-01 | 国家计算机网络与信息安全管理中心 | Dma传送报文的方法 |
CN104753813B (zh) * | 2013-12-27 | 2018-03-16 | 国家计算机网络与信息安全管理中心 | Dma传送报文的方法 |
CN103973802A (zh) * | 2014-05-19 | 2014-08-06 | 浪潮电子信息产业股份有限公司 | 一种基于数据压缩融合的网卡驱动设计方法 |
WO2016041375A1 (zh) * | 2014-09-19 | 2016-03-24 | 中兴通讯股份有限公司 | 一种cpu与芯片之间传输消息报文的方法及装置 |
CN108595351A (zh) * | 2018-05-11 | 2018-09-28 | 湖南华芯通网络科技有限公司 | 一种面向网络转发处理的dma发送控制方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106951388A (zh) | 一种基于PCIe的DMA数据传输方法及系统 | |
CN113254368B (zh) | 从axi总线到opb总线的数据写入方法及读取方法 | |
CN104360967B (zh) | 存储器系统、主机控制器以及dma的控制方法 | |
CN101930416B (zh) | 硬件协助处理器间的沟通 | |
CN102541779B (zh) | 一种提高多数据缓冲区dma效率的系统和方法 | |
CN110109626B (zh) | 一种基于FPGA的NVMe SSD命令处理方法 | |
CN110941582B (zh) | 一种bmc芯片的usb总线结构及其通信方法 | |
CN107577636A (zh) | 一种基于soc的axi总线接口数据传输系统及传输方法 | |
CN109117386B (zh) | 一种网络远程读写二级存储的系统及方法 | |
CN105376129B (zh) | 一种1394总线事务层-链路层数据包发送电路及方法 | |
CN113961494B (zh) | 一种pcie总线与axi总线的桥接系统 | |
CN110297797B (zh) | 异构协议转换装置和方法 | |
JP2014017006A (ja) | PCIExpressでのIDベースストリームを可能にする方法及び装置 | |
CN107783727B (zh) | 一种内存设备的访问方法、装置和系统 | |
WO2024077890A1 (zh) | 一种异步fifo读写控制方法、系统及电子设备 | |
CN102420749A (zh) | 一种网卡发包功能的实现装置和方法 | |
WO2014131273A1 (zh) | 数据传输方法、装置及直接存储器存取 | |
CN112115081A (zh) | 证券期货领域Fpga与计算机之间的DMA传输系统和方法 | |
CN112882986B (zh) | 一种带有超节点以及超节点控制器的众核处理器的应用方法 | |
US20160085683A1 (en) | Data receiving device and data receiving method | |
CN112231261A (zh) | 一种用于axi总线的id号压缩装置 | |
US20080034106A1 (en) | Reducing power consumption for bulk data transfers | |
CN102571535B (zh) | 一种数据延迟装置、方法及通信系统 | |
CN112732176B (zh) | 基于fpga的ssd访问方法及装置、存储系统及存储介质 | |
CN115328832A (zh) | 一种基于pcie dma的数据调度系统与方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120418 |