2010-06-10 114 views
4

我想優化的linux的啓動時間嵌入式設備上(而不是PC)定時Linux內核啓動時優化

目前個人資料的啓動順序,
我有啓用時間信息printk日誌。

這是最適合的方式嗎?
如果不是,我如何以最小的開銷來分析引導序列(與時間)?

PS:
我有(裝置)通過串行連接&
我使用TeraTerm過窗戶-XP訪問它的終端。

回答

1

它是一個漫長的時間,但在這裏更新了答案以供參考。

這裏是我最後落得這樣做:

  1. 我的串行終端客戶機上啓用時間戳在PC(TeraTerm)。

    實際上啓用捕獲日誌到磁盤上的文件&
    選擇選項爲每行添加時間戳。

  2. 在內核中添加了printk()聲明。

    • 第一次在我試圖分析的塊的開始。
    • 第二次在我試圖分析的塊的結尾。

雖然有當一事件在設備上發生,並且當通過串行主機PC上被接收日誌,這是在給定的硬件設置相當恆定之間有輕微的延遲。因此,兩個時間戳之間的差異與生成這些日誌的設備上的事件之間的實際時間差是精確的。另外聲明的開銷/副作用也是最小的。


更新: 2年的路線,以及數百種更新的內核調試的時間,我會建議使用function tracers。儘管如此,它還是需要一點努力去學習。由於很好地解釋here,需要:

  • 通過cat /sys/kernel/debug/tracing/trace
2

printk計時信息的開銷很小。但是,這些信息並不總是有用,因爲它不會告訴你用戶空間中發生了什麼。

你可能想試試Bootchart。它是一個在啓動時在後臺運行並從/ proc收集數據的shell腳本。雖然它比printk計時信息有更大的開銷,但它更爲詳細,並允許您配置進程啓動和磁盤利用率。

http://www.bootchart.org/

+0

@剋日什托夫·我曾嘗試Bootchartd在.config

  • 使用trace_printk()而不是printk()
  • 檢查輸出日誌啓用CONFIG_FUNCTION_TRACER。但是,它只是給了我開始處理流程的時間等。我如何計算特定的「代碼部分」...您知道的任何其他工具?... – TheCodeArtist 2010-06-21 03:45:20

  • +0

    您可以嘗試通過以下方式進行分析:使用-pg編譯,然後在輸出中使用gprof。但是,開銷是相當大的。 – 2010-07-04 09:59:56