fineamy 发表于 2006-9-12 11:29:57

简单的代码,却不明所以---profile_hit请教!

void profile_hit(int type, void *__pc)
{
        unsigned long pc;

        if (prof_on != type || !prof_buffer)
                return;
        pc = ((unsigned long)__pc - (unsigned long)_stext) >> prof_shift;
        atomic_inc(&prof_buffer);
}
profile用于优化代码,辅助识别"hot spots",但是这个函数实现何功能,哪位大虾可以解释一下!谢谢,

fineamy 发表于 2006-9-14 10:26:06

这个函数是在阅读LINUX2.6.16的主调度函数schedule时碰到的,相信各位也会碰到.

不清楚是否真的有很多人在学内核,
但是为什么肯定会碰到的问题就是没人知道,
郁闷...
不清楚有多少人是否真的读过源码.
但是为什么这么显眼的问题,竟没人了解,
郁闷...
LINUX内核阅读----
不懂这个,说明你没看懂内核!

gotop167 发表于 2006-9-16 13:00:48

2.6的核心没有研究过,不过大概的意思能看懂
如果类型不是type或者没有设置prof_len(也就是0的话)直接退出
否则根据prof_shift(启动时设置的参数)计算pc(其实是prof_buffer数组的索引)
最后在prof_len和pc中取的最小值,也就是索引prof_buffer的地址!
atomic_inc没有研究过!

fineamy 发表于 2006-9-16 15:37:05

谢谢gotop167的耐心分析!
页: [1]
查看完整版本: 简单的代码,却不明所以---profile_hit请教!