ENQUEUE_MIGRATED

本文详细介绍了Linux内核中enqueue_task函数及其参数flags的使用,特别是ENQUEUE_MIGRATED标志。ENQUEUE_MIGRATED并不适用于所有跨CPU的任务迁移,而是在try_to_wake_up唤醒并经过CPU迁移的任务中设置。同时,文章讨论了其他相关flags的作用,如ENQUEUE_WAKEUP、ENQUEUE_NOCLOCK等,并指出在enqueue时无法直接区分fork和CPU迁移的任务。
摘要由CSDN通过智能技术生成

enqueue_task的作用

Linux scheduler在需要把一个task加入到某个cpu的红黑树运行队列上时,就会调用enqueue_task这个函数。我们可以看下这个函数的原型:
enqueue_task(rq, task, flags)
其中的flags就可能包含ENQUEUE_MIGRATED这个标志。
我们可能会从字面意思理解,ENQUEUE_MIGRATED表示所有跨CPU的task迁移,在入队列时都有这个标记,其实不是的。

enqueue flags

我们可以看内核代码:
#define ENQUEUE_WAKEUP 0x01
#define ENQUEUE_RESTORE 0x02
#define ENQUEUE_MOVE 0x04
#define ENQUEUE_NOCLOCK 0x08

#define ENQUEUE_HEAD 0x10
#define ENQUEUE_REPLENISH 0x20
#ifdef CONFIG_SMP
#define ENQUEUE_MIGRATED 0x40
#else
#define ENQUEUE_MIGRATED 0x00
#endif

其中的ENQUEUE_WAKEUP和ENQUEUE_MIGRATED是我们关心的,WAKEUP是指通过try_to_wake_up唤醒的task的enqueue标志,其中不包括fork。
而ENQUEUE_MIGRATED仅在ENQUEUE_WAKEUP存在的情况下才会有,表示这个wakeup的task经过了CPU迁移。

enqueue flags的作用

所以ENQUEUE_MIGRA

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值