CN104468417B - 一种堆叠交换机报文传输方法、系统及堆叠交换机 - Google Patents

一种堆叠交换机报文传输方法、系统及堆叠交换机 Download PDF

Info

Publication number
CN104468417B
CN104468417B CN201410783579.3A CN201410783579A CN104468417B CN 104468417 B CN104468417 B CN 104468417B CN 201410783579 A CN201410783579 A CN 201410783579A CN 104468417 B CN104468417 B CN 104468417B
Authority
CN
China
Prior art keywords
message
positional information
address space
memory address
layer
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.)
Active
Application number
CN201410783579.3A
Other languages
English (en)
Other versions
CN104468417A (zh
Inventor
易开东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Taike Communication Branch Shenzhen Sdg Information Co ltd
Original Assignee
Shanghai Feixun Data Communication Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Feixun Data Communication Technology Co Ltd filed Critical Shanghai Feixun Data Communication Technology Co Ltd
Priority to CN201410783579.3A priority Critical patent/CN104468417B/zh
Publication of CN104468417A publication Critical patent/CN104468417A/zh
Application granted granted Critical
Publication of CN104468417B publication Critical patent/CN104468417B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

本发明提供一种堆叠交换机报文传输方法、系统及堆叠交换机。所述堆叠交换机报文传输方法包括:分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取;发送报文时,用户层将所述报文数据拷贝到所述内存地址空间中,系统层所述报文在所述内存地址空间的位置信息并通知网卡硬件根据所述报文在所述内存地址空间的位置信息发送报文。本发明的技术方案可以解决VxWorks下堆叠交换机系统大量传输长度为1518的报文时网卡收发过程中需要额外拷贝数据导致收发数据包效率低、消耗宝贵的CPU资源的问题。

Description

一种堆叠交换机报文传输方法、系统及堆叠交换机
技术领域
本发明涉及一种网络技术领域,特别是涉及一种堆叠交换机报文传输方法、系统及堆叠交换机。
背景技术
随着社会的发展,传统盒式交换机很能满足人们对网络带宽需求。堆叠交换机由于能提供更大的带宽,更多的端口,管理更方便,愈来愈流行。堆叠交换机是物理上由多个独立的交换系统构成,在通过堆叠协议的控制下,逻辑上看起来是一台交换机。堆叠协议的正常运行离不开各种控制报文,控制报文最大长度为1518,各种控制报文通过网卡传输,因此,网卡报文的高效传输对堆叠系统意义重大。
VxWorks是美国Wind River System公司(简称风河公司,即WRS公司)推出的一个实时操作系统。尽管VxWorks下面所有线程都运行在同一个地址空间,没有linux下面内核空间和用户进程空间的概念,但在VxWorks系统下,网络模块也采用和linux下网络模块类似的分层思想。应用层发送数据时先将数据放在用户缓冲中,系统Mux层会复制用户缓冲到DMA缓冲,最后通过写网卡硬件寄存器启动DMA传输将数据发送出去。当网卡收到数据包时会产生中断,中断处理程序会将数据放入DMA缓冲中,系统Mux层又将数据复制到用户缓冲中并通知用户层有接收到数据。通常报文收发的具体实现包括:一、应用层发包。应用层使用接口User_buf_alloc先从用户缓存中申请一段内存,填充好欲发送数据,然后调用sys_tx接口发送数据。sys_tx调用时会先用Dma_buf_alloc在DMA缓存中申请一段可DMA的内存,然后将位于用户缓存的发送数据拷贝到位于DMAC缓存中的可DMA内存,最后通知网卡硬件启动DMA传输将数据发送出去。发送完成后,系统会调用Dma_buf_free释放可DMA内存到DMA缓存中,同时通知应用层调用User_buf_free释放内存到用户缓存中。二、应用层收包。网卡硬件接收到数据时会将数据通过DMA传输到事先Dma_buf_alloc申请的DMA缓存中,同时通知应用层接收数据。应用层会用Dma_buf_alloc申请用户缓存。系统Mux层调用sys_rx将DMA缓存中的数据复制到用户缓存中,复制完成后调用Dma_buf_free释放缓存到DMA缓存中。最后,应用层处理完数据会调用User_buf_free释放缓存到用户缓存中。
鉴于此,如何进一步提高堆叠交换机中数据报文的收发效率成为了本领域技术人员亟待解决的问题。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种堆叠交换机报文传输方法、系统及堆叠交换机,用于解决现有技术中堆叠交换机中数据报文的收发效率低的问题。
为实现上述目的及其他相关目的,本发明提供一种堆叠交换机报文传输方法,所述堆叠交换机报文传输方法包括:分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取;发送报文时,用户层将所述报文数据拷贝到所述内存地址空间中,系统层获取所述报文在所述内存地址空间的位置信息并通知网卡硬件根据所述报文在所述内存地址空间的位置信息发送报文。
可选地,所述用户层与系统层通过一个数据结构共用存取所述内存地址空间;所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。
可选地,所述内存地址空间长度为2048字节。
一种堆叠交换机报文传输方法,所述堆叠交换机报文传输方法包括:分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取;接收报文时,系统层将所述报文数据接收到所述内存地址空间,用户层获取所接收报文在所述内存地址空间中的位置信息并根据所述位置信息在所述内存地址空间中读取报文数据。
可选地,所述用户层与系统层通过一个数据结构共用存取所述内存地址空间;所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。
可选地,所述内存地址空间长度为2048字节。
本发明还提供一种堆叠交换机报文传输系统,所述堆叠交换机报文传输系统包括:共用内存分配模块,用于分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取;发送报文模块,与所述共用内存分配模块相连,用于获取所述共用内存分配模块的内存地址空间,在发送报文时,用户层将所述报文数据拷贝到所述内存地址空间中,系统层所述报文在所述内存地址空间的位置信息并通知网卡硬件根据所述报文在所述内存地址空间的位置信息发送报文。
可选地,所述用户层与系统层通过一个数据结构共用存取所述内存地址空间;所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。
可选地,所述内存地址空间长度为2048字节。
一种堆叠交换机报文传输系统,所述堆叠交换机报文传输系统包括:共用内存分配模块,用于分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取;接收报文模块,与所述共用内存分配模块相连,用于获取所述共用内存分配模块的内存地址空间,接收报文时,系统层将所述报文数据接收到所述内存地址空间,用户层获取所接收报文在所述内存地址空间中的位置信息并根据所述位置信息在所述内存地址空间中读取报文数据。
可选地,所述用户层与系统层通过一个数据结构共用存取所述内存地址空间;所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。
可选地,所述内存地址空间长度为2048字节。
一种堆叠交换机,所述堆叠交换机包括以上所述的堆叠交换机报文传输系统。
可选地,所述堆叠交换机采用VxWorks操作系统。
如上所述,本发明的一种堆叠交换机报文传输方法、系统及堆叠交换机,具有以下有益效果:确保基于VxWorks堆叠交换机网卡报文收发过程中不需要额外进行数据拷贝。具体地,当应用层发送数据时,数据不需要从用户缓存拷贝数据到DMA缓存,发包效率高,节省CPU资源。当网卡收到数据时,数据也不需要从DMA缓存拷贝到用户缓存,收包效率高,节省CPU资源。解决VxWorks下堆叠交换机系统大量传输长度为1518的报文时网卡收发过程中需要额外拷贝数据导致收发数据包效率低、消耗宝贵的CPU资源的问题。
附图说明
图1显示为本发明的一种堆叠交换机报文传输方法的一实施例的流程示意图。
图2显示为本发明的一种堆叠交换机报文传输方法的一实施例的流程示意图。
图3显示为本发明的一种堆叠交换机报文传输方法的一实施例的流程示意图。
图4显示为本发明的一种堆叠交换机报文传输系统的一实施例的模块示意图。
图5显示为本发明的一种堆叠交换机报文传输系统的一实施例的模块示意图。
图6显示为本发明的一种堆叠交换机报文传输系统的一实施例的模块示意图。
元件标号说明
1 堆叠交换机报文传输系统
11 共用内存分配模块
12 发送报文模块
13 接收报文模块
S1~S3 步骤
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
本发明提供一种堆叠交换机报文传输方法。在一个实施例中,如图1所示,所述堆叠交换机报文传输方法包括:
步骤S1,分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取。在一个实施例中,所述用户层与系统层通过一个数据结构共用存取所述内存地址空间。具体地,所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。在一个实施例中,所述内存地址空间长度为2048字节。
在一个实施例中,所述数据结构包括以下数据结构:
其中,M_BLK_ID代表一段大小为m_len,起始地址为m_data的内存空间。系统层可以根据net_dmabuf的成员pMblk找到M_BLK_ID代表的一段大小为m_len,起始地址为m_data的内存空间。user_dmabuf定义如下,pData指向用户数据,其长度为len。在zero_copy_dmabuf中,根据zero_copy_dmabuf的net_buf成员,网卡驱动可以找到要发送的报文在内存的地址或者接收到数据存储在内存那个位置;根据zero_copy_dmabuf的user_buf成员,应用层可以找到网卡接收到的报文在内存的位置以及发送数据时应该往何处填发送数据。一个zero_copy_dmabuf结构对应一个net_buf结构、一个user_buf结构以及一段唯一的内存空间。分配一个zero_copy_dmabuf结构,涉及分配net_buf结构、user_buf结构和唯一的内存空间,同理释放一个zero_copy_dmabuf结构需要释放内存空间以及net_buf结构和user_buf结构。
在一个实施例中,所述方法还包括对所述数据结构的管理,即包括对zero_copy_dmabuf的分配和释放。其中zero_copy_dmabuf_alloc分配包括:1,调用VxWorks提供的系统接口申请大小为2048的内存空间pData存放传输数据。2,调用VxWorks提供的系统接口申请M_BLK_ID。3,对M_BLK_ID赋值:M_BLK_ID->m_data=pData;M_BLK_ID->m_len=len。4,调用VxWorks提供的系统接口申请pnet_buf结构、puser_buf结构以及pzero_copy_dmabuf结构并赋值:
pzero_copy_dmabuf->net_buf=pnet_buf
pzero_copy_dmabuf->net_buf_alloc=net_buf_alloc
pzero_copy_dmabuf->net_buf_alloc=net_buf_free
pzero_copy_dmabuf->user_buf=puser_buf
pzero_copy_dmabuf->user_buf_alloc=user_buf_alloc
pzero_copy_dmabuf->user_buf_alloc=user_buf_free
最后返回pzero_copy_dmabuf给申请者。
对zero_copy_dmabuf_free释放包括:调用VxWorks提供的系统接口释放M_BLK_ID、pnet_buf结构、puser_buf结构以及pzero_copy_dmabuf结构。
步骤S2,发送报文时,用户层将所述报文数据拷贝到所述内存地址空间中,系统层所述报文在所述内存地址空间的位置信息并通知网卡硬件根据所述报文在所述内存地址空间的位置信息发送报文。在一个实施例中,所述操作系统为VxWorks,在通过zero_copy_dmabuf_alloc申请一个zero_copy_dmabuf结构后,其中,一个zero_copy_dmabuf结构对应一个pnet_buf结构、一个puser_buf结构以及一段大小为2048的M_BLK_ID内存空间。应用层把要发送的数据填充到M_BLK_ID内存空间中,告诉系统Mux层有数据包要发送出去。系统Mux层不复制数据,只是将pnet_buf结构的相关指针指向puser_buf结构,通知网卡准备发送数据。网卡驱动根据pnet_buf结构的相关指针找到M_BLK_ID内存,把M_BLK_ID内存地址写入网卡相关寄存器,启动DMA传输,把此数据包发送出去。发送完成后可以通过接口zero_copy_dmabuf_free释放zero_copy_dmabuf结构以及与此结构相关的pnet_buf结构、puser_buf结构、M_BLK_ID内存,也可以保留待下一次使用。
在一个实施例中,如图2所示,所述堆叠交换机报文传输方法包括:
步骤S1,分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取。在一个实施例中,所述用户层与系统层通过一个数据结构共用存取所述内存地址空间。具体地,所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。在一个实施例中,所述内存地址空间长度为2048字节。
在一个实施例中,所述数据结构包括以下数据结构:
其中,M_BLK_ID代表一段大小为m_len,起始地址为m_data的内存空间。系统层可以根据net_dmabuf的成员pMblk找到M_BLK_ID代表的一段大小为m_len,起始地址为m_data的内存空间。user_dmabuf定义如下,pData指向用户数据,其长度为len。在zero_copy_dmabuf中,根据zero_copy_dmabuf的net_buf成员,网卡驱动可以找到要发送的报文在内存的地址或者接收到数据存储在内存那个位置;根据zero_copy_dmabuf的user_buf成员,应用层可以找到网卡接收到的报文在内存的位置以及发送数据时应该往何处填发送数据。一个zero_copy_dmabuf结构对应一个net_buf结构、一个user_buf结构以及一段唯一的内存空间。分配一个zero_copy_dmabuf结构,涉及分配net_buf结构、user_buf结构和唯一的内存空间,同理释放一个zero_copy_dmabuf结构需要释放内存空间以及net_buf结构和user_buf结构。
在一个实施例中,所述方法还包括对所述数据结构的管理,即包括对zero_copy_dmabuf的分配和释放。其中zero_copy_dmabuf_alloc分配包括:1,调用VxWorks提供的系统接口申请大小为2048的内存空间pData存放传输数据。2,调用VxWorks提供的系统接口申请M_BLK_ID。3,对M_BLK_ID赋值:M_BLK_ID->m_data=pData;M_BLK_ID->m_len=len。4,调用VxWorks提供的系统接口申请pnet_buf结构、puser_buf结构以及pzero_copy_dmabuf结构并赋值:
pzero_copy_dmabuf->net_buf=pnet_buf
pzero_copy_dmabuf->net_buf_alloc=net_buf_alloc
pzero_copy_dmabuf->net_buf_alloc=net_buf_free
pzero_copy_dmabuf->user_buf=puser_buf
pzero_copy_dmabuf->user_buf_alloc=user_buf_alloc
pzero_copy_dmabuf->user_buf_alloc=user_buf_free
最后返回pzero_copy_dmabuf给申请者。
对zero_copy_dmabuf_free释放包括:调用VxWorks提供的系统接口释放M_BLK_ID、pnet_buf结构、puser_buf结构以及pzero_copy_dmabuf结构。
步骤S3,接收报文时,系统层将所述报文数据接收到所述内存地址空间,用户层获取所接收报文在所述内存地址空间中的位置信息并根据所述位置信息在所述内存地址空间中读取报文数据。在一个实施例中,所述操作系统为VxWorks,在通过接口zero_copy_dmabuf_alloc申请一定数目的zero_copy_dmabuf结构后,其中,每一个zero_copy_dmabuf结构对应一个pnet_buf结构、一个puser_buf结构以及M_BLK_ID结构代表的一段大小为2048的内存空间,这段内存空间用来存储一个网卡接收数据包。当接收到数据报文时,通过写相关硬件寄存器告诉网卡启动DMA传输把数据包收到zero_copy_dmabuf结构指向的M_BLK_ID内存中。系统Mux层不复制数据,只是告诉应用层网卡以及收到一个数据包以及代表此数据包的zero_copy_dmabuf结构在内存的位置。应用层根据系统Mux层提供的zero_copy_dmabuf结构在内存的位置,可以找到一段大小为2048的内存空间,这段内存空间存放有网卡收到的一个数据包。应用层读取此数据包进行相关处理,数据包处理完成后,应用层可以通过接口zero_copy_dmabuf_free释放zero_copy_dmabuf结构以及与此结构相关的pnet_buf结构、puser_buf结构、M_BLK_ID内存,也可以保留待下一次使用。
在一个实施例中,如图3所示,所述堆叠交换机报文传输方法包括:
步骤S1,分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取。在一个实施例中,所述用户层与系统层通过一个数据结构共用存取所述内存地址空间。具体地,所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。在一个实施例中,所述内存地址空间长度为2048字节。
步骤S2,发送报文时,用户层将所述报文数据拷贝到所述内存地址空间中,系统层所述报文在所述内存地址空间的位置信息并通知网卡硬件根据所述报文在所述内存地址空间的位置信息发送报文。在一个实施例中,所述操作系统为VxWorks,在通过zero_copy_dmabuf_alloc申请一个zero_copy_dmabuf结构后,其中,一个zero_copy_dmabuf结构对应一个pnet_buf结构、一个puser_buf结构以及一段大小为2048的M_BLK_ID内存空间。应用层把要发送的数据填充到M_BLK_ID内存空间中,告诉系统Mux层有数据包要发送出去。系统Mux层不复制数据,只是将pnet_buf结构的相关指针指向puser_buf结构,通知网卡准备发送数据。网卡驱动根据pnet_buf结构的相关指针找到M_BLK_ID内存,把M_BLK_ID内存地址写入网卡相关寄存器,启动DMA传输,把此数据包发送出去。发送完成后可以通过接口zero_copy_dmabuf_free释放zero_copy_dmabuf结构以及与此结构相关的pnet_buf结构、puser_buf结构、M_BLK_ID内存,也可以保留待下一次使用。
步骤S3,接收报文时,系统层将所述报文数据接收到所述内存地址空间,用户层获取所接收报文在所述内存地址空间中的位置信息并根据所述位置信息在所述内存地址空间中读取报文数据。在一个实施例中,所述操作系统为VxWorks,在通过接口zero_copy_dmabuf_alloc申请一定数目的zero_copy_dmabuf结构后,其中,每一个zero_copy_dmabuf结构对应一个pnet_buf结构、一个puser_buf结构以及M_BLK_ID结构代表的一段大小为2048的内存空间,这段内存空间用来存储一个网卡接收数据包。当接收到数据报文时,通过写相关硬件寄存器告诉网卡启动DMA传输把数据包收到zero_copy_dmabuf结构指向的M_BLK_ID内存中。系统Mux层不复制数据,只是告诉应用层网卡以及收到一个数据包以及代表此数据包的zero_copy_dmabuf结构在内存的位置。应用层根据系统Mux层提供的zero_copy_dmabuf结构在内存的位置,可以找到一段大小为2048的内存空间,这段内存空间存放有网卡收到的一个数据包。应用层读取此数据包进行相关处理,数据包处理完成后,应用层可以通过接口zero_copy_dmabuf_free释放zero_copy_dmabuf结构以及与此结构相关的pnet_buf结构、puser_buf结构、M_BLK_ID内存,也可以保留待下一次使用。
本发明还提供一种堆叠交换机报文传输系统,如图4所示,所述堆叠交换机报文传输系统1包括共用内存分配模块11、以及发送报文模块12。其中:
共用内存分配模块11用于分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取。在一个实施例中,所述用户层与系统层通过一个数据结构共用存取所述内存地址空间。具体地,所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。在一个实施例中,所述内存地址空间长度为2048字节。
在一个实施例中,所述数据结构包括以下数据结构:
其中,M_BLK_ID代表一段大小为m_len,起始地址为m_data的内存空间。系统层可以根据net_dmabuf的成员pMblk找到M_BLK_ID代表的一段大小为m_len,起始地址为m_data的内存空间。user_dmabuf定义如下,pData指向用户数据,其长度为len。在zero_copy_dmabuf中,根据zero_copy_dmabuf的net_buf成员,网卡驱动可以找到要发送的报文在内存的地址或者接收到数据存储在内存那个位置;根据zero_copy_dmabuf的user_buf成员,应用层可以找到网卡接收到的报文在内存的位置以及发送数据时应该往何处填发送数据。一个zero_copy_dmabuf结构对应一个net_buf结构、一个user_buf结构以及一段唯一的内存空间。分配一个zero_copy_dmabuf结构,涉及分配net_buf结构、user_buf结构和唯一的内存空间,同理释放一个zero_copy_dmabuf结构需要释放内存空间以及net_buf结构和user_buf结构。
在一个实施例中,共用内存分配模块11还包括对所述数据结构的管理,即包括对zero_copy_dmabuf的分配和释放。其中zero_copy_dmabuf_alloc分配包括:1,调用VxWorks提供的系统接口申请大小为2048的内存空间pData存放传输数据。2,调用VxWorks提供的系统接口申请M_BLK_ID。3,对M_BLK_ID赋值:M_BLK_ID->m_data=pData;M_BLK_ID->m_len=len。4,调用VxWorks提供的系统接口申请pnet_buf结构、puser_buf结构以及pzero_copy_dmabuf结构并赋值:
pzero_copy_dmabuf->net_buf=pnet_buf
pzero_copy_dmabuf->net_buf_alloc=net_buf_alloc
pzero_copy_dmabuf->net_buf_alloc=net_buf_free
pzero_copy_dmabuf->user_buf=puser_buf
pzero_copy_dmabuf->user_buf_alloc=user_buf_alloc
pzero_copy_dmabuf->user_buf_alloc=user_buf_free
最后返回pzero_copy_dmabuf给申请者。
对zero_copy_dmabuf_free释放包括:调用VxWorks提供的系统接口释放M_BLK_ID、pnet_buf结构、puser_buf结构以及pzero_copy_dmabuf结构。
发送报文模块12与所述共用内存分配模块11相连,用于获取所述共用内存分配模块11的内存地址空间,在发送报文时,用户层将所述报文数据拷贝到所述内存地址空间中,系统层所述报文在所述内存地址空间的位置信息并通知网卡硬件根据所述报文在所述内存地址空间的位置信息发送报文。在一个实施例中,所述操作系统为VxWorks,在通过共用内存分配模块11中的zero_copy_dmabuf_alloc申请一个zero_copy_dmabuf结构后,其中,一个zero_copy_dmabuf结构对应一个pnet_buf结构、一个puser_buf结构以及一段大小为2048的M_BLK_ID内存空间。应用层把要发送的数据填充到M_BLK_ID内存空间中,告诉系统Mux层有数据包要发送出去。系统Mux层不复制数据,只是将pnet_buf结构的相关指针指向puser_buf结构,通知网卡准备发送数据。网卡驱动根据pnet_buf结构的相关指针找到M_BLK_ID内存,把M_BLK_ID内存地址写入网卡相关寄存器,启动DMA传输,把此数据包发送出去。发送完成后可以通过接口zero_copy_dmabuf_free释放zero_copy_dmabuf结构以及与此结构相关的pnet_buf结构、puser_buf结构、M_BLK_ID内存,也可以保留待下一次使用。
本发明还提供一种堆叠交换机报文传输系统,如图5所示,所述堆叠交换机报文传输系统1包括共用内存分配模块11、以及接收报文模块13。其中:
共用内存分配模块11用于分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取。在一个实施例中,所述用户层与系统层通过一个数据结构共用存取所述内存地址空间。具体地,所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。在一个实施例中,所述内存地址空间长度为2048字节。
在一个实施例中,所述数据结构包括以下数据结构:
其中,M_BLK_ID代表一段大小为m_len,起始地址为m_data的内存空间。系统层可以根据net_dmabuf的成员pMblk找到M_BLK_ID代表的一段大小为m_len,起始地址为m_data的内存空间。user_dmabuf定义如下,pData指向用户数据,其长度为len。在zero_copy_dmabuf中,根据zero_copy_dmabuf的net_buf成员,网卡驱动可以找到要发送的报文在内存的地址或者接收到数据存储在内存那个位置;根据zero_copy_dmabuf的user_buf成员,应用层可以找到网卡接收到的报文在内存的位置以及发送数据时应该往何处填发送数据。一个zero_copy_dmabuf结构对应一个net_buf结构、一个user_buf结构以及一段唯一的内存空间。分配一个zero_copy_dmabuf结构,涉及分配net_buf结构、user_buf结构和唯一的内存空间,同理释放一个zero_copy_dmabuf结构需要释放内存空间以及net_buf结构和user_buf结构。
在一个实施例中,共用内存分配模块11还包括对所述数据结构的管理,即包括对zero_copy_dmabuf的分配和释放。其中zero_copy_dmabuf_alloc分配包括:1,调用VxWorks提供的系统接口申请大小为2048的内存空间pData存放传输数据。2,调用VxWorks提供的系统接口申请M_BLK_ID。3,对M_BLK_ID赋值:M_BLK_ID->m_data=pData;M_BLK_ID->m_len=len。4,调用VxWorks提供的系统接口申请pnet_buf结构、puser_buf结构以及pzero_copy_dmabuf结构并赋值:
pzero_copy_dmabuf->net_buf=pnet_buf
pzero_copy_dmabuf->net_buf_alloc=net_buf_alloc
pzero_copy_dmabuf->net_buf_alloc=net_buf_free
pzero_copy_dmabuf->user_buf=puser_buf
pzero_copy_dmabuf->user_buf_alloc=user_buf_alloc
pzero_copy_dmabuf->user_buf_alloc=user_buf_free
最后返回pzero_copy_dmabuf给申请者。
对zero_copy_dmabuf_free释放包括:调用VxWorks提供的系统接口释放M_BLK_ID、pnet_buf结构、puser_buf结构以及pzero_copy_dmabuf结构。
接收报文模块13与所述共用内存分配模块11相连,用于获取所述共用内存分配模块11的内存地址空间,接收报文时,系统层将所述报文数据接收到所述内存地址空间,用户层获取所接收报文在所述内存地址空间中的位置信息并根据所述位置信息在所述内存地址空间中读取报文数据。接收报文时,系统层将所述报文数据接收到所述内存地址空间,用户层获取所接收报文在所述内存地址空间中的位置信息并根据所述位置信息在所述内存地址空间中读取报文数据。在一个实施例中,所述操作系统为VxWorks,在通过所述共用内存分配模块11的接口zero_copy_dmabuf_alloc申请一定数目的zero_copy_dmabuf结构后,其中,每一个zero_copy_dmabuf结构对应一个pnet_buf结构、一个puser_buf结构以及M_BLK_ID结构代表的一段大小为2048的内存空间,这段内存空间用来存储一个网卡接收数据包。当接收到数据报文时,通过写相关硬件寄存器告诉网卡启动DMA传输把数据包收到zero_copy_dmabuf结构指向的M_BLK_ID内存中。系统Mux层不复制数据,只是告诉应用层网卡以及收到一个数据包以及代表此数据包的zero_copy_dmabuf结构在内存的位置。应用层根据系统Mux层提供的zero_copy_dmabuf结构在内存的位置,可以找到一段大小为2048的内存空间,这段内存空间存放有网卡收到的一个数据包。应用层读取此数据包进行相关处理,数据包处理完成后,应用层可以通过接口zero_copy_dmabuf_free释放zero_copy_dmabuf结构以及与此结构相关的pnet_buf结构、puser_buf结构、M_BLK_ID内存,也可以保留待下一次使用。
本发明还提供一种堆叠交换机报文传输系统,如图6所示,所述堆叠交换机报文传输系统1包括共用内存分配模块11、发送报文模块12以及接收报文模块13。其中:
共用内存分配模块11用于分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取。在一个实施例中,所述用户层与系统层通过一个数据结构共用存取所述内存地址空间。具体地,所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。在一个实施例中,所述内存地址空间长度为2048字节。
发送报文模块12与所述共用内存分配模块11相连,用于获取所述共用内存分配模块11的内存地址空间,在发送报文时,用户层将所述报文数据拷贝到所述内存地址空间中,系统层所述报文在所述内存地址空间的位置信息并通知网卡硬件根据所述报文在所述内存地址空间的位置信息发送报文。在一个实施例中,所述操作系统为VxWorks,在通过共用内存分配模块11中的zero_copy_dmabuf_alloc申请一个zero_copy_dmabuf结构后,其中,一个zero_copy_dmabuf结构对应一个pnet_buf结构、一个puser_buf结构以及一段大小为2048的M_BLK_ID内存空间。应用层把要发送的数据填充到M_BLK_ID内存空间中,告诉系统Mux层有数据包要发送出去。系统Mux层不复制数据,只是将pnet_buf结构的相关指针指向puser_buf结构,通知网卡准备发送数据。网卡驱动根据pnet_buf结构的相关指针找到M_BLK_ID内存,把M_BLK_ID内存地址写入网卡相关寄存器,启动DMA传输,把此数据包发送出去。发送完成后可以通过接口zero_copy_dmabuf_free释放zero_copy_dmabuf结构以及与此结构相关的pnet_buf结构、puser_buf结构、M_BLK_ID内存,也可以保留待下一次使用。
接收报文模块13与所述共用内存分配模块11相连,用于获取所述共用内存分配模块11的内存地址空间,接收报文时,系统层将所述报文数据接收到所述内存地址空间,用户层获取所接收报文在所述内存地址空间中的位置信息并根据所述位置信息在所述内存地址空间中读取报文数据。接收报文时,系统层将所述报文数据接收到所述内存地址空间,用户层获取所接收报文在所述内存地址空间中的位置信息并根据所述位置信息在所述内存地址空间中读取报文数据。在一个实施例中,所述操作系统为VxWorks,在通过所述共用内存分配模块11的接口zero_copy_dmabuf_alloc申请一定数目的zero_copy_dmabuf结构后,其中,每一个zero_copy_dmabuf结构对应一个pnet_buf结构、一个puser_buf结构以及M_BLK_ID结构代表的一段大小为2048的内存空间,这段内存空间用来存储一个网卡接收数据包。当接收到数据报文时,通过写相关硬件寄存器告诉网卡启动DMA传输把数据包收到zero_copy_dmabuf结构指向的M_BLK_ID内存中。系统Mux层不复制数据,只是告诉应用层网卡以及收到一个数据包以及代表此数据包的zero_copy_dmabuf结构在内存的位置。应用层根据系统Mux层提供的zero_copy_dmabuf结构在内存的位置,可以找到一段大小为2048的内存空间,这段内存空间存放有网卡收到的一个数据包。应用层读取此数据包进行相关处理,数据包处理完成后,应用层可以通过接口zero_copy_dmabuf_free释放zero_copy_dmabuf结构以及与此结构相关的pnet_buf结构、puser_buf结构、M_BLK_ID内存,也可以保留待下一次使用。
一种堆叠交换机,所述堆叠交换机包括以上所述的堆叠交换机报文传输系统。在一个实施例中,所述堆叠交换机使用的是VxWorks操作系统。
综上所述,本发明的一种堆叠交换机报文传输方法、系统及堆叠交换机,具有以下有益效果:确保基于VxWorks堆叠交换机网卡报文收发过程中不需要额外进行数据拷贝。具体地,当应用层发送数据时,数据不需要从用户缓存拷贝数据到DMA缓存,发包效率高,节省CPU资源。当网卡收到数据时,数据也不需要从DMA缓存拷贝到用户缓存,收包效率高,节省CPU资源。解决VxWorks下堆叠交换机系统大量传输长度为1518的报文时网卡收发过程中需要额外拷贝数据导致收发数据包效率低、消耗宝贵的CPU资源的问题。。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

Claims (6)

1.一种堆叠交换机报文传输方法,其特征在于,所述堆叠交换机报文传输方法包括:
分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取;
发送报文时,用户层将所述报文数据拷贝到所述内存地址空间中,系统层获取所述报文在所述内存地址空间的位置信息并通知网卡硬件根据所述报文在所述内存地址空间的位置信息发送报文;
所述用户层与系统层通过一个数据结构共用存取所述内存地址空间;所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。
2.一种堆叠交换机报文传输方法,其特征在于:所述堆叠交换机报文传输方法包括:
分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取;
接收报文时,系统层将所述报文数据接收到所述内存地址空间,用户层获取所接收报文在所述内存地址空间中的位置信息并根据所述位置信息在所述内存地址空间中读取报文数据;
所述用户层与系统层通过一个数据结构共用存取所述内存地址空间;所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。
3.一种堆叠交换机报文传输系统,其特征在于:所述堆叠交换机报文传输系统包括:
共用内存分配模块,用于分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取;
发送报文模块,与所述共用内存分配模块相连,用于获取所述共用内存分配模块的内存地址空间,在发送报文时,用户层将所述报文数据拷贝到所述内存地址空间中,系统层获取所述报文在所述内存地址空间的位置信息并通知网卡硬件根据所述报文在所述内存地址空间的位置信息发送报文;
所述用户层与系统层通过一个数据结构共用存取所述内存地址空间;所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。
4.一种堆叠交换机报文传输系统,其特征在于:所述堆叠交换机报文传输系统包括:
共用内存分配模块,用于分配一个连续的内存地址空间,并使得所述内存地址空间为用户层与系统层共用存取;
接收报文模块,与所述共用内存分配模块相连,用于获取所述共用内存分配模块的内存地址空间,接收报文时,系统层将所述报文数据接收到所述内存地址空间,用户层获取所接收报文在所述内存地址空间中的位置信息并根据所述位置信息在所述内存地址空间中读取报文数据;
所述用户层与系统层通过一个数据结构共用存取所述内存地址空间;所述数据结构包括为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员,通过所述为系统层指示报文数据位置信息的成员以及为用户层指示报文数据位置信息的成员在用户层与系统层传递报文位置信息。
5.一种堆叠交换机,其特征在于:所述堆叠交换机包括如权利要求3所述的堆叠交换机报文传输系统或/和如权利要求4所述的堆叠交换机报文传输系统。
6.根据权利要求5所述的堆叠交换机,其特征在于:所述堆叠交换机采用VxWorks操作系统。
CN201410783579.3A 2014-12-16 2014-12-16 一种堆叠交换机报文传输方法、系统及堆叠交换机 Active CN104468417B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410783579.3A CN104468417B (zh) 2014-12-16 2014-12-16 一种堆叠交换机报文传输方法、系统及堆叠交换机

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410783579.3A CN104468417B (zh) 2014-12-16 2014-12-16 一种堆叠交换机报文传输方法、系统及堆叠交换机

Publications (2)

Publication Number Publication Date
CN104468417A CN104468417A (zh) 2015-03-25
CN104468417B true CN104468417B (zh) 2018-05-01

Family

ID=52913811

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410783579.3A Active CN104468417B (zh) 2014-12-16 2014-12-16 一种堆叠交换机报文传输方法、系统及堆叠交换机

Country Status (1)

Country Link
CN (1) CN104468417B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105068817B (zh) * 2015-08-26 2019-02-19 华为技术有限公司 将数据写入存储设备的方法及存储设备
CN106789157B (zh) * 2016-11-11 2019-10-11 烽火通信科技股份有限公司 堆叠系统及堆叠交换机的硬件资源管理方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5787300A (en) * 1993-11-10 1998-07-28 Oracle Corporation Method and apparatus for interprocess communications in a database environment
CN101068229A (zh) * 2007-06-08 2007-11-07 北京工业大学 一种基于网络过滤器的内容过滤网关实现方法
CN101150487A (zh) * 2007-11-15 2008-03-26 曙光信息产业(北京)有限公司 一种零拷贝网络报文发送方法
CN102006241A (zh) * 2010-12-17 2011-04-06 天津曙光计算机产业有限公司 一种多个应用共享一个缓冲区的报文接收方法
CN102546415A (zh) * 2012-01-11 2012-07-04 深圳市科陆电子科技股份有限公司 一种基于vxworks平台上快速收发以太网报文的方法
CN103150220A (zh) * 2011-12-07 2013-06-12 腾讯科技(深圳)有限公司 进程间的通信方法和通信系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5787300A (en) * 1993-11-10 1998-07-28 Oracle Corporation Method and apparatus for interprocess communications in a database environment
CN101068229A (zh) * 2007-06-08 2007-11-07 北京工业大学 一种基于网络过滤器的内容过滤网关实现方法
CN101150487A (zh) * 2007-11-15 2008-03-26 曙光信息产业(北京)有限公司 一种零拷贝网络报文发送方法
CN102006241A (zh) * 2010-12-17 2011-04-06 天津曙光计算机产业有限公司 一种多个应用共享一个缓冲区的报文接收方法
CN103150220A (zh) * 2011-12-07 2013-06-12 腾讯科技(深圳)有限公司 进程间的通信方法和通信系统
CN102546415A (zh) * 2012-01-11 2012-07-04 深圳市科陆电子科技股份有限公司 一种基于vxworks平台上快速收发以太网报文的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
《面向双工件台的 VxWorks 实时嵌入式系统设计与优化》;毕延帅;《中国优秀硕士学位论文全文数据库 信息科技辑》;20140315(第08期);正文第37-38、55-57、61页 *

Also Published As

Publication number Publication date
CN104468417A (zh) 2015-03-25

Similar Documents

Publication Publication Date Title
CN101150488B (zh) 一种零拷贝网络报文接收方法
CN105094956B (zh) 一种基于通道隔离的业务分配方法和装置
CN101848203B (zh) 用于从网络适配器向主机系统传送数据的方法和系统
CN101340574B (zh) 一种实现零拷贝发送流媒体数据的方法及系统
CN101150487A (zh) 一种零拷贝网络报文发送方法
CN102761489A (zh) 基于流水线模式的数据包零拷贝的核间通信方法
CN109690475A (zh) 用于转移操作的硬件加速器和方法
CN104796337A (zh) 一种转发报文的方法及装置
CN101707565B (zh) 零拷贝网络报文发送、接收方法和装置
CN103827842B (zh) 向控制器存储器空间写入消息
CN104133777B (zh) 一种共享存储系统及其使用方法
CN105337896A (zh) 报文处理方法和装置
CN107102957A (zh) 一种基于gpu与nic之间的内存高速直接交换的方法及系统
CN104102542A (zh) 一种网络数据包处理方法和装置
CN101150485A (zh) 一种零拷贝缓冲区队列网络数据发送的管理方法
CN101540720B (zh) 一种支持多类型网卡链路聚合的零拷贝方法
CN102609298A (zh) 基于硬件队列扩展的网卡虚拟化系统及其方法
EP1346549B1 (en) Intercommunication preprocessor
EP2633404A1 (en) Lock-less buffer management scheme for telecommunication network applications
CN101150486A (zh) 一种零拷贝缓冲区队列网络数据接收的管理方法
CN103049240A (zh) Pci-e设备及其接收数据重排序方法
CN109408243A (zh) 一种基于rdma的数据处理方法、装置和介质
CN104468417B (zh) 一种堆叠交换机报文传输方法、系统及堆叠交换机
US8671220B1 (en) Network-on-chip system, method, and computer program product for transmitting messages utilizing a centralized on-chip shared memory switch
CN103533090A (zh) 单个物理网口模拟为多个逻辑网口的映射方法与装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
EXSB Decision made by sipo to initiate substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20201030

Address after: 318015 no.2-3167, zone a, Nonggang City, no.2388, Donghuan Avenue, Hongjia street, Jiaojiang District, Taizhou City, Zhejiang Province

Patentee after: Taizhou Jiji Intellectual Property Operation Co.,Ltd.

Address before: 201616 Shanghai city Songjiang District Sixian Road No. 3666

Patentee before: Phicomm (Shanghai) Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20231222

Address after: 518000 room 2502a, 25 / F, Hainan Huanqing building, No. 24 Futian Road, Weizhen community, Futian street, Futian District, Shenzhen, Guangdong Province

Patentee after: TAIKE COMMUNICATION BRANCH, SHENZHEN SDG INFORMATION Co.,Ltd.

Address before: 318015 no.2-3167, area a, nonggangcheng, 2388 Donghuan Avenue, Hongjia street, Jiaojiang District, Taizhou City, Zhejiang Province

Patentee before: Taizhou Jiji Intellectual Property Operation Co.,Ltd.

TR01 Transfer of patent right