CN103440213A - 一种应用于具有多cpu和网卡的系统的网卡驱动方法 - Google Patents

一种应用于具有多cpu和网卡的系统的网卡驱动方法 Download PDF

Info

Publication number
CN103440213A
CN103440213A CN2013103094557A CN201310309455A CN103440213A CN 103440213 A CN103440213 A CN 103440213A CN 2013103094557 A CN2013103094557 A CN 2013103094557A CN 201310309455 A CN201310309455 A CN 201310309455A CN 103440213 A CN103440213 A CN 103440213A
Authority
CN
China
Prior art keywords
queue
cpu
network interface
interface card
data
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
Application number
CN2013103094557A
Other languages
English (en)
Other versions
CN103440213B (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.)
Shenzhen Gongjin Electronics Co Ltd
Original Assignee
Shenzhen Gongjin Electronics 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 Shenzhen Gongjin Electronics Co Ltd filed Critical Shenzhen Gongjin Electronics Co Ltd
Priority to CN201310309455.7A priority Critical patent/CN103440213B/zh
Publication of CN103440213A publication Critical patent/CN103440213A/zh
Application granted granted Critical
Publication of CN103440213B publication Critical patent/CN103440213B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明提供了一种应用于具有多CPU和网卡的系统的网卡驱动方法,包括网卡驱动过程一和二,且在各个CPU中创建数据接收设备队列和数据发送设备队列;网卡驱动过程一包括:①在数据到达网卡时,产生硬件中断,关闭硬件中断,调用中断处理进程;②将网卡添加至一CPU的数据接收设备队列中;③重新开启硬件中断,设置软中断,中断处理进程返回;网卡驱动过程二包括:软中断轮询;对于软中断置位的CPU,先扫描其数据接收设备队列,依次对该队列中的网卡进行数据读取处理,再依次对其数据发送设备队列中的设备进行数据发送处理。本发明大大缩短了硬件中断上半部分处理时间,并将硬件中断下半部的处理任务分摊到各个CPU上,从而提高了系统性能。

Description

