zoukankan      html  css  js  c++  java
  • [转载]将网卡(设备中断)绑定到特定CPU

    在前阵子看到HelloDB的一篇文章“MySQL单机多实例方案”中提到:

    因为单机运行多个实例,必须对网络进行优化,我们通过多个的IP的方式,将多个MySQL实例绑定在不同的网卡上,从而提高整体的网络能力。还有一种更高级的做法是,将不同网卡的中断与CPU绑定,这样可以大幅度提升网卡的效率。

    于是,对“将不同网卡的中断与CPU绑定,这样可以大幅度提升网卡的效率”比较感兴趣,所以找了点资料了解一下。先总结如下:


    1. 不同的设备一般都有自己的IRQ号码(当然一个设备还有可能有多个IRQ号码)

    通过命令:cat /proc/interrupts查看

    如:cat /proc/interrupts | grep -e “CPU|eth4″

    2. 中断的smp affinity在cat  /proc/irq/$Num/smp_affinity

    可以echo “$bitmask” > /proc/irq/$num/smp_affinity来改变它的值。

    注意smp_affinity这个值是一个十六进制的bitmask,它和cpu No.序列的“与”运算结果就是将affinity设置在那个(那些)CPU了。(也即smp_affinity中被设置为1的位为CPU No.)

    比如:我有8个逻辑core,那么CPU#的序列为11111111 (从右到左依次为#0~#7的CPU)

    如果cat  /proc/irq/84/smp_affinity的值为:20(二进制为:00100000),则84这个IRQ的亲和性为#5号CPU。

    每个IRQ的默认的smp affinity在这里:cat /proc/irq/default_smp_affinity

    另外,cat  /proc/irq/$Num/smp_affinity_list 得到的即是CPU的一个List。

    3. 默认情况下,有一个irqbalance在对IRQ进行负载均衡,它是/etc/init.d/irqbalance

    在某些特殊场景下,可以根据需要停止这个daemon进程。

    4. 如果要想提高性能,将IRQ绑定到某个CPU,那么最好在系统启动时,将那个CPU隔离起来,不被scheduler通常的调度。

    可以通过在Linux kernel中加入启动参数:isolcpus=cpu-list来将一些CPU隔离起来。

    附:某4核CPU(4个网卡)的profile文件

    ifconfig eth0 down
    ifconfig eth1 down
    ifconfig eth2 down
    ifconfig eth3 down
    #echo p group cpus  > cpu_group     - set <cpus mask>  for <port/napi group>
    ##set <cpus mask>  for <port/napi group>.
    echo 0 0 2 > /sys/devices/platform/neta/gbe/cpu_group  
    echo 1 0 4 > /sys/devices/platform/neta/gbe/cpu_group
    echo 2 0 8 > /sys/devices/platform/neta/gbe/cpu_group
    echo 3 0 1 > /sys/devices/platform/neta/gbe/cpu_group
    #bind CPU to Eth
    echo "2" > /proc/irq/8/smp_affinity    
    echo "4" > /proc/irq/10/smp_affinity
    echo "8" > /proc/irq/12/smp_affinity
    echo "1" > /proc/irq/14/smp_affinity
  • 相关阅读:
    我这些年的项目管理心得...
    14条建议,使你的IT职业生涯更上一层楼
    手机通过WIFI连上ZXV10 H618B路由器但不能上网问题的解决
    优秀中层必备的十大能力
    IMX51启动模式
    VS2005工程由Pocket PC 2003 SDK转为WINCE6.0 SDK的问题
    VS2005工程增加SDK
    VS2005下开发PPC2003和WM50编译器一些设置
    CTO俱乐部下午茶:技术团队管理中的那些事儿
    Android通过JNI调用驱动程序(完全解析实例)
  • 原文地址:https://www.cnblogs.com/FarmPick/p/5681861.html
Copyright © 2011-2022 走看看