2009年7月25日

[plamo:29972] CONFIG_HZ と jiffie

早間です。
plamo 4.6 で CONFIG_HZ の値で時刻を計算すると合いません。
CONFIG_SMP=y の所為でしょうか。

検算のメモをつけておきます。

/proc/config.gz では
CONFIG_HZ_300=y

と指定されています。
同様に /usr/src/linux/.config の .config には
CONFIG_HZ_300=y
が指定されています。

perl で
$ perl -e '
use POSIX qw(sysconf _SC_CLK_TCK);
$HERZ=sysconf(_SC_CLK_TCK);
print "$HERZ\n";
'
100

と CONFIG_HZ を取得すると
$HERZ=100 が得られます。

man sysconf で見ると
clock ticks - _SC_CLK_TCK
The number of clock ticks per second. The
corresponding variable is obsolete. It was of
course called CLK_TCK. (Note: the macro
CLOCKS_PER_SEC does not give information: it must
equal 1000000.)
とあります。

コマンドの実行開始時刻を計算すると kernel の CONFIG_HZ を 100 で計
算しないと合いません。

コマンド snmpd の計算例です。

(1) コマンド ps でコマンド実行開始時刻を得ます。
$ ps u -C snmpd
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 26395 0.5 1.6 7780 4172 ? S 17:57 1:31 /usr/sbin/snmpd

17:57 が開始時刻です。

(2)このコマンドの実行開始 jiffie を取得すると
$ cat /proc/26395/stat| cut -f 22 -d" "
7653258

です。

(3) ホストの起動時刻は
$ cat /proc/stat
cpu 16523 0 45423 9257145 106765 565 1249 0 0
cpu0 16523 0 45423 9257145 106765 565 1249 0 0
intr 1593210 98 502 0 1 1 0 5 0 158 0 0 0 1784 0 0 82804 0 435257 22417 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 2472725
btime 1248435730
processes 38591
procs_running 1
procs_blocked 0

btime 1248435730 が得られます。

(4) CONFIG_HZ=300 で開始時刻を計算すると

$ perl -e 'use POSIX qw(strftime);
$whenstart=1248435730 + 7653258/ 300;
$startfrom=strftime("%y/%m/%d %H:%M",localtime($whenstart));
print "$startfrom\n"'

09/07/25 03:47

(5)CONFIG_HZ=100 で開始時刻を計算すると

$ perl -e 'use POSIX qw(strftime);
$whenstart=1248435730 + 7653258 / 100;
$startfrom=strftime("%y/%m/%d %H:%M", localtime($whenstart));
print "$startfrom\n"'

09/07/25 17:57


-- 早間

投稿者 xml-rpc : 2009年7月25日 23:41
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/87037
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。