[Exchange and share] 低性能笔记本上优化前台程序使用体验,提高前台程序响应速度
Tofloor
poster avatar
Zyx丶心
deepin
2024-08-11 19:58
Author

因为公司统一提供的笔记本性能较低,前台程序(如加载了很多插件的浏览器、微信、输入法等)使用体验不好、很卡,响应慢,为优化使用体验、提高使用舒适度、提高前台程序响应速度。

研究了下,参考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 {}

我的实际使用:

$ sudo crontab -l
*/5 * * * * ps --no-headers -u 1000 -o pid | xargs -i chrt -ap {} 2>/dev/null | grep -v priority | grep SCHED_OTHER | awk '{print $2}' | awk -F\' '{print $1}' | xargs -i chrt -pf 50 {} &>/dev/null
Reply Favorite View the author
All Replies
先秦淑女步
deepin
2024-08-11 20:54
#1

感谢分享

Reply View the author
先秦淑女步
deepin
2024-08-11 20:54
#2

好人一生平安呀

Reply View the author
神末shenmo
deepin
Spark-App
2024-08-11 21:23
#3

可以解释一下功能吗~

Reply View the author
hinata
deepin
2024-08-11 21:26
#4

agree

Reply View the author
Zyx丶心
deepin
2024-08-11 21:47
#5
神末shenmo

可以解释一下功能吗~

核心思路就是将当前用户下的所有调度策略为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 倍,以便运行。

Reply View the author
eagleluo2020
deepin
2024-08-12 08:05
#6

学习了,高手。

Reply View the author
zijinyise
deepin
2024-08-12 09:19
#7

虽然看不懂,但是给大佬点个攒like

Reply View the author
柠萌~
deepin
2024-08-13 20:59
#8

虽然看不懂,但是给大佬点个like

Reply View the author