2012-10-02 73 views
3

是否有一種基於內核檢測的方法來測量內核在啓動期間轉移到用戶空間的時間?我可以使用printk的時間信息,但我不確定在哪裏放置此printk,以便觀察內核何時轉移到用戶空間。從啓動到用戶空間測量Linux內核所需的時間

+0

你是什麼意思,到底是什麼?系統上有許多線程,一些在內核空間,一些在用戶空間,許多從一個到另一個過渡,然後隨着時間的推移......如果你的意思是「我的代碼什麼時候開始運行」,爲什麼不把它放在你的代碼的開始? – Nemo

+0

正好我的意思是,內核中的切換到用戶空間的地方......我無法識別這樣的位置,如果有的話。 – TheLoneJoker

回答

5

start_kernel()由體系結構特定代碼(arch/architecture_type)調用。內核加載後,它調用第一個用戶空間進程,/sbin/init(或更近期發行版的systemd)init_post()這兩個函數都在init/main.c中定義,其中

您可能想要閱讀此blog以瞭解啓動過程的詳細說明。

0

創建自己的init,可以登錄到/dev/kmsg立即

一個簡單的替代與printk黑客內核代碼是使用以下初始化:

#include <stdio.h> 
#include <unistd.h> 

int main(void) { 
    FILE *fp; 
    fp = fopen("/dev/kmsg", "w"); 
    fputs("hello init\n", fp); 
    fclose(fp); 
    while (1) 
     sleep(0xFFFFFFFF); 
} 

,並使用內核命令行參數:

init=/path/to/myinit printk.devkmsg=on printk.time=y 

現在就在開機結束後, init啓動,我們看到一則消息:

[<timestamp>] hello init 

這是不是100%準確的,你會失去一些CPU週期爲fopen,但我不認爲它會很大關係。

最小的可重複設置來測試它:

相關問題