一种应用于具有多CPU和网卡的系统的网卡驱动方法
技术领域
本发明涉及通信技术领域,尤其涉及一种应用于具有多CPU和网卡的系统的网卡驱动方法。
背景技术
通常,linux系统的网卡驱动过程主要包括两部分。
如图1所示,网卡驱动过程的上半部包括:
101、在来自通信对端的以太网数据传输到本端的网卡后,系统产生硬件中断,同时关闭硬件中断,即此时不会再接收网络中断。
102、硬件中断产生后,系统CPU调用上述网卡在open时注册的中断处理函数,进行以下中断处理:首先从网卡的数据寄存器中读取所接收的以太网数据;然后创建一块缓存(skb_buf),将以太网数据写入到该缓存中;之后将该缓存以结构链表的方式挂入到上述网卡的接收队列中。
网卡的接收队列其实就是一个链表,是用来临时存放skb_buf对象实例的;所有网卡在将接收到的数据写入skb_buf之后都会将此skb_buf链入到其接收队列中,接收队列中的各skb_buf将在网络驱动过程的下半部分被取出发送至协议栈。
103、在网卡设备接收完数据之后,将该网卡挂到当前CPU的设备队列中,然后设置软中断,等待在软中断中继续处理数据。CPU的设备队列用以维护当前所有需要处理的网络设备。
104、重新开启硬件中断,此时系统可再次响应硬件中断。
如图2所示,网卡驱动过程的下半部包括:
201、系统在进行软中断轮询时,由于在上半部设置了软中断,因此发现CPU的软中断被置位。
202、依次对CPU的设备队列中各网卡设备所接收到的以太网数据进行处理:首先从CPU的设备队列中取得网卡设备,再从该网卡设备的接收队列中取得数据包,根据包头内容做相应的处理之后就将该数据包送往网络协议栈。
203、数据处理完毕后,从CPU的设备队列中移出数据处理完毕的网卡设备,同时关闭软中断。
但是上述网卡驱动流程在应用于具有多个CPU和网卡的系统中时,上半部分中的关闭硬件中断、CPU申请内存及读取寄存器中的数据、将数据写入内存中、将内存以skb_buf结构的形式挂入设备队列、将该设备挂入到CPU维护的设备队列中等等这一系列的操作将会耗费大量时间,使得系统对下一次硬件中断处理将不及时。如果硬件中断很频繁,而此时系统处于硬件关中断状态,即使系统中有其他CPU处于空闲状态,那中断请求也得不到及时处理。因而,有必要对此驱动方法进行改进。
发明内容
本发明的目的在于提供一种网卡驱动方法,应用于具有多CPU和网卡的系统,缩短系统处于硬件中断关闭状态的时间,提高对新的硬件中断的响应速度。
本发明的目的是通过以下技术方案实现的:
一种应用于具有多CPU和网卡的系统的网卡驱动方法,包括网卡驱动过程一和网卡驱动过程二,还包括步骤:在各个CPU的数据结构中分别创建数据接收设备队列和数据发送设备队列,初始化为空;
所述网卡驱动过程一具体包括:
①在通信对端的以太网数据到达网卡时,产生硬件中断,同时关闭硬件中断,调用中断处理进程;
②将所述网卡添加至一CPU的数据接收设备队列中;
③重新开启硬件中断,同时设置所述网卡当前所处数据接收设备队列所属的CPU软中断,所述中断处理进程返回;
所述网卡驱动过程二具体包括:
进行软中断轮询;对于软中断置位的CPU,
先扫描其数据接收设备队列,依次对该数据接收设备队列中的每个网卡进行处理:先从设备寄存器中读取相应的数据,将数据打包后挂入当前网卡的数据接收链表中;然后从数据接收设备队列中摘除当前网卡,并将当前网卡挂入一CPU的数据发送设备队列中;
再依次对其数据发送设备队列中的设备进行处理:将当前网卡的数据接收链表中的数据处理后发送至协议栈。
其中,所述步骤②,将所述网卡添加至一CPU的数据接收设备队列的过程进一步包括:
所述中断处理进程轮询各CPU,查看所述网卡存在于当前CPU的数据接收设备队列还是数据发送设备队列中,
若存在于当前CPU的数据接收设备队列,则跳转至步骤③;
若存在于当前CPU的数据发送设备队列中,则将该网卡移到一CPU的数据接收设备队列后跳转至步骤③;
若不存在于任一CPU的数据接收设备队列及数据发送设备队列中,则将该网卡添加至一CPU的数据接收设备队列中,之后跳转至步骤③。
其中,所述步骤②中,在中断处理进程轮询各CPU的过程中,若所述网卡存在于当前CPU的数据发送设备队列中,则将该网卡移到负载最少的CPU的数据接收设备队列后跳转至步骤③。
其中,所述步骤②中,在中断处理进程轮询各CPU的过程中,若所述网卡存在于当前CPU的数据发送设备队列中,则将该网卡移到当前CPU的数据接收设备队列后跳转至步骤③。
其中,所述步骤②中,在中断处理进程轮询各CPU的过程中,若所述网卡不存在于任一CPU的数据接收设备队列及数据发送设备队列中,则将该网卡添加至负载最少的CPU的数据接收设备队列,之后跳转至步骤③。
其中,所述网卡驱动过程二中,在将当前网卡从软中断置位的CPU的数据接收设备队列中摘除后,将该网卡挂入负载最少的CPU的数据发送设备队列中。
其中,判定其数据发送设备队列中设备数量最少的CPU为负载最少的CPU。
与现有技术相比,本发明实施例具有以下有益效果:
本发明实施例大大缩短了硬件中断上半部分处理时间,从而能够很快的处理其他中断,并将硬件中断下半部的处理任务分摊到各个CPU上,从而提高了系统性能,尤其对硬件中断共享这种情况,系统性能会显著提高。
附图说明
图1是现有技术中网卡驱动方法的上半部分流程图。
图2是现有技术中网卡驱动方法的下半部分流程图。
图3是本发明实施例中网卡驱动方法的上半部分流程图。
图4是本发明实施例中网卡驱动方法的下半部分流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
根据网卡驱动分为上下两部分的设计思想,为了能够快速响应网络硬件中断,需要再次压缩中断上半部的处理时间。现有技术中上半部的处理操作为申请内存(SKB)、读取寄存器,将读取内容做简单操作之后放入设备的接收队列中,再将设备加入CPU的设备队列中。本发明的改进方法是,只执行最后一步,即将中断设备添加到CPU的设备队列后,便重新开启硬件中断,让中断处理例程返回就行了,所有剩下的处理放在下半部执行。
为了实现上述改进方法,本实施例中需要在CPU的数据结构中创建两个设备队列,分别为数据接收设备队列(以下简称队列A)和数据发送设备队列(以下简称队列B),队列A用以挂载需要从网卡寄存器中读取数据的网卡设备,队列B用以挂载已经从寄存器中读取出数据缤并等待将数据发送至协议栈的网卡设备。具体地,在网卡设备需要从寄存器中读取数据时,将该网卡设备挂到队列A中,在网卡设备成功读取数据之后将其从队列A移至队列B中,在网卡设备所读取的数据发送至协议栈之后将其从队列B中移除。本实施例中,队列A的优先级比队列B的要高,队列A中的网卡设备全部处理完之后再处理队列B中的设备。在队列A中摘除设备时,可以根据当前CPU的负载情况,将设备挂到其他CPU的队列B中,由其他CPU处理数据,这样可以形成三级流水线的模式,理论上可以提高系统性能。
请参阅图3,本实施例中网卡驱动的上半部流程具体为:
301、以太网数据包到达网卡,产生硬件中断,同时关闭硬件中断,调用中断处理进程进行中断处理。
302、中断处理进程轮询CPU,判断该网卡设备存在于哪个CPU的队列A或者队列B中。由于系统中不会有特别多的CPU,也不会有特别多的网卡设备(包括虚拟网络设备),因而此轮询操作不会影响性能。
判断结果存在以下几种情况:
(1)设备在队列A中,则跳转到步骤303;
(2)设备在队列B中,则先将该设备移到队列A中,再跳转到步骤303;
(3)设备不在队列A或队列B中,则先将该设备挂到当前CPU的队列A中,再跳转到步骤303。
303、重新开启硬件中断,设置软中断,中断处理进程返回。
请参阅图4,本实施例中网卡驱动的下半部流程具体为:
401、软中断轮询。判断当前CPU的软中断是否置位,未置位则查询下一个CPU。
402、如当前CPU已置位,则扫描其设备队列A。
(1)若队列A不为空,则依次处理该队列中的每一个设备后再跳转至步骤403:先读取设备寄存器,将数据组织成包的格式挂入到该设备的接收队列(即该设备自己维护的一个数据接收链表)中;然后从队列A中摘除该设备,并寻找负载轻的CPU,将该设备挂入负载轻的CPU的队列B中。可以通过查看CPU的设备队列B中挂载的设备数量来判断CPU的负载轻重。
(2)若队列A为空,那么直接跳转至步骤403。
403、对当前CPU的队列B中设备进行处理,处理流程和现有技术中流程一样,将数据简单的处理一下就送往协议栈。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (7)

