At Thu, 13 Jan 2005 13:11:15 +0900, Manabu Tatesawa wrote:
館澤です。
M. Takeyama(takezou) wrote:
SUSE9.1で psコマンド の STIME と dateコマンドの 時刻が一致していない現象が出ました。 つねにps -f の STIME が dateコマンドで表示される 時刻より2分ほど先を行っているので気持ち悪いです。
PC:~ # ps -f UID PID PPID C STIME TTY TIME CMD root 23912 20557 0 19:38 pts/3 00:00:00 su root 23913 23912 0 19:38 pts/3 00:00:00 bash root 23954 23913 0 19:38 pts/3 00:00:00 ps -f
PC:~ # date ← 上記psコマンド実行直後に実行 Wed Jan 12 19:36:21 JST 2005
ちなみにですが、これってずーと動作させたままのマシーン でのことですか?
基本的にずっと操作させているマシンです。 uptime は 11日 でした。
そうであれば、いったん、Shutdown して、電源を入れなおした 場合(直後)の結果でも同じ現象がおきますか?
電源を入れなおして、ps -f と date コマンドを実行すると ps -ef と date の時刻が一致しました。
PC:~ # ps -ef | grep "ps -ef" | grep -v grep root 5721 5230 0 12:46 pts/0 00:00:00 ps -ef
PC:~ # date ← 上記psコマンド実行直後に実行 Thu Jan 13 12:46:54 JST 2005
OSを長時間起動していると、ps -f と dateコマンドの 時刻がずれる可能性がありそうですね。
やはり、ps -f と dateコマンドでは見ている時刻が 異なっているのでしょうか。
プロセス自身は開始「時刻」を記憶しているのではなく、開始時の jiffies を記憶しています。procps では、これを読み出して、ブート時刻からの経過 時間として計算します。 その計算で HZ を用いているのですが、もしかしたら、cpufreq などで clock が可変の場合に、おかしな事になっているのかもしれません。この場合 TSC の間隔も変わりますので、補正が必要になるためです。 カーネル内の時刻に関しては補正を行っていますが、ps で参照する値は補正 されていないようですね。
ちなみに ・SLES9(i586)でも同現象を確認できました。 ・Redhat8、Vine2.1では ps -e とdateコマンドの時刻が ずれることはありませんでした。
2.4 と 2.6 カーネルの違いだと思いますよ。 2.6 では、HZ=1000 がデフォルトなので、時刻回りが多少不正確なところがあ ります。 -- Takashi Iwai <tiwai@suse.de> ALSA Developer - www.alsa-project.org