1. Linux内核代码的编写和优化技巧 1.1. 代码编写 使用 __same_type和 typecheck编译时检查类型匹配。 __printf和 __scanf编译时检查代码。 对宏进行undef后重新定义,生成不同的代码,如 __SYSCALL配合 unistd.h生成系统调用,TRACE_EVENT生成ftrace相关的数据结构和各个函数。 使用模板宏,减少重复代码也降低出错率,如 STANDARD_PARAM_DEF生成 module_param用到的set和get函数。 使用内联汇编提升性能。 使用位图优化内存占用。 无锁队列kfifo。 1.2. 控制编译时行为 O2或 O3,编译时优化汇编代码。...
1. 背景 引入jump label的背景,参考Linux: Jump label实现简析 在内核代码中,有很多分支判断条件,它们在绝大多数情形下,都是不成立的。尽管我们已经加上unlikely修饰来进行优化,但是,读取 condition 仍然要访问内存,仍然需要用到cache;另外,也会CPU分支预测失败。虽然少数这样的代码影响不大,但当这样的条件判断代码(如内核中大量的tracepoint)增多的时候,将对cache会造成很大压力,所有这些代码导致的cache miss,以及CPU分支预测失败,所造成的性能损失,就变得可观起来。因此,内核需要一种方案,来解决这样的问题。这个解决方案,就是本文描述的 Jump label。...