首页 > 编程知识 正文

linux系统调优,linux怎么打开虚拟机

时间:2023-05-04 16:22:23 阅读:134681 作者:3226

一.互联网流量上不去

二.中断绑定

2.1关闭中断平衡守护进程

2.2退出中断平衡守护进程

2.3手动设置中断的CPU亲和性

3 .总结

一.网络流量在Linux网络调谐方面不上升。 如果发现网络流量上不去,需要调查一个:

NIC处理网络请求的中断是否绑定在一个CPU上。 或者是否是与处理其他中断相同的CPU )

2 .在中断绑定的实时环境中,需要消除或最小化事件响应延迟。 要实现这一点,需要将不同的中断响应(IRQs )和用户进程绑定到不同的CPU核心并相互隔离。

网卡与操作系统的交互通常有两种方法。

IRQ(interruptrequest中断请求) :网卡收到网络信号后,主动向CPU发送中断。 CPU立即停止手头的工作,分析这个中断信号; 直接内存访问(DMA ) :硬件在不需要CPU干预的情况下将数据缓存到指定内存区域,以便CPU在适当的时候进行处理。 在当前的系统多处理器(SMP )中,一个网卡的IRQ只有一个CPU响应,其他CPU无法参与。 如果此CPU忙于其他中断(其他网卡或使用磁盘等中断的外围设备),则会出现瓶颈。

默认情况下,Linux的中断响应会被平均分配到所有CPU核心上,这样势必会发生写新的数据和指令缓存,而且还会与CPU核心上原来存在的进程产生冲突。

这会延迟中断响应,影响程序的处理时间。

解决方案:

要解决这一问题,将中断/进程绑定到指定的CPU内核,中断/进程所需的代码和数据结构很可能位于本地CPU的数据和指令缓存中,不需要进行新的写缓存,中断响应

此外,还可以通过将某个进程及其相关的中断绑定到同一个CPU核心并共享缓存线来提高程序性能。 还可以通过将互不相关的中断和进程绑定到单独的CPU核心来避免冲突和提高程序性能。

上述方法有助于对延迟敏感的中断(或过程)。 当处理速度受限于内存和总线带宽时,这些方法也很重要。

接下来,介绍如何实现中断绑定。

2.1中断平衡守护进程关闭中断平衡守护进程(irqbalance daemon )时,中断会定期均匀公平地分配给每个CPU内核,并且在缺省情况下处于打开状态。 要实现中断绑定,必须首先关闭此守护进程。

使用systemctl status irqbalance显示守护进程的运行状态

[ root @ node9~~] # systemctlstatusirqbalanceirqbalance.service-irqbalancedaemonloaded 3360 loaded (/usr/lib/systemematem 厂商预置:启用(active : inactive dead )可使用 systemctl stop irqbalance 来结束该过程。 这将导致在缺省情况下在 CPU0 内核上处理中断响应。

使用systemctl disable irqbalance可以取消该过程,以便在打开电源后不重新启动。

其实,关闭这个过程很强硬,毕竟中断平衡功能是有帮助的。 那么,在不关闭守护进程的情况下,如何将一些CPU核心从守护进程的管理中移除,并查看以下内容?

2.2释放中断平衡守护进程通过修改/etc/sysconfig/irqbalance配置文件,可以从中断平衡守护进程列表中释放指定的CPU内核。 这意味着守护进程不再向这些CPU核心分配中断。

打开/etc/sysconfig/irqbalance文件,找到#IRQBALANCE_BANNED_CPUS=,取消注释,并在等号后填写CPU十六进制掩码。 范例

IRQ balance _ banned _ CPUs=0000 ff00可以将8~15的8个CPU核与守护进程分离。

这里的掩码最多可以是64位。 如果系统的内核数超过32个,则可以在等号后添加两个32位掩码,并用逗号分隔。 范例

IRQ balance _ banned _ CPUs=00000001,0000 ff00是9个核心的隔离,分别为8到15和33。

关于掩码: 32位位掩码(bitmask )具有类似于000000000000000011的形式,为十进制掩码(

decimal)为3,表示为十六进制掩码(hexadecimal)为0x00000003。

2.3 手动设置中断的CPU亲和性

      设置中断的CPU亲和性(affinity),就是让该中断只在指定CPU核心上进行响应,即中断绑定。

      首先我们通过/proc/interrupts文件查看一下各种中断的响应情况

[root@node9 ~]# cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 0: 63 0 0 0 IR-IO-APIC-edge timer 8: 1 0 0 0 IR-IO-APIC-edge rtc0 9: 0 0 0 0 IR-IO-APIC-fasteoi acpi ******

第一列显示的中断ID号,CPUn列显示的是该中断在第n个CPU核心上的响应次数,倒数第二列是中断类型,最后一列是描述。

1)利用echo命令将cpu掩码写入/proc/irq /中断ID/smp_affinity文件中,即可实现修改某一中断的CPU亲和性。例如

echo 0x0004 > /proc/irq /170/smp_affinity

就可以将170中断的响应绑定到CPU3核心上。当该中断下一次发生时,再查看/proc/interrupts里面的响应数量,会发现CPU3核心的响应次数增加了,而其它核心的响应次数没有改变。

2)还有一种方法,通过 tuna 也可以实现中断绑定功能。详见 Linux工具使用——使用tuna进行性能调优

三. 总结

      最后总结一下,为了满足实时处理的要求,我们需要将中断绑定到指定的 CPU 核心上,实现中断绑定主要有两方面操作:
1)关闭中断平衡守护进程或者隔离CPU核心;
2)手动设置中断的CPU亲和性。
      另外值得一提的是,这里只是介绍了中断绑定的方法,至于该绑定哪些中断以及绑定到哪几个核心上,需要针对应用程序的具体情况进行分析。
      在实际应用中,想要实现性能最优,需要进行各种尝试,然后才能得到最好的配置方式。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。