1.一种应用于具有多CPU和网卡的系统的网卡驱动方法,包括网卡驱动过程一和网卡驱动过程二,其特征在于,还包括步骤:在各个CPU的数据结构中分别创建数据接收设备队列和数据发送设备队列,初始化为空;
所述网卡驱动过程一具体包括:
①在通信对端的以太网数据到达网卡时,产生硬件中断,同时关闭硬件中断,调用中断处理进程;
②将所述网卡添加至一CPU的数据接收设备队列中;
③重新开启硬件中断,同时设置所述网卡当前所处数据接收设备队列所属的CPU软中断,所述中断处理进程返回;
所述网卡驱动过程二具体包括:
进行软中断轮询;对于软中断置位的CPU,
先扫描其数据接收设备队列,依次对该数据接收设备队列中的每个网卡进行处理:先从设备寄存器中读取相应的数据,将数据打包后挂入当前网卡的数据接收链表中;然后从数据接收设备队列中摘除当前网卡,并将当前网卡挂入一CPU的数据发送设备队列中;
再依次对其数据发送设备队列中的设备进行处理:将当前网卡的数据接收链表中的数据处理后发送至协议栈。
2.如权利要求1所述的网卡驱动方法,其特征在于,所述步骤②,将所述网卡添加至一CPU的数据接收设备队列的过程进一步包括:
所述中断处理进程轮询各CPU,查看所述网卡存在于当前CPU的数据接收设备队列还是数据发送设备队列中,
若存在于当前CPU的数据接收设备队列,则跳转至步骤③;
若存在于当前CPU的数据发送设备队列中,则将该网卡移到一CPU的数据接收设备队列后跳转至步骤③;
若不存在于任一CPU的数据接收设备队列及数据发送设备队列中,则将该网卡添加至一CPU的数据接收设备队列中,之后跳转至步骤③。
3.如权利要求2所述的网卡驱动方法,其特征在于,所述步骤②中,在中断处理进程轮询各CPU的过程中,若所述网卡存在于当前CPU的数据发送设备队列中,则将该网卡移到负载最少的CPU的数据接收设备队列后跳转至步骤③。
4.如权利要求2所述的网卡驱动方法,其特征在于,所述步骤②中,在中断处理进程轮询各CPU的过程中,若所述网卡存在于当前CPU的数据发送设备队列中,则将该网卡移到当前CPU的数据接收设备队列后跳转至步骤③。
5.如权利要求2所述的网卡驱动方法,其特征在于,所述步骤②中,在中断处理进程轮询各CPU的过程中,若所述网卡不存在于任一CPU的数据接收设备队列及数据发送设备队列中,则将该网卡添加至负载最少的CPU的数据接收设备队列,之后跳转至步骤③。
6.如权利要求1所述的网卡驱动方法,其特征在于,所述网卡驱动过程二中,在将当前网卡从软中断置位的CPU的数据接收设备队列中摘除后,将该网卡挂入负载最少的CPU的数据发送设备队列中。
7.如权利要求3、5或6所述的网卡驱动方法,其特征在于,该方法中,判定其数据发送设备队列中设备数量最少的CPU为负载最少的CPU。
CN201310309455.7A 2013-07-23 2013-07-23 一种应用于具有多cpu和网卡的系统的网卡驱动方法 Active CN103440213B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310309455.7A CN103440213B (zh) 2013-07-23 2013-07-23 一种应用于具有多cpu和网卡的系统的网卡驱动方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310309455.7A CN103440213B (zh) 2013-07-23 2013-07-23 一种应用于具有多cpu和网卡的系统的网卡驱动方法

