QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2393|回复: 3

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

[复制链接]
发表于 2006-9-12 11:29:57 | 显示全部楼层 |阅读模式
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[min(pc, prof_len - 1)]);
}
profile用于优化代码,辅助识别"hot spots",但是这个函数实现何功能,哪位大虾可以解释一下!谢谢,
 楼主| 发表于 2006-9-14 10:26:06 | 显示全部楼层
这个函数是在阅读LINUX2.6.16的主调度函数schedule时碰到的,相信各位也会碰到.

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

使用道具 举报

发表于 2006-9-16 13:00:48 | 显示全部楼层
2.6的核心没有研究过,不过大概的意思能看懂
如果类型不是type或者没有设置prof_len(也就是0的话)直接退出
否则根据prof_shift(启动时设置的参数)计算pc(其实是prof_buffer数组的索引)
最后在prof_len和pc中取的最小值,也就是索引prof_buffer的地址!
atomic_inc没有研究过!
回复

使用道具 举报

 楼主| 发表于 2006-9-16 15:37:05 | 显示全部楼层
谢谢gotop167的耐心分析!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-22 07:59 , Processed in 0.073983 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表