PINE64
Help with linux task schuduler at 4.18, please - Printable Version

+- PINE64 (https://forum.pine64.org)
+-- Forum: ROCKPRO64 (https://forum.pine64.org/forumdisplay.php?fid=98)
+--- Forum: Linux on RockPro64 (https://forum.pine64.org/forumdisplay.php?fid=101)
+--- Thread: Help with linux task schuduler at 4.18, please (/showthread.php?tid=6590)



Help with linux task schuduler at 4.18, please - dukla2000 - 09-25-2018

Hi all

Is there anyone here who understands how to "tune" the Linux task scheduler? My problem is that at 4.18.9 it does not obviously favour the big cores for CPU heavy jobs which is crazy.

I wrote a little script to demonstrate what I mean - it uses an additional package stress as an example that can spawn n jobs for t seconds. In my case I run the load for 10 seconds, and after 5 seconds have a look which CPUs are in use:

Code:
stress -c 1 -t 10 &
sleep 5
ps -L -o pid,lwp,pcpu,cpuid,time
sleep 6
stress -c 2 -t 10 &
sleep 5
ps -L -o pid,lwp,pcpu,cpuid,time
sleep 6
stress -c 3 -t 10 &
sleep 5
ps -o pid,lwp,pcpu,cpuid,time
sleep 6
stress -c 4 -t 10 &
sleep 5
ps -L -o pid,lwp,pcpu,cpuid,time

On the 4.4.138 (Ayufan) kernel things are pretty much to be expected - CPUs 4 & 5 (the big A72 cores) are always used:
Code:
$ ./testcpu
stress: info: [1043] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
  741   741  0.0     4 00:00:00
 1042  1042  0.0     0 00:00:00
 1043  1043  0.0     4 00:00:00
 1045  1045  100     4 00:00:05
 1047  1047  0.0     5 00:00:00
stress: info: [1043] successful run completed in 10s
stress: info: [1050] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
  741   741  0.0     4 00:00:00
 1042  1042  0.0     5 00:00:00
 1050  1050  0.0     5 00:00:00
 1052  1052 98.6     5 00:00:04
 1053  1053  100     4 00:00:05
 1055  1055  0.0     0 00:00:00
stress: info: [1050] successful run completed in 10s
stress: info: [1058] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
  741   741  0.0     4 00:00:00
 1042  1042  0.0     5 00:00:00
 1058  1058  0.0     4 00:00:00
 1060  1060 99.8     0 00:00:04
 1061  1061  100     5 00:00:05
 1062  1062  100     4 00:00:05
 1064  1064  0.0     3 00:00:00
stress: info: [1058] successful run completed in 10s
stress: info: [1067] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
  741   741  0.0     4 00:00:00
 1042  1042  0.0     4 00:00:00
 1067  1067  0.0     2 00:00:00
 1069  1069  100     1 00:00:05
 1070  1070  100     4 00:00:05
 1071  1071  100     3 00:00:05
 1072  1072  100     5 00:00:05
 1074  1074  0.0     0 00:00:00
stress: info: [1067] successful run completed in 10s

On 4.18.9 (despite all my efforts configuring the kernel) it is more luck whether CPUs 4 or 5 do any work:

Code:
$ ./testcpu
stress: info: [2375] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
 2354  2354  0.1     3 00:00:00
 2374  2374  0.0     0 00:00:00
 2375  2375  0.0     4 00:00:00
 2377  2377 83.5     2 00:00:05
 2379  2379  1.0     5 00:00:00
stress: info: [2375] successful run completed in 10s
stress: info: [2382] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
 2354  2354  0.0     3 00:00:00
 2374  2374  0.0     0 00:00:00
 2382  2382  0.0     1 00:00:00
 2384  2384  100     3 00:00:05
 2385  2385  100     4 00:00:05
 2387  2387  0.0     0 00:00:00
stress: info: [2382] successful run completed in 10s
stress: info: [2390] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
 2354  2354  0.0     3 00:00:00
 2374  2374  0.0     1 00:00:00
 2390  2390  0.0     4 00:00:00
 2392  2392  100     3 00:00:05
 2393  2393  100     5 00:00:05
 2394  2394  100     2 00:00:05
 2396  2396  0.0     0 00:00:00
stress: info: [2390] successful run completed in 10s
stress: info: [2399] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
 2354  2354  0.0     3 00:00:00
 2374  2374  0.0     3 00:00:00
 2399  2399  0.0     5 00:00:00
 2401  2401  100     0 00:00:05
 2402  2402  100     4 00:00:05
 2403  2403  100     5 00:00:05
 2404  2404  100     2 00:00:05
 2406  2406  0.0     1 00:00:00
stress: info: [2399] successful run completed in 10s

There does seem to be a kernel CONFIG option at 4.4, ARM_ROCKCHIP_CPUFREQ, that could explain the 4.4 behaviour. And is not available at 4.18.9. But in reality I would expect stock/mainline 4.18 scheduling to cope properly with big.LITTLE CPUs?

Any thoughts/suggestions welcomed.


RE: Help with linux task schuduler at 4.18, please - dukla2000 - 10-02-2018

Same problem with 4.19.0-rc4, with 1 hog it runs on an A53 core (CPU 1), with 3 hogs two are on A53s and only 1 on an A72 (CPU 4):

Code:
$ uname -a
Linux rpro64.dukla.net 4.19.0-rc4-1071-ayufan-g10a63ec6c2a2 #1 SMP PREEMPT Mon Oct 1 07:33:40 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux
chris@rpro64:~/bin/Rpro64$ ./testcpu
stress: info: [3067] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
 2736  2736  0.0     2 00:00:00
 3066  3066  0.0     3 00:00:00
 3067  3067  0.0     4 00:00:00
 3069  3069  100     1 00:00:05
 3071  3071  0.0     4 00:00:00
stress: info: [3067] successful run completed in 10s
stress: info: [3075] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
 2736  2736  0.0     2 00:00:00
 3066  3066  0.0     1 00:00:00
 3075  3075  0.0     4 00:00:00
 3077  3077  100     4 00:00:05
 3078  3078  100     0 00:00:05
 3081  3081  0.0     1 00:00:00
stress: info: [3075] successful run completed in 10s
stress: info: [3085] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
 2736  2736  0.0     2 00:00:00
 3066  3066  0.0     2 00:00:00
 3085  3085  0.0     4 00:00:00
 3087  3087 98.4     3 00:00:04
 3088  3088 98.4     4 00:00:04
 3089  3089 98.4     0 00:00:04
 3091  3091  0.0     2 00:00:00
stress: info: [3085] successful run completed in 10s
stress: info: [3094] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
 2736  2736  0.0     2 00:00:00
 3066  3066  0.0     4 00:00:00
 3094  3094  0.0     2 00:00:00
 3096  3096 98.8     4 00:00:04
 3097  3097 98.6     5 00:00:04
 3098  3098 98.8     1 00:00:04
 3099  3099 99.0     2 00:00:04
 3101  3101  0.0     3 00:00:00



RE: Help with linux task schuduler at 4.18, please - hunderteins - 10-05-2018

on 4.4 when turning off CONFIG_ARM_ROCKCHIP_CPUFREQ and
setting CONFIG_ARM_BIG_LITTLE_CPUFREQ

I get the same cpu-core preference for  cpu4 and cpu5 (A72)

Is this set on your 4.19?


Code:
#
# CPU frequency scaling drivers
#
CONFIG_CPUFREQ_DT=y
CONFIG_ARM_BIG_LITTLE_CPUFREQ=y
CONFIG_ARM_DT_BL_CPUFREQ=y
# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set
# CONFIG_ARM_ROCKCHIP_CPUFREQ is not set



Code:
$ ./testcpu
stress: info: [1561] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
 1475  1475  0.0     4 00:00:00
 1560  1560  0.0     4 00:00:00
 1561  1561  0.0     1 00:00:00
 1563  1563  100     5 00:00:05
 1564  1564  0.0     4 00:00:00
stress: info: [1561] successful run completed in 10s
stress: info: [1566] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
 1475  1475  0.0     4 00:00:00
 1560  1560  0.0     0 00:00:00
 1566  1566  0.0     4 00:00:00
 1568  1568 99.6     5 00:00:04
 1569  1569 99.8     4 00:00:04
 1570  1570  0.0     1 00:00:00
stress: info: [1566] successful run completed in 10s
stress: info: [1572] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
 1475  1475  0.0     4 00:00:00
 1560  1560  0.0     0 00:00:00
 1572  1572  0.0     1 00:00:00
 1574  1574  100     4 00:00:05
 1575  1575  100     3 00:00:05
 1576  1576  100     5 00:00:05
 1577  1577  0.0     1 00:00:00
stress: info: [1572] successful run completed in 10s
stress: info: [1580] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
  PID   LWP %CPU CPUID     TIME
 1475  1475  0.0     4 00:00:00
 1560  1560  0.0     3 00:00:00
 1580  1580  0.0     4 00:00:00
 1582  1582  100     5 00:00:05
 1583  1583 99.8     1 00:00:04
 1584  1584  100     4 00:00:05
 1585  1585  100     2 00:00:05
 1586  1586  0.0     0 00:00:00
stress: info: [1580] successful run completed in 10s



RE: Help with linux task schuduler at 4.18, please - dukla2000 - 10-06-2018

(10-05-2018, 03:20 AM)hunderteins Wrote: on 4.4 when turning off CONFIG_ARM_ROCKCHIP_CPUFREQ and
setting CONFIG_ARM_BIG_LITTLE_CPUFREQ

I get the same cpu-core preference for  cpu4 and cpu5 (A72)

Is this set on your 4.19?

That is really interesting, thanks.

On both 4.18 and 4.18 I have tried both BIG_LITTLE_CPUFREQ and BL_CPUFREQ 

Code:
#
# CPU frequency scaling drivers
#
CONFIG_CPUFREQ_DT=y
CONFIG_CPUFREQ_DT_PLATDEV=y
# CONFIG_ACPI_CPPC_CPUFREQ is not set
CONFIG_ARM_BIG_LITTLE_CPUFREQ=y
CONFIG_ARM_DT_BL_CPUFREQ=y
# CONFIG_ARM_SCPI_CPUFREQ is not set
# CONFIG_QORIQ_CPUFREQ is not set
CONFIG_NET=y
CONFIG_NET_INGRESS=y

with no success. My thinking is that by now big.LITTLE is old enough that mainline support should be there. But I still cannot discover what I have "wrong".