On 12/08/2020 05:19, benbjiang(蒋彪) wrote: > Hi, > >> On Aug 11, 2020, at 11:54 PM, Dietmar Eggemann <dietmar.eggem...@arm.com> >> wrote: >> >> On 11/08/2020 02:41, benbjiang(蒋彪) wrote: >>> Hi, >>> >>>> On Aug 10, 2020, at 9:24 PM, Dietmar Eggemann <dietmar.eggem...@arm.com> >>>> wrote: >>>> >>>> On 06/08/2020 17:52, benbjiang(蒋彪) wrote: >>>>> Hi, >>>>> >>>>>> On Aug 6, 2020, at 9:29 PM, Dietmar Eggemann <dietmar.eggem...@arm.com> >>>>>> wrote: >>>>>> >>>>>> On 03/08/2020 13:26, benbjiang(蒋彪) wrote: >>>>>>> >>>>>>> >>>>>>>> On Aug 3, 2020, at 4:16 PM, Dietmar Eggemann >>>>>>>> <dietmar.eggem...@arm.com> wrote: >>>>>>>> >>>>>>>> On 01/08/2020 04:32, Jiang Biao wrote: >>>>>>>>> From: Jiang Biao <benbji...@tencent.com>
[...] >> Trace a run of 2 SCHED_OTHER (nice 0) tasks and 1 SCHED_IDLE task on a >> single CPU and trace_printk the conditions 'if (delta < 0)' and ' if >> (delta > ideal_runtime)' in check_preempt_tick(). >> >> Then do the same with 3 SCHED_OTHER (nice 0) tasks. You can also change >> the niceness of the 2 SCHED_OTHER task to 19 to see some differences in >> the kernelshark's task layout. >> >> rt-app (https://github.com/scheduler-tools/rt-app) is a nice tool to >> craft those artificial use cases. > With rt-app tool, sched_switch traced by ftrace, the result is as what I > expected, I use: { "tasks" : { "task_other" : { "instance" : 2, "loop" : 200, "policy" : "SCHED_OTHER", "run" : 8000, "timer" : { "ref" : "unique1" , "period" : 16000, "mode" : "absolute" }, "priority" : 0 }, "task_idle" : { "instance" : 1, "loop" : 200, "policy" : "SCHED_IDLE", "run" : 8000, "timer" : { "ref" : "unique2" , "period" : 16000, "mode" : "absolute" } } }, "global" : { "calibration" : 243, <-- Has to be calibrated against the CPU you run on !!! "default_policy" : "SCHED_OTHER", "duration" : -1 } } to have 2 (periodic) SCHED_OTHER and 1 SCHED_IDLE task. > ** 2normal+1idle: idle preempt normal every 600+ms ** During the 3.2s the 2 SCHED_OTHER tasks run, the SCHED_IDLE task is switched in only once, after ~2.5s. > ** 3normal+idle: idle preempt normal every 1000+ms ** Ah, this was meant to be 3 SCHED_OTHER tasks only! To see the difference in behavior. > ** 2normal(nice 19)+1idle(nice 0): idle preempt normal every 30+ms ** During the 3.2s the 2 SCHED_OTHER tasks run, the SCHED_IDLE task is switched in every ~45ms. [...]