diff -u: 内核开发里的新鲜事儿
安迪·克伦(Andi Kleen)则想为perf增加底层CPU事件支持。问题在于这可能会导致大量的底层事件,而且会因CPU的变化而改变。即使为了所有类型的CPU把可能的时间都存储在内存里,也可能会显著地增加内核的运行大小。因此,把这个信息硬编码进内核的方法是有问题的。
他也指出OProfile工具依赖于这些时间的公开可用列表,尽管他表示OProfile开发者并非总维持他们的列表与最新的可用版本一致。
为了解决这些问题,安迪提交了一个补丁,允许perf识别在给定的系统上为特定的CPU需要那种事件列表,并自动从起始位置下载这个列表的最新版本。然后perf可以解释这个列表并分析其中的事件,不会使内核负载过重。
有各种各样对安迪代码的反馈,其中大部分涉及到应该在哪个目录下保存事件列表和文件如何命名。这份代码本身的特性似乎得到了很好的回应。一处细节证明了安迪的代码比其他人的更有争议,就是将列表下载到用户家目录下的一个子目录。安迪表示如果不这样做的话,用户可能会以系统管理员的身份去下载事件列表,这会是危害安全的操作。
萨沙·莱文(Sasha Levin)最近发布了一个脚本来从堆栈转储中把十六进制的偏移量翻译成有意义的指向内核源码文件的行号。因此诸如“ffffffff811f0ec8”形式的十六进制表示可以被翻译成“fs/proc/generic.c:445”。
然而,结果表明李纳斯·托瓦兹正打算从堆栈转储中移除十六进制偏移量,具体原因是他们难以理解。所以萨沙的代码看起来过时了。[译者注:程序媛,伤不起!:< ]
他们在这个问题上纠结了一番。起初,萨沙打算依赖存储在System.map文件里的数据区补偿,但李纳斯指出包括他在内的有些人并不会保留System.map文件。李纳斯推荐使用/usr/bin/nm从编译好的内核文件中提取符号表。
所以,似乎萨沙的脚本可能确实为调试堆栈转储提供了有意义的文件和行号,假设堆栈转储提供足够的信息去完成计算。
via: http://www.linuxjournal.com/content/diff-u-whats-new-kernel-development-0
原文作者:Zack Brown
本文转载来自 Linux 中国: https://github.com/Linux-CN/archive