Performance differences with IRQ_ALL_CPUS

Kumar Gala galak at kernel.crashing.org
Wed Apr 22 08:07:16 EST 2009


On Apr 21, 2009, at 5:01 PM, Subodh Nijsure wrote:

>
>
>> From: Kumar Gala
>> Sent: Tuesday, April 21, 2009 1:02 PM
>
>>
>>
>> On Apr 21, 2009, at 10:56 AM, Subodh Nijsure wrote:
>>
>>> Hi,
>>>
>>>
>>> I have board with MPC8572E (dual core PPC). I have one
>> board running
>>> kernel
>>> with IRQ_ALL_CPUS set to Y and another with that option
>> turned off.
>>> Kernel
>>> version #2.6.26
>>>
>>>
>>> With IRQ_ALL_CPUS turned off
>>> ( Here interrupts all go to CPU0 )
>>>
>>> hdparm -tT /dev/hda
>>> /dev/hda:
>>> Timing cached reads:   3048 MB in  2.00 seconds = 1523.79 MB/sec
>>> Timing buffered disk reads:   10 MB in  3.07 seconds =   3.25 MB/sec
>>>
>>> cat /proc/interrupts
>>>          CPU0       CPU1
>>> 18:    1394100          0   OpenPIC   Edge      ide0
>>>
>>> With IRQ_ALL_CPUS turned on I see
>>> (Here interrupts go to CPU0 and CPU1 )
>>>
>>> hdparm -tT /dev/hda
>>>
>>> /dev/hda:
>>> Timing cached reads:   1076 MB in  2.00 seconds = 538.01 MB/sec
>>> Timing buffered disk reads:   10 MB in  3.08 seconds =   3.25 MB/sec
>>>
>>> cat /proc/interrupts
>>>          CPU0       CPU1
>>> 18:      44951      54765   OpenPIC   Edge      ide0
>>>
>>> I "expected" that with IRQ_ALL_CPUS -- interrupt sharing I would be
>>> able to get higher througput but I see things otherway around.
>>>
>>> Would someone care to enlighten me as to why when I set
>> IRQ_ALL_CPUS
>>> disk I/O performance goes down so much?  Under what circumstances
>>> should one then turn on IRQ_ALL_CPUS option on PPC platform?
>>>
>>> Regards,
>>> /Subodh
>>
>> This is probably because you are getting ill defined behavior
>> on 8572.  The 8572 (and any FSL MPIC) doesn't actually
>> support having the PIC distribute interrupts to the different
>> CPUs.  Its technically "illegal" to set more than one
>> destination processor.
>>
>> If you want to try and distribute interrupts than I suggest
>> looking at irqbalance.
>>
>
> Kumar, thanks for the info.
> Okay I will research irqbalance (from http://irqbalance.org/?) and  
> see how
> that goes.
>
> If I want to lock say ethernet interrupts to (core0) CPU0 and Ide  
> interrupts
> to (core1) CPU1 is there a way to fix that using device-tree  
> specification?

No. We've actively avoided trying to convene such affinity in the  
device tree.

However you can do:

cat 1 > /proc/irq/ENET_IRQ_NUM/affinity
cat 2 > /proc/irq/IDE_IRQ/affinity

at boot time.

This will get you affinity binding to a core.

The affinity file is bitmask related to core # (with lsb being core0  
and msb being core31)

- k 



More information about the Linuxppc-dev mailing list