感谢分享
好人一生平安呀
可以解释一下功能吗~
可以解释一下功能吗~
核心思路就是将当前用户下的所有调度策略为SCHED_OTHER的线程(注意不是进程),改为SCHED_FIFO调度策略,模拟实现Winodows的抢占效果。优先级设置为50,一个是无法精确识别当前正在操作、画面中激活为焦点(activewindow)的线程是哪个,只能统一设置,二个仅是为了提高优先级、方便后期添加更高或更低优先级的线程。
因为我的后台会运行一些以root身份运行的服务等,就可以用用户身份的维度进行区分,间接降低后台服务的优先级。
只替换SCHED_OTHER调度的线程,就是考虑到系统会自动启动一些SCHED_BATCH调度策略的线程,避免提高这些默认的低优先级线程,避免造成系统稳定性问题或浪费不必要的性能资源,其他非SCHED_OTHER调度的线程同理。
全部替换是因为,除了自己手动打开浏览器、微信外,其实还有一些开机自启的如输入法等,虽然是后台启动、后台运行的程序,但实际会影响使用体验的进程。——关于这一点,大家如果有更好的精确识别、精确控制方案,也欢迎大家提出,并提供参考改进。
PS:按网上查到的资料来看,Windows的调度策略是可抢占的实时调度算法,类似FIFO。但Windows和Linux的区别在于,用户正在交互使用的窗口会得到优先级提升,以便改善响应时间。原因就是对于类 NORMAL PRIORITY CLASS 的进程,Windows 有一个特殊调度规则,Windows 会将这类进程分成两种:前台进程(屏幕上已选的进程)和后台进程(屏幕上未选的进程),当一个进程移到前台,在被抢占前,Windows 会增加这个进程的时间片,通常是原来的 3 倍,以便运行。
学习了,高手。
虽然看不懂,但是给大佬点个攒
虽然看不懂,但是给大佬点个
因为公司统一提供的笔记本性能较低,前台程序(如加载了很多插件的浏览器、微信、输入法等)使用体验不好、很卡,响应慢,为优化使用体验、提高使用舒适度、提高前台程序响应速度。
研究了下,参考Windows的调度理念,提供给有相同烦恼的兄弟们参考:
执行核心关键命令:
ps --no-headers -u $USER -o pid | xargs -i chrt -ap {} 2>/dev/null | grep -v priority | grep SCHED_OTHER | awk '{print $2}' | awk -F\' '{print $1}' | xargs -i sudo chrt -pf 50 {}
我的实际使用: