Linux系统针对网卡中断的优化处理

中断:

当网卡接收到数据包后,会触发硬中断,通知CPU来收包。硬中断是一个CPU和网卡交互的过程。这其实会消耗CPU资源。特别是在使用速度极快的万兆网卡之后,大量的网络交互使得CPU很大一部分资源消耗在网卡中断处理上。此时,瓶颈并不在网卡,而是在CPU上。因此,现在的网卡都采用多队列的技术,用于充分利用多核心CPU。

中断的详细解释:《Linux的中断和异常扫盲笔记

SMP IRQ affinity

为了防止多个设置发送相同的中断, Linux设计了一套中断请求系统, 使得计算机系统中的每个设备被分配了各自的中断号, 以确保它的中断请求的唯一性. 从2.4 内核开始, Linux改进了分配特定中断到指定的处理器(或处理器组)的功能. 这被称为SMP IRQ affinity, 它可以控制系统如何响应各种硬件事件. 允许你限制或者重新分配服务器的工作负载, 从而让服务器更有效的工作.。

以网卡中断为例,在没有设置SMP IRQ affinity时, 所有网卡中断都关联到CPU0, 这导致了CPU0负载过高,而无法有效快速的处理网络数据包,导致了瓶颈。 通过SMP IRQ affinity, 把网卡多个中断分配到多个CPU上,可以分散CPU压力,提高数据处理速度。

RPS和RFS

RPS(Receive Packet Steering)

RFS主要是把软中断的负载均衡到各个cpu,简单来说,是网卡驱动对每个流生成一个hash标识,这个HASH值得计算可以通过四元组来计算(SIP,SPORT,DIP,DPORT),然后由中断处理的地方根据这个hash标识分配到相应的CPU上去,这样就可以比较充分的发挥多核的能力了。通俗点来说就是在软件层面模拟实现硬件的多队列网卡功能,如果网卡本身支持多队列功能的话RPS就不会有任何的作用。该功能主要针对单队列网卡多CPU环境,如网卡支持多队列则可使用SMP irq affinity直接绑定硬中断。

RFS(Receive Flow Steering)

由于RPS只是单纯的把同一流的数据包分发给同一个CPU核来处理了,但是有可能出现这样的情况,即给该数据流分发的CPU核和执行处理该数据流的应用程序的CPU核不是同一个:数据包均衡到不同的cpu,这个时候如果应用程序所在的cpu和软中断处理的cpu不是同一个,此时对于cpu cache的影响会很大。

这时候就需要RFS来配合使用了,这也是Tom提交的内核补丁,它是用来配合RPS补丁使用的,是RPS补丁的扩展补丁,它把接收的数据包送达应用所在的CPU上,提高cache的命中率。这两个补丁往往都是一起设置,来达到最好的优化效果, 主要是针对单队列网卡多CPU环境

转载请注明:旅途@KryptosX » Linux系统针对网卡中断的优化处理

时间: 2024-11-02 17:16:35

Linux系统针对网卡中断的优化处理的相关文章

在Hyper-V下安装CentOS Linux系统的网卡驱动

  解决办法是安装微软提供的:Linux Integration Services Version v3.2 for Hyper-V工具(下载地址):下载下来之后是一个iso文档,挂着在linux的虚拟光驱下执行安装命令: 1. 下载微软虚拟机Linux集成服务包 Linux Integration Services v3.2 http://www.microsoft.com/zh-cn/download/details.aspx?id=28188 2. 加载光盘镜像 [媒体]-[DVD驱动器]

linux系统中的安全常规优化

关于服务器本地终端上的安全控制,可以从以下几个方面着手: 1.即时禁止普通用户登录 当服务器正在进行备份或调试等维护工作时,可能不希望再有新的用户登录系统,这时候,只需要简单的建立/etc/nologin文件即可,login程序会检查/etc/nologin文件是否存在,如果存在则拒绝普通用户登录系统(root用户不受限制),删除该文件或者重启系统后就可恢复. touch /etc/nologin 2.控制服务器开放的tty终端 linux系统默认开放了tty1-6共六个本地终端(控制台),如果

linux系统双网卡绑定单个IP地址

双网卡绑定单个IP 地址 为了提供网络的高可用性,我们可能需要将多块网卡绑定成一块虚拟网卡对外提供服务,这样即使其中的一块物理网卡出现故障,也不会导致连接中断.多网卡绑. 为了提供网络的高可用性,我们可能需要将多块网卡绑定成一块虚拟网卡对外提供服务,这样即使其中的一块物理网卡出现故障,也不会导致连接中断.在Linux下叫bonding,IBM称为etherchanel,broadcom叫team,但是名字怎么变,效果都是将两块或更多的网卡当做一块网卡使用,在增加带宽的同时也可以提高冗余性.比如我

linux系统单网卡绑定多个IP地址

说明: 单网卡绑定两个IP地址,电信和联通,目的:是为了当电信出故障联通正常使用. 系 统 IP地址 子网掩码 网关 CentOS 6.3_64bit eth0:116.18.176.19 255.255.255.0 192.168.1.1 eth0:0:172.188.174.20 255.255.255.0 192.168.1.1 - - - 1.linux的网络设备的存储路径是/etc/sysconfig/network-scripts进入目录: [root@localhost ~]# c

linux系统查看网卡实时流量(nload ifstat iftop)命令详解

iftop 命令 安  装:  代码如下 复制代码 [root@test iftop-0.9]# make [root@test iftop-0.9]# make install [root@test iftop-0.9]# iftop 实例 默认是监控第一块网卡的流量 iftop 监控eth1 iftop -i eth1 直接显示IP, 不进行DNS反解析 iftop -n 直接显示连接埠编号, 不显示服务名称: iftop -N 显示某个网段进出封包流量 iftop -F 192.168.1

linux系统中网卡配置详解

文件:/etc/sysconfig/network-scripts/ifcfg-eth0 以下各值常见于所有的基本配置文件中: * DEVICE=name,这里name是物理设备的名字(动态分配的PPP设备应当除外, 它的名字是"逻辑名". * IPADDR=addr, 这里addr是IP地址. * NETMASK=mask, 这里mask是网络掩码. * NETWORK=addr, 这里addr是网络地址. * BROADCAST=addr, 这里addr是广播地址. * GATEW

Linux系统中单网卡绑定多个IP地址

单网卡配置单IP的命令  代码如下 复制代码 #ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up 说明:up是表示立即激活 单网卡配置多ip的方法就是使用命令 如果给单个网卡eth0配置多个ip地址如何操作呢,如果使用ifconfig命令,那么上边需要改动的地方只有eth0而已,将eth0改为eth0:x(x是0-255例如eth0:0或者eth0:1等等),eth0:x称为虚拟网络接口,是建立在网络接口上边.  代码如下 复制代码 #ifco

linux系统单网卡绑定双IP的具体操作方法_unix linux

1. 进入目录:cd /etc/sysconfig/network-scripts/ 2. 使用vi命令编辑ifcfg-eth0,如下:# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]DEVICE=eth0BOOTPROTO=staticBROADCAST=192.168.0.255HWADDR=00:0C:29:25:96:A3#第1个IPIPADDR=192.168.0.2NETMASK=255.255.255.0NETWORK=19

Linux系统下Apache服务器设置与优化

Apache服务器的设置文件位于/usr/local/apache/conf/目录下,传统上使用三个配置文件httpd.conf,access.conf和srm.conf,来配置Apache服务器的行为. httpd.conf提供了最基本的服务器配置,是对守护程序httpd如何运行的技术描述:srm.conf是服务器的资源映射文件,告诉服务器各种文件的MIME类型,以及如何支持这些文件:access.conf用于配置服务器的访问权限,控制不同用户和计算机的访问限制:这三个配置文件控制着服务器的各