2009年7月29日

[plamo:30003] Re: CONFIG_HZ と jiffie

加藤泰文です.

[plamo 29982] は全くはずしてたのでムシしてください.(^_^;)

>>> On Sat, 25 Jul 2009 23:41:36 +0900 (JST)
in message "[plamo:29972] CONFIG_HZ と jiffie"
早間義博-san wrote:

> (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 が開始時刻です。

ここの "START" 欄の計算は

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

ここを元に計算していますね.procps-3.2.8 の ps/output.c 内で pr_start
or pr_bsdstart という関数が START を出力していて,
start = time_of_boot + pp->start_time / Hertz;
こんな式があります.早間さんの (4), (5) の計算と同じ式ですね.問題はこ
この "Hertz" ですよね.

さて,この "Hertz" ですが,proc/sysinfo.c で取得されていま
す.init_libproc という関数内で

if(linux_version_code > LINUX_VERSION(2, 4, 0)){
Hertz = find_elf_note(AT_CLKTCK);
if(Hertz!=NOTE_NOT_FOUND) return;
fputs("2.4+ kernel w/o ELF notes? -- report this\n", stderr);
}

というのがあって,

static unsigned long find_elf_note(unsigned long findme){
unsigned long *ep = (unsigned long *)environ;
while(*ep++);
while(*ep){
if(ep[0]==findme) return ep[1];
ep+=2;
}
return NOTE_NOT_FOUND;
}

という関数があります.これに AT_CLKTCK を入れているわけですが,これは
find_elf_note を見ると分かるように,環境変数 (environ) から AT_CLKTCK
を取得してるわけですね.

# 外部変数 environ は man 7 environ 参照かな?

AT_CLKTCK はカーネルから ELF の情報として渡されるみたいですね.で,こ
んな感じで見ることが出来ますね.手元では

% $ LD_SHOW_AUXV=1 ps | grep AT_CLKTCK
AT_CLKTCK: 100

となっていて 100 が正解です (ps の START の時間を得るという目的では).

----
ここからは本多さんに教えていただいたのですが,kernel ソースの
arch/x86/include/asm/param.h に

#ifdef __KERNEL__
# define HZ CONFIG_HZ /* Internal kernel timer frequency */
# define USER_HZ 100 /* some user interfaces are */
# define CLOCKS_PER_SEC (USER_HZ) /* in "ticks" like times() */
#endif

という所があって,USER_HZ が 100 になってるから,ですかね? カーネルの
内部的なタイマー間隔と,ユーザ空間から見える値はまた別ということですか
ね?

あと,/usr/include/asm/param.h には

#ifndef HZ
#define HZ 100
#endif

というのがありますが,これは使わない方がいいってことかなー.

あとは詳しい人にまかせまーす.(^_^;)

--
==============================================
(((( 加藤泰文
○-○ karma @ jazz.email.ne.jp
==============================================
(Web Page) http://www.ne.jp/asahi/ka/to/
==============================================

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




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