時間戳記計數器 TSC

來源:互聯網
上載者:User

TSC 是時間戳記計數器的縮寫,它是 Pentium 相容處理器中的一個計數器,它記錄自啟動以來處理器消耗的刻度數。在每個時鐘到來時,該計數器自動加一。

因為 TSC 隨著處理器周期速率的變化而變化,所以它提供了非常高的精確度。它經常被用來分析和檢測代碼。TSC 的值可以通過 rdtsc 指令來讀取。TSC 的節拍還可以轉換為秒,轉換方法是將其除以 CPU 的時脈速率(可以從核心變數 cpu_khz 擷取)。

在 include/asm-i386/Msr.h (核心版本:2.6.23)裡可以看到一個函數:

static inline
unsigned
long long
native_read_tsc( void)
{
     unsigned
long longval;
    asm volatile("rdtsc":
"=A" (val));
     return
val;
}


這個函數正是使用 rdtsc 指令讀取 TSC 的值,並將其存放在 %eax 和 %edx (=A)中,然後再存往 val 變數中。long long 類型為 64 位元。


在使用者態,也可以利用此函數來列印其值:

#include <stdio.h>

unsigned
long longnative_read_tsc(void)
{
        unsigned
long longval;
        asm volatile("rdtsc":
"=A" (val));
        return
val;
}

int
main()
{
        unsigned
long longval;
        unsigned
long longval2;

        val =native_read_tsc();
        sleep(1);
        val2 =native_read_tsc();

        printf ("%lld\n", (val2-val)/1000000);

        return (0);
}


運行輸出

$ ./rdtsc
CPU Mhz: 2327

從上面可以看到當前 CPU 的頻率是 2.33G 。這個值也可以通過 /proc/cpuinfo 檔案看到,比如我這裡:

cpu MHz         : 1596.000

為什麼這裡的 CPU 只有 1.6G 了呢?原因是我的主板在 BIOS 裡開啟了“英特爾CPU頻率動態調節”功能。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.