Linux Profiling 2 - get_cycles
收錄在 Ameba 的 100 篇
--
前篇: Linux Profiling 1 - ktime_get()
若測量時間較短, 且需要高精密度, 可以使用 get_cycles()
這個是用到平台 cpu counter, 定義在 linux/timex.h
相對於前篇, 我們這次用 sysfs 來做, 可以不用 insmod/rmmod
1. kobject_create_and_add()
會在 /sys/kernel 下建立一個 e.g. "kbench" 的目錄
2. sysfs_create_group()
在 /sys/kernel/kbench 目錄下, 依照屬性建立相關檔案
可以建立相對應的 attributes, 一般常見為
__ATTR_RO() : read only, 和 __ATTR_RW() : read write
cat 該檔案 for read 時, 會呼叫 xxxx_show() 的函式,
可以把要顯示的內容填入 buffer string
echo > 寫入該檔案時, 會呼叫 xxxx_store() 的函式
執行:
cat /sys/kernel/kbench/cycles
可以發現, avg: 66 cycles, 十分固定,
CPU 這台 是 800MHz (cpu0,1,2) / 1.9GHz (cpu3)
以 800MHz 來計算, 時間為 82.5ns
但 cat /sys/kernel/kbench/ktime, 就不固定, 結果會落在 78~135 ns
--
前篇: Linux Profiling 1 - ktime_get()
若測量時間較短, 且需要高精密度, 可以使用 get_cycles()
這個是用到平台 cpu counter, 定義在 linux/timex.h
相對於前篇, 我們這次用 sysfs 來做, 可以不用 insmod/rmmod
1. kobject_create_and_add()
會在 /sys/kernel 下建立一個 e.g. "kbench" 的目錄
2. sysfs_create_group()
在 /sys/kernel/kbench 目錄下, 依照屬性建立相關檔案
可以建立相對應的 attributes, 一般常見為
__ATTR_RO() : read only, 和 __ATTR_RW() : read write
cat 該檔案 for read 時, 會呼叫 xxxx_show() 的函式,
可以把要顯示的內容填入 buffer string
echo > 寫入該檔案時, 會呼叫 xxxx_store() 的函式
執行:
cat /sys/kernel/kbench/cycles
可以發現, avg: 66 cycles, 十分固定,
CPU 這台 是 800MHz (cpu0,1,2) / 1.9GHz (cpu3)
以 800MHz 來計算, 時間為 82.5ns
但 cat /sys/kernel/kbench/ktime, 就不固定, 結果會落在 78~135 ns
留言
張貼留言