对于CPU亲和力有限制的进程(限制1),即使active_load_balance被触发,目标CPU也不能把它push过来 。所以,实际上,触发active_load_balance的目的是要尝试把当时正在目标CPU上运行的那个进程弄过来(针对限制2) 。
在每个CPU上都会运行一个迁移线程,active_load_balance要做的事情就是唤醒目标CPU上的迁移线程,让它执行active_load_balance的回调函数 。在这个回调函数中尝试把原先因为正在运行而未能迁移的那个进程push过来 。为什么load_balance的时候不能迁移,active_load_balance的回调函数中就可以了呢?因为这个回调函数是运行在目标CPU的迁移线程上的 。一个CPU在同一时刻只能运行一个进程,既然这个迁移线程正在运行,那么期望被迁移的那个进程肯定不是正在被执行的,限制2被打破 。
当然,在active_load_balance被触发,到回调函数在目标CPU上被执行之间,目标CPU上的TASK_RUNNING状态的进程可能发生一些变化,所以回调函数发起迁移的进程未必就只有之前因为限制2而未能被迁移的那一个,可能更多,也可能一个没有 。
推荐阅读
- 浅谈在Linux中如何将脚本做成系统服务开机自启动
- Linux服务器磁盘满了怎么办
- linux安装php步骤详解
- 「linux专栏」top命令用法详解,再也不怕看不懂top了
- 从命令行查看所有已安装的Linux内核
- Linux再次被爆root提权漏洞,已存在长达15年
- 获取linux内存、cpu、磁盘IO等信息shell脚本及其原理详解
- linux命令删除目录下所有文件?linux怎么删除目录下的文件
- 一篇文章讲清Linux操作系统的目录结构
- 检查Linux内存占用的 5 大命令,你知道几个?