Chinaunix首页 | 论坛 | 博客
  • 博客访问: 57141
  • 博文数量: 16
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2016-01-21 10:05
文章分类

全部博文(16)

文章存档

2017年(1)

2016年(15)

我的朋友

分类: C/C++

2016-04-26 18:56:16


此文仅为个人理解。

文章前提:
1、系统支持多CPU(SMP);
2、Linux 版本2.4及以上。

linux系统有一套中断系统以防接口流量过多来不及处理。但是,如果多接口都在一个CPU,流量过多时,CPU可能一直处于中断之中来不及处理保存的流量数据。因此,linux之中另有一套CPU中断平衡机制,将接口中断绑定到不同的CPU上。

cat /proc/interrupts  查询中断号信息,

cat /proc/interrupts 
            CPU0       CPU1       
   0:         49          0   IO-APIC-edge      timer
   1:          2          2   IO-APIC-edge      i8042
   4:        184        176   IO-APIC-edge      serial
   9:          0          0   IO-APIC-fasteoi   acpi
  12:          2          3   IO-APIC-edge      i8042
  14:       2012       2000   IO-APIC-edge      ata_piix
  15:          0          0   IO-APIC-edge      ata_piix
  16:          0          0   IO-APIC-fasteoi   uhci_hcd:usb5
  18:          0          0   IO-APIC-fasteoi   uhci_hcd:usb4
  19:          0          0   IO-APIC-fasteoi   ata_piix, uhci_hcd:usb3
  23:          0          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb2
  47:          0          0   PCI-MSI-edge      eth11
  48:       3864          2   PCI-MSI-edge      eth11-TxRx-0
  49:          2       3864   PCI-MSI-edge      eth11-TxRx-1
  53:          0          0   PCI-MSI-edge      eth10
  54:       3864          2   PCI-MSI-edge      eth10-TxRx-0
  55:          2       3864   PCI-MSI-edge      eth10-TxRx-1
  71:          3       3864   PCI-MSI-edge      eth3
  74:       3865          2   PCI-MSI-edge      eth0

APIC表示高级可编程中断控制器(Advanced Programmable Interrupt Controlle),APIC是SMP体系的核心,通过APIC可将中断分发到不同的CPU处理。
APIC相较于PIC来说,最大的有点是能适用于MP平台,当然,管脚多是它另一个优点。APIC由两部分组成,一个称为LAPIC(Local APIC,本地高级中断控制器),一个称为IOAPIC(I/O APIC,IP高级中断控制器)。前者位于CPU中,在MP平台,每个CPU都有一个自己的LAPIC。后者通常位于南桥上,像PIC一样,连接各个产生中断的设备。

查看具体中断-接口绑定到哪个CPU可用 cat /proc/irq/#IRQ/smp_affinity 查看,其中保存CPU掩码(bitmask),修改中断CPU时可改中断相应文件。
例如绑定到CPU0,保存为2的0次方(1);绑定到CPU1,保存为2的1次方(2)。默认为f。

接口绑定处理和网卡驱动有关,正常接口在系统启动时已经分配好CPU,但工作中发现,利用系统命令ifconfig将某个接口DOWN,之后再UP后,分配的CPU绑定失效,究其原因,UP时内核UP事件将接口中断恢复。

参考:
http://blog.csdn.net/ustc_dylan/article/details/4132046
http://blog.sina.com.cn/s/blog_4770ef020101p8vq.html

netif_affinity.txt 
阅读(4343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~