Linux-Kernel

如何驗證系統中的時鐘源?

  • August 1, 2021

根據核心程式碼,計時會將時鐘源初始化為 jiffies。

/*
* timekeeping_init - Initializes the clocksource and common timekeeping values
*/
void __init timekeeping_init(void)
{
...
clock = clocksource_default_clock();
...
}

struct clocksource * __init __weak clocksource_default_clock(void)
{
   return &clocksource_jiffies;
}

但它也表示,一旦檢測到新的時鐘源,計時將取代它。

/**
* timekeeping_notify - Install a new clock source
* @clock:      pointer to the clock source
*
* This function is called from clocksource.c after a new, better clock
* source has been registered. The caller holds the clocksource_mutex.
*/

現在我知道當我輸入命令“date”時,它最終會從時鐘源獲取系統時間。我想知道我當時使用的是哪個時鐘源,是 jiffies 嗎?

我找到了。

時鐘源可以在以下路徑中找到:

/sys/devices/system/clocksource/clocksource0

如圖所示:

-r--r--r--. 1 root root 4096 Jul 30 16:24 available_clocksource
-rw-r--r--. 1 root root 4096 Jul 30 16:32 current_clocksource
drwxr-xr-x. 2 root root    0 Jul 30 16:24 power
lrwxrwxrwx. 1 root root    0 Jul 28 11:40 subsystem -> ../../../../bus/clocksource
-rw-r--r--. 1 root root 4096 Jul 28 11:40 uevent
--w-------. 1 root root 4096 Jul 30 16:24 unbind_clocksource

available_clocksource顯示所有可用的時鐘源。

current_clocksource顯示目前正在使用的時鐘源系統。

使用echo xxx > current_clocksource可以更改目前時鐘源(jiffies是預設時鐘源,不在available_clocksource,但無法設置。系統似乎不允許設置非高解析度時鐘源)。

引用自:https://unix.stackexchange.com/questions/662571