linux rt 线程调度

aarch64  linux4.9

最近遇到问题需要trace某个rt线程调度情况

trace event filter:

echo 1 > sched/sched_switch/enable   echo "next_comm == xxx" > sched/sched_switch/filter  (filter 格式可以cat format 同目录下获得)

echo 1 > sched/sched_wakeup/enable    echo "next_comm == xxx" > sched/sched_wakeup/filter

echo 1 > sched/sched_migrate/enable      echo "next_comm == xxx" > sched/sched_migrate/filter

echo 2048 > buffer_size_kb   echo 1 > tracing_on

以上的trace event得到的结果可以观察xxx线程的调度状况包括什么时候被调度到,sleep后什么时候被wakeup 已经再smp上的迁移状况,经由本问题,阅读了linux rt调度的相关code flow 探索了下Linux上的RT线程的load balance

sched_entity  sched_group  sched_domain  sched_class

rt_sched_class 即为rt调度器的描述,

const struct sched_class rt_sched_class = {
	.next			= &fair_sched_class,
	.enqueue_task		= enqueue_task_rt,  //enqueue task to rt_rq 
	.dequeue_task		= dequeue_task_rt,  //dequeue task from rt_rq 
	.yield_task		= yield_task_rt,

	.check_preempt_curr	= check_preempt_curr_rt,

	.pick_next_task		= pick_next_task_rt, //pick a task to rt_rq 
	.put_prev_task		= put_prev_task_rt,  //put task to right palce to rt_rq when current task sched out

#ifdef CONFIG_SMP
	.select_task_rq		= select_task_rq_rt,  //select cpu for task

	.set_cpus_allowed       = set_cpus_allowed_common, 
	.rq_online              = rq_online_rt,
	.rq_offline             = rq_offline_rt,
	.task_woken		= task_woken_rt,
	.switched_from		= switched_from_rt,
#endif

	.set_curr_task          = set_curr_task_rt,
	.task_tick		= task_tick_rt,

	.get_rr_interval	= get_rr_interval_rt,  //get the SCHED_RR interval for the named process  

	.prio_changed		= prio_changed_rt,
	.switched_to		= switched_to_rt,

	.update_curr		= update_curr_rt,
};

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shenhuxi_yu

感谢投币,继续输出

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值