论文网
教师招聘网
万事OK网
发表论文
 
 首页 > IT文章 > 程序设计 >
Linux 计时概要

[科技论文网] http://www.scipapers.com    2007-11-13  

    Linux 计时概要

    来源:http://blog.csdn.net/linux_coder  

    1.用户空间
    用户空间可以使用下面的函数,这些是新增加的通用接口,用来替代过时的不够精确的gettimeofday()。
    他们的精度取决于不同平台,应该都是硬件实现,struct timespec可表示的最小精度是纳秒
    #include <time.h>

    int clock_getres(clockid_t clk_id, struct timespec *res);
    int clock_gettime(clockid_t clk_id, struct timespec *tp);
    int clock_settime(clockid_t clk_id, const struct timespec *tp);


    2.内核
    内核里面时间可查看jiffies的值,但是它依靠时钟中断实现,时间精度取决于HZ的定义。在linux2.4下它是1/100秒,在linux2.6下它是1/1000秒



    3。自己动手

    自己通过平台提供的硬件计时器做也十分容易。

    比如在x86平台上

    #define rdtsc(low, high) \
            __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))
    #define rdtscll(val) \
            __asm__ __volatile__("rdtsc" : "=A" (val))

    通过两次读取值,得到的差就是间隔时间,这个时间单位是CPU的circle,因此需要转换
    通过下面的函数读取/proc/cpuinfo的值即可计算1 circle的时间。显然精度达到了circle是相当精确的,同时由于cpu越来越快,这个精度也跟着日新月异

    static  __u64 get_cpu_freq(void)
    {
            FILE *fd = 0;
            __u64 freq = 0;
            float freqf = 0;
            char *line = NULL;
            size_t len = 0;
     
            fd = fopen("/proc/cpuinfo", "r");
            if(!fd) {
                    fprintf(stderr, "failed to get cpu frequency:");
                    perror(NULL);
                    goto out;
            }
            while(getline(&line, &len, fd) != EOF) {
                    if(sscanf(line, "cpu MHz\t: %f", &freqf) == 1) {
                   freqf = freqf * 1000000UL;
                            freq = freqf;
                            break;
                    }
            }
            fclose(fd);
    out:
            return freq;
    }

    4。最精密的计时
    这个靠普通的台式机已经是无法完成的了。只有通过逻辑分析仪才能达到纳秒级的精度。在计时前后变更一个硬件的输出,同时使用逻辑分析仪捕获改硬件输出的变化,即可进行测量

        来源:

声明:本文由网友推荐或作者提交,版权归原作者所有,刊登此文仅为传播知识,展示研究成果,提高文章引用率。未经原作者授权,禁止用于任何形式的商业行为。科技论文网倡导尊重知识、尊重劳动、保护原创、知识共享。由于部分论文文章来于网络,文章作者不祥,请相关的原创作者与我们联系,以便加上您的署名。

  
Linux 计时概要
Linux下多进程编程详细解析     杀死进程方法大全
最新论文
·[程序设计]嵌入式linux启动信息完全注释
·[程序设计]Linux2.6 启动传递命令行分析
·[程序设计]用systemtap研究内核
·[程序设计]Linux2.6内核epoll 网络编程
·[程序设计]Linux2.6下ESP包解析流程
·[程序设计]进程间通信的11种方法
·[程序设计]linux进程间通信总结
·[程序设计]Linux下select调用的过程
·[程序设计]Linux下多进程编程详细解析
·[程序设计]Linux 计时概要
 
 

搜索论文

Google
论文分类

 免费发布论文    中国论文网 2008版权所有  业务联系:pinjiao@126.com