[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[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/
==============================================


Follow-Ups
[plamo:30008] Re: CONFIG_HZ とjiffie, 早間義博
References
[plamo:29972] CONFIG_HZ とjiffie, 早間義博

[検索ページ] [メール一覧]
Plamo ML 公開システム