关于linux 软中断对网卡性能的影响以及优化

关于linux 软中断对网卡性能的影响以及优化,第1张

首先,要对软中断有一个认识,程序运行后, *** 作系统会发送程序需要的一些cpu指令到某个cpu,扔给CPU的这个过程是异步的,cpu获得指令后 *** 作完成会触发一个硬中断,并且把 *** 作的结果保存在寄存器,之后linux内核会启动ksofttrip进程去,来获取 *** 作结果,这个动作就叫做软中断。

linux默认会起n个ksofttrip进程,n等于cpu的个数,ksofttrip是死循环,只要有软中断,它就会一直去获取,n个ksoftrip获取源是一样的,为什么要起n个进程呢?就是为了 ,当某个cpu空闲,哪个就去跑。通常 *** 作系统里它的进程名是 ksoftrip/n ,n是对应的cpu的编号,ksoft进程跟cpu是一对一绑定的。

现在来说说网卡的性能问题,要想优化,首先你的网卡必须是多通道队列的。那如何知道你的网卡是否是多队列的呢? 通过cat /proc/interrept |grep eth0|wc -l 可以看到网卡通道队列的数量.

现在来来说说优化方案,为什么要优化,因为linux默认情况所有的网卡的软中断都是的cpu0,所以加入你的ksoftrip/0总是跑满,就说明可能是网卡问题了。

方案1 ,SMP IRQ affinity技术

说白了,就是信号量分布技术,把特定信号量的处理放到固定的cpu上,每个网卡的通道队列都有一个自己的信号量。

首先查看所有网卡通道队列的信号量,方法 cat/proc/interrept |grep eth0

每行最开头的数字“n:”就是信号量,在/proc/irq/下面可以找到对应的以信号量命名的目录

找完了之后,可以进行信号量绑定了,在/proc/irq/n/下面有两个文件,分别是smp_affinity跟smp_affinity_list, 这两个是文件的内容是对应的,smp_affinity里是通过bitmask算法绑定cpu,smp_affinity_list是通过数字指定cpu编号的方法,例如 cpu0,文件里就是“0”,如果是cpu1跟2就是“1,2”

!!重点来了,虽然默认里面填写的是多个,但是!!!但是它只跑在绑定cpu中的第一个!!!坑啊!!!

所以,你要做的就是单独绑定每一个网卡的通道队列。

直接echo "1" >/proc/irq/ (cpu1的信号量)/snmp_affinity_list

echo "3" >/proc/irq/$(cpu2的信号量)/snmp_affinity_list

这个是最快速的解决方案,提升效率显著啊!!!

升级方案2,在方案1基础之上,RPS/RFS技术

此技术大家可以查网上,文章很多,优化效果是,单个网卡通道队列的软中断会平均到所有cpu上,并且会优化为,中断落在发出中断的程序所在的那个cpu上,这样节省了cpu cache。

坏消息是对单队列网卡而言,「smp_affinity」和「smp_affinity_list」配置多CPU无效。

好消息是Linux支持RPS,通俗点来说就是在软件层面模拟实现硬件的多队列网卡功能。

首先看看如何配置RPS,如果CPU个数是 8 个的话,可以设置成 ff:

shell>echo ff >/sys/class/net/eth0/queues/rx-0/rps_cpus

接着配置内核参数rps_sock_flow_entries(官方文档推荐设置: 32768):

shell>sysctl net.core.rps_sock_flow_entries=32768

最后配置rps_flow_cnt,单队列网卡的话设置成rps_sock_flow_entries即可:

echo 32768 >/sys/class/net/eth0/queues/rx-0/rps_flow_cnt

说明:如果是多队列网卡,那么就按照队列数量设置成 rps_sock_flow_entries / N 。

linux下配置网络步骤方法:

配置动态IP

1、在终端命令窗口中输入setup,就会d出如下窗口。

[root@wgods ~]# setup

2、选择Network Configuration,点击enter进入下面界面。

3、选择Edit Devices选项进入下面界面

4、点击enter,选项进入下面界面,按Tab键在选项间切换,选择Use DHCP后,按下空格键,就会出现[*],然后点击OK键。注意:有时候在Name或Device选项不小心,让eth0多了空格,就会造成配置出问题,此时要检查一下/etc/sysconfig/network-scripts/ifcfg-eth0配置文件,才能发现问题。否则这种细节问题会纠结很久的。

拓展资料

1、网卡上面装有处理器和存储器(包括RAM和ROM)。网卡和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的。而网卡和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行。因此,网卡的一个重要功能就是要进行串行/并行转换。由于网络上的数据率和计算机总线上的数据率并不相同,因此在网卡中必须装有对数据进行缓存的存储芯片。

2、在安装网卡时必须将管理网卡的设备驱动程序安装在计算机的 *** 作系统中。这个驱动程序以后就会告诉网卡,应当从存储器的什么位置上将局域网传送过来的数据块存储下来。网卡还要能够实现以太网协议。

3、网卡并不是独立的自治单元,因为网卡本身不带电源而是必须使用所插入的计算机的电源,并受该计算机的控制。因此网卡可看成为一个半自治的单元。当网卡收到一个有差错的帧时,它就将这个帧丢弃而不必通知它所插入的计算机。当网卡收到一个正确的帧时,它就使用中断来通知该计算机并交付给协议栈中的网络层。当计算机要发送一个IP数据包时,它就由协议栈向下交给网卡组装成帧后发送到局域网。

4、随着集成度的不断提高,网卡上的芯片的个数不断的减少,虽然各个厂家生产的网卡种类繁多,但其功能大同小异。

参考资料:百度百科:网卡

一、临时配置eth0 的ip 和子网掩码,一旦重启即失效。

1.1使用ifconfig命令配置,命令如下:

ifconfig eth0 192.168.80.111 netmask 255.255.255.0

配置完成后可再次使用ifconfig命令查看是否配置成功,如下图已配置完成:

1.2 使用route命令配置网关,命令如下:

route add default gw 192.168.80.2

补充:若网卡eth0 未开启,可使用以下命令开启

ifconfig eth0 up//开启eth0网卡

ifconfig eth0 down//关闭eth0网卡

二、永久配置过程

2.1切换到/etc/network文件夹,找到interfaces文件。命令如下:

cd /etc/network //切换文件目录

vi interfaces//使用vi命令打开文件

2.2 文打开后,敲击键盘的“i“或”o”,文件进入插入状态

此时可对文件进行编辑,配置完成后按Esc键退出插入状态,后使用 :wq 命令保存并退出

2.3 配置完成后使用以下命令进行重启即可

/etc/init.d/networking restart //重启服务


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7590442.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-07
下一篇2023-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存