I am running irqbalance with default configuration on an Atom 330 machine. This CPU has 2 physical cores + 2 SMT (aka Hyperthreading) cores. As shown below the interrupt for the eth0 device is always on CPUs 0 and 1, with CPUs 2 and 3 left idle. But why? Maybe irqbalance prefers physical cores? My understanding, though, is that the even-numbered CPUs are the physical cores, with the odd-numbered one being the SMT cores. If this understanding is correct, it means that irqbalance is toggling between a single physical core and its SMT sibling. Any thoughts on why irqbalance is not using all 4 CPUs to distribute the eth0 interrupts? Thanks. --------------------- # cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 0: 717 568 0 0 IO-APIC-edge timer 1: 0 2 0 0 IO-APIC-edge i8042 8: 26 33 0 0 IO-APIC-edge rtc0 9: 0 0 0 0 IO-APIC-fasteoi acpi 12: 1 3 0 0 IO-APIC-edge i8042 17: 11409 11661 0 0 IO-APIC-fasteoi ahci 18: 264 424 0 0 IO-APIC-fasteoi snd_hda_intel 20: 0 0 0 0 IO-APIC-fasteoi ohci_hcd:usb2 21: 0 0 0 0 IO-APIC-fasteoi ohci_hcd:usb3 22: 0 0 0 0 IO-APIC-fasteoi ehci_hcd:usb1 24: 686292451 685980205 0 0 PCI-MSI-edge eth0
Steve Snyder wrote:> I am running irqbalance with default configuration on an Atom 330 machine. > This CPU has 2 physical cores + 2 SMT (aka Hyperthreading) cores. > > As shown below the interrupt for the eth0 device is always on CPUs 0 and 1, > with CPUs 2 and 3 left idle. But why? > > Maybe irqbalance prefers physical cores? My understanding, though, is that the > even-numbered CPUs are the physical cores, with the odd-numbered one being > the SMT cores. If this understanding is correct, it means that irqbalance is toggling > between a single physical core and its SMT sibling. > > Any thoughts on why irqbalance is not using all 4 CPUs to distribute the eth0 interrupts?I believe the hyperthreading cores are enumerated after the 'real' cores - you can see this by using 'lstopo' - part of the hwloc package ('yum install hwloc') i.e. logical CPUs 0 and 1 are the 'real' cores and logical CPUs 2 and 3 are the HT cores I suspect interrupts only have meaning on the real cores - hence you not seeing any on CPUs 2 and 3 James Pearson
Maybe this utility will be useful to you. http://www.open-mpi.org/projects/hwloc/ Portable Hardware Locality (hwloc) "The Portable Hardware Locality (hwloc) software package provides a portable abstraction (across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various system attributes such as cache and memory information as well as the locality of I/O devices such as network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering information about modern computing hardware so as to exploit it accordingly and efficiently. The democratization of multicore processors and NUMA architectures leads to the spreading of complex hardware topologies into the whole server world. Nodaways every single cluster node may contain tens of cores, hierarchical caches, and multiple memory nodes, making its topology far from flat. Such complex and hierarchical topologies have strong impact of the application performance. The developer must take hardware affinities into account when trying to exploit the actual hardware performance. (...)"