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

[plamo:30008] Re: CONFIG_HZ とjiffie



早間です。

加藤さんありがとうございます。
> 
> さて,この "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
> 

結論としては、私の勘違いで Kernel Config の herz は jiffie とは
無関係だったのですね。
また、今時の Linux kernel は jiffie の単位は 1/100 秒で通常は変わ
らないと言うことですね。
# 無駄な事だったのですが kernel の設定を変えてコンパイルして見ました。
# いずれも HZ が 100 でわざわざkernel の設定や関数を使用して取得す
# る必要はありませんでした。

sysconf(_SC_CLK_TCK);
で
 The corresponding variable is obsolete.
と言うのはどういう事になるのでしょう。

-- 早間


References
[plamo:29972] CONFIG_HZ とjiffie, 早間義博
[plamo:30003] Re: CONFIG_HZ とjiffie, KATOH Yasufumi

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