[置顶] 泰晓社区近日发布了一款儿童益智版 Linux 系统盘,集成了数十个教育类与益智游戏类开源软件儿童益智版 Linux 系统来了,既可打字编程学习数理化,还能下棋研究数独提升智力
[置顶] Linux Lab v1.3 升级部分内核到 v6.6,新增上游内核工具链支持,完善 riscv64 和 nolibc 开发支持,另有新增 2 款虚拟开发板:ppc64le/pseries 和 ppc64le/powernvLinux Lab 发布 v1.3 正式版,升级部分内核到 v6.6,新增 2 款 ppc64 虚拟开发板
Linux 实时优化:批量优化 mdelay
Wu Zhangjin 创作于 2014/08/24
问题描述
根据 Linux时钟API使用详解:事关实时响应、功耗与调试,如果想批量找到内核中的 mdelay() 调用,并根据实际情况优化为 usleep_range()或者msleep()等,该如何?
问题分析
首先需要确认哪些代码是我们用到的,接着就是找出这些代码中的 mdelay() 调用,最后就是作针对性的优化。
解决方案
下面这个就可以找出所有用到的mdelay,进入到使用的Linux内核源代码目录下执行即可:
$ find ./ -name "*.o" | sed -e "s/.o$/.c/g" | xargs -i grep -uil mdelay {} 2>/dev/null
之后就是根据 Linux时钟API使用详解:事关实时响应、功耗与调试 的原理进行优化:
- 原子上下文或者某些特定场景的mdelay()保留,如果太大,考虑是否可以更小,或者把部分操作延迟到workqueue执行
- 非原子上下文,把 > 100ms, < 20ms 的替换为 usleep_range(),记得加一个范围,比如原来是mdelay(5),并且这个delay可以更长,比如6ms,则可以优化为usleep_range(5000,6000)。
- 非原子上下文,把 > 20ms 的替换为 msleep()。
- 如果超过1s,请用delayed workqueue或者timer,抑或是确实需要是才用alarm
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |