
技术摘要:
本发明提出了一种实现网络收包模式自动调节的方法。首先,对软件接收处理网络报文的模式划分为全中断,中断批处理,间隔轮询,忙等轮询四种收包模式;然后,设计一个网络收包调度程序,根据收包队列的读写统计计算出当前的网络负载情况,并根据网络负载情况调节收包模 全部
背景技术:
随着通用处理器性能的提升,云计算技术的兴起,越来越多的网络设备逐步转向 通用处理器软件实现。在带来灵活性和低成本的同时,基于内核中断的软件收包处理方式 逐渐成为性能瓶颈。究其原因,当网络设备收到大量网络报文时,中断会频繁发生,频繁打 断报文处理逻辑的执行,使得大量CPU处理时间消耗在上下文切换上。 为了解决中断收包性能较低的问题,出现了一些基于忙等轮询模式的高性能网络 解决方案,例如PF_RING和DPDK。忙等轮询模式避免了频繁中断引起的CPU开销,在网络负载 很高时,使CPU获得更高的网络报文处理能力。但是,轮询模式也存在问题,在网络负载不高 时,忙等轮询程序仍会持续占用CPU,持续访问空的收包队列,CPU不能处理其他计算任务, 造成整机性能下降,功耗上升。 有的技术方案试图结合中断和轮询方式,以期获得两种模式的优点。例如,Linux 内核的NAPI网络驱动程序,允许在一次中断后执行多次轮询收包,轮询的次数和轮询的时 间间隔可配置。本文称这种模式为中断批处理模式。使用这种方式,可以通过轮询次数和轮 询间隔的配置,适应更广的网络负载场景。但是,中断批处理模式仍缺少一种根据负载自动 调整轮询间隔和次数的机制,导致其轮询调整不够及时,不能获得最好的CPU和网络性能平 衡。网络设备的收包负载情况会随时间发生变化,而目前的网络设备软件收包方案,收包模 式不够灵活,在网络负载变化时不能及时调整收包模式,导致网络IO性能不足或者CPU利用 率不高。例如,网络负载很低时,使用中断收包模式可以避免轮询空队列带来的CPU空耗,而 使用轮询忙等方式就会造成CPU的利用率降低;网络负载很高时,轮询忙等收包模式可以避 免频繁发生CPU中断带来的上下文切换开销,获得最高网络处理性能,而中断收包模式会造 成CPU被空耗在中断上下文的切换上,网络性能下降。 术语介绍: 中断:中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止 正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行 轮询:由CPU定时发出询问,依序询问每一个对象是否需要其服务,有即给予服务,服务 结束后再询问下一个对象,不断周而复始。
技术实现要素:
本发明针对现有技术不能很好地平衡网络IO处理性能和CPU的利用率的问题,提 出了一种网络收包模式自动调节方法,通过划分全中断,中断批处理,间隔轮询,忙等轮询 四种收包模式,并设定一个收包调度程序,实现了网络IO处理性能和CPU利用率之间的较好 平衡。 4 CN 111580949 A 说 明 书 2/7 页 本发明具体实现内容如下: 本发明提出了一种网络收包模式自动调节方法,根据收包处理线程的负载,也就是收 包处理线程的收包处理速率,设定四种收包处理模式:完全中断模式、中断批处理模式、间 隔轮询模式、忙等轮询模式;并设置收包调度程序同时对多个收包处理线程的模式进行切 换。 为了更好地实现本发明,进一步地,给收包处理线程的四个模式分别设定处理负 载的范围;对于收包处理线程的模式切换,具体操作如下: 当处于完全中断模式的收包处理线程的负载超过完全中断模式所设定的范围时,由收 包调度程序将收包处理线程的模式从完全中断模式切换为中断批处理模式; 当处于中断批处理模式的收包处理线程的负载超过中断批处理模式所设定的范围时, 由收包调度程序将收包处理线程的模式从中断批处理模式切换为间隔轮询模式;当处于中 断批处理模式的收包处理线程的负载低于中断批处理模式所设定的范围时,由收包调度程 序将收包处理线程的模式从中断批处理模式切换为完全中断模式; 当处于间隔轮询模式的收包处理线程的负载超过间隔轮询模式所设定的范围时,由收 包调度程序将收包处理线程的模式从间隔轮询模式切换为忙等轮询模式;当处于间隔轮询 模式的收包处理线程的负载低于间隔轮询模式所设定的范围时,由收包调度程序将收包处 理线程的模式从间隔轮询模式切换为中断批处理模式; 当处于忙等轮询模式的收包处理线程的负载低于完全中断模式所设定的范围时,由收 包调度程序将收包处理线程的模式从忙等轮询模式切换为间隔轮询模式; 除此以外,还为收包处理线程设定切换模式的最短周期,所述收包处理线程只有在一 个收包模式中运行超过最短周期才能进行切换。 为了更好地实现本发明,进一步地,对于所述中断批处理模式,设定中断条件参数 N;所述中断条件参数N为中断批处理模式每次中断后收包进程后需要处理的报文数量,为 实际负载与系统调度周期的乘积;由收包调度程序将中断条件参数N写入内存中,在收包处 理进程进行收包处理时,收包调度程序查询并使用中断条件参数N。 为了更好地实现本发明,进一步地,对于所述间隔轮询模式,设定间断轮询条件参 数T,所述间断轮询条件参数T为收包处理线程每次处理完网卡接收队列所有报文后需要主 动睡眠等待的时间间隔。 为了更好地实现本发明,进一步地,所述收包调度程序对收包处理线程进行模式 切换的具体流程为: (1)首先初始化调度定时器; (2)然后初始化统计计时器; (3)根据收包处理线程的初始模式启动收包线程; (4)然后开始周期性地执行收包调度,即切换收包线程处理线程的收包模式,具体步骤 如下: 步骤S1.首先计算每一个收包处理线程的报文处理速度; 步骤S2.判断收包处理线程是否超过当前模式所对应设置的负载范围; 步骤S3.若判断为没有超过当前模式所对应设置的负载范围,则重新进行步骤S1.的操 作;若判断为超过当前模式所对应设置的负载范围,则判断进一步判断收包处理线程的在 5 CN 111580949 A 说 明 书 3/7 页 当前模式下的运行时间是否达到收包模式切换的最短周期; 步骤S4.对于当前模式运行时间判断为未超过最短周期的收包处理线程,重新进行步 骤S1.的处理;对于当前模式运行时间判断为超过最短周期的收包处理线程,则根据当前负 载情况及设定的各手包模式对应的负载范围进行收包模式的切换。 为了更好地实现本发明,进一步地,所述每个收包处理线程的统计计数器有两个, 分别为用于记录当前时间的数据包的处理数量的P计数器、记录前一次统计时已经处理的 数据包数量的N计数器。 为了更好地实现本发明,进一步地,设定收包调度程序的执行周期为T调度,则收 包处理线程的负载的值为N计数器记录的数值减去P计数器记录的数值后的差值再除以T调 度。 为了更好地实现本发明,进一步地,所述收包调度程序的周期性执行依赖系统时 钟触发,所述初始化调度定时器具体操作为:根据配置的收包调度程序执行周期来设定定 时器。 为了更好地实现本发明,进一步地,每个所述收包处理线程需要处理一个收包队 列的数据,具体的的工作流程主要为: 首先开始读取收包队列的数据包,然后对读取的数据包进行处理,在处理完读取的数 据包后,将自身收包处理线程对应的统计计数器进行更新,然后继续读取收包队列的数据 包,循环上述操作。 为了更好地实现本发明,进一步地,在所述完全中断模式下,将每一次网卡的收包 中断都上送到收包处理线程; 在所述中断批处理模式下,在驱动程序收到多次网卡的收包中断后才汇总上送到收包 处理线程; 在所述中断批处理模式下,计算并设置一次中断要收包处理线程处理的报文数; 在所述间隔轮询模式下,完全关闭网卡中断,在收包处理线程处理完收包队列的报文 以后,主动让出中央处理器CPU,休眠一个时间间隔后,再次打断其他线程的执行,抢占中央 处理器CPU执行收包队列扫描轮询; 在所述忙等轮询模式下,完全关闭网卡中断,在收包处理线程处理完收包队列的报文 以后,也不会让出中央处理器CPU,继续抢占中央处理器CPU执行收包队列扫描轮询; 所述网卡中断发生的次数即为收包处理线程读取一次收包队列要处理的报文数。 本发明与现有技术相比具有以下优点及有益效果: 实现了网络IO处理性能和CPU利用率之间的较好平衡;网络设备的收包负载情况会随 时间发生变化,在不同的网络负载下都有其对应的最优网络收包模式。 附图说明 图1为四种收包模式的切换示意图; 图2为收包调度程序的工作流程示意图; 图3为收包处理线程的工作流程示意图; 图4为四种收包模式的处理流程示意图。 6 CN 111580949 A 说 明 书 4/7 页