9.5. 读取硬件时钟源的成本比较

您可以比较系统中时钟的速度。从 TSC 读取涉及从处理器读取寄存器。从 HPET 时钟读取涉及读取内存区域。从 TSC 读取速度较快,当每秒时间戳数千条消息时,它提供显著的性能优势。

先决条件

  • 系统上的 root 权限。
  • clock_timing 程序必须位于系统中。如需更多信息,请参阅 clock_timing 程序

流程

  1. 更改到保存了 clock_timing 程序的目录。

    # cd clock_test
  2. 查看系统中可用的时钟源。

    # cat /sys/devices/system/clocksource/clocksource0/available_clocksource
    tsc hpet acpi_pm

    在这个示例中,系统中的可用时钟源为 TSC、SpeT、Spe T 和 ACPI_PM

  3. 查看当前使用的时钟源。

    # cat /sys/devices/system/clocksource/clocksource0/current_clocksource
    tsc

    在这个示例中,系统中的当前时钟源是 TSC

  4. 与 ./clock_timing 程序一起运行 时间 实用程序。输出中会显示读取时钟源 1,000万次所需的时间。

    # time ./clock_timing
    
    	real	0m0.601s
    	user	0m0.592s
    	sys	0m0.002s

    以下示例显示了以下参数:

    • 实时 - 从程序调用开始的总时间,直到进程结束。real 包括用户和内核时间,通常大于后面的两个的总和。如果这个过程是由具有更高优先级的应用程序中断,或者由硬件中断(IRQ 等系统事件等系统事件中断,这的时间也被等待计算 在实际 下。
    • user - 进程在用户空间内花费的时间执行不需要内核干预的任务。
    • sys - 内核在执行用户进程所需的任务时使用的时间。这些任务包括打开文件、读取和写入文件或 I/O 端口、内存分配、线程创建和网络相关活动。
  5. 将您要测试的下一个时钟源的名称写入 /sys/devices/system/clocksource/clocksource0/current_clocksource 文件。

    # echo hpet > /sys/devices/system/clocksource/clocksource0/current_clocksource

    在这个示例中,当前的时钟源被改为 HPET

  6. 对于所有可用时钟源,重复步骤 4 和 5。
  7. 比较第 4 步获得所有可用时钟源的结果。

其他资源

  • time(1) man page