On server systems with high interrupt load, it is possible that ourAdd an option to dynamically rebalance interrupts across cores
boot-time round-robin interrupt assignment places two or more high-rate(hw.intrbalance); off by default.
The goal is to minimize preemption. By placing interrupt sources on
interrupts on the same core. This causes unnecessary preemptiondistinct CPUs, ithreads get preferentially scheduled on distinct CPUs.
irqrebalance(8) dynamically moves interrupts at runtime to try andOverall preemption is reduced and latency is reduced. In our workflow
distribute load from different interrupt sources.
This component can be disabled (e.g., on small systems) withit reduced "fighting" between two high-frequency interrupt sources.
MK_IRQREBALANCE=no.
As part of this workReduced latency was proven by, e.g., the cpuset_get/setaffinity() APIs have beenSPEC2008.
extended to add an IRQ placement only and ithread-only API. The generic
intr_event_bind function has also been extended with sibling methods.
The service can be enabled in rc.conf with irqrebalance_enable="YES".