在執行 OProfile 之前,必須先做好設定。 至少要選取監視核心的狀況(或選取不監視核心)。 以下的部份 將說明如何使用 opcontrol 工具程式來設定 OProfile。 當您執行 opcontrol 指令時,設定的選項將會儲存到 /root/.oprofile/daemonrc 檔案中。
首先,請設定是否要監視核心的狀況,這是在啟動 OProfile 前唯一必要的設定選項,所有其他的設定皆為可選的。
如要監視核心,請以 root 身份執行下列指令:
opcontrol --vmlinux=/boot/vmlinux-`uname -r` |
如要設定 OProfile 不監視核心,請以 root 身份執行下列指令:
opcontrol --no-vmlinux |
這個指令也會載入 oprofile 核心模組(假如尚未載入的話),並且建立 /dev/oprofile/ 目錄(假如原本不存在的話)。 請參考 第 43.6 節 以取得關於這個目錄的詳細資訊。
![]() | 請注意 |
---|---|
即使 OProfile 被設定為不分析核心的使用狀況,仍然必須要執行 SMP 核心,以使得 oprofile 模組可以被載入。 |
設定是否要從核心收集樣本資料只會改變收集到何種資料,而不會改變如何或在何處儲存收集到的資料。 如要 為核心與應用程式函式庫產生不同的樣本檔案,請參考 第 43.2.3 節。
大部分的處理器都含有計數器,可以被 OProfile 使用來監視特定的系統事件。 如 表格 43-2 所示,可以使用的計數器數目取決於處理器。
處理器 | cpu_type | 記數器的數量 |
---|---|---|
Pentium Pro | i386/ppro | 2 |
Pentium II | i386/pii | 2 |
Pentium III | i386/piii | 2 |
Pentium 4 (不含超執行緒功能) | i386/p4 | 8 |
Pentium 4 (含超執行緒功能) | i386/p4-ht | 4 |
Athlon | i386/athlon | 4 |
AMD64 | x86-64/hammer | 4 |
Itanium | ia64/itanium | 4 |
Itanium 2 | ia64/itanium2 | 4 |
TIMER_INT | timer | 1 |
IBM eServer iSeries | timer | 1 |
IBM eServer pSeries | timer | 1 |
IBM eServer S/390 | timer | 1 |
IBM eServer zSeries | timer | 1 |
表格 43-2. Profile 處理器與記數器
使用 表格 43-2 來檢驗已偵測到正確的處理器類型,並且決定同時可以 監視的系統事件數量。 假如處理器沒有已支援的效能監視硬體,可以使用 timer 當作處理器的類型。
假如使用了 timer,無法為任何的處理器設定系統事件,因為硬體不含有 支援的硬體效能計數器,則會使用計時器的中斷值來做系統分析。
假如沒有使用 timer 來當作處理器類型,您可以改變所監視的系統事件, 而且預設將會為處理器的計數器 0 設定給一個時間為基礎的事件。 假如處理器上有一個以上的計數器,除了 計數器 0 外的其他計數器預設將不會設定給任何事件。 預設監視的系統事件如 表格 43-3 所示。
處理器 | 計數器 0 的預設系統事件 | 說明 |
---|---|---|
Pentium Pro, Pentium II, Pentium III, Athlon, AMD64 | CPU_CLK_UNHALTED | 處理器的時鐘並未停止 |
Pentium 4 (HT 與 non-HT), Intel® EM64T | GLOBAL_POWER_EVENTS | 處理器未停止運轉的時間 |
Itanium 2 | CPU_CYCLES | CPU 週期 |
TIMER_INT | (none) | 每一個計時器中斷值的樣本 |
表格 43-3. 預設的系統事件
同一時間可以監視的系統事件數量是由處理器的計數器數量來決定的,然而這並不是一對一的關係,在某些 處理器上,某些事件必須對應到特定的計數器。 如要找出可使用的計數器數量,請執行下列指令:
cat /dev/oprofile/cpu_type |
取決於處理器的類型,可以使用的系統事件也不同,如要找出用作系統分析的系統事件,請以 root 身份執行 下列指令(這個清單是決定在系統的處理器類型):
op_help |
可以透過命令列或一個圖形介面來設定每一個計數器的事件,假如無法設定計數器給一個特定的事件,將會顯示 一個錯誤訊息。
如要透過命令列為每一個可設定的計數器設定系統事件,請使用 opcontrol:
opcontrol --ctrlN-event=<event-name> |
請以計數器號碼(以 0 開始)取代 N,並且以 op_help 中確實的事件名稱取代 <event-name>。
預設情況下,會選取一個時間為基礎的事件組,它可以在每一處理器上每一秒建立大約 2000 個樣本。 假如使用 計時器的中斷值,該計時器將會設定為瞬間頻率,而且這不是使用者可以自己設定的。 假如 cpu_type 不是 timer,每一個事件 可以擁有一個取樣頻率,這個取樣頻率是在每一個取樣間的事件數量。
當您為計數器設定系統事件時,您也可以指定一個取樣頻率:
opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate> |
請以重新取樣前的系統事件數量取代 <sample-rate>,這個數值越小代表 取樣的頻率越高。 至於並未經常發生的事件,您便需要一個較低頻率來補捉事件的發生。
![]() | 警示 |
---|---|
當您設定取樣頻率時,請特別的小心,如果設定的取樣頻率太頻繁將會超載系統,而導致系統類似當機的情形, 或者是導致系統真正當機。 |
預設情況下,對每一個事件都會蒐集核心模式與使用者模式的資訊。 如要設定 OProfile 在一個特定的計數器 上不監視核心模式的事件,請執行下列指令(這裡的 N 就是計數器號碼):
opcontrol --ctrN-kernel=0 |
請執行下列指令來再度啟動核心模式的系統分析:
opcontrol --ctrN-kernel=1 |
如要設定 OProfile 不要為一個特定的計數器監視使用者模式的系統事件,請執行下列指令(這裡的 N 就是計數器號碼):
opcontrol --ctrN-user=0 |
請執行下列指令來再度為計數器啟動使用者模式的系統分析:
opcontrol --ctrN-user=1 |
當 OProfile 系統程式寫入系統分析資料到樣本檔案時,它可以分開核心與函式庫分析資料到不同的樣本檔案。 如要設定這個系統程式如何寫入樣本檔案,請以 root 身份執行下列指令:
opcontrol --separate=<choice> |
<choice> 可以是下列的其中之一:
none — 不分開系統分析(預設值)
library — 為函式庫產生每一應用程式的系統分析資料
kernel — 為核心與核心模組產生每一應用程式的系統分析資料
all — 為核心與核心模組的函式庫與每一個應用程式資料檔產生每一應用程式的系統分析資料
假如使用了 --separate=library,樣本檔案的名稱將會含有執行檔的名稱與函式庫的名稱。