CN104050101A - 一种实现arm cpu用户态收发报文的方法 - Google Patents
一种实现arm cpu用户态收发报文的方法 Download PDFInfo
- Publication number
- CN104050101A CN104050101A CN201410232336.0A CN201410232336A CN104050101A CN 104050101 A CN104050101 A CN 104050101A CN 201410232336 A CN201410232336 A CN 201410232336A CN 104050101 A CN104050101 A CN 104050101A
- Authority
- CN
- China
- Prior art keywords
- user
- state
- receiving
- transmitting
- arm
- 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.)
- Granted
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种实现ARM CPU用户态收发报文的方法,所述方法包括:对ARM网口的内核驱动进行整改,除去Linux内核中ARM网口初始化函数中挂载的关于中断及收发包的函数;将所述除去的ARM网口初始化函数中关于收发包的函数移植到用户态;用户态在初始化时从内核获取大块连续内存,并对这块物理连续内存进行单独管理,使得用户态空间可以访问到DMA的内存;用户态在初始化时进行与ARM网口收发相关的硬件寄存器的配置,使得收发包过程中用户态可以读写与ARM网口收发相关的硬件控制寄存器;用户态收发报文。本发明消除了内核态收发包触发大量中断及数据包到用户态拷贝致使消耗大量CPU性能的缺陷,提高了设备的转发性能。
Description
技术领域
本发明属于计算机网络技术领域,具体涉及一种实现ARM CPU用户态收发报文的方法。
背景技术
ARM CPU多为内核驱动,网口初始化与收发包都部署在内核态,这样在数据报文大流量的冲击下会引发大量的中断,导致消耗一定的CPU资源,同时Linux操作系统的内核态到用户态的数据拷贝也会损耗大量的CPU性能,如果能够使用用户态来收发报文,则会大大提高设备的转发报文性能。
因此,有必要提供一种实现ARM CPU用户态收发报文的方法,使得用户态空间可以访问到DMA的内存,实现用户态收发报文,以解决上述技术问题。
发明内容
本发明的目的是提供一种实现ARM CPU用户态收发报文的方法,使得用户态空间可以访问到DMA的内存,实现用户态收发报文,以解决使用内核态收发报文导致消耗大量CPU性能,不利于提高设备转发性能的缺陷。
根据本发明的一个方面,提供一种实现ARM CPU用户态收发报文的方法,包括以下步骤:步骤S1,对ARM网口的内核驱动进行整改,除去Linux内核中ARM网口初始化函数中挂载的关于中断及收发包的函数;步骤S2,将所述除去的ARM网口初始化函数中关于收发包的函数移植到用户态;步骤S3,用户态在初始化时从内核获取大块连续内存,并对这块物理连续内存进行单独管理,使得用户态空间可以访问到DMA的内存;步骤S4,用户态在初始化时进行与ARM网口收发相关的硬件寄存器的配置,使得收发包过程中用户态可以读写与ARM网口收发相关的硬件控制寄存器;步骤S5,用户态进行收发报文。
其中,在上述发明中,所述步骤S2进一步包括:步骤S21,将与ARM网口收发包相关的处理函数移植到用户态;步骤S22,对用户态中植入后的与ARM网口收发包相关的处理函数进行整改,去掉一些用户态不需要的操作;步骤S23,创建线程进行收包,编译链接生成可执行程序。
其中,在上述发明中,所述收包采用轮询方式进行。
其中,在上述发明中,所述步骤S3进一步包括:步骤S31,在Linux内核初始化时,申请大块连续内存,以备用户态收发包申请skb使用;步骤S32,用户态初始化时,通过ioctl方式从内核获取已申请的所述大块连续内存的地址和大小;步骤S33,采用mmap函数将所述大块连续内存的地址映射为用户态可操作的虚拟地址,使得收发包使用的skb申请和释放可以在映射后的这块内存中进行。
其中,在上述发明中,所述步骤S31进一步包括:在Linux内核初始化时,利用Bigphysarea申请所述大块连续内存,以备用户态收发包申请skb使用。
其中,在上述发明中,所述已申请的所述大块连续内存的大小为300M。
其中,在上述发明中,所述步骤S4进一步包括:步骤S41,用户态在初始化时获取与ARM网口收发相关的硬件寄存器的物理基地址及寄存器空间的大小;步骤S42,将所述获取的硬件寄存器的物理基地址及寄存器空间的大小定义为宏,通过mmap函数将硬件寄存器的基地址映射为用户态虚拟地址。
其中,在上述发明中,所述步骤S5进一步包括:用户态通过执行ARM网口的收发包初始化函数,分配收发资源,控制寄存器的配置、接口注册及收发函数挂载,来实现收发报文。
其中,在上述发明中,所述分配收发的资源包括队列、描述符和buffer缓存。
根据本发明的一种实现ARM CPU用户态收发报文的方法,将ARM网口的内核驱动进行整改并在内核进行加载,而将网络数据报文的收发则移植到用户态,消除了内核态收发包触发大量中断及数据包到用户态拷贝致使消耗大量CPU性能的缺陷,提高了设备的转发性能。
附图说明
图1显示了现有技术中的Linux内核态收发报文的结构示意图;
图2显示了本发明的实现ARM CPU用户态收发报文的结构示意图;
图3显示了本发明优选实施例的实现ARM CPU用户态收发报文方法的流程图;
图4显示了图3中步骤S2的子流程图;
图5显示了图3中步骤S3的子流程图;
图6显示了图3中步骤S4的子流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
图1显示了现有技术中的Linux内核态收发报文的结构示意图。
如图1所示,在现有技术中,ARM CPU多为内核驱动,网口初始化与收发包都部署在内核态,使得Linux系统通过内核态来收发报文,再将报文拷贝至用户态,但是在数据报文大流量的冲击下会引发大量的中断,这样会导致消耗一定的CPU资源,同时Linux操作系统的内核态到用户态的数据拷贝也会损耗大量的CPU性能。
图2显示了本发明的实现ARM CPU用户态收发报文的结构示意图。
如图2所示,在本发明中,将ARM网口的内核驱动进行整改并在内核进行加载,而将网络数据报文的收发则移植到用户态,实现用户态直接收发报文,消除了内核态收发包触发大量中断及数据包到用户态拷贝致使消耗大量CPU性能的缺陷,提高了设备的转发性能。
图3显示了本发明优选实施例的实现ARM CPU用户态收发报文方法的流程图;图4显示了图3中步骤S2的子流程图;图5显示了图3中步骤S3的子流程图;图6显示了图3中步骤S4的子流程图。
如图3所示,本发明优选实施例的实现ARM CPU用户态收发报文方法包括以下步骤:
步骤S1,对ARM网口的内核驱动进行整改,除去Linux内核中ARM网口初始化函数中挂载的关于中断及收发包的函数。
一般地,ARM CPU多为内核驱动,网口初始化与收发包都部署在内核态,使得Linux系统通过内核态来收发报文,再将报文拷贝至用户态。在步骤S1中,对ARM网口的内核驱动进行整改,除去Linux内核中ARM网口初始化函数中挂载的关于中断及收发包的函数,使得内核不再使用中断收发报文,只进行正常的网口初始化及一些硬件控制寄存器的配置。
步骤S2,将所述除去的ARM网口初始化函数中关于收发包的函数移植到用户态。
本步骤将内核中的ARM网口初始化函数中关于收发包的函数移植到用户态,使得用户态直接收发报文,消除内核态收发包触发大量中断及数据包到用户态拷贝致使消耗大量CPU性能的缺陷,提高设备的转发性能。
其中,步骤S2如图4所示,包括下述子步骤:
步骤S21,将与ARM网口收发包相关的处理函数移植到用户态。即将内核中的ARM网口初始化函数中关于收发包的函数移植到用户态。
步骤S22,对用户态中植入后的与ARM网口收发包相关的处理函数进行整改,去掉一些用户态不需要的操作。并不是将所有与ARM网口收发包相关的处理函数都保留在用户态,而是为了在提高系统转发性能的同时尽量减小CPU性能的消耗,将一些用户态不需要的操作去掉,例如CPU控制等是用户态所不需要的操作,因此可以去掉。
步骤S23,创建线程进行收包,编译链接生成可执行程序。优选地,采用轮询方式进行收包。
步骤S3,用户态在初始化时从内核获取大块连续内存,并对这块物理连续内存进行单独管理,使得用户态空间可以访问到DMA的内存。
具体来说,步骤S3如图5所示,包括下述子步骤:
步骤S31,在Linux内核初始化时,申请大块连续内存,以备用户态收发包申请skb使用。具体地,在Linux内核初始化时,利用Bigphysarea向内核申请大块连续内存,以备用户态收发包申请skb使用,skb是标识报文的一个数据结构,包括报文头、数据段等,内核的所有业务处理都基于skb数据结构完成,其中Bigphysarea为大块内存申请的补丁,可以有效地解决Linux系统无法申请大块连续内存的问题。在步骤S31中,优先地,向内核申请大小为300M的连续内存,当然所要申请的连续内存的大小可以根据系统总内存的大小自行定义,如果总内存越大,相应地可以申请更大的连续内存,反之要减小所要申请的连续内存的大小。
步骤S32,用户态初始化时,通过ioctl(ioctl是设备驱动程序中对设备的I/O通道进行管理的函数,可用于用户态和内核间通信)方式从内核获取所述申请的大块连续内存的地址和大小。具体地,通过ioctl方式对申请的内存进行检测,检测出该内存的地址和大小,如果检测到地址和大小相符,则进行获取。
步骤S33,采用mmap函数将所述大块连续内存的地址映射为用户态可操作的虚拟地址,使得收发包使用的skb申请和释放可以在映射后的这块内存中进行。
在步骤S33中,完成地址的映射操作,将步骤S31中申请到的内存的地址映射为用户态可操作的虚拟地址,使得用户态可以对这块物理连续内存进行单独管理,以实现用户态空间可以访问到DMA的内存。
步骤S4,用户态在初始化时进行与ARM网口收发相关的硬件寄存器的配置,使得收发包过程中用户态可以读写与ARM网口收发相关的硬件控制寄存器。
具体来说,步骤S4如图6所示,包括下述子步骤:
步骤S41,用户态在初始化时获取与ARM网口收发相关的硬件寄存器的物理基地址及寄存器空间的大小。
步骤S42,将所述获取的硬件寄存器的物理基地址及寄存器空间的大小定义为宏,通过mmap函数将硬件寄存器的基地址映射为用户态虚拟地址。
通过步骤S41和步骤S42的流程,用户态先获取与ARM网口收发相关的硬件寄存器的物理基地址及寄存器空间的大小,再使用mmap函数将硬件寄存器的基地址映射为用户态虚拟地址,使得用户态可以对与ARM网口收发相关的硬件寄存器进行管理,保证收发包过程中用户态可以读写与ARM网口收发相关的硬件控制寄存器。
步骤S5,用户态收发报文。
在步骤S5中,具体地,用户态执行ARM网口的收发包初始化函数,该执行过程和内核执行过程相似,在所有与收发相关的操作中都需执行。另外,用户态分配收发资源,控制寄存器的配置、接口注册及收发函数挂载,实现收发报文。其中分配收发的资源包括队列、描述符、buffer缓存等。
通过采用上述流程,先采用Bigphysarea申请大块连续内存,然后采用mmap函数将申请的内存的物理地址映射为用户态虚拟地址,使得用户态空间可以访问到DMA的内存,并且在用户态进行与ARM网口收发相关的硬件寄存器的配置,实现了用户态收发报文,消除了内核态收发包触发大量中断及数据包到用户态拷贝致使消耗大量CPU性能的缺陷,进而提高了设备转发性能。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
Claims (9)
1.一种实现ARM CPU用户态收发报文的方法,其特征在于,包括以下步骤:
步骤S1,对ARM网口的内核驱动进行整改,除去Linux内核中ARM网口初始化函数中挂载的关于中断及收发包的函数;
步骤S2,将所述除去的ARM网口初始化函数中关于收发包的函数移植到用户态;
步骤S3,用户态在初始化时从内核获取大块连续内存,并对这块物理连续内存进行单独管理,使得用户态空间可以访问到DMA的内存;
步骤S4,用户态在初始化时进行与ARM网口收发相关的硬件寄存器的配置,使得收发包过程中用户态可以读写与ARM网口收发相关的硬件控制寄存器;
步骤S5,用户态收发报文。
2.根据权利要求1所述的方法,其特征在于,所述步骤S2进一步包括:
步骤S21,将与ARM网口收发包相关的处理函数移植到用户态;
步骤S22,对用户态中植入后的与ARM网口收发包相关的处理函数进行整改,去掉一些用户态不需要的操作;
步骤S23,创建线程进行收包,编译链接生成可执行程序。
3.根据权利要求2所述的方法,其特征在于,所述收包采用轮询方式进行。
4.根据权利要求1所述的方法,其特征在于,所述步骤S3进一步包括:
步骤S31,在Linux内核初始化时,申请大块连续内存,以备用户态收发包申请skb使用;
步骤S32,用户态初始化时,通过ioctl方式从内核获取已申请的所述大块连续内存的地址和大小;
步骤S33,采用mmap函数将所述大块连续内存的地址映射为用户态可操作的虚拟地址,使得收发包使用的skb申请和释放可以在映射后的这块内存中进行。
5.根据权利要求4所述的方法,其特征在于,所述步骤S31进一步包括:
在Linux内核初始化时,利用Bigphysarea申请所述大块连续内存,以备用户态收发包申请skb使用。
6.根据权利要求4所述的方法,其特征在于,所述已申请的所述大块连续内存的大小为300M。
7.根据权利要求1所述的方法,其特征在于,所述步骤S4进一步包括:
步骤S41,用户态在初始化时获取与ARM网口收发相关的硬件寄存器的物理基地址及寄存器空间的大小;
步骤S42,将所述获取的硬件寄存器的物理基地址及寄存器空间的大小定义为宏,通过mmap函数将硬件寄存器的基地址映射为用户态虚拟地址。
8.根据权利要求1所述的方法,其特征在于,所述步骤S5进一步包括:
用户态通过执行ARM网口的收发包初始化函数,分配收发资源,控制寄存器的配置、接口注册及收发函数挂载,来实现收发报文。
9.根据权利要求8所述的方法,其特征在于,所述分配收发的资源包括队列、描述符和buffer缓存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410232336.0A CN104050101B (zh) | 2014-05-29 | 2014-05-29 | 一种实现arm cpu用户态收发报文的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410232336.0A CN104050101B (zh) | 2014-05-29 | 2014-05-29 | 一种实现arm cpu用户态收发报文的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104050101A true CN104050101A (zh) | 2014-09-17 |
CN104050101B CN104050101B (zh) | 2018-02-13 |
Family
ID=51502980
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410232336.0A Active CN104050101B (zh) | 2014-05-29 | 2014-05-29 | 一种实现arm cpu用户态收发报文的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104050101B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106850565A (zh) * | 2016-12-29 | 2017-06-13 | 河北远东通信系统工程有限公司 | 一种高速的网络数据传输方法 |
CN111124506A (zh) * | 2019-11-12 | 2020-05-08 | 中国电子科技集团公司第三十研究所 | 基于应用层的运算卡驱动实现方法 |
CN112463662A (zh) * | 2020-12-16 | 2021-03-09 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
WO2022237624A1 (zh) * | 2021-05-14 | 2022-11-17 | 华为技术有限公司 | 内存分配方法、装置和系统 |
CN115473811A (zh) * | 2022-09-21 | 2022-12-13 | 西安超越申泰信息科技有限公司 | 一种网络性能优化方法、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101707564A (zh) * | 2009-12-04 | 2010-05-12 | 曙光信息产业(北京)有限公司 | 用于零拷贝缓冲区队列网络数据发送和接收的处理方法和装置 |
CN102402487A (zh) * | 2011-11-15 | 2012-04-04 | 北京天融信科技有限公司 | 一种零拷贝接收报文的方法和系统 |
CN103150190A (zh) * | 2013-03-26 | 2013-06-12 | 汉柏科技有限公司 | Linux系统下用户态网卡自动探测及驱动加载的方法 |
-
2014
- 2014-05-29 CN CN201410232336.0A patent/CN104050101B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101707564A (zh) * | 2009-12-04 | 2010-05-12 | 曙光信息产业(北京)有限公司 | 用于零拷贝缓冲区队列网络数据发送和接收的处理方法和装置 |
CN102402487A (zh) * | 2011-11-15 | 2012-04-04 | 北京天融信科技有限公司 | 一种零拷贝接收报文的方法和系统 |
CN103150190A (zh) * | 2013-03-26 | 2013-06-12 | 汉柏科技有限公司 | Linux系统下用户态网卡自动探测及驱动加载的方法 |
Non-Patent Citations (1)
Title |
---|
叶小龙: "linux用户空间驱动的研究与实现", 《万方学位论文》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106850565A (zh) * | 2016-12-29 | 2017-06-13 | 河北远东通信系统工程有限公司 | 一种高速的网络数据传输方法 |
CN106850565B (zh) * | 2016-12-29 | 2019-06-18 | 河北远东通信系统工程有限公司 | 一种高速的网络数据传输方法 |
CN111124506A (zh) * | 2019-11-12 | 2020-05-08 | 中国电子科技集团公司第三十研究所 | 基于应用层的运算卡驱动实现方法 |
CN112463662A (zh) * | 2020-12-16 | 2021-03-09 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
CN112463662B (zh) * | 2020-12-16 | 2024-04-05 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
WO2022237624A1 (zh) * | 2021-05-14 | 2022-11-17 | 华为技术有限公司 | 内存分配方法、装置和系统 |
CN115473811A (zh) * | 2022-09-21 | 2022-12-13 | 西安超越申泰信息科技有限公司 | 一种网络性能优化方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104050101B (zh) | 2018-02-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102402487B (zh) | 一种零拷贝接收报文的方法和系统 | |
CN104050101A (zh) | 一种实现arm cpu用户态收发报文的方法 | |
US9893996B2 (en) | Techniques for packet management in an input/output virtualization system | |
US10305813B2 (en) | Socket management with reduced latency packet processing | |
US9477501B2 (en) | Encapsulation of an application for virtualization | |
US9137179B2 (en) | Memory-mapped buffers for network interface controllers | |
US8996774B2 (en) | Performing emulated message signaled interrupt handling | |
EP2560096A1 (en) | Information processing apparatus and interrupt control method | |
US9727364B2 (en) | Virtual device hypervisor memory limited receive queuing | |
US8813071B2 (en) | Storage reclamation systems and methods | |
US9621633B2 (en) | Flow director-based low latency networking | |
WO2023071508A1 (zh) | 线程间中断信号发送 | |
US9910692B2 (en) | Enhanced virtual function capabilities in a virtualized network environment | |
US10089247B2 (en) | System and method for coupling a host device to secure and non-secure devices | |
US8996760B2 (en) | Method to emulate message signaled interrupts with interrupt data | |
US9836338B2 (en) | Method and apparatus for message interactive processing | |
CN104077190A (zh) | 一种arm网口驱动的用户态移植方法和系统 | |
CN114175005A (zh) | 包括主机计算设备和网络接口设备的可编程网络接口设备 | |
CN113987523A (zh) | 用于安全性的方法和装置 | |
US10096081B2 (en) | Adaptive filtering of packets in a graphics processing system | |
US9882787B2 (en) | Service management in appliance-based solutions | |
US8214448B2 (en) | Optimized utilization of DMA buffers for incoming data packets in a network protocol | |
CN107025068B (zh) | 在存储器内异步复制数据 | |
CN103617125A (zh) | 内存空间的管理方法和装置 | |
CN104811391B (zh) | 数据包的处理方法、装置及服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
PP01 | Preservation of patent right | ||
PP01 | Preservation of patent right |
Effective date of registration: 20180528 Granted publication date: 20180213 |