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