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?
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to