今天遇到要驗證Process的Kernel Mode Time與User Mode Time,詢問Kay之後得知運算方式如下:
從/proc/$pid/stat中取得的time是以jiffies為單位,將jiffies * CLK_TCK就會得到以秒為單位的時間,而最終希望以100 nanosecond呈現。為了方便我驗證,我寫了一段shellscript去做計算並顯示出來:
pid=$1 utime_f=14 cutime_f=16 stime_f=15 cstime_f=17 utime=`cat /proc/$pid/stat | cut -d " " -f $utime_f` cutime=`cat /proc/$pid/stat | cut -d " " -f $cutime_f` u_mode_time=`expr $utime + $cutime` stime=`cat /proc/$pid/stat | cut -d " " -f $stime_f` cstime=`cat /proc/$pid/stat | cut -d " " -f $cstime_f` k_mode_time=`expr $stime + $cstime` clock=`getconf CLK_TCK` ns_100=10000000 nsc=`expr $ns_100 / $clock` # unit: 100 nanosecond echo User Mode Time `expr $u_mode_time \* $nsc` echo Kernel Mode Time `expr $k_mode_time \* $nsc`
友藏內心獨白: 不足的是浮點數運算。