[ofa-general] SRP/mlx4 interrupts throttling performance

Vu Pham vuhuong at mellanox.com
Tue Oct 7 09:21:05 PDT 2008


Cameron Harr wrote:
>
>
> Vu Pham wrote:
>> Cameron Harr wrote:
>>> Vu Pham wrote:
>>>>
>>>>> Alternatively, is there anything in the SCST layer I should tweak. 
>>>>> I'm
>>>>> still running rev 245 of that code (kinda old, but works with OFED 
>>>>> 1.3.1
>>>>> w/o hacks).
>>
>> With blockio I get the best performance + stability with scst_threads=1
>
> I got best performance with threads=2 or 3, and I've noticed that the 
> srpt_thread is often at 99%, though if I increase/decrease the 
> "thread=?" parameter for ib_srpt, it doesn't seem to make a 
> difference. A second initiator doesn't seem to help much either, with 
> a single initiator writing to two targets, can now usually get between 
> 95K and 105K IOPs.

ib_srpt's "thread=?" parameter does not mean number of thread but 
indicating you are in thread context or not
thread=0 --> you will avoid one context switch between ib_srpt's thread 
and scst's threads. You may get better result with thread=0; however, 
there is stability risk

>>>>>>
>>>>>> My target server (with DAS) contains 8 2.8 GHz CPU cores and can 
>>>>>> sustain over 200K IOPs locally, but only around 73K IOPs over SRP.
>>>>
>>>> Is this number from one initiator or multiple?
>>> One initiator. At first I thought it might be a limitation of the 
>>> SRP, and added a second initiator, but the aggregate performance of 
>>> the two was about equal to that of a single initiator.
>>
>> Try again with scst_threads=1. I expect that you can get ~140K with 
>> two initiators
>>
> Unfortunately, I'm nowhere close that high, though I am significantly 
> higher than before. 2 initiators does seem to reduce the context 
> switching rate however, which is good.

Could you try again with ib_srpt' thread=0?

>>>>>> Looking at /proc/interrupts, I see that the mlx_core (comp) 
>>>>>> device is pushing about 135K Int/s on 1 of 2 CPUs. All CPUs are 
>>>>>> enabled for that PCI-E slot, but it only ever uses 2 of the CPUs, 
>>>>>> and only 1 at a time. None of the other CPUs has an interrupt 
>>>>>> rate more than about 40-50K/s.
>>>> The number of interrupt can be cut down if there are more 
>>>> completions to be processed by sw. ie. please test with multiple 
>>>> QPs between one initiator vs. your target and multiple initiators 
>>>> vs. your target
> Interrupts are still pretty high (around 160K/s now), but that seems 
> to not be my bottleneck. Context switching seems to be about 2-2.5 for 
> every IOP and sometimes less - not perfect, but not horrible either.
>>
>> ib_srpt process completions in event callback handler. With more QPs 
>> there are more completions pending per interrupt instead of one 
>> completion event per interrupt.
>> You can have multiple QPs between initiator vs. target by using 
>> different initiator_id_ext ie.
>> echo id_ext=xxx,ioc_guid=yyy,....initiator_ext=1 > 
>> /sys/class/infiniband_srp/.../add_target
>> echo id_ext=xxx,ioc_guid=yyy,....initiator_ext=2 > 
>> /sys/class/infiniband_srp/.../add_target
>> echo id_ext=xxx,ioc_guid=yyy,....initiator_ext=3 > 
>> /sys/class/infiniband_srp/.../add_target
> This doesn't seem to net much of an improvement, though I understand 
> the reasoning behind it. My hunch is there's another bottleneck now to 
> look for.
>
> Cameron
> _______________________________________________
> general mailing list
> general at lists.openfabrics.org
> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
>
> To unsubscribe, please visit 
> http://openib.org/mailman/listinfo/openib-general




More information about the general mailing list