Publications (2)

Publication Number Publication Date
CN103440213A true CN103440213A (zh) 2013-12-11
CN103440213B CN103440213B (zh) 2016-12-28

Family

ID=49693904

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310309455.7A Active CN103440213B (zh) 2013-07-23 2013-07-23 一种应用于具有多cpu和网卡的系统的网卡驱动方法

Country Status (1)

Country Link
CN (1) CN103440213B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106201697A (zh) * 2016-07-15 2016-12-07 东软集团股份有限公司 一种中断处理方法、系统及可编程中断控制器
CN106375239A (zh) * 2016-08-25 2017-02-01 北京智芯微电子科技有限公司 一种网络数据接收的处理方法及装置
CN109284192A (zh) * 2018-09-29 2019-01-29 网宿科技股份有限公司 参数配置方法及电子设备
CN110968402A (zh) * 2018-09-28 2020-04-07 深信服科技股份有限公司 一种cpu工作控制方法、装置、设备及存储介质
CN110968403A (zh) * 2018-09-28 2020-04-07 深信服科技股份有限公司 一种cpu工作控制方法、装置、设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101398772A (zh) * 2008-10-21 2009-04-01 成都市华为赛门铁克科技有限公司 一种网络数据的中断处理方法及装置
CN103049336A (zh) * 2013-01-06 2013-04-17 浪潮电子信息产业股份有限公司 一种基于哈希的网卡软中断负载均衡方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101398772A (zh) * 2008-10-21 2009-04-01 成都市华为赛门铁克科技有限公司 一种网络数据的中断处理方法及装置
CN103049336A (zh) * 2013-01-06 2013-04-17 浪潮电子信息产业股份有限公司 一种基于哈希的网卡软中断负载均衡方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
易正利: "基于Linux的千兆网卡驱动程序实现及数据传输效率优化", 《中国优秀硕士学位论文全文数据库 信息科技辑(月刊)2011年第09期 I139-373页》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106201697A (zh) * 2016-07-15 2016-12-07 东软集团股份有限公司 一种中断处理方法、系统及可编程中断控制器
CN106201697B (zh) * 2016-07-15 2020-04-28 东软集团股份有限公司 一种中断处理方法、系统及可编程中断控制器
CN106375239A (zh) * 2016-08-25 2017-02-01 北京智芯微电子科技有限公司 一种网络数据接收的处理方法及装置
WO2018036007A1 (zh) * 2016-08-25 2018-03-01 北京智芯微电子科技有限公司 网络数据接收的处理方法及装置、存储介质
CN106375239B (zh) * 2016-08-25 2019-02-12 北京智芯微电子科技有限公司 一种网络数据接收的处理方法及装置
CN110968402A (zh) * 2018-09-28 2020-04-07 深信服科技股份有限公司 一种cpu工作控制方法、装置、设备及存储介质
CN110968403A (zh) * 2018-09-28 2020-04-07 深信服科技股份有限公司 一种cpu工作控制方法、装置、设备及存储介质
CN109284192A (zh) * 2018-09-29 2019-01-29 网宿科技股份有限公司 参数配置方法及电子设备

Also Published As

Publication number Publication date
CN103440213B (zh) 2016-12-28

Similar Documents

Publication Publication Date Title
CN108628684B (zh) 一种基于dpdk的报文处理方法及计算机设备
CN105577567B (zh) 基于Intel DPDK的网络数据包并行处理方法
US10454850B2 (en) Apparatus and method for buffering data in a switch
US7953915B2 (en) Interrupt dispatching method in multi-core environment and multi-core processor
EP2647163B1 (en) A method and system for improved multi-cell support on a single modem board
US11321256B2 (en) Persistent kernel for graphics processing unit direct memory access network packet processing
CN103440213A (zh) 一种应用于具有多cpu和网卡的系统的网卡驱动方法
US9002970B2 (en) Remote direct memory access socket aggregation
US10909655B2 (en) Direct memory access for graphics processing unit packet processing
RU2008135084A (ru) Микрирование виртуальной машины, которая владеет ресурсом, таким, как аппаратное устройство
US20080086575A1 (en) Network interface techniques
CN103888441A (zh) 一种应用程序与协议栈之间的信息传输方法及处理装置
CN112769905B (zh) 一种基于numa架构的飞腾平台下高性能网卡性能优化方法
CN109983741A (zh) 经由直接存储器访问设备在虚拟机之间传送分组
CN102662910A (zh) 基于嵌入式系统的网络交互体系及网络交互方法
US20140280709A1 (en) Flow director-based low latency networking
US11928529B2 (en) High-throughput BPF map manipulations with uprobes
CN102750245B (zh) 报文接收方法、报文接收模块、装置及系统
CN114363269B (zh) 一种消息传输方法、系统、设备以及介质
CN113157465B (zh) 基于指针链表的消息发送方法及装置
CN101567873A (zh) 一种多任务并行处理方法及系统
CN103916316A (zh) 网络数据包线速捕获方法
CN102098215A (zh) 一种多应用收包的优先级管理方法
CN110868364B (zh) 一种带宽隔离装置及方法
US10284501B2 (en) Technologies for multi-core wireless network data transmission

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant