CN115858053A - 一种网卡驱动系统 - Google Patents
一种网卡驱动系统 Download PDFInfo
- Publication number
- CN115858053A CN115858053A CN202211584616.9A CN202211584616A CN115858053A CN 115858053 A CN115858053 A CN 115858053A CN 202211584616 A CN202211584616 A CN 202211584616A CN 115858053 A CN115858053 A CN 115858053A
- Authority
- CN
- China
- Prior art keywords
- module
- user space
- ring buffer
- network card
- data frame
- 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
- Information Transfer Systems (AREA)
Abstract
本发明的一种网卡驱动系统涉及一种驱动模块,具体为在用户空间编制的网卡驱动模块,目的是为了克服的现有Linux系统在当数据流量速率达到一定值的时候,可能会被中断淹没,从而造成CPU资源的浪费问题,包括用户空间输入输出驱动模块和环缓冲区模块;用户空间输入输出驱动模块和环缓冲区模块均配置于操作系统的用户空间内部;且应用模块与网卡之间通过环缓冲区模块和用户空间输入输出驱动模块传输数据帧;应用模块是用户空间内进行数据处理的功能单元。
Description
技术领域
本发明涉及一种驱动模块,具体为在用户空间编制的网卡驱动模块。
背景技术
现有的Linux系统中,当网络设备检测到数据帧过来的时候,会使用DMA(DirectMemoryAccess,直接内存访问)将帧发送到预先分配好的内核缓冲区里面,然后更新相应的接收描述符环,之后产生中断通知有数据帧过来。Linux系统会进行相应的响应,然后更新相应的描述符环,再将接收到的数据帧交给内核中的网络堆栈进行处理,网络堆栈处理完之后会将相应的数据拷贝到相应的套接字,从而数据被复制到了用户空间,应用程序就可以使用这些数据:
在发送的时候,一旦应用程序处理完了数据,会通过一个系统调用将数据写入到套接字,将数据从用户空间拷贝到内核空间的缓冲区,交由网络堆栈进行处理,网络堆栈根据需要对数据进行封装并调用网卡设备的驱动程序,网卡设备驱动程序会更新传输描述符环,然后向网卡设备告知有数据帧需要传输。网卡设备会将数据帧从内核中的缓冲区拷贝到自己的缓冲区中并发送到网络链路上,传送到链路上之后,网卡设备会通过一个中断告知成功发送,然后内核会释放相应的缓冲区。
由于Linux系统是通过中断的方式告知CPU有数据包过来的,当网络的流量越来越大,Linux系统会浪费越来越多的时间去处理中断,当流量速率达到一定值(10G)的时候,Linux系统可能会被中断淹没,从而造成CPU资源的浪费。
发明内容
本发明的目的是为了克服的现有Linux系统在当数据流量速率达到一定值的时候,可能会被中断淹没,从而造成CPU资源的浪费问题,提供了一种网卡驱动系统。
本发明的一种网卡驱动系统,包括用户空间输入输出驱动模块和环缓冲区模块;
用户空间输入输出驱动模块和环缓冲区模块均配置于操作系统的用户空间内部;且
应用模块与网卡之间通过环缓冲区模块和用户空间输入输出驱动模块传输数据帧;
应用模块是用户空间内进行数据处理的功能单元。
进一步地,用户空间输入输出驱动模块,与网卡中的接收/发送队列模块以及环缓冲区模块连接,用于接收网卡发送的第一数据帧并传输至环缓冲区模块;
环缓冲区模块,与应用模块连接,用于使得应用模块可以读取第一数据帧;
应用模块,用于对第一数据帧中的数据进行处理后生成第二数据帧并传输至环缓冲区模块;
用户空间输入输出驱动模块,还用于读取环缓冲区模块中的第二数据帧并传输至网卡。
本发明的有益效果是:
本发明对Linux用户空间进行细分,增设新的抽象层,编制专用的网卡驱动,减少报文数据包在用户空间和应用空间的多次拷贝,大幅提高了网络设备的数据采集效率,提升了系统对数据包的处理性能。在低主频CPU的嵌入式芯片的网络性能检测上,使用了本发明相关技术的环境较使用DPAA的环境,性能提高了10倍;其中代入实际设备使用时,使用单核CPU的环境提升了6倍,使用双核CPU的环境提升了12倍处理性能。
同时由于本发明是在用户空间中开发驱动,与现有的在内核中开发驱动相比,安全风险大大降低。
附图说明
图1为本发明的一种网卡驱动系统的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。
具体实施方式一,本实施方式的一种网卡驱动系统,包括用户空间输入输出驱动模块1和环缓冲区模块2;
用户空间输入输出驱动模块1和环缓冲区模块2均配置于操作系统的用户空间内部;且
应用模块4与网卡之间通过环缓冲区模块2和用户空间输入输出驱动模块1传输数据帧;
应用模块4是用户空间内进行数据处理的功能单元。
其中,用户空间输入输出驱动模块1,与网卡中的接收/发送队列模块3以及环缓冲区模块2连接,用于接收网卡发送的第一数据帧并传输至环缓冲区模块2;
环缓冲区模块2,与应用模块4连接,用于使得应用模块4可以读取第一数据帧;
应用模块4,用于对第一数据帧中的数据进行处理后生成第二数据帧并传输至环缓冲区模块2;
用户空间输入输出驱动模块1,还用于读取环缓冲区模块2中的第二数据帧并传输至网卡。
最佳实施例,本实施例是对实施方式一的进一步说明,本实施例中,操作系统用户空间为Linux操作系统的用户空间。
其中,应用模块4在原地址对第一数据帧进行处理。
其中,还包括高性能数据通道加速结构DPAA模块5;
DPAA模块5,连接于环缓冲区模块2和应用模块4之间,用于将数据帧从环缓冲区模块2传输至应用模块4、以及将应用模块4传输至数据帧从环缓冲区模块2。
其中,用户空间输入输出驱动模块1通过DMA方式将第一数据帧传输至环缓冲区模块2。
具体地,通过开发Linux用户空间输入输出驱动(UserspaceI/Odriver),亦即运行在用户空间的网卡驱动,使得应用程序不需要经过Linux内核就可以访问网络设备卡。网卡设备可以通过DMA方式将数据包传输到事先分配好的环缓冲区,这个环缓冲区位于用户空间,应用程序可以读取数据包并在原地址上直接处理,不需要中断,而且也省去了内核到应用层的数据包拷贝过程。
本发明可以减少报文在用户空间和应用空间的多次拷贝,让网络硬件直接到达用户空间,不需要进行频繁的内存拷贝和系统调用。通过UIO驱动裸包反弹每个包需要85个时钟周期,而现有Linux内核协议栈每包需要2k~4k个时钟周期。简单地说,本技术允许数据包绕过内核,从而减少了低主频CPU对网络传输速率的影响。
因为内核层权限比较高,操作相对比较危险,可能因为小的代码bug就会导致系统崩溃,需要仔细的开发和广泛的测试。而在应用层则相反,比较安全,且在应用层调试代码要方便的多。因此,由于本发明是在用户空间中开发驱动,与现有的在内核中开发驱动相比,安全风险大大降低。
其中,UIO驱动的基本原理如下,
1,通过Linux内核的UIO机制获取硬件资源;
2,模块初始化,将硬件资源转换为字符设备;
3,将字符设备纳入Linux的驱动模型,并分配设备号;
4,通过映射函数实现资源的存储。
其中,UIO驱动有六个核心组件,
1,环境抽象层:环境抽象层为其他组件和应用程序提供一个屏蔽具体平台特性的统一接口,环境抽象层提供的功能主要有:驱动加载和启动;支持多核和多线程执行类型;CPU核亲和性处理;原子操作和锁操作接口;时钟参考;PCI总线访问接口;跟踪和调试接口;CPU特性采集接口;中断和告警接口等。
2,堆内存管理组件:堆内存管理组件为应用程序提供从大页内存分配对内存的接口。当需要分配大量内存小块时,使用这些接口可以减少TLB缺页。
3,环缓冲区管理组件:环缓冲区管理组件为应用程序和其他组件提供一个无锁的多生产者多消费者FIFO队列,可以无锁出入对,支持多消费/生产者同时出入队。
4,内存池管理组件:内存池管理组件为应用程序和其他组件提供分配内存池的接口,内存池是一个由固定大小的多个内存块组成的内存容器,可用于存储相同对象实体,如报文缓存块等。内存池由内存池的名称来唯一标识,它由一个环缓冲区和一组核本地缓存队列组成,每个核从自己的缓存队列分配内存块,当本地缓存队列减少到一定程度时,从内存缓冲区中申请内存块来补充本地队列。
5,网络报文缓存块管理组件:网络报文缓存块管理组件提供应用程序创建和释放用于存储报文信息的缓存块的接口,这些MBUF存储在内存池中。提供两种类型的MBUF,一种用于存储一般信息,一种用于存储报文信息。
6、定时器组件:定时器组件提供一些异步周期执行的接口(也可以只执行一次),可以指定某个函数在规定的时间异步的执行,定时器组件的时间参考来自环境抽象层的时间接口。
以下为UIO驱动实例化的基本过程:
1,通过内存池管理组件和堆内存管理组件为UIO驱动分配大页内存;
2,加载UIO模块,该模块实现了UIO驱动的基本原理,见上文,亦即环境抽象层;
3,将网卡的硬件资源绑定到字符设备,将驱动注册到设备链表;
4,启动转发程序,即组件中的堆内存管理组件、环缓冲区管理组件、网络报文缓存块管理组件;
至此,网络数据包的收发便可避免通过内核空间与用户空间的多次拷贝,将硬件操作直接映射到用户空间,进而显著提升传输效率。
虽然在本文中参照了特定的实施方式来描述本发明,但是应该理解的是,这些实施例仅仅是本发明的原理和应用的示例。因此应该理解的是,可以对示例性的实施例进行许多修改,并且可以设计出其他的布置,只要不偏离所附权利要求所限定的本发明的精神和范围。应该理解的是,可以通过不同于原始权利要求所描述的方式来结合不同的从属权利要求和本文中的特征。还可以理解的是,结合单独实施例所描述的特征可以使用在其他实施例中。
Claims (6)
1.一种网卡驱动系统,其特征在于,包括用户空间输入输出驱动模块(1)和环缓冲区模块(2);
所述用户空间输入输出驱动模块(1)和环缓冲区模块(2)均配置于操作系统的用户空间内部;且
应用模块(4)与网卡之间通过环缓冲区模块(2)和用户空间输入输出驱动模块(1)传输数据帧;
所述应用模块(4)是用户空间内进行数据处理的功能单元。
2.根据权利要求1所述的一种网卡驱动系统,其特征在于,
所述用户空间输入输出驱动模块(1),与网卡中的接收/发送队列模块(3)以及环缓冲区模块(2)连接,用于接收网卡发送的第一数据帧并传输至所述环缓冲区模块(2);
所述环缓冲区模块(2),与应用模块(4)连接,用于使得应用模块(4)可以读取所述第一数据帧;
所述应用模块(4),用于对第一数据帧中的数据进行处理后生成第二数据帧并传输至所述环缓冲区模块(2);
所述用户空间输入输出驱动模块(1),还用于读取所述环缓冲区模块(2)中的第二数据帧并传输至网卡。
3.根据权利要求2所述的一种网卡驱动系统,其特征在于,操作系统用户空间为Linux操作系统的用户空间。
4.根据权利要求1、2或3所述的一种网卡驱动系统,其特征在于,所述应用模块(4)在原地址对第一数据帧进行处理。
5.根据权利要求4所述的一种网卡驱动系统,其特征在于,还包括高性能数据通道加速结构DPAA模块(5);
所述DPAA模块(5),连接于环缓冲区模块(2)和应用模块(4)之间,用于将数据帧从环缓冲区模块(2)传输至应用模块(4)、以及将应用模块(4)传输至数据帧从环缓冲区模块(2)。
6.根据权利要求2所述的一种网卡驱动系统,其特征在于,所述用户空间输入输出驱动模块(1)通过DMA方式将第一数据帧传输至所述环缓冲区模块(2)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211584616.9A CN115858053A (zh) | 2022-12-09 | 2022-12-09 | 一种网卡驱动系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211584616.9A CN115858053A (zh) | 2022-12-09 | 2022-12-09 | 一种网卡驱动系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115858053A true CN115858053A (zh) | 2023-03-28 |
Family
ID=85671836
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211584616.9A Pending CN115858053A (zh) | 2022-12-09 | 2022-12-09 | 一种网卡驱动系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115858053A (zh) |
-
2022
- 2022-12-09 CN CN202211584616.9A patent/CN115858053A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108628684B (zh) | 一种基于dpdk的报文处理方法及计算机设备 | |
US20010049726A1 (en) | Data path engine | |
US20020103942A1 (en) | Wireless java device | |
CN113918101B (zh) | 一种写数据高速缓存的方法、系统、设备和存储介质 | |
US20020016869A1 (en) | Data path engine | |
US20040054822A1 (en) | Transferring interrupts from a peripheral device to a host computer system | |
CN112491426B (zh) | 面向多核dsp的服务组件通信架构及任务调度、数据交互方法 | |
US20100186024A1 (en) | System and Method of Invoking Multiple Remote Operations | |
CN111190854B (zh) | 通信数据处理方法、装置、设备、系统和存储介质 | |
CN114064302B (zh) | 一种进程间通信的方法及装置 | |
EP0871307A2 (en) | Apparatus for flexible control of interrupts in multiprocessor systems | |
CN110874336B (zh) | 一种基于申威平台的分布式块存储低延迟控制方法及系统 | |
CN108829530B (zh) | 一种图像处理方法及装置 | |
CN113468090A (zh) | 一种PCle通信方法、装置、电子设备及可读存储介质 | |
CN113127139A (zh) | 一种基于数据面开发套件dpdk的内存分配方法和装置 | |
CN108958903B (zh) | 嵌入式多核中央处理器任务调度方法与装置 | |
CN114397999A (zh) | 基于非易失内存接口-远程处理消息传递的通信方法、装置及设备 | |
US20150121376A1 (en) | Managing data transfer | |
Wagner et al. | NIC-based offload of dynamic user-defined modules for Myrinet clusters | |
CN115858053A (zh) | 一种网卡驱动系统 | |
US8706923B2 (en) | Methods and systems for direct memory access (DMA) in-flight status | |
CN115616984A (zh) | 基于多核处理器的任务处理方法、数控机和存储介质 | |
CN114911525A (zh) | 二进制指令翻译执行方法及装置 | |
CN108958904B (zh) | 嵌入式多核中央处理器的轻量级操作系统的驱动程序框架 | |
Mudge et al. | A high performance operating system for the NCUBE |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |