/proc/irq/{IRQ}/smp_affinity_list /proc/irq/{IRQ}/smp_affinity 指定给定的 irq 中断号源允许哪些CPU执行,它是一个掩码位,比如是ff,代表11111111,表示这个中夺冠可以在 8 个 CPU 执行,具体在哪一个 CPU 执行,靠分配器分配。 如果这个 /proc/irq/{IRQ}/smp_affinity 指定为 00000001,代表这个IRQ只能在...
that support "Round Robin" interrupt distribution.] smp_affinity_list:是一个alternative方式去设置CPU affinity, 是一个可以handler这个IRQ的CPU list。 spurious:可以获得该irq被处理和未被处理的次数的统计信息。 此外/proc/irq/default_smp_affinity里面记录了对于未激活(non-allocated/activated) 的IRQ的CPU aff...
(1)写文件“/proc/irq/IRQ#/smp_affinity”,参数是位掩码 (2)写文件“/proc/irq/IRQ#/smp_affinity_list”,参数是处理器列表 内核提供了设置中断亲和性的函数: int irq_set_affinity(unsigned int irq, const struct cpumask *cpumask) 参数irq是Linux中断号,参数cpumask是处理器位掩码。 9. 处理器间中断...
此技术大家可以查网上,文章很多,优化效果是,单个网卡通道队列的软中断会平均到所有cpu上,并且会优化为,中断落在发出中断的程序所在的那个cpu上,这样节省了cpu cache。 坏消息是对单队列网卡而言,「smp_affinity」和「smp_affinity_list」配置多CPU无效。 好消息是Linux支持RPS,通俗点来说就是在软件层面模拟实现硬件...
而/proc/irq/{IRQ}/smp_affinity和/proc/irq/{IRQ}/smp_affinity_list指定了哪些CPU能够关联到一个给定的IRQ源。RPS只是单纯把数据包均衡到不同的cpu,这个时候如果应用程序所在的cpu和软中断处理的cpu不是同一个,此时对cpu cache的影响会很大。目前大多数SMP系统会使用smp_affinity功能,默认不启用RPS。
在SMP(Symmetric Multi-Processing对称多处理)架构下,Linux调度器(scheduler)会根据CPU affinity的设置让指定的进程运行在"绑定"的CPU上,而不会在别的CPU上运行. Linux调度器同样支持自然CPU亲和性(natural CPU affinity): 调度器会试图保持进程在相同的CPU上运行, 这意味着进程通常不会在处理器之间频繁迁移,进程迁移...
从上图明显能够看出,对于4四、47号这种外设的中断,Linux内核把smp_affinity设置为了FB(11111011),明显避开了CPU2,因此,实际外设中断也不会在CPU2发生,除非咱们强行给中断绑核,好比让44号中断绑定到CPU2: echo 2 >/proc/irq/44/smp_affinity_list 以后,咱们发现44号中断在CPU2能够发生: ...
smp_affinity 文件默认是全部ffffffff,8个f就是16的8次方位,一般一台机就几只cpu,所以够了,echo 3 > /proc/irq/24/smp_affinity 就是分配第一第二只cpu给该irq。 smp_affinity 具体定义: IRQ Affinity Binding IRQ’s to a group of CPU’s is a new feature of the 2.4 kernel. While it was orig...
echo 2 》/proc/irq/44/smp_affinity_list 之后,我们发现44号中断在CPU2可以发生: 但是,系统的timer中断、IPI,由于是Linux系统的运行基石,实际还是要在CPU2上面运行的。这里面最可能给任务带来延迟抖动的,自然是timer tick。 下面我们重点探讨下tick的问题,由于Linux一般情况下,已经配置IDLE状态的NO_HZ tickless,...
默认情况下,任何CPU都可以处理IRQ。由于报文接收中断处理中包含一部分不可忽略的处理过程,因此在CPU之间分散处理中断是有利的(防止新的中断无法被即时处理)。如果要手动调节IRQ的亲和性,参见SMP IRQ affinity。一些系统会运行irqbalance,这是一个守护进程,自动分配IRQ,可能会覆盖手动设置的结果。