CN109787777B - 一种网卡模式切换方法、装置、电子设备及存储介质 - Google Patents
一种网卡模式切换方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN109787777B CN109787777B CN201711103396.2A CN201711103396A CN109787777B CN 109787777 B CN109787777 B CN 109787777B CN 201711103396 A CN201711103396 A CN 201711103396A CN 109787777 B CN109787777 B CN 109787777B
- Authority
- CN
- China
- Prior art keywords
- network card
- interrupt
- thread
- mode
- queue
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 90
- 238000004590 computer program Methods 0.000 claims description 12
- 238000004891 communication Methods 0.000 claims description 8
- 238000012544 monitoring process Methods 0.000 claims description 8
- 238000004458 analytical method Methods 0.000 claims description 4
- 239000002699 waste material Substances 0.000 abstract description 17
- 238000012545 processing Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 9
- 230000002093 peripheral effect Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 239000000306 component Substances 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000002618 waking effect Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/02—Details
- H04L12/12—Arrangements for remote connection or disconnection of substations or of equipment thereof
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/40—Bus networks
- H04L12/403—Bus networks with centralised control, e.g. polling
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例提供了一种网卡模式切换方法、装置、电子设备及存储介质,其中,该方法包括:在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符,解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号;指示与工作线程号对应的工作线程,以使工作线程获取与网卡队列号对应的网卡队列中的数据包;统计工作线程对网卡队列中的数据包的无效获取次数,在无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式。通过合理地、及时地切换中断模式和轮询模式,可以充分利用中断和轮询的优势,降低处理器资源浪费,节省能源。
Description
技术领域
本发明涉及网络通信技术领域,特别是涉及一种网卡模式切换方法、装置、电子设备及存储介质。
背景技术
虚拟交换机作为云环境下的核心组件,主要运行在云环境下的计算节点之上,用于连接虚拟机的虚拟网络接口,是一套纯软件实现的负责虚拟机的隔离、链路层和网络层数据包的转发、安全处理等的网络交换机。
传统的虚拟交换机在处理数据包时,主要是通过内核协议栈自身的中断轮询处理方式对数据包进行处理,数据平面的数据包处理均在内核态处理,例如,用于实现虚拟交换机功能的OVS(open virtual switch,开放虚拟交换标准)软件对数据包的处理过程为:将无状态的流表下发到内核态,在内核态找到与该数据包匹配的流表规则时,则转发该数据包,否则,通过套接字通信机制将数据包发送到用户态,在用户态获取到相应流表规则后,重新下发流表规则到内核态,保证之后的数据包交互均在内核态中转发。
然而,由于通用内核态没有对网络数据包的处理过程进行性能优化,使得数据包在通过内核态中转发时效率低下。为了提高网络数据包的转发效率,现有技术提供了一种高性能的DPDK(Data Plane Development Kit,数据平面开发套件)软件,它大量利用了有助于数据包转发效率的软硬件特性,如大页、缓存行对齐、线程绑定、Intel的DDIO(DataDirect Input/Output,数据直接输入/输出)技术等,通过将DPDK软件应用到虚拟交换机中,可以利用DPDK软件的PMD(Poll Mode Driver,轮询模式驱动程序)技术,使得数据包完全在用户态进行转发,加速物理网卡和虚拟网卡对数据包的处理速度,能够大幅度提升虚拟交换机转发性能。
其中,DPDK软件采用的是轮询的方法,即,处理器一直在高速轮询物理网卡对应的网卡队列和虚拟网卡对应的网卡队列,集中了处理器的所有运算资源用于处理数据包的转发。在实际网络应用中,可能存在潮汐效应,在一些时间段内,网卡队列中数据包的数量会很低,甚至完全没有需要处理的数据包,但在这些时间段内,处理器也在高速轮询物理网卡对应的网卡队列和虚拟网卡对应的网卡队列,明显浪费了处理器资源。
发明内容
本发明实施例的目的在于提供一种网卡模式切换方法、装置、电子设备及存储介质,以实现合理切换中断和轮询,降低处理器资源浪费。具体技术方案如下:
第一方面,本发明实施例提供了一种网卡模式切换方法,应用于虚拟交换机,该方法包括:
在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符;
解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号;
指示与工作线程号对应的工作线程,以使工作线程获取与网卡队列号对应的网卡队列中的数据包;
统计工作线程对网卡队列中的数据包的无效获取次数,其中,无效获取次数表示工作线程未获取到网卡队列中数据包的次数;
在无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式。
可选的,在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符之前,本发明实施例的一种网卡模式切换方法,还包括:
开启网卡中断模式;
绑定内核态中断描述符与用户态中断描述符,并将用户态中断描述符添加到网卡中断集合。
可选的,在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符之前,本发明实施例的一种网卡模式切换方法,还包括:
在监测网卡接收到数据包时,切换网卡的中断模式为轮询模式。
可选的,可读用户态中断描述符包括网卡号。
可选的,虚拟交换机中还保存有工作线程标记位数组,在解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号之后,本发明实施例的一种网卡模式切换方法,还包括:
对工作线程标记位数组中,与网卡队列号对应的标记位进行置位;
可选的,指示与工作线程号对应的工作线程,以使工作线程获取与网卡队列号对应的网卡队列中的数据包,包括:
指示与工作线程号对应的工作线程,以使工作线程轮询工作线程标记位数组;
获取工作线程标记位数组中,与置位的标记位对应的网卡队列号;
获取与网卡队列号对应的网卡队列中的数据包。
可选的,统计工作线程对网卡队列中的数据包的无效获取次数,包括:
统计工作线程对网卡队列中的数据包的连续无效获取次数;
可选的,在无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式,包括:
在连续无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式。
可选的,在无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式之后,本发明实施例的一种网卡模式切换方法,还包括:
对工作线程标记位数组中,与网卡队列对应的标记位进行复位。
可选的,在对工作线程标记位数组中,与网卡队列对应的标记位进行复位之后,本发明实施例的一种网卡模式切换方法,还包括:
在对工作线程标记位数组中的所有标记位进行复位后,设置工作线程的状态为休眠状态。
可选的,虚拟交换机还包括中断线程,指示与工作线程号对应的工作线程,以使工作线程轮询工作线程标记位数组,包括:
通过中断线程指示与工作线程号对应的工作线程,以使工作线程轮询工作线程标记位数组。
第二方面,本发明实施例还提供了一种网卡模式切换装置,应用于虚拟交换机,该装置包括:
中断描述符获取模块,用于在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符;
解析模块,用于解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号;
指示模块,用于指示与工作线程号对应的工作线程,以使工作线程获取与网卡队列号对应的网卡队列中的数据包;
统计模块,用于统计工作线程对网卡队列中的数据包的无效获取次数,其中,无效获取次数表示工作线程未获取到网卡队列中数据包的次数;
模式切换模块,用于在无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式。
可选的,本发明实施例的一种网卡模式切换装置,还包括:
中断模式开启模块,用于开启网卡中断模式;
中断描述符添加模块,用于绑定内核态中断描述符与用户态中断描述符,并将用户态中断描述符添加到网卡中断集合。
可选的,本发明实施例的一种网卡模式切换装置,还包括:
轮询模式开启模块,用于在监测网卡接收到数据包时,切换网卡的中断模式为轮询模式。
可选的,可读用户态中断描述符包括网卡号。
可选的,虚拟交换机中还保存有工作线程标记位数组,本发明实施例的一种网卡模式切换装置,还包括:
标记位置位模块,用于对工作线程标记位数组中,与网卡队列号对应的标记位进行置位;
相应的,指示模块,包括:
指示子模块,用于指示与工作线程号对应的工作线程,以使工作线程轮询工作线程标记位数组;
网卡队列号获取子模块,用于获取工作线程标记位数组中,与置位的标记位对应的网卡队列号;
数据包获取子模块,用于获取与网卡队列号对应的网卡队列中的数据包。
可选的,统计模块,具体用于:
统计工作线程对网卡队列中的数据包的连续无效获取次数;
相应的,模式切换模块,具体用于:
在连续无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式。
可选的,本发明实施例的一种网卡模式切换装置,还包括:
标记位复位模块,用于对工作线程标记位数组中,与网卡队列对应的标记位进行复位。
可选的,本发明实施例的一种网卡模式切换装置,还包括:
休眠状态设置模块,用于在对工作线程标记位数组中的所有标记位进行复位后,设置工作线程的状态为休眠状态。
可选的,虚拟交换机还包括中断线程,指示子模块,具体用于:
通过中断线程指示与工作线程号对应的工作线程,以使工作线程轮询工作线程标记位数组。
第三方面,本发明实施例还提供了一种电子设备,其特征在于,包括处理器和机器可读存储介质,机器可读存储介质存储有能够被处理器执行的机器可执行指令,处理器被机器可执行指令促使:实现上述第一方面提供的一种网卡模式切换方法的步骤。
第四方面,本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质内存储有计算机程序,计算机程序被处理器执行时,实现上述第一方面提供的一种网卡模式切换方法的步骤。
第五方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面提供的一种网卡模式切换方法。
第六方面,本发明实施例还提供了一种计算机程序,当其在计算机上运行时,使得计算机执行上述第一方面提供的一种网卡模式切换方法。
本发明实施例提供的一种网卡模式切换方法、装置、电子设备及存储介质,首先开启网卡轮询模式,在网卡中断集合中有可读用户态中断描述符时,解析该可读用户态中断描述符,得到与该可读用户态中断描述符对应的工作线程号和网卡队列号,然后指示该工作线程,获取与网卡队列号对应的网卡队列中的数据包,并统计工作线程对网卡队列中的数据包的无效获取次数,在无效获取次数大于预设无效获取次数阈值时,切换网卡的轮询模式为中断模式。通过合理地、及时地切换中断模式和轮询模式,可以充分利用中断和轮询的优势,降低处理器资源浪费。当然,实施本发明的任一产品或方法必不一定需要同时达到上述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例的一种网卡模式切换方法应用于计算机的系统结构示意图;
图2为本发明实施例的一种网卡模式切换方法的第一种实施方式的流程图;
图3为本发明实施例的一种网卡模式切换方法的第二种实施方式的流程图;
图4为本发明实施例的一种网卡模式切换方法的第三种实施方式的流程图;
图5为本发明实施例的一种网卡模式切换方法的第四种实施方式的流程图;
图6为本发明实施例的一种网卡模式切换装置的结构示意图;
图7为本发明实施例的一种网卡模式切换方法应用于电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先,对本发明实施例提供的一种网卡模式切换方法、装置、电子设备及存储介质中的名词的概念进行说明:
中断,指处理器在正常运行程序的过程中,由于预先安排或发生了各种随机的内部或外部事件,使处理器中断正在运行的程序,保留中断点后自动转到为相应的程序去服务,服务完成后回到保留的中断点处,继续执行被打断的程序,如果有必要,被中断的程序可以再以后的任一时间恢复,并继续执行。
轮询,一种处理器决策如何提供周边设备服务的方式,由处理器定时发出询问,依序询问每一个周边设备是否需要服务,如果一个周边设备需要服务,则处理器给予该周边设备相应的服务,服务结束后再询问下一个周边设备;如果该周边设备不需要服务,则询问下一个周边设备。
线程,程序运行时的一个执行流,是由处理器运行程序代码并操作数据所形成的。
网卡,计算机与外界局域网的连接,是插装在计算机上的一块网络接口板,网络接口板又称为通信适配器、网络适配器或网络接口卡,简称网卡。
为了解决现有技术存在的问题,本发明实施例提供了一种网卡模式切换方法、装置、电子设备及存储介质,通过及时切换中断模式和轮询模式,可以充分利用中断和轮询的优势,以实现合理切换中断和轮询,降低处理器资源浪费。
本发明实施例的一种网卡模式切换方法、装置、电子设备及存储介质可以应用于计算机,该计算机可以包括服务器。如图1所示,为本发明实施例的一种网卡模式切换方法应用于计算机的系统结构示意图,在该计算机中,可以包括虚拟交换机101、第一虚拟机的第一虚拟网卡102、第二虚拟机的第二虚拟网卡103和计算机的物理网卡104。其中,虚拟交换机101可以是应用本发明实施例的一种网卡模式切换方法的装置。
虚拟交换机101可以分别发送数据包给第一虚拟网卡102、第二虚拟网卡103和物理网卡104。虚拟交换机101还可以分别接收第一虚拟网卡102发送的用户态中断描述符、第二虚拟网卡103发送的用户态中断描述符和物理网卡104发送的用户态中断描述符。
在应用本发明实施例的一种网卡模式切换方法时,可以首先开启网卡轮询模式,查看网卡中断集合中的用户态中断描述符是否有可读用户态中断描述符,在网卡中断集合中有可读用户态中断描述符时,解析该可读用户态中断描述符,可以得到与该可读用户态中断描述符对应的工作线程号和网卡队列号,其中,该网卡可以包括第一虚拟网卡102、第二虚拟网卡103以及物理网卡104中的一个或多个。
然后可以指示与工作线程号对应的工作线程,以使工作线程获取与网卡队列号对应的网卡队列中的数据包。在该工作线程获取与网卡队列号对应的网卡队列中的数据包时,可以统计该工作线程对网卡队列中的数据包的无效获取次数。在该无效获取次数大于预设无效获取次数阈值时,可以切换网卡的轮询模式为中断模式。通过将本发明实施例的一种网卡模式切换方法应用于虚拟交换机,可以首先获取网卡中断集合中的可读用户态中断描述符,并对该可读用户态中断描述符进行解析,得到对应的工作线程号和网卡队列号,然后可以指示与该工作线程号对应的工作线程从对应的网卡队列中获取数据包,在从该网卡队列中获取数据包时,可以统计该网卡队列中数据包的无效获取次数,在该无效获取次数大于预设无效获取次数阈值时,则说明该网卡队列中没有数据包,则可以及时将与该网卡队列对应的网卡的轮询模式切换为中断模式,实现合理切换网卡的中断模式和轮询模式,使得处理器不再继续轮询该网卡,进而避免现有技术中处理器一直轮询网卡队列而造成的资源浪费的情况,进一步降低处理器的资源浪费。
下面,对本发明实施例的一种网卡模式切换方法进行介绍,如图2所示,为本发明实施例的一种网卡模式切换方法的第一种实施方式的流程图,该方法可以包括:
S201,在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符。
其中,该网卡可以包括虚拟网卡和物理网卡,该虚拟网卡为通过应用程序模拟物理网卡得到的虚拟设备,物理网卡为在计算机中真实存在的硬件设备。
在一些示例中,当应用本发明实施例的一种网卡模式切换方法的虚拟交换机在启动阶段时,可以通过网卡驱动程序开启网卡轮询模式,即,在将网卡驱动程序加载到网卡时,将该网卡的模式设置为轮询模式。
在一些示例中,可以对网卡设置中断模式和轮询模式。当应用本发明实施例的一种网卡模式切换方法的虚拟交换机为正常运行阶段时,可以通过关闭网卡的中断模式,实现开启轮询模式。
例如,在图1所示的虚拟交换机的启动阶段,可以通过网卡驱动程序分别开启第一虚拟网卡102、第二虚拟网卡103和物理网卡104的轮询模式。
又例如,在图1所示的虚拟交换机在正常运行阶段时,可以关闭第一虚拟网卡102的中断模式,实现开启第一虚拟网卡102的轮询模式,或者,关闭物理网卡104的中断模式,实现开启物理网卡104的轮询模式。
通过开启网卡轮询模式,网卡可以在接收到数据包后,将数据包存储在与该网卡对应的网卡队列中,还可以通过内核处理程序,将与该网卡对应的用户态中断描述符的状态设置为可读状态。
具体的,在将数据包存储在与该网卡对应的网卡队列中后,可以记录该网卡队列的网卡队列号,并将该网卡的网卡号、存储数据包的网卡队列的网卡队列号添加至用户态中断描述符中。
例如,图1所示的第一虚拟网卡102在开启网卡轮询模式后,接收到数据包,则可以将该数据包存储在与第一虚拟网卡102对应的网卡队列中,并记录与第一虚拟网卡102对应的网卡队列的网卡队列号,假设,第一虚拟网卡的网卡号为102,与第一虚拟网卡102对应的网卡队列的网卡队列号为201。可以将网卡号102和网卡队列号201,添加至用户态中断描述符中。然后,可以将添加有网卡号102和网卡队列号201的用户态中断描述符的状态设置为可读状态。
通过将用户态中断描述符的状态设置为可读状态,可以在后续步骤中,获取该可读状态的用户态中断描述符中的网卡号和网卡队列号。
在一些示例中,为了方便管理用户态中断描述符,可以设置网卡中断集合,在获取可读用户态中断描述符时,可以在该网卡中断集合中获取可读用户态中断描述符。
在一些示例中,当网卡接收到数据包后,可以发送一条指令给处理器,处理器可以在接收到网卡发送的指令后,获取网卡中断集合中的可读用户态中断描述符。
在一些示例中,处理器还可以周期性的询问网卡中断集合,查看该网卡中断集合中是否有可读用户态中断描述符。
具体的,可以对每个网卡设置对应的用户态中断描述符。在本步骤中,可以遍历网卡中断集合,获取可读用户态中断描述符,也可以查看网卡中断集合中每个用户态中断描述符的状态,在用户态中断描述符的状态为可读状态时,获取该可读状态的用户态中断描述符。
例如,可以对图1所示的第一虚拟网卡102设置第一用户态中断描述符,对第二虚拟网卡103设置第二用户态中断描述符,为物理网卡104设置第三用户态中断描述符。
在将添加有网卡号102和网卡队列号201的用户态中断描述符的状态设置为可读状态后,可以从网卡中断集合中获取到该用户态中断描述符,即第一用户态中断描述符。
S202,解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号。
在一些示例中,可以预先对每个网卡设置对应的工作线程,因此,每个网卡对应的网卡号也具有对应的工作线程号。在步骤S201中,将网卡号添加至用户态中断描述符时,也可以将该网卡号对应的工作线程号添加至用户态中断描述符中。
在一些示例中,在通过上述步骤S201获取到可读用户态中断描述符后,可以对该可读用户态中断描述符进行解析,以获取该可读用户态中断描述符中添加的网卡队列号。
具体的,在对可读用户态中断描述符进行解析时,可以通过对应的应用程序可读用户态中断描述符进行解析。
在一些示例中,用户态中断描述符,还可以包括网卡号。例如,该用户态中断描述符可以为N位整数,该N位整数包括第一部分整数、第二部分整数、第三部分整数,第一部分整数表示工作线程号,第二部分整数表示网卡队列号,第三部分整数表示网卡号。其中,该N为整数可以是二进制数。
在对可读用户态中断描述符进行解析时,可以获取第一部分整数,得到工作线程号,获取第二部分整数,得到网卡队列号,获取第三部分整数,得到网卡号。
假设,与第一虚拟网卡102对应的用户态中断描述符为二进制32位整数,例如,该32整数为“00000000000100010110011011001001”,按照从左向右的顺序,前16位为第一部分,即,32位整数中的“0000000000010001”为第一部分整数,表示与该第一虚拟网卡102对应的工作线程号,转换为十进制数为“17”,则与该第一虚拟网卡102对应的工作线程号为“17”。
后16位中的前8位为第二部分,即,32位整数中的“01100110”为第二部分,表示该第一虚拟网卡102的网卡号,转换为十进制数为“102”,则该第一虚拟网卡102的网卡号为“102”。
后16位中的后8位为第三部分,即,32为整数中的“11001001”为第三部分,表示与该第一虚拟网卡102对应的网卡队列号,转换为十进制数为“201”,则与该第一虚拟网卡102对应的网卡队列号为“201”。
在一些示例中,还可以在N位整数中的特定位置设置标示值,对N位整数进行划分。例如,与第一虚拟网卡102对应的用户态中断描述符为二进制32位整数,该整数为“01000001000110011001101111001001”,按照从左向右的顺序,可以以第一位至第二位数表示工作线程,即,第一位至第二位为“01”,转换为十进制数为“1”,则可以表示工作线程,以第十三位至第十四位数表示网卡,即,第十三位至第十四位数为“10”,转换为十进制数为“2”,则可以表示工作线程,以第二十三位至第二十四位数表示网卡队列,即第二十三位至第二十四位数为“11”,转换为十进制数为“3”,则可以表示网卡队列。
具体的,第三位至第十二位数可以表示工作线程号,第十五位至第二十二位数可以表示网卡号,第二十五位至第三十二位数可以表示网卡队列号。
S203,指示与工作线程号对应的工作线程,以使工作线程获取与网卡队列号对应的网卡队列中的数据包。
在一些示例中,一个工作线程可以获取至少一个网卡队列中的数据包。例如,工作线程1,可以获取图1所示的第一虚拟网卡102对应的网卡队列中的数据包,还可以获取第二虚拟网卡103对应的网卡队列中的数据包,工作线程2可以获取图1所示的物理网卡104对应的网卡队列中的数据包。
具体的,在通过上述步骤得到工作线程号后,可以通过该工作线程号查找到对应的工作线程。然后可以发送指示指令给该工作线程,指示该工作线程从网卡队列中获取数据包。
例如,可以给工作线程1发送指示指令,指示工作线程1分别从第一虚拟网卡102对应的网卡队列、和第二虚拟网卡103对应的网卡队列中获取数据包。假设,第二虚拟网卡103对应的网卡队列中存储有数据包,第一虚拟网卡102对应的网卡队列中未存储数据包,则工作线程1可以从第二虚拟网卡103对应网卡队列中获取数据包。
S204,统计工作线程对网卡队列中的数据包的无效获取次数。
其中,无效获取次数表示工作线程未获取到网卡队列中数据包的次数。
在上述示例中,一个工作线程可以获取至少一个网卡队列中的数据包,因此,一个工作线程可以对应至少一个网卡队列。在一个工作线程对应的多个网卡队列中,可以存在未存储数据包的网卡队列。
当一个工作线程对应的多个网卡队列中存在未存储数据包的网卡队列时,若采用现有技术,则工作线程会一直轮询该未存储数据包的网卡队列,但是并不能获取到数据包。例如,与工作线程1对应的多个网卡队列可以是:第一虚拟网卡102对应的网卡队列、和第二虚拟网卡103对应的网卡队列。假设第一虚拟网卡102对应的网卡队列中未存储数据包。若采用现有技术,工作线程会一直轮询该第一虚拟网卡102对应的网卡队列。从而造成处理器资源的浪费。
因此,为了解决上述问题,可以在工作线程从该未存储数据包的网卡队列中未获取到数据包时,对未获取到数据包的次数进行统计,得到工作线程对网卡队列中的数据包的无效获取次数。
例如,可以统计工作线程1,对第一虚拟网卡102对应的网卡队列中的数据包的无效获取次数,和对第二虚拟网卡103对应的网卡队列中的数据包的无效获取次数。
在一些示例中,工作线程1可以首先获取第一虚拟网卡102对应的网卡队列中的数据包,然后获取第二虚拟网卡103对应的网卡队列中的数据包,再获取第一虚拟网卡102对应的网卡队列中的数据包,依次循环。
通过本步骤,工作线程对网卡队列中的数据包的无效获取次数进行统计,可以为将网卡的轮询模式切换为中断模式提供依据。
S205,在无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式。
在一些示例中,该预设无效获取次数阈值可以根据经验预先设置,还可以根据处理器利用率、网卡利用率以及数据包转发率进行设置,其中,处理器利用率和网卡利用率可以利用应用程序获取。
其中,数据包转发率是指交换机每秒能同时转发的数据包的数量,单位一般为pps(包每秒),标志交换机转发数据包能力的大小。一般交换机的包转发率在几十Kpps到几百Mpps不等。
具体的,可以发送处理器利用率获取指令至处理器,以获取处理器利用率,发送网卡利用率获取指令至网卡,以获取网卡利用率。
在一些示例中,该预设无效获取次数阈值,还可以根据处理器利用率、网卡利用率以及数据包转发率进行调整。
在通过上述步骤统计工作线程对网卡队列中的数据包的无效获取次数后,在本步骤中,可以根据该无效获取次数判断是否需要将与网卡队列对应的网卡的轮询模式切换为中断模式。
具体的,当工作线程对网卡队列中的数据包的无效获取次数,大于预设无效获取次数阈值时,可以切换与该网卡队列对应的网卡的轮询模式为中断模式。
通过将该网卡的轮询模式切换为中断模式,工作线程在轮询对应的网卡队列时,可以不询问与该切换为中断模式的网卡对应的网卡队列,从而可以减少工作线程轮询的网卡队列的数量,降低处理器资源的浪费,还可以达到减少能量消耗,节省能源的目的。
假设,第一虚拟网卡102对应的网卡队列的网卡队列号为201,通过步骤S204统计,工作线程1对网卡队列号201对应的网卡队列中的数据包的无效获取次数为120次,预设无效获取次数阈值为100次。通过本步骤判断,由于无效获取次数大于预设无效获取次数阈值,可以将第一虚拟网卡102的轮询模式切换为中断模式。
在一些示例中,当将与网卡队列对应的网卡的轮询模式切换为中断模式后,可以对统计的无效获取次数清零,可以使得该网卡在由中断模式切换为轮询模式后,可以重新进行统计。
通过发明实施例提供的一种网卡模式切换方法,首先开启网卡轮询模式,在网卡中断集合中有可读用户态中断描述符时,解析该可读用户态中断描述符,得到与该可读用户态中断描述符对应的工作线程号和网卡队列号,然后指示该工作线程获取与网卡队列号对应的网卡队列中的数据包,并统计工作线程对网卡队列中的数据包的无效获取次数,在无效获取次数大于预设无效获取次数阈值时,切换网卡的轮询模式为中断模式。通过合理地、及时地切换中断模式和轮询模式,可以充分利用中断和轮询的优势,降低处理器资源浪费。
在本发明实施例的一种可能的实现方式中,当虚拟交换机首次应用本发明实施例提供的一种网卡模式切换方法,或当虚拟交换机重新启动后,可以对应用本发明实施例的一种网卡模式切换方法的虚拟交换机进行初始化。如图3所示,为本发明实施例的一种网卡模式切换方法的第二种实施方式的流程图,在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符之前,本发明实施例的一种网卡模式切换方法,还可以包括:
S301,开启网卡中断模式。
其中,该网卡可以包括虚拟网卡和物理网卡,该虚拟网卡为通过应用程序模拟物理网卡得到的网卡,物理网卡为在计算机中真实存在的硬件设备。
在一些示例中,可以通过网卡驱动程序开启网卡中断模式,即,在将网卡驱动程序加载到网卡时,将该网卡的模式设置为中断模式。例如,通过网卡驱动程序,开启第一虚拟网卡102和第二虚拟网卡103的中断模式。
在一些示例中,在开启物理网卡的中断模式时,可以通过读写物理网卡寄存器开启中断模式,例如,可以通过读写图1所示的物理网卡104的网卡寄存器,开启该物理网卡104的中断模式。
S302,绑定内核态中断描述符与用户态中断描述符,并将用户态中断描述符添加到网卡中断集合。
在现有技术中,外部设备请求处理器处理数据包时,首先向内存中写入中断号,然后将中断请求发送至处理器,处理器接收到该中断请求后,从内存中读取中断号,再根据该中断号查询内核态中断描述符,得到与该中断号对应的中断向量,最后根据该中断向量,调用对应的中断处理程序进行处理,其中,该外部设备是指除处理器外的设备,例如,网卡、硬盘存储器、移动存储器等硬件设备。
为了提高虚拟交换机处理数据包的速度,减少虚拟交换机调用内核态应用程序的次数,可以将内核态中断描述符与用户态中断描述符进行绑定。
通过本步骤,处理器在接收到中断请求后,可以直接从用户态中断描述符中获取工作线程号、网卡队列号。然后调用与工作线程号对应的工作线程,对于网卡队列号对应的网卡队列中的数据包进行处理。
在一些示例中,在开启网卡中断模式,网卡接收到数据包后,网卡会产生内核态中断描述符,通过本步骤,当网卡产生内核态中断描述符后,可以通过内核中断处理程序对用户态中断描述符进行设置,例如,通过内核中断处理程序将用户态中断描述符的状态设置为不可读状态。
在一些示例中,通过将内核态中断描述符与用户态中断描述符进行绑定,当网卡产生内核态中断描述符后,可以不发送内核态中断描述符对应的中断号至处理器。可以减少处理器调用中断处理程序的次数,减少处理器的中断次数。
具体的,在绑定内核态中断描述符与用户态中断描述符时,可以将一个网卡的所有内核态中断描述符与该网卡的用户态中断描述符进行绑定。例如,可以将图1所示的物理网卡104的所有内核态中断描述符,与物理网卡104的用户态中断描述符进行绑定。
在一些示例中,可以通过VFIO(Virtual Function I/O,虚拟功能I/O)或者UIO(Userspace I/O,用户空间I/O),将内核态的中断处理程序与用户态的中断描述符进行绑定,以实现将内核态中断描述符与用户态中断描述符进行绑定。
在本发明实施例的一个方面,为了方便对用户态中断描述符的管理,可以将用户态中断描述符添加至网卡中断集合。
具体的,将用户态中断描述符添加至网卡中断集合时,可以以列表的形式将用户态中断描述符存储在网卡中断集合中。
在本发明实施例的又一个方面,在对应用本发明实施例的一种网卡模式切换方法的虚拟交换机进行初始化时,可以设置虚拟网卡的网卡队列数量和物理网卡的网卡队列数量,还可以获取网卡特性信息,其中,该网卡特性信息表示网卡支持的功能类型,例如,TSO(TCP Segment Offload)功能,或者GSO(Generic Segmentation Offload,通用分片延后处理)功能。
在一些示例中,还可以映射虚拟机内存信息。具体的,将虚拟机的物理地址空间映射到用户空间。
在一些示例中,还可以共享队列环地址。具体的,在本发明实施例的一种网卡模式切换方法中,网卡队列可以采用环形队列。通过共享队列环地址,虚拟交换机可以得到虚拟网卡的网卡队列的地址,工作线程可以通过该网卡队列的地址查找到该网卡队列,从而获取存储在该网卡队列中的数据包。
通过上述步骤,可以实现对虚拟交换机、虚拟网卡以及物理网卡的初始化。
在一些示例中,物理网卡的初始化可以在虚拟交换机启动后立刻进行,虚拟网卡的初始化可以在虚拟交换机启动后的任一时间进行。
在本发明实施例的一种可能的实现方式中,在对应用本发明实施例的一种网卡模式切换方法的虚拟交换机进行初始化后,可以应用监测程序对网卡进行监测。当网卡接收到数据包时,监测程序可以监测到该网卡接收到数据包。
在一些示例中,该监测程序可以是Linux系统中的epoll机制,该机制可以监测所有用户态中断描述符的可读可写状态,在用户态中断描述符的状态为可读状态时,应用本发明实施例的一种网卡模式切换方法的虚拟交换机,可以通过本发明实施例的第一种实施方式获取到该用户态中断描述符中的工作线程号,然后,指示与该工作线程号对应的工作线程,对网卡队列中的数据包进行转发。
S303,在监测到网卡接收到数据包时,切换该网卡的中断模式为轮询模式。
在本发明实施例的一种可能的实现方式中,在通过上述步骤开启网卡中断模式后,当网卡接收到数据包时,可以产生中断向量,监测程序可以通过监测是否产生中断向量判断该网卡是否接收到数据包。在监测程序监测到该网卡接收到数据包时,可以通过切换网卡的中断模式为轮询模式,实现开启网卡轮询模式。
在一些示例中,在切换网卡的中断模式为轮询模式时,可以首先关闭网卡的中断模式,再开启网卡轮询模式。
通过本步骤,可以实现在网卡接收到数据包后,虚拟交换机及时对该网卡对应的网卡队列中存储的数据包进行处理。提高虚拟交换机对数据包的处理速度。
在本发明实施例的又一种可能的实现方式中,为了在保证虚拟交换机处理数据包的速度的前提下,减少工作线程对网卡队列的轮询,降低工作线程对处理器资源的占用,本发明实施例还提供了一种网卡模式切换方法,如图4所示,为本发明实施例的一种网卡模式切换方法的第三种实施方式的流程图,在解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号之后,本发明实施例的一种网卡模式切换方法,还可以包括:
S403,对工作线程标记位数组中,与网卡队列号对应的标记位进行置位。
在一些示例中,应用本发明实施例的一种网卡模式切换方法的虚拟交换机,还可以保存有工作线程标记位数组。如表1所示,为工作线程标记位数组示意表,一个工作线程可以对应一个工作线程标记位数组,在该表中,可以包括:标记位、网卡队列号、网卡号。
假设,第一虚拟网卡102的网卡号为102,第二虚拟网卡103的网卡号为103,物理网卡的网卡号为104,在表1中,网卡号102对应的网卡队列号分别为201和202,网卡号103对应的网卡队列号分别为301和302,网卡号104对应的网卡队列号分别为401和402。每个网卡队列号分别对应一个标记位。例如,网卡队列号202对应的标记位为1,可以表示与网卡队列号202对应的网卡队列中存储有数据包,网卡队列号301对应的标记位为0,可以表示与网卡队列号301对应的网卡队列中未存储数据包。
表1工作线程标记位数组示意表
在一些示例中,在解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号之后,可以根据工作线程号查找到对应的工作线程,可以根据网卡队列号查找到该工作线程的工作线程标记位数组中,与网卡队列号对应的标记位,然后可以对该标记位进行置位。
假设,解析得到的工作线程号为工作线程1,网卡队列号为202,然后可以查找到与工作线程1对应的工作线程标记位数组,如表1所示,再根据网卡队列号202查找到与网卡队列号202对应的标记位,然后将与网卡队列号202对应的标记位置位为1。将与网卡队列号202对应的标记位置位为1,可以表示与网卡队列号202对应的网卡队列中存储有数据包。
在一些示例中,上述的工作线程标记位数组可以是表1中的第一行内容,与各标记位对应的网卡队列号和网卡号可以通过应用程序进行设定,例如,标记位第一位表示网卡队列号201对应的网卡队列的标记位,第三位表示网卡队列号302对应的网卡队列的标记位。
在一些示例中,可以为每个工作线程设置一个工作线程标记位数组,工作线程在轮询工作线程标记位数组时,可以轮询对应的工作线程标记位数组,能够避免多线程竞争。
在一些示例中,该工作线程标记位数组可以是一个数组,该数组的最大容量可以等于总网卡数与每个网卡的网卡队列数的乘积。在置位工作线程标记位数组中的标记位时,可以通过网卡号与网卡队列号的乘积得到该标记位,然后对该标记位进行置位。
S404,指示与工作线程号对应的工作线程,以使工作线程轮询工作线程标记位数组。
在一些示例中,为了减少工作线程对网卡队列的轮询,降低工作线程对处理器资源的占用,在指示与工作线程号对应的工作线程,以使工作线程获取与网卡队列号对应的网卡队列中的数据包时,可以指示工作线程首先轮询工作线程标记位数组。在工作线程标记位数组中有置位的标记位时,从与该标记位对应的网卡队列中获取数据包。
具体的,可以发送指示指令给与工作线程号对应的工作线程,该工作线程接收到指示指令后,可以轮询与该工作线程对应的工作线程标记位数组。查看该工作线程标记位数组中置位的标记位。
在一些示例中,工作线程轮询工作线程标记位数组的频率可以预先设定,例如,可以预先设定工作线程每秒钟轮询工作线程标记位数组100次。
在一些示例中,虚拟交换机还可以包括中断线程。在指示与工作线程号对应的工作线程,以使工作线程轮询工作线程标记位数组时,可以通过中断线程指示与工作线程号对应的工作线程,以使工作线程轮询工作线程标记位数组。
S405,获取工作线程标记位数组中,与置位的标记位对应的网卡队列号。
在一些示例中,在通过上述步骤对工作线程标记位数组进行轮询时,当工作线程标记位数组中存在置位的标记位时,可以获取该工作线程标记位数组中,与置位的标记位对应的网卡队列号,以方便后续步骤获取与该网卡队列号对应的网卡队列中的数据包。
具体的,可以轮询工作线程标记位数组,得到工作线程标记位数组中置位的标记位,例如,表1所示的工作线程标记位数组中置位的标记位分别为:第二位、第四位和第五位。然后可以通过查询表1,得到与标记位第二位对应的网卡队列号为202,与标记位第四位对应的网卡队列号为302,与标记位第五位对应的网卡队列号为401。
S406,获取与网卡队列号对应的网卡队列中的数据包。
具体的,在通过上述步骤,得到与置位的标记位对应的网卡队列号后,在本步骤中,可以通过网卡队列号查找到与该网卡队列号对应的网卡队列,然后可以从与网卡队列号对应的网卡队列中获取数据包。
例如,通过上述步骤得到,与标记位第四位对应的网卡队列号为302,在本步骤中,可以从与网卡队列号302对应的网卡队列中获取数据包。
在本发明实施例中,对工作线程标记位数组中的标记位进行置位,可以表示与该标记位对应的网卡队列中存储有数据包。在本发明实施例的一种可能的实现方式中,当通过上述步骤获取网卡队列中的数据包时,从该网卡队列中未获取到数据包时,可以统计工作线程对网卡队列中的数据包的无效获取次数。然后可以以该无效获取次数是否大于预设无效获取次数阈值,判断是否可以将网卡的轮询模式切换为中断模式。
S407,统计工作线程对网卡队列中的数据包的连续无效获取次数。
在一些示例中,在统计工作线程对网卡队列中的数据包的无效获取次数时,为了提高统计的准确度,可以统计工作线程对网卡队列中的数据包的连续无效获取次数。
其中,该连续无效获取次数为工作线程连续未获取到网卡队列中数据包的次数。例如,工作线程1在第3次获取网卡队列202中的数据包时,未获取到数据包,然后分别在第4次至109次获取网卡队列202中的数据包时,均未获取到数据包,则,表示工作线程1对网卡队列202的连续无效获取次数为107次。
相应的,在无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式,可以包括:
S408,在连续无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式。
在一些示例中,当连续无效获取次数大于预设无效获取次数阈值时,可以表示在与该连续无效获取次数对应的时间内,网卡队列未存储数据包,也可以表示,在与该连续无效获取次数对应的时间内,与网卡队列对应的网卡未接收到数据包。
因此,为了降低处理器资源的浪费,减少工作线程轮询的网卡队列的数量,可以将该网卡的轮询模式切换为中断模式。工作线程可以轮询,除中断模式的网卡对应的网卡队列之外的网卡队列。
在本发明实施例的又一种可能的实现方式中,在无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式之后,本发明实施例的一种网卡模式切换方法,还可以包括:
S409,对工作线程标记位数组中,与网卡队列对应的标记位进行复位。
在一些示例中,当与网卡队列对应的网卡的轮询模式切换为中断模式后,工作线程在轮询工作线程标记位数组时,可以只从工作线程标记位数组中标记位为置位的网卡队列中获取数据包。
因此,在将与网卡队列对应的网卡的轮询模式为中断模式之后,还可以将工作线程标记位数组中,与网卡队列对应的标记位进行复位。
在一些示例中,将与网卡队列对应的标记位进行复位后,工作线程在轮询工作线程标记位数组中的各标记位后,可以只获取标记位为置位的网卡队列中的数据包,从而可以减少工作线程对处理资源的占用,降低处理器资源的浪费。
例如,工作线程1对网卡队列202的连续无效获取次数为107次,大于预设无效获取次数阈值100,可以通过上述步骤将与该网卡队列202对应的网卡的轮询模式切换为中断模式,还可以对与该网卡队列202对应的标记位进行复位,例如,将与该网卡队列202对应的标记位由“1”设置为“0”。
为了进一步处理器资源的浪费,节省能源,本发明实施例还提供了一种可能的实现方式,当通过上述步骤对工作线程标记位数组中的所有标记位都进行复位后,可以设置与该工作线程标记位数组对应的工作线程的状态为休眠状态。在休眠状态下,该工作线程可以不进行任何操作,从而可以降低处理器资源的浪费。
例如,与工作线程1对应的网卡队列号分别为201、202、301、302、401、402,分别与网卡队列号201、网卡队列号202、网卡队列号301、网卡队列号302、网卡队列号401、网卡队列号402对应的标记位都为“0”,可以表示与工作线程1对应的标记位数组中的所有标记位都进行了复位,这时,可以将工作线程1的状态设置为休眠状态。
在与该工作线程对应的网卡重新接收到数据包时,可以将处于休眠状态的工作线程唤醒,使该工作线程重新处于工作状态。
在一些示例中,在Linux系统中,当与该工作线程对应的网卡重新接收到数据包时,可以向eventfd通知消息中写入数据,当处于休眠状态的工作线程可以从eventfd消息通知读取数据时,由休眠状态变更为工作状态。
在本发明实施例的一种可能的实现方式中,应用本发明实施例的一种网卡模式切换方法的虚拟交换机可以包括中断线程和工作线程。如图5所示,为本发明实施例的一种网卡模式切换方法的第四种实施方式的流程图,该方法可以包括:
中断线程51和工作线程52,其中,工作线程可以是至少一个。
中断线程51,可以用于执行以下步骤:
S510,监测网卡中断消息;
具体的,可以通过监测程序监测网卡的中断消息,在网卡接收到数据包时,可以产生内核态中断描述符,并且,可以设置用户态中断描述符为可读状态。因此,监测程序可以通过监测网卡是否产生内核态中断描述符实现对网卡中断消息的监测。
S511,遍历网卡中断集合,获取可读用户态中断描述符;
S512,解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号;
S513,对工作线程标记位数组中,与网卡队列号对应的标记位进行置位;
S514,向eventfd通知消息中写入数据。
其中,eventfd通知消息为linux系统中的事件通知文件描述符。
工作线程52,可以用于执行以下步骤:
S520,从eventfd通知消息中读数据,唤醒处于休眠状态的工作线程
S521,轮询工作线程标记位数组中各标记位;
S522,标记位是否置位,在所有标记位未置位时,进入休眠状态。
S523,在标记位数组中存在置位的标记位时,获取工作线程标记位数组中、与置位的标记位对应的网卡队列号;
S524,获取与网卡队列号对应的网卡队列中的数据包,查询交换机转发策略进行转发;
S525,重复步骤S523和步骤S524,在从与网卡队列号对应的网卡队列中未获取到数据包时,统计工作线程对网卡队列中的数据包的无效获取次数;
S526,在无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式;
S527,对工作线程标记位数组中,与网卡队列对应的标记位进行复位;
S528,在对工作线程标记位数组中的所有标记位都进行复位后,设置与该工作线程标记位数组对应的工作线程的状态为休眠状态。
通过本发明实施例的一种网卡模式切换方法,可以实现中断线程和工作线程的完全分离,可以实现将本发明实施例的一种网卡模式切换方法,扩展至多个工作线程,提高虚拟交换机的工作效率。还可以及时切换网卡模式,以及及时设置工作线程的状态。在保证高性能的前提下,既可以节省计算资源又可以省电节能。
相应于上述方法实施例,本发明实施例还提供了一种网卡模式切换装置,可以应用于虚拟交换机,如图6所示,为本发明实施例的一种网卡模式切换装置的结构示意图,该装置可以包括:
中断描述符获取模块601,用于在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符;
解析模块602,用于解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号;
指示模块603,用于指示与工作线程号对应的工作线程,以使工作线程获取与网卡队列号对应的网卡队列中的数据包;
统计模块604,用于统计工作线程对网卡队列中的数据包的无效获取次数,其中,无效获取次数表示工作线程未获取到网卡队列中数据包的次数;
模式切换模块605,用于在无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式。
本发明实施例提供的一种网卡模式切换装置,可以首先开启网卡轮询模式,在网卡中断集合中有可读用户态中断描述符时,解析该可读用户态中断描述符,得到与该可读用户态中断描述符对应的工作线程号和网卡队列号,然后指示该工作线程,获取与网卡队列号对应的网卡队列中的数据包,并统计工作线程对网卡队列中的数据包的无效获取次数,在无效获取次数大于预设无效获取次数阈值时,切换网卡的轮询模式为中断模式。通过合理地、及时地切换中断模式和轮询模式,可以充分利用中断和轮询的优势,降低处理器资源浪费。
具体的,本发明实施例的一种网卡模式切换装置,还可以包括:
中断模式开启模块,用于开启网卡中断模式;
中断描述符添加模块,用于绑定内核态中断描述符与用户态中断描述符,并将用户态中断描述符添加到网卡中断集合。
具体的,本发明实施例的一种网卡模式切换装置,还包括:轮询模式开启模块,用于在监测网卡接收到数据包时,切换网卡的中断模式为轮询模式。
具体的,用户态中断描述符还可以包括网卡号。
具体的,虚拟交换机中还保存有工作线程标记位数组,本发明实施例的一种网卡模式切换装置,还可以包括:
标记位置位模块,用于对工作线程标记位数组中,与网卡队列号对应的标记位进行置位;
具体的,指示模块603,包括:
指示子模块,用于指示与工作线程号对应的工作线程,以使工作线程轮询工作线程标记位数组;
网卡队列号获取子模块,用于获取工作线程标记位数组中、与置位的标记位对应的网卡队列号;
数据包获取子模块,用于获取与网卡队列号对应的网卡队列中的数据包。
具体的,统计模块604,具体用于:
统计工作线程对网卡队列中的数据包的连续无效获取次数;
相应的,模式切换模块605,具体用于:
在连续无效获取次数大于预设无效获取次数阈值时,切换与网卡队列对应的网卡的轮询模式为中断模式。
具体的,本发明实施例的一种网卡模式切换装置,还可以包括:
标记位复位模块,用于对工作线程标记位数组中,与网卡队列对应的标记位进行复位。
具体的,本发明实施例的一种网卡模式切换装置,还可以包括:
休眠状态设置模块,用于在对工作线程标记位数组中的所有标记位进行复位后,设置工作线程的状态为休眠状态。
具体的,虚拟交换机还包括中断线程,指示子模块,具体用于:
通过中断线程指示与工作线程号对应的工作线程,以使工作线程轮询工作线程标记位数组。
本发明实施例还提供了一种电子设备,如图7所示,为本发明实施例的一种网卡模式切换方法应用于电子设备的结构示意图,该电子设备可以包括处理器701、机器可读存储介质702。
机器可读存储介质702存储有能够被处理器701执行的机器可执行指令,处理器701被机器可执行指令促使:实现以下步骤:
步骤A,在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符。
步骤B,解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号。
步骤C,指示与工作线程号对应的工作线程,以使工作线程获取与网卡队列号对应的网卡队列中的数据包。
步骤D,统计工作线程对网卡队列中的数据包的无效获取次数,其中,无效获取次数表示工作线程未获取到网卡队列中数据包的次数。
步骤E,在无效获取次数大于预设无效获取次数阈值时,切换网卡的轮询模式为中断模式。
本发明实施例提供的一种网卡模式切换的电子设备,可以首先开启网卡轮询模式,在网卡中断集合中有可读用户态中断描述符时,解析该可读用户态中断描述符,得到与该可读用户态中断描述符对应的工作线程号和网卡队列号,然后指示该工作线程,获取与网卡队列号对应的网卡队列中的数据包,并统计工作线程对网卡队列中的数据包的无效获取次数,在无效获取次数大于预设无效获取次数阈值时,切换网卡的轮询模式为中断模式。通过合理地、及时地切换中断模式和轮询模式,可以充分利用中断和轮询的优势,降低处理器资源浪费。
机器可读存储介质702可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器701可以是通用处理器,包括中央处理器(Central ProcessingUnit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DigitalSignal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,计算机程序被处理器执行时实现以下方法:
步骤A,在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符。
步骤B,解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号。
步骤C,指示与工作线程号对应的工作线程,以使工作线程获取与网卡队列号对应的网卡队列中的数据包。
步骤D,统计工作线程对网卡队列中的数据包的无效获取次数,其中,无效获取次数表示工作线程未获取到网卡队列中数据包的次数。
步骤E,在无效获取次数大于预设无效获取次数阈值时,切换网卡的轮询模式为中断模式。
本发明实施例提供的一种网卡模式切换的存储介质,可以首先开启网卡轮询模式,在网卡中断集合中有可读用户态中断描述符时,解析该可读用户态中断描述符,得到与该可读用户态中断描述符对应的工作线程号和网卡队列号,然后指示该工作线程,获取与网卡队列号对应的网卡队列中的数据包,并统计工作线程对网卡队列中的数据包的无效获取次数,在无效获取次数大于预设无效获取次数阈值时,切换网卡的轮询模式为中断模式。通过合理地、及时地切换中断模式和轮询模式,可以充分利用中断和轮询的优势,降低处理器资源浪费。
本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行以下步骤:
步骤A,在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符。
步骤B,解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号。
步骤C,指示与工作线程号对应的工作线程,以使工作线程获取与网卡队列号对应的网卡队列中的数据包。
步骤D,统计工作线程对网卡队列中的数据包的无效获取次数,其中,无效获取次数表示工作线程未获取到网卡队列中数据包的次数。
步骤E,在无效获取次数大于预设无效获取次数阈值时,切换网卡的轮询模式为中断模式。
本发明实施例还提供了一种计算机程序,当其在计算机上运行时,使得计算机执行以下步骤:
步骤A,在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符。
步骤B,解析可读用户态中断描述符,得到与可读用户态中断描述符对应的工作线程号和网卡队列号。
步骤C,指示与工作线程号对应的工作线程,以使工作线程获取与网卡队列号对应的网卡队列中的数据包。
步骤D,统计工作线程对网卡队列中的数据包的无效获取次数,其中,无效获取次数表示工作线程未获取到网卡队列中数据包的次数。
步骤E,在无效获取次数大于预设无效获取次数阈值时,切换网卡的轮询模式为中断模式。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述的实施例仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (18)
1.一种网卡模式切换方法,其特征在于,所述方法应用于虚拟交换机,包括:
开启网卡中断模式;
绑定内核态中断描述符与用户态中断描述符,并将所述用户态中断描述符添加到所述网卡中断集合;
在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符;
解析所述可读用户态中断描述符,得到与所述可读用户态中断描述符对应的工作线程号和网卡队列号;
指示与所述工作线程号对应的工作线程,以使所述工作线程获取与所述网卡队列号对应的网卡队列中的数据包;
统计所述工作线程对所述网卡队列中的数据包的无效获取次数,其中,所述无效获取次数表示所述工作线程未获取到所述网卡队列中数据包的次数;
在所述无效获取次数大于预设无效获取次数阈值时,切换与所述网卡队列对应的网卡的轮询模式为中断模式。
2.根据权利要求1所述的方法,其特征在于,在所述在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符之前,所述方法还包括:
在监测所述网卡接收到数据包时,切换所述网卡的中断模式为轮询模式。
3.根据权利要求1所述的方法,其特征在于,所述可读用户态中断描述符包括网卡号。
4.根据权利要求1所述的方法,其特征在于,所述虚拟交换机中还保存有工作线程标记位数组,在所述解析所述可读用户态中断描述符,得到与所述可读用户态中断描述符对应的工作线程号和网卡队列号之后,所述方法还包括:
对所述工作线程标记位数组中,与所述网卡队列号对应的标记位进行置位;
相应的,所述指示与所述工作线程号对应的工作线程,以使所述工作线程获取与所述网卡队列号对应的网卡队列中的数据包,包括:
指示与所述工作线程号对应的工作线程,以使所述工作线程轮询所述工作线程标记位数组;
获取工作线程标记位数组中,与置位的标记位对应的网卡队列号;
获取与所述网卡队列号对应的网卡队列中的数据包。
5.根据权利要求1所述的方法,其特征在于,所述统计所述工作线程对所述网卡队列中的数据包的无效获取次数,包括:
统计所述工作线程对所述网卡队列中的数据包的连续无效获取次数;
相应的,所述在所述无效获取次数大于预设无效获取次数阈值时,切换与所述网卡队列对应的网卡的轮询模式为中断模式,包括:
在所述连续无效获取次数大于预设无效获取次数阈值时,切换与所述网卡队列对应的网卡的轮询模式为中断模式。
6.根据权利要求4所述的方法,其特征在于,在所述无效获取次数大于预设无效获取次数阈值时,切换与所述网卡队列对应的网卡的轮询模式为中断模式之后,所述方法还包括:
对所述工作线程标记位数组中,与所述网卡队列对应的标记位进行复位。
7.根据权利要求6所述的方法,其特征在于,在所述对所述工作线程标记位数组中,与所述网卡队列对应的标记位进行复位之后,所述方法还包括:
在对所述工作线程标记位数组中的所有标记位进行复位后,设置所述工作线程的状态为休眠状态。
8.根据权利要求4所述的方法,其特征在于,所述虚拟交换机还包括中断线程,所述指示与所述工作线程号对应的工作线程,以使所述工作线程轮询所述工作线程标记位数组,包括:
通过中断线程指示与所述工作线程号对应的工作线程,以使所述工作线程轮询所述工作线程标记位数组。
9.一种网卡模式切换装置,其特征在于,所述装置应用于虚拟交换机,包括:
中断模式开启模块,用于开启网卡中断模式;
中断描述符添加模块,用于绑定内核态中断描述符与用户态中断描述符,并将所述用户态中断描述符添加到所述网卡中断集合;
中断描述符获取模块,用于在网卡轮询模式中,获取网卡中断集合中的可读用户态中断描述符;
解析模块,用于解析所述可读用户态中断描述符,得到与所述可读用户态中断描述符对应的工作线程号和网卡队列号;
指示模块,用于指示与所述工作线程号对应的工作线程,以使所述工作线程获取与所述网卡队列号对应的网卡队列中的数据包;
统计模块,用于统计所述工作线程对所述网卡队列中的数据包的无效获取次数,其中,所述无效获取次数表示所述工作线程未获取到所述网卡队列中数据包的次数;
模式切换模块,用于在所述无效获取次数大于预设无效获取次数阈值时,切换与所述网卡队列对应的网卡的轮询模式为中断模式。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
轮询模式开启模块,用于在监测所述网卡接收到数据包时,切换所述网卡的中断模式为轮询模式。
11.根据权利要求9所述的装置,其特征在于,所述可读用户态中断描述符包括网卡号。
12.根据权利要求9所述的装置,其特征在于,所述虚拟交换机中还保存有工作线程标记位数组,所述装置还包括:
标记位置位模块,用于对所述工作线程标记位数组中,与所述网卡队列号对应的标记位进行置位;
相应的,所述指示模块,包括:
指示子模块,用于指示与所述工作线程号对应的工作线程,以使所述工作线程轮询所述工作线程标记位数组;
网卡队列号获取子模块,用于获取工作线程标记位数组中,与置位的标记位对应的网卡队列号;
数据包获取子模块,用于获取与所述网卡队列号对应的网卡队列中的数据包。
13.根据权利要求9所述的装置,其特征在于,所述统计模块,具体用于:
统计所述工作线程对所述网卡队列中的数据包的连续无效获取次数;
相应的,所述模式切换模块,具体用于:
在所述连续无效获取次数大于预设无效获取次数阈值时,切换与所述网卡队列对应的网卡的轮询模式为中断模式。
14.根据权利要求12所述的装置,其特征在于,所述装置还包括:
标记位复位模块,用于对所述工作线程标记位数组中,与所述网卡队列对应的标记位进行复位。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:
休眠状态设置模块,用于在对所述工作线程标记位数组中的所有标记位进行复位后,设置所述工作线程的状态为休眠状态。
16.根据权利要求12所述的装置,其特征在于,所述虚拟交换机还包括中断线程,所述指示子模块,具体用于:
通过中断线程指示与所述工作线程号对应的工作线程,以使所述工作线程轮询所述工作线程标记位数组。
17.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存储计算机程序;
处理器,用于执行存储器上所存储的程序时,实现权利要求1-8任一所述的方法步骤。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-8任一所述的方法步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711103396.2A CN109787777B (zh) | 2017-11-10 | 2017-11-10 | 一种网卡模式切换方法、装置、电子设备及存储介质 |
PCT/CN2018/114077 WO2019091361A1 (zh) | 2017-11-10 | 2018-11-06 | 一种网卡模式切换方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711103396.2A CN109787777B (zh) | 2017-11-10 | 2017-11-10 | 一种网卡模式切换方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109787777A CN109787777A (zh) | 2019-05-21 |
CN109787777B true CN109787777B (zh) | 2020-04-03 |
Family
ID=66438195
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711103396.2A Active CN109787777B (zh) | 2017-11-10 | 2017-11-10 | 一种网卡模式切换方法、装置、电子设备及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN109787777B (zh) |
WO (1) | WO2019091361A1 (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110286743A (zh) * | 2019-07-03 | 2019-09-27 | 浪潮云信息技术有限公司 | 一种数据中心节电方法、终端、计算机可读存储介质 |
CN110765064B (zh) * | 2019-10-18 | 2022-08-23 | 山东浪潮科学研究院有限公司 | 一种异构计算架构的边缘端图像处理系统及方法 |
CN110851289B (zh) * | 2019-10-23 | 2022-11-08 | 新华三信息安全技术有限公司 | 协议报文处理方法及交换机 |
CN112817772B (zh) * | 2019-11-15 | 2023-12-29 | 深信服科技股份有限公司 | 一种数据通信方法、装置、设备及存储介质 |
CN111143032A (zh) * | 2019-12-20 | 2020-05-12 | 上海交通大学 | 一种基于请求应答的半虚拟化i/o系统和方法 |
CN111343152B (zh) * | 2020-02-07 | 2023-01-24 | 北京达佳互联信息技术有限公司 | 数据处理方法、装置及电子设备、存储介质 |
CN111355637B (zh) * | 2020-02-27 | 2023-11-07 | 深信服科技股份有限公司 | 网卡状态检测方法、装置、设备及存储介质 |
CN111371654B (zh) * | 2020-03-18 | 2022-10-14 | 四川九州电子科技股份有限公司 | 一种智能融合产品网口自动化测试系统和方法 |
CN112068784B (zh) * | 2020-09-14 | 2024-03-12 | 上海商米科技集团股份有限公司 | 一种云打印设备多网卡自动切换的方法及云打印设备 |
CN112732462B (zh) * | 2021-01-07 | 2024-02-09 | 杭州中电安科现代科技有限公司 | 基于netmap网卡驱动防止网卡重启的方法 |
CN113300979A (zh) * | 2021-02-05 | 2021-08-24 | 阿里巴巴集团控股有限公司 | Rdma网络下的网卡队列创建方法以及装置 |
CN113377527B (zh) * | 2021-04-26 | 2023-06-02 | 佳源科技股份有限公司 | 一种基于流量强度自适应的流媒体转发处理装置与方法 |
CN114157566B (zh) * | 2021-11-08 | 2023-09-08 | 中信科移动通信技术股份有限公司 | 一种基站性能文件解析方法及系统 |
CN114448909B (zh) * | 2021-12-27 | 2023-10-13 | 天翼云科技有限公司 | 基于ovs的网卡队列轮询方法、装置、计算机设备及介质 |
CN114697215A (zh) * | 2022-03-31 | 2022-07-01 | 西安超越申泰信息科技有限公司 | 一种虚拟化网络性能提升的方法、系统、设备及介质 |
CN117632533A (zh) * | 2022-08-19 | 2024-03-01 | 华为技术有限公司 | 一种中断消息处理方法及装置 |
CN115756143B (zh) * | 2022-11-30 | 2024-03-12 | 深圳市领创星通科技有限公司 | 数据包处理的节能方法、装置、计算机设备和存储介质 |
CN115632948B (zh) * | 2022-12-19 | 2023-03-07 | 无锡沐创集成电路设计有限公司 | 应用于网卡的中断调控方法、装置、存储介质及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2003102770A1 (en) * | 2002-05-31 | 2003-12-11 | Advanced Micro Devices, Inc. | Secure execution mode exceptions |
CN101227341A (zh) * | 2007-12-18 | 2008-07-23 | 浪潮电子信息产业股份有限公司 | Linux系统上以太网卡快速捕包的方法 |
CN101557420A (zh) * | 2009-03-31 | 2009-10-14 | 北京航空航天大学 | 虚拟机监控器高效网络通信的实现方法 |
CN101959290A (zh) * | 2009-07-16 | 2011-01-26 | 北京中电华大电子设计有限责任公司 | 一种无线局域网卡功耗控制方法 |
-
2017
- 2017-11-10 CN CN201711103396.2A patent/CN109787777B/zh active Active
-
2018
- 2018-11-06 WO PCT/CN2018/114077 patent/WO2019091361A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2003102770A1 (en) * | 2002-05-31 | 2003-12-11 | Advanced Micro Devices, Inc. | Secure execution mode exceptions |
CN101227341A (zh) * | 2007-12-18 | 2008-07-23 | 浪潮电子信息产业股份有限公司 | Linux系统上以太网卡快速捕包的方法 |
CN101557420A (zh) * | 2009-03-31 | 2009-10-14 | 北京航空航天大学 | 虚拟机监控器高效网络通信的实现方法 |
CN101959290A (zh) * | 2009-07-16 | 2011-01-26 | 北京中电华大电子设计有限责任公司 | 一种无线局域网卡功耗控制方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2019091361A1 (zh) | 2019-05-16 |
CN109787777A (zh) | 2019-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109787777B (zh) | 一种网卡模式切换方法、装置、电子设备及存储介质 | |
US20130219404A1 (en) | Computer System and Working Method Thereof | |
CN103052949A (zh) | 处理外围设备页错误的机制 | |
US9092275B2 (en) | Store operation with conditional push of a tag value to a queue | |
CN111163018B (zh) | 网络设备及其降低传输时延的方法 | |
US11341087B2 (en) | Single-chip multi-processor communication | |
US9378047B1 (en) | Efficient communication of interrupts from kernel space to user space using event queues | |
US20120297216A1 (en) | Dynamically selecting active polling or timed waits | |
CN110119304B (zh) | 一种中断处理方法、装置及服务器 | |
US20090182798A1 (en) | Method and apparatus to improve the effectiveness of system logging | |
CN116244229B (zh) | 硬件控制器的访问方法、装置、存储介质和电子设备 | |
CN105353987A (zh) | 一种文件处理方法及装置 | |
CN104102549A (zh) | 一种实现多线程互斥操作的方法、装置和芯片 | |
CN114490251A (zh) | 日志处理系统、日志处理方法及终端设备 | |
CN110716805A (zh) | 图形处理器的任务分配方法、装置、电子设备及存储介质 | |
US9288163B2 (en) | Low-latency packet receive method for networking devices | |
WO2023104194A1 (zh) | 一种业务处理方法及装置 | |
CN111858393A (zh) | 内存页面管理方法、内存页面管理装置、介质与电子设备 | |
CN109426563B (zh) | 一种进程管理方法及装置 | |
US20180321882A1 (en) | Hardware system for data conversion and storage device | |
US20120066415A1 (en) | Methods and systems for direct memory access (dma) in-flight status | |
CN114328350A (zh) | 一种基于axi总线的通讯方法、装置以及介质 | |
US9116739B2 (en) | Fast and scalable concurrent queuing system | |
CN116601616A (zh) | 一种数据处理装置、方法及相关设备 | |
KR101725408B1 (ko) | 실시간 운영체제의 태스크 스케줄링 방법 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |