当更多线程/进程占用内核时,性能下降

时间:2018-09-16 06:14:51

标签: linux multithreading multicore

要探索Ubuntu上的CPU性能,我正在使用sysbench的{​​{1}}测试。我还使用cpu将某些CPU绑定到一个进程。

我用来运行实验的脚本如下:

taskset

我有一个48核服务器,因此最大线程数不超过核数。

现在的结果是:

for concur in {1..24}
do
    end=$(($concur-1))
    echo "--> Create $concur jobs"

    for i in $(seq 0 $end)
    do
        j=`expr $i \\* 2`
        taskset -c $j-$(($j+1)) sysbench --test=cpu --cpu-max-prime=200000 --num-threads=2 run > sysbench-cpu-$concur-$i.out &
        pids[${i}]=$!
    done

    echo "--> Waiting for ${pids[*]}"
    for pid in ${pids[*]}; do
        wait $pid
    done
    unset pids
    echo "--> Clean up ${pids[*]}"
done

结果显示,运行更多作业时,时间在增加。但是为什么呢?

由于该作业完全是与CPU绑定的作业,在sysbench中,该作业只是每个线程计算的素数为Concurrent Jobs | Average Time For Each Job(s) 1 331.8708 2 342.1978 3 354.9352333 4 360.505625 5 363.86354 6 363.632 7 363.9364429 8 363.761375 9 365.1571667 10 365.81912 11 366.2094909 12 366.56025 13 377.9281923 14 388.7300214 15 398.2705067 16 406.7716438 17 414.7786471 18 422.2813444 19 429.1379421 20 434.907065 21 440.5540571 22 445.3167864 23 450.0088783 24 456.5647417 ,因此没有锁定,甚至没有占用内存来存储数组。我知道当使用太多内核时,可以为其他系统线程安排线程,但是在这里,当产生中等作业时(例如占用20个内核的10个作业),性能仍然比1个作业差。

0 个答案:

没有答案