ldd3: 在 jit.c: jit_tasklet中测试rdtscl出现奇怪结果
我在ldd3的示例代码的jit.c文件的jit_tasklet函数中添加了rdtscl函数,打算测试我的机器上的指令周期,可是出现了奇怪的测试结果。
int jit_tasklet(char *buf, char **start, off_t offset,
int len, int *eof, void *arg)
{
struct jit_data *data;
char *buf2 = buf;
unsigned long j = jiffies;
long hi = (long)arg;
unsigned long ini, end;
rdtscl(ini);
rdtscl(end);
printK(KERN_ALERT "time lapse: %lu,%lu,%lu\n", end, ini, end - ini);
data = kmalloc(sizeof(*data), GFP_KERNEL);
if (!data)
return -ENOMEM;
init_waitqueue_head (&data->wait);
/* write the first lines in the buffer */
.................................................................
编译模块,加载模块后。 运行 cat /proc/jitasklet, 然后 dmesg, 查看最后两行,结果是:
time lapse:298040156,298039876,280
time lapse:299368484,299367684,800
怎么会这样呢? 我只运行了一次cat /proc/jitaskle, 怎么会有两行输出呢? printk怎么会被执行两次呢?
请高手指点!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
cat的问题,你执行一次cat,你能确保他只read了一次么?
想确认一下最好自己写一个程序,调用read去读就ok了
用read试过了。的确是cat的问题! 但是。想不通啊! data->loops = JIT_ASYNC_LOOPS就是用来控制一次jit_tasklet调用生成的数据行数据的啊 ! jit.c中 JIT_ASYNC_LOOPS = 5 ,按照这个程序的逻辑,tasklet会生成5行数据,加上jit_tasklet函数会生成的两行,一共七行! 也就是说一次jit_tasklet调用生成7行数据。
而运行cat /pro/jitaskjet 时,的确是7行,说明jit_tasklet应该调用了一次啊! 高人指点下阿。 ?????
[ 本帖最后由 yaoboyoyo 于 2009-2-27 10:29 编辑 ]