[Scst-devel] [ofa-general] SRP/mlx4 interrupts throttling performance

Vladislav Bolkhovitin vst at vlnb.net
Tue Jan 13 10:08:03 PST 2009


Cameron Harr, on 01/13/2009 07:42 PM wrote:
> Vladislav Bolkhovitin wrote:
>> Cameron Harr, on 01/13/2009 02:56 AM wrote:
>>> Vladislav Bolkhovitin wrote:
>>>>>> I think srptthread=0 performs worse in this case, because with it 
>>>>>> part of processing done in SIRQ, but seems scheduler make it be 
>>>>>> done on the same CPU as fct0-worker, which does the data transfer 
>>>>>> to your SSD device job. And this thread is always consumes about 
>>>>>> 100% CPU, so it has less CPU time, hence less overall performance.
>>>>>>
>>>>>> So, try to affine fctX-worker, SCST threads and SIRQ processing on 
>>>>>> different CPUs and check again. You can affine threads using 
>>>>>> utility from 
>>>>>> http://www.kernel.org/pub/linux/kernel/people/rml/cpu-affinity/, 
>>>>>> how to affine IRQ see Documentation/IRQ-affinity.txt in your 
>>>>>> kernel tree. 
>>> I ran with the two fct-worker threads pinned to cpus 7,8, the 
>>> scsi_tgt threads pinned to cpus 4, 5 or 6 and irqbalance pinned on 
>>> cpus 1-3. I wasn't sure if I should play with the 8 ksoftirqd procs, 
>>> since there is one process per cpu. From these results, I don't see a 
>>> big difference, 
>> Hmm, you sent me before the following results:
>>
>> type=randwrite  bs=4k   drives=1 scst_threads=1 srptthread=1 
>> iops=54934.31
>> type=randwrite  bs=4k   drives=1 scst_threads=1 srptthread=0 
>> iops=50199.90
>> type=randwrite  bs=4k   drives=1 scst_threads=2 srptthread=1 
>> iops=51510.68
>> type=randwrite  bs=4k   drives=1 scst_threads=2 srptthread=0 
>> iops=49951.89
>> type=randwrite  bs=4k   drives=1 scst_threads=3 srptthread=1 
>> iops=51924.17
>> type=randwrite  bs=4k   drives=1 scst_threads=3 srptthread=0 
>> iops=49874.57
>> type=randwrite  bs=4k   drives=2 scst_threads=1 srptthread=1 
>> iops=79680.42
>> type=randwrite  bs=4k   drives=2 scst_threads=1 srptthread=0 
>> iops=74504.65
>> type=randwrite  bs=4k   drives=2 scst_threads=2 srptthread=1 
>> iops=78558.77
>> type=randwrite  bs=4k   drives=2 scst_threads=2 srptthread=0 
>> iops=75224.25
>> type=randwrite  bs=4k   drives=2 scst_threads=3 srptthread=1 
>> iops=75411.52
>> type=randwrite  bs=4k   drives=2 scst_threads=3 srptthread=0 
>> iops=73238.46
>>
>> I see quite a big improvement. For instance, for drives=1 
>> scst_threads=1 srptthread=1 case it is 36%. Or, do you use different 
>> hardware, so those results can't be compared?
> Vlad, you've got a good eye. Unfortunately, those results can't really 
> be compared because I believe the previous results were intentionally 
> run in a worse-case performance scenario. However I did run no-affinity 
> runs before the affinity runs and would say performance increase is 
> variable and somewhat inconclusive:
> 
> type=randwrite  bs=4k   drives=1 scst_threads=1 srptthread=1 iops=76724.08
> type=randwrite  bs=4k   drives=2 scst_threads=1 srptthread=1 iops=91318.28
> type=randwrite  bs=4k   drives=1 scst_threads=2 srptthread=1 iops=60374.94
> type=randwrite  bs=4k   drives=2 scst_threads=2 srptthread=1 iops=91618.18
> type=randwrite  bs=4k   drives=1 scst_threads=3 srptthread=1 iops=63076.21
> type=randwrite  bs=4k   drives=2 scst_threads=3 srptthread=1 iops=92251.24
> type=randwrite  bs=4k   drives=1 scst_threads=1 srptthread=0 iops=50539.96
> type=randwrite  bs=4k   drives=2 scst_threads=1 srptthread=0 iops=57884.80
> type=randwrite  bs=4k   drives=1 scst_threads=2 srptthread=0 iops=54502.85
> type=randwrite  bs=4k   drives=2 scst_threads=2 srptthread=0 iops=93230.44
> type=randwrite  bs=4k   drives=1 scst_threads=3 srptthread=0 iops=55941.89
> type=randwrite  bs=4k   drives=2 scst_threads=3 srptthread=0 iops=94480.92

For srptthread=0 case there is a consistent quite big increase.

>>> but would still give srpt thread=1 a slight performance advantage.
>> At this level CPU caches starting playing essential role. To get the 
>> maximum performance the commands processing of each command should use 
>> the same CPU L2+ cache(s), i.e. be done on the same physical CPU, but 
>> on different cores. Most likely, affinity assigned by you was worse, 
>> than the scheduler decisions. What's your CPU configuration? Please 
>> send me the top/vmstat output during tests from the target as well as 
>> your dmesg from the target just after it's booted.
> My CPU config on the target (where I did the affinity) is 2 quad-core 
> Xeon E5440 @ 2.83GHz. I didn't have my script configured to dump top and 
> vmstat, so here's data from a rerun (and I have attached requested 
> info). I'm not sure what is accounting for the spike at the beginning, 
> but it seems consistent.
> 
> type=randwrite  bs=4k   drives=1 scst_threads=1 srptthread=1 iops=104699.43
> type=randwrite  bs=4k   drives=2 scst_threads=1 srptthread=1 iops=133928.98
> type=randwrite  bs=4k   drives=1 scst_threads=2 srptthread=1 iops=82736.73
> type=randwrite  bs=4k   drives=2 scst_threads=2 srptthread=1 iops=82221.42
> type=randwrite  bs=4k   drives=1 scst_threads=3 srptthread=1 iops=70203.53
> type=randwrite  bs=4k   drives=2 scst_threads=3 srptthread=1 iops=85628.45
> type=randwrite  bs=4k   drives=1 scst_threads=1 srptthread=0 iops=75646.90
> type=randwrite  bs=4k   drives=2 scst_threads=1 srptthread=0 iops=87124.32
> type=randwrite  bs=4k   drives=1 scst_threads=2 srptthread=0 iops=74545.84
> type=randwrite  bs=4k   drives=2 scst_threads=2 srptthread=0 iops=88348.71
> type=randwrite  bs=4k   drives=1 scst_threads=3 srptthread=0 iops=71837.15
> type=randwrite  bs=4k   drives=2 scst_threads=3 srptthread=0 iops=84387.22

Why there is such a huge difference with the results you sent in the 
previous e-mail? For instance, for case drives=1 scst_threads=1 
srptthread=1 104K vs 74K. What did you changed?

What is content of /proc/interrupts after the tests?



More information about the general mailing list