[Armadillo:06958] Re: Unknown HZ value!
Takenoshita Koyo
email@hidden
2011年 4月 5日 (火) 17:16:43 JST
竹之下です。
ざっとソースを眺めてみると、以下の部分で表示されているようです。
procps-3.2.7/proc/sysinfo.c
static void old_Hertz_hack(void){
unsigned long long user_j, nice_j, sys_j, other_j; /* jiffies (clock ticks) */
double up_1, up_2, seconds;
unsigned long long jiffies;
unsigned h;
char *restrict savelocale;
savelocale = setlocale(LC_NUMERIC, NULL);
setlocale(LC_NUMERIC, "C");
do{
FILE_TO_BUF(UPTIME_FILE,uptime_fd); sscanf(buf, "%lf", &up_1);
/* uptime(&up_1, NULL); */
FILE_TO_BUF(STAT_FILE,stat_fd);
sscanf(buf, "cpu %Lu %Lu %Lu %Lu", &user_j, &nice_j, &sys_j, &other_j);
FILE_TO_BUF(UPTIME_FILE,uptime_fd); sscanf(buf, "%lf", &up_2);
/* uptime(&up_2, NULL); */
} while((long long)( (up_2-up_1)*1000.0/up_1 )); /* want under 0.1% error */
setlocale(LC_NUMERIC, savelocale);
jiffies = user_j + nice_j + sys_j + other_j;
seconds = (up_1 + up_2) / 2;
h = (unsigned)( (double)jiffies/seconds/smp_num_cpus );
/* actual values used by 2.4 kernels: 32 64 100 128 1000 1024 1200 */
switch(h){
case 9 ... 11 : Hertz = 10; break; /* S/390 (sometimes) */
case 18 ... 22 : Hertz = 20; break; /* user-mode Linux */
case 30 ... 34 : Hertz = 32; break; /* ia64 emulator */
case 48 ... 52 : Hertz = 50; break;
case 58 ... 61 : Hertz = 60; break;
case 62 ... 65 : Hertz = 64; break; /* StrongARM /Shark */
case 95 ... 105 : Hertz = 100; break; /* normal Linux */
case 124 ... 132 : Hertz = 128; break; /* MIPS, ARM */
case 195 ... 204 : Hertz = 200; break; /* normal << 1 */
case 253 ... 260 : Hertz = 256; break;
case 393 ... 408 : Hertz = 400; break; /* normal << 2 */
case 790 ... 808 : Hertz = 800; break; /* normal << 3 */
case 990 ... 1010 : Hertz = 1000; break; /* ARM */
case 1015 ... 1035 : Hertz = 1024; break; /* Alpha, ia64 */
case 1180 ... 1220 : Hertz = 1200; break; /* Alpha */
default:
#ifdef HZ
Hertz = (unsigned long long)HZ; /* <asm/param.h> */
#else
/* If 32-bit or big-endian (not Alpha or ia64), assume HZ is 100. */
Hertz = (sizeof(long)==sizeof(int) || htons(999)==999) ? 100UL : 1024UL;
#endif
fprintf(stderr, "Unknown HZ value! (%d) Assume %Ld.\n", h, Hertz);
}
}
UPTIME_FILE(/proc/uptime)を2回計測してその差から得た経過時間(秒単位)と
STAT_FILE(/proc/stat)で得たプロセスが消費した経過時間(jiffies単位)
から、Hertzを求めているような計算をしています[*1]。
計算結果が、95から105の間に収まっていれば、Hertz=100とみなすように
なっていますが、計算結果が93と、少しずれてしまっているので、
> Unknown HZ value! (93) Assume 100.
とのメッセージが表示されているようです。
Assume 100. と表示されていることから、Hertz=100に設定されているので、
問題ないといえば問題ないのですが、あまり気分の良いものではありませんね。
そもそも、なぜ、"old_Hertz_hack"が実行されているのでしょう。
"2.4+ kernel w/o ELF notes? -- report this\n"
というメッセージも一緒に表示されていませんでしょうか?
*1: そもそも、この計算方法では正確な値が得られないような気がするのですが。。
Masahiro Iino さんは書きました:
> 飯野と申します
>
> 現在、Armadillo-420で開発を行っています。
> psで細かい情報が欲しい為、busyboxのpsではなく、
> Miscellaneous Applications->Procps tools->psを使っています。
> 問題なく使えているのですが、たまにps実行時に
> Unknown HZ value! (93) Assume 100.
> といったようなメッセージが出ます。
> これが出ても、それに続いてpsの結果が出てくるので使えない事はないのですが、
> なんだか気持ちが悪いです。
> ネットで調べてみましたが、初期値が入っていないせいだとか、procpsを
> 最新のものにするとか正解がわかりません。
> 試しに同じprocpsのfreeも使ってみましたが、症状が同じことからすると、
> procpsに依存しているエラーメッセージのような気がしています。
>
> どなたか同じ様なメッセージが出た方、対処法をご存知の方がいらっしゃいまし
> たら、
> ご教授頂けませんでしょうか?
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
--
Koyo Takenoshita
armadillo メーリングリストの案内