ldd3: 在 jit.c: jit_tasklet中测试rdtscl出现奇怪结果

发布于 2022-09-18 19:20:09 字数 1611 浏览 13 评论 0

我在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

趁年轻赶紧闹 2022-09-25 19:20:09

cat的问题,你执行一次cat,你能确保他只read了一次么?
想确认一下最好自己写一个程序,调用read去读就ok了

著墨染雨君画夕 2022-09-25 19:20:09

用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 编辑 ]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文