12/1
Skype 2.0 ベータ版が出たようなので、使ってみた。う〜ん、なんとなく、操作感が
イマイチかな〜。やっぱり、ビデオ周りがうまくいかなかったりもしたりして、
これからに期待、と言ったところだろうか。
12/2
某サイトの携帯電話からの web サーバログを見ていたのだけど、見慣れない
クエリーを送っている跡があったので調べてみた。
http://www.example.com/menu.cgi?x-up-destcharset=17
こんな感じで、全てが UP.Browser から送られてきたもの。で、どうやら Referer
にのみつけてくるみたい。ちょっと、検索エンジンなんかで調べてみたけど、結局
よくわからなかった。考えたのだけど、多分 Referer からクエリーが漏れるのを
防ぐために付け替えているのじゃないかと。う〜ん、良いのか悪いのか。
12/3
このところ FIVA 206VL + AirH" という組み合わせで、作業なんかをしているの
だけど、かなりストレスが溜まる。ネットワークの遅さもそうなのだけど、FIVA
の遅さも結構ネック。某ページの燃費の計算を出しているページの更新なんかを
したのだけど、大きい table を表示するのに3秒ぐらいかかるし。しかし、今
出ているノートPCで、これだ!と思う携帯性のあるものはないし…。ネットワークは
来週にはなんとかなるかもしれないけど、PC をどうしようかなぁ…。
12/4
久しぶりに Libretto L5 を出してきて、電源を入れたら、
**** Bad check sum (CMOS) ****
だと。無事に Windows は起動したけど XP SP1 のままだし…。それに、これも
Crusoe 800MHz で結構重いなぁ…。とりあえず、 SP2 にする。
12/5
coLinux + Debian 環境で、 w3m のコンパイル。インストールした Lynx がうまく
日本語を扱ってくれないので、仕方なくインストール。で、 Boehm-GC library とか
インストールして、まずは configure から。
[toyota@colinux]% ./configure --disable-sslverify --disable-ipv6
--disable-w3mmailer --disable-nntp --disable-digest-auth
--enable-japanese=S --enable-keymap=lynx --without-ssl
で、コンパイルするが、途中で止まってしまった。
gcc -I.. -I.. -I. -g -O2 -I./libwc -DUSE_UNICODE -I. -I./..
-DHAVE_CONFIG_H -c -o ucs.o ucs.c
gcc: Internal error: Killed (program cc1)
Please submit a full bug report.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
For Debian GNU/Linux specific bug reporting instructions,
see <URL:file:///usr/share/doc/gcc-3.3/README.Bugs>.
make[1]: *** [ucs.o] Error 1
make[1]: Leaving directory `/home/toyota/src/lynx/w3m-0.5.1/libwc'
make: *** [libwc/libwc.a] Error 2
あ〜、困ったな、と思っていたら、 ssh が落ちてるし…。で、気を取り直して、
再度コンパイルを行うと、すんなり通ってしまった。coLinux のウィンドウを
よく見ると、
oom-killer: gfp_mask=0x1d2
DMA per-cpu: empty
Normal per-cpu:
cpu 0 hot: low 8, high 24, batch 4
cpu 0 cold: low 0, high 8, batch 4
HighMem per-cpu: empty
Free pages: 1016kB (0kB HighMem)
Active:13190 inactive:714 dirty:0 writeback:0 unstable:0 free:254
slab:906 mappe
d:12829 pagetables:222
DMA free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB
present:0kB pages_
scanned:0 all_unreclaimable? no
protections[]: 0 0 0
Normal free:1016kB min:1024kB low:1280kB high:1536kB active:52760kB
inactive:285
6kB present:65536kB pages_scanned:57132 all_unreclaimable? yes
protections[]: 0 0 0
HighMem free:0kB min:128kB low:160kB high:192kB active:0kB inactive:0kB
present:
0kB pages_scanned:0 all_unreclaimable? no
protections[]: 0 0 0
DMA: empty
Normal: 0*4kB 1*8kB 1*16kB 1*32kB 1*64kB 1*128kB 1*256kB 1*512kB
0*1024kB 0*2048
kB 0*4096kB = 1016kB
HighMem: empty
Swap cache: add 0, delete 0, find 0/0, race 0+0
Out of Memory: Killed process 31740 (cc1).
みたいなのをボコボコ吐いている。どうやら、仮想メモリが足りないみたい…。
12/6
YahooBB を申し込んで2週間以上経つが、全くもって音信がない。最短8営業日とか
言ってたけど、そんなもんはとっくに過ぎてるし。やっぱり、 YahooBB だな、と
言う感じである。
12/7
SONY ページでのデジカメを見ていたら、Mavica がまだ載っていて、驚いた。
流石に受注生産みたいだけど、200 万画素でフロッピーねぇ…、という感じ。
仕様を見てみたら、 200 万画素で写真を撮ると4枚しか写せないみたいだし。
それよりも、保存にえらい時間がかかるだろうなぁ…。受注しているってこと
だから、どこからか注文があるのだろうけど、一体どんな使い方をしているの
だろう。
昨日、つぶやいていたら、今日 YahooBB から封筒が届いていた。で、工事するんで、
平日の昼間に人がいるようにしろと。無理だっつ〜の。世の人達はどうしているのか
不思議に思う。
12/8
colinux の環境で vim 起動時に何か言われる。気にしていなかったのだけど、
そろそろ思い腰を上げようかと。
[toyota@colinux]% vim test
'linux' not known. Available builtin terminals are:
gui
riscos
amiga
beos-ansi
ansi
pcansi
win32
vt320
vt52
xterm
iris-ansi
debug
dumb
defaulting to 'ansi'
こんな感じに言われてしまう。念のために、環境変数の TERM を見てみる。
[toyota@colinux]% echo $TERM
xterm
となっている。なんで linux に設定されてしまっているのだろうか。ちょっと
探すと、 home の .vimrc が問題だった見たいである。
.vimrc
" コンソールでのカラー表示のための設定(暫定的にUNIX専用)
if has('unix') && !has('gui_running')
let uname = system('uname')
if uname =‾? "linux"
set term=builtin_linux
elseif uname =‾? "freebsd"
set term=builtin_cons25
elseif uname =‾? "Darwin"
set term=beos-ansi
else
set term=builtin_xterm
endif
unlet uname
endif
となっていた。linux に設定しているところを削除。
.vimrc
" コンソールでのカラー表示のための設定(暫定的にUNIX専用)
if has('unix') && !has('gui_running')
let uname = system('uname')
if uname =‾? "freebsd"
set term=builtin_cons25
elseif uname =‾? "Darwin"
set term=beos-ansi
else
set term=builtin_xterm
endif
unlet uname
endif
こんな感じ。これで xterm 指定で起動するようになった。しかし、 なんで linux
なんて term に設定しているのか、不明である。元々ないのか、調べてみた。
[toyota@colinux]% pwd
/home/toyota/src/vim/vim64/src
[toyota@colinux]% grep KS_NAME term.c
* KS_NAME, which separates the entries. See parse_builtin_tcap() for all
{(int)KS_NAME, "gui"},
{(int)KS_NAME, "riscos"},
{(int)KS_NAME, "amiga"},
{(int)KS_NAME, "beos-ansi"},
{(int)KS_NAME, "ansi"},
{(int)KS_NAME, "os2ansi"},
{(int)KS_NAME, "pcansi"},
{(int)KS_NAME, "pcterm"},
{(int)KS_NAME, "win32"},
{(int)KS_NAME, "vt320"},
{(int)KS_NAME, "vt52"},
{(int)KS_NAME, "xterm"},
{(int)KS_NAME, "iris-ansi"},
{(int)KS_NAME, "debug"},
{(int)KS_NAME, "dumb"},
{(int)KS_NAME, NULL}
if (p->bt_entry == (int)KS_NAME)
for (++p; p->bt_entry != (int)KS_NAME && p->bt_entry !=
BT_EXTRA_KEYS; ++p)
if (termp->bt_entry == (int)KS_NAME)
while (termp->bt_entry != (int)KS_NAME)
なので、元々 vim は linux をもってないみたいである。う〜ん、深く考えると
眠れないので、それ以上は考えないようにしよう…。
12/9
apache のログ解析をさせたかったので、テストとして手元の coLinux の環境に
analog をインストールしてみる。なんだか、昔インストールしたことがあるような
気がする。インストールは特に問題なくできたのだけど、起動すると、
[root@colinux]% ./analog
./analog: analog version 6.0/Unix
./analog: Warning F: Can't auto-detect format of logfile
/var/log/apache/access.log: ignoring it
(For help on all errors and warnings, see docs/errors.html)
./analog: Warning R: Turning off empty time reports
./analog: Warning R: Turning off empty Request Report
./analog: Warning R: Turning off empty File Type Report
./analog: Warning R: Turning off empty Directory Report
./analog: Warning R: Turning off empty Domain Report
./analog: Warning R: Turning off empty Organisation Report
./analog: Warning R: Turning off empty Search Word Report
./analog: Warning R: Turning off empty Operating System Report
./analog: Warning R: Turning off empty File Size Report
./analog: Warning R: Turning off empty Status Code Report
見事に自動解析に失敗してくれた。仕方がないので、 apt でインストールした
apache の設定ファイル /etc/apache/httpd.conf のログ部分を見てみることに。
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t ¥"%r¥" %>s %b ¥"%{Referer}i¥" ¥"%{User-Agent}i¥" ¥"%{forensic-id}n¥" %T %v" full
LogFormat "%h %l %u %t ¥"%r¥" %>s %b ¥"%{Referer}i¥" ¥"%{User-Agent}i¥" ¥"%{forensic-id}n¥" %P %T" debug
LogFormat "%h %l %u %t ¥"%r¥" %>s %b ¥"%{Referer}i¥" ¥"%{User-Agent}i¥" ¥"%{forensic-id}n¥"" combined
LogFormat "%h %l %u %t ¥"%r¥" %>s %b ¥"%{forensic-id}n¥"" forensic
LogFormat "%h %l %u %t ¥"%r¥" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
〜snip〜
CustomLog /var/log/apache/access.log combined
な、感じ。調べたら APACHELOGFORMAT を使ってそのまま analog.cfg に記述
できるみたいなので、ログ出力指定の前に指定の combined の部分を書いてみた。
APACHELOGFORMAT ("%h %l %u %t ¥"%r¥" %>s %b ¥"%{Referer}i¥" ¥"%{User-Agent}i¥" ¥"%{forensic-id}n¥"")
LOGFILE /var/log/apache/access.log
[root@colinux]% ./analog
./analog: analog version 6.0/Unix
./analog: Warning L: Large number of corrupt lines in logfile
/var/log/apache/access.log: turn debugging on or try different LOGFORMAT
(For help on all errors and warnings, see docs/errors.html)
Current logfile format:
"%S %j %j [%d/%M/%Y:%h:%n:%j] "%j%w%r%wHTTP%j" %c %b "%f" "%B" "%j""¥n
./analog: Warning R: Turning off empty time reports
./analog: Warning R: Turning off empty Request Report
./analog: Warning R: Turning off empty File Type Report
./analog: Warning R: Turning off empty Directory Report
./analog: Warning R: Turning off empty Domain Report
./analog: Warning R: Turning off empty Organisation Report
./analog: Warning R: Turning off empty Search Word Report
./analog: Warning R: Turning off empty Operating System Report
./analog: Warning R: Turning off empty File Size Report
./analog: Warning R: Turning off empty Status Code Report
やっぱり駄目みたいである。で、再度調べてみると、"%{Referer}i¥" のような
指定の部分は analog で認識してくれないようなのである。設定行中の指定部分、
"%{Referer}i¥" と ¥"%{User-Agent}i¥" と ¥"%{forensic-id}n¥" の3箇所を
それぞれ %f, %B, %j に置き換える。この %j は意味ない文字列の指定。
APACHELOGFORMAT (%h %l %u %t ¥"%r¥" %>s %b ¥"%f¥" ¥"%B¥" ¥"%j")
LOGFILE /var/log/apache/access.log
これで、実行してみた。
[root@colinux]% ./analog
./analog: analog version 6.0/Unix
./analog: Warning R: Turning off empty Search Word Report
(For help on all errors and warnings, see docs/errors.html)
./analog: Warning R: Turning off empty Operating System Report
./analog: Warning R: In Domain Report, turning off pie chart of only one wedge
お、動いたみたい。しかし、analog はログを rotate して、消えてしまった
過去の部分はなかったことにする作りである。なんだかそれももったいないので、
どうしようか考え中。
12/10
analog が動いた。が、こいつを実行させるのは /usr/local/analog で、ここの
下に Report.html を吐き出す。これは全くもって問題ない。何故かと言うと、
cgi から引っ張ってくる予定だからである。が、できた html ファイルの中の
画像ファイルの指定がない状態である。
<p><img src="dom.png" alt="" /></p>
こんな感じで。/analog/dom.png のような指定をしてやりたいので、これは直して
やらないといけない。analog.cfg に以下の行を加えた。
IMAGEDIR "/analog/"
CHARTDIR "/analog/"
これで、 analog を実行してみた。
[root@host]# ./analog
./analog: analog version 6.0/Unix
./analog: Warning C: Ignoring CHARTDIR because LOCALCHARTDIR is unset
(For help on all errors and warnings, see docs/errors.html)
なんだか LOCALCHARTDIR を指定しなければいけないらしい。で、この LOCALCHARTDIR
は一体何を設定すれば良いのか、不明なので調べてみたら、 analog を実行した
ときに作成される rep.png とか os.png などの円グラフなんかを吐き出す場所の
ようである。実は、これは cron でコピーをしてしまえば良い、と思っていたので
設定できてちょっとありがたかったりする。ということで、設定してみた。
IMAGEDIR "/analog/"
CHARTDIR "/analog/"
LOCALCHARTDIR "/var/www/html/analog/"
これで、出力画像もコピーする手間が省けたし、画像の場所も設定できた。
12/11
analog の lang ファイル、不要なものがいっぱいあったので、削除。その中に
jpedom.tab ってファイルがあって、眺めていたら、ドメインの表示に使うファイル
みたい。そう言えば .EU なんてドメインができたな、なんて思って追加しようと
思ったけど、2番目の数字の意味がよくわからない。身近なところを見てみると
net 2 ネットワーク
org 2 非営利組織
jp 3 日本
uk 3 イギリス
という感じである。さらに私にとっては身近なドメインを見てみると、
im 1 マン島
io 1 英領インド洋地域
とあったりして、意味不明。仕方なく調べてみた。
The number beside each domain represents how many levels deep an
"organisation" is considered to be, for the purposes of the Organisation
Report. For example, consider the hostname www.sta.ad. The organisation is
sta.ad, at the second level, so Andorra has a 2 in the above list. But in
the UAE, a host looks like www.economy.gov.ae. There is an extra level in
the hierarchy, so the UAE has its organisations at level 3.
だそうだ。で1の扱いがよくわからないし、2と3の混在のことも書かれていない。
と思ったら、続きがあった。
There are some problems with this. A few countries have organisations at both
levels 2 and 3 (for example asaspace.at and univie.ac.at). In those cases I've
favoured false negatives over false positives by using the bigger number.
(Also there is a correction which will make most of them right again: the
first component is always removed from a hostname of three or more
components.) For other countries, I don't have enough information to tell what
the level should be. I've just given those a 1. Do let me know if you have any
more information, or corrections, for the numbers.
だそうだ。1は不明ってね…。あと半年ぐらい使われないかもしれないけど、
.eu の情報を書いておいた。
et 1 エチオピア
eu 2 欧州連合
fi 2 フィンランド
こんな感じ。
12/12
で、今日も analog の設定をちょっといじっていたのだけど、 anlghead.h という
ファイルを見たら、
/*** DON'T REMOVE THE #'S -- THEY'RE NOT COMMENTS! ***/
#ifndef ANLGHEAD_H
#define ANLGHEAD_H
と書いてあった。あぁ、気持ちはわかる。それだけ Perl をやる人が増えたのか、
C をやる人が減ったのか…。
12/13
analog では、ある分のログしか解析してくれないし、月ごとに出したりするには、
ログの切り出しをしなければならないので、 webalizer をインストールすることに
した。で、今設定している某レンタルサーバにインストール。2日前に dg.h
のインストールをしようとして libpng がないと言われ、途中までの作業で中断した
つもりだったのだけど、よく見ると既にインストールされている模様。インストール
した記憶がすっかりなくなっているので、睡眠薬を飲んだ後に作業をするもんじゃ
ないな、なんて思っていたのだけど、どうも様子がおかしい。実行ファイルが
/usr/bin なんてところにインストールされている。私がインストールしたなら
/usr/local/webalizer かせいぜい /usr/local/bin だろう。何気なく make install
してしまった、と思っていたら9月からの webalizer の結果を発見。9月のログは
とっくに消えているので、う〜ん、と思って、やっとわかった。 webalizer は
最初からインストールされていて、実行されていたのだと。自分の記憶があてに
ならないって、技術者としては失格だなぁ…。
12/14
地中に電線を埋める件で、電線管を調べていた。やっとなんとなくわかってきた。
電線管には CD 管と PF 管というのがあるらしい。どちらも JIS で規定されていて
平成11年から CD 管はオレンジ色にしなければいけない、ということになったので、
色を見れば区別はつくようである。CD 管は主にコンクリートに埋設するときに
使うようで、地中に埋設するには PF 管、それも PFD 管というのが良いらしい。
PF 管はホームセンターで 10m 1500円弱、CD 管はその半分ぐらいの価格だった。
50m だとだいぶ割安になる。そんなことを調べていたら、http://www.pf-cd.gr.jp/
なんてそのまんまのドメインを使ったページなんかあったりして。あとは、測量を
しなくては…。敷設は確実に来年だな。
12/15
特殊ネジの呼び方について。
写真があるので別ページに。
12/16
J-T010 分解。
写真があるので別ページに。
12/17
OKI のレーザープリンタ MICROLINE 8WU を使っている。で、会社の年賀状を印刷
しようとすると、横に縞が出る。色(と言ってもモノクロプリンタなのだが)がある
ところにのみ縞がでて、左端から右端まで出るので、ローラーの一部にゴミがある
といった感じではない。縞と縞の間のピッチは 36.67mm 。マニュアルを見てみたが、
50mm, 20mm, 63mm 周期の縞のことしか載っていない。困った。この縞の元は、
36.6mm をπで割った数字、直径 11.7mm のものである。ちょっとプリンタの中を
覗いたが、該当のものは見つからない、う〜ん、どうしよう。
12/18
昨日の続き。色々と探したら、イメージドラムの直径は 12mm ちょっとだった。
しかし、このイメージドラム、説明書に「非常に傷つきやすいため、取り扱いには
十分注意してください。」と書いてある。ドラムをグリグリやって、傷がないか
見てみたけど、大丈夫そう。クリーニングを行うと、確かに 49mm 周期の縞が
できる。これは、説明書に書いてある「50mm 周期の縞はイメージドラムの汚れ」
に合っているので、原因はやっぱりイメージドラムじゃないのかなぁ…。明日、
サポートに電話して聞いてみようかな。結局、真っ白な年賀状と、汚れた手だけが
残った週末であった。
12/19
かなりやる気ないモードで net-snmp のインストール。 ver 5.2.2 をダウンロード
してきて、 configure, make をした。で、EXAMPLE.conf を snmpd.conf として
コピーして、起動してみた。snmpwalk で接続してみたが、応答なし。やはり、
何かしらの設定は必要らしい。ログを吐かせて見てみたら、
/usr/local/snmp/share/snmp/snmp.conf: line 61: Error: example config
COMMUNITY not properly configured
/usr/local/snmp/share/snmp/snmp.conf: line 62: Error: example config
NETWORK not properly configured
なんて出てた。やっぱり、 EXAMPLE.conf そのまんまじゃ駄目みたい。早速、
書き換えてみた。
# sec.name source community
com2sec local localhost COMMUNITY
com2sec mynetwork NETWORK/24 COMMUNITY
ってのを
# sec.name source community
com2sec local localhost public
com2sec mynetwork 192.168.0.1/24 public
な感じにしてみた。これで、 snmpwalk を実行。
[toyota@test]$ ./snmpwalk -v1 -c public localhost
Cannot find module (IP-MIB): At line 0 in (none)
Cannot find module (IF-MIB): At line 0 in (none)
Cannot find module (TCP-MIB): At line 0 in (none)
Cannot find module (UDP-MIB): At line 0 in (none)
Cannot find module (HOST-RESOURCES-MIB): At line 0 in (none)
Cannot find module (SNMPv2-MIB): At line 0 in (none)
Cannot find module (SNMPv2-SMI): At line 0 in (none)
Cannot find module (NOTIFICATION-LOG-MIB): At line 0 in (none)
Cannot find module (UCD-SNMP-MIB): At line 0 in (none)
Cannot find module (UCD-DEMO-MIB): At line 0 in (none)
Cannot find module (SNMP-TARGET-MIB): At line 0 in (none)
Cannot find module (NET-SNMP-AGENT-MIB): At line 0 in (none)
Cannot find module (SNMP-VIEW-BASED-ACM-MIB): At line 0 in (none)
Cannot find module (SNMP-COMMUNITY-MIB): At line 0 in (none)
Cannot find module (NET-SNMP-EXTEND-MIB): At line 0 in (none)
Cannot find module (UCD-DLMOD-MIB): At line 0 in (none)
Cannot find module (SNMP-FRAMEWORK-MIB): At line 0 in (none)
Cannot find module (SNMP-MPD-MIB): At line 0 in (none)
Cannot find module (SNMP-USER-BASED-SM-MIB): At line 0 in (none)
Cannot find module (SNMP-NOTIFICATION-MIB): At line 0 in (none)
Cannot find module (SNMPv2-TM): At line 0 in (none)
iso.3.6.1.2.1.1.1.0 = STRING: "Linux HOGEHOGE 2.6.11-1.1369_FC4smp #1
SMP Thu Jun 2 23:08:39 EDT 2005 i686"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.0.0.0.0.0.0.0
iso.3.6.1.2.1.1.3.0 = Timeticks: (1249) 0:00:12.49
〜snip〜
iso.3.6.1.2.1.11.31.0 = Counter32: 0
なんだか module のエラーは出てるけど、動いたみたい。あとは、のんびりと
設定でもするか。
12/20
YahooBB の工事の話。19日の午後、「28日の工事に決まりました」と連絡があった。
しかし、昨日、「お客様の都合により、局内工事ができなかった」なる手紙が来て
いて、連絡をくれ、とのことだったので、連絡してみた。手違いだったようである。
どうやら、当初の13日の工事ができなかったことの手紙らしいのだけど、なんだか
なぁ。
13日の工事日は無理だったので、指定の3営業日前に電話して中止をお願いした
↓
しかし、13日に NTT の工事の人がやってきた
工事日の変更は、工事日の9営業日前にしてくれ、と言われた
↓
13日に27日の工事をお願いして、了承してもらった
↓
手違いで28日以降になると電話があった
19日に工事が28日に決定した、と電話があった
↓
19日に「お客様の都合により、局内工事ができなかった」の手紙が届く
なんだかなぁ、という感じ。 YahooBB はひたすら「お客様の都合で」とか、
「NTT の都合」とか人に責任を押し付けてるし。こっちからすれば、休日に
工事をしないのも、年末に工事しないのも「YahooBB の都合」だし、 NTT に
申し込みをしたわけじゃないので、 NTT の都合も「YahooBB の都合」としか
言いようがないし。YahooBB なんぞ申し込んで、だいぶ後悔している。
12/21
福山通運のページからログが漏洩している件について。
ちょっと長いので別ページに。
12/22
昨日の福山通運の奴、夜とかはあまり発生しないようである。20回ぐらいアクセスを
すると現象が出てきたりして。
話は変わって Linux kernel 2.6 で /proc/stat が変わったことについて。なんだか
検索をしていたら、6月の自分のページが出てきたりして、すっかり忘れてしまった
ようであるので。まずは kernel 2.4 系の source を見ると、
linux-2.4.32/fs/proc/proc_misc.c
unsigned int sum = 0, user = 0, nice = 0, system = 0;
こんな宣言で
proc_sprintf(page, &off, &len,
"cpu %u %u %u %lu¥n", user, nice, system,
jif * smp_num_cpus - (user + nice + system));
こんな出力。出力は全て unsigned int 。これが、kernel 2.6 の最新版を見ると
linux-2.6.14/fs/proc/proc_misc.c
cputime64_t user, nice, system, idle, iowait, irq, softirq, steal;
こんな宣言で
seq_printf(p, "cpu %llu %llu %llu %llu %llu %llu %llu %llu¥n",
(unsigned long long)cputime64_to_clock_t(user),
(unsigned long long)cputime64_to_clock_t(nice),
(unsigned long long)cputime64_to_clock_t(system),
(unsigned long long)cputime64_to_clock_t(idle),
(unsigned long long)cputime64_to_clock_t(iowait),
(unsigned long long)cputime64_to_clock_t(irq),
(unsigned long long)cputime64_to_clock_t(softirq),
(unsigned long long)cputime64_to_clock_t(steal));
という出力。 seq_printf を見てもわかるけど、 cputime64_t ってのは
typedef u64 cputime64_t;
の宣言で、 この u64 は i386 だと
typedef unsigned long long u64;
な感じ。かなりでかくなった。で、増えた値について調べてみた。
Documentation/filesystems/proc.txt
- user: normal processes executing in user mode
- nice: niced processes executing in user mode
- system: processes executing in kernel mode
- idle: twiddling thumbs
- iowait: waiting for I/O to complete
- irq: servicing interrupts
- softirq: servicing softirqs
らしい。 steal についての説明がないのは、文章が追いついてないだけだと
思われる。
12/23
ちょっぴり昨日の続き。top の話。洗剤じゃなくて。最新の top をダウンロード
しようと、作者のページと思われる
http://www.fysh.org/‾chris/top/
に行ってみたら、 version 3.5 が最新版だったのでダウンロードしてきた。今日、
ふと sunsite に行ったら、
top-3.5.1.tar.gz 03-Jan-2005 04:28 247k
なるもの発見。これはなんでしょう、ということでダウンロードしてきて、diff って
みた。
[toyota@test]$ diff -r top-3.5 top-3.5.1 | wc -l
1675
結構違っている(ので wc -l を通したのだけど)。3.5.1 の Changes を見てみた。
Sun Nov 29 2004 - wnl (3.5.1)
Security patch to fix a buffer overflow vulnerability.
だそうである。で、よく見ると、 3.5beta12 までは Changes が同じで、それ以降の
記載がまったく異なるようなのである。つまり、chris 氏のバージョン(最新は3.5)と
William LeFebvre 氏のバージョン(最新は3.5.1)の2つのバージョンがあるようで
ある。で、もう少し調べてみたら、chris 氏のページにきちんと
I've released this seperately from the official top homepage as top
seems to have fallen out of maintainance.
なんて記述があるのを発見。そして、official top homepage へのリンクをして
あった。
http://sourceforge.net/projects/unixtop
ここが本家のようで、前述の 3.5.1 も見つかった。最初からここを見つければ、
なんでもなかったのだが、freshmeat で top を引くと chris 氏のバージョンを
教えてくれたので、それが悩む原因になってしまったようである。
で、ついでなんで調べてみた。
RedHat 9 についてきた top は。
[toyota@rh9]% cat /etc/redhat-release
Red Hat Linux release 9 (Shrike)
[toyota@rh9]% top --version
procps version 2.0.11
Fedora Core 4 についてきた top は。
[toyota@fc4]% cat /etc/fedora-release
Fedora Core release 4 (Stentz)
[toyota@fc4]% top --version
top: procps version 3.2.5
debian 3.0 についてきた top は。
[toyota@deb]1% cat /etc/debian_version
3.0
[toyota@deb]1% top --version
top (procps version 2.0.7)
な感じで古いものを使っているようである。
12/24
top の続き。 top 3.5.1 の source を見てみたのだけど、Linux のとき
static long cp_time[NCPUSTATES];
〜snip〜
/* get the cpu time info */
{
fd = open("stat", O_RDONLY);
len = read(fd, buffer, sizeof(buffer)-1);
close(fd);
buffer[len] = '¥0';
p = skip_token(buffer); /* "cpu" */
cp_time[0] = strtoul(p, &p, 0);
cp_time[1] = strtoul(p, &p, 0);
cp_time[2] = strtoul(p, &p, 0);
cp_time[3] = strtoul(p, &p, 0);
/* convert cp_time counts to percentages */
percentages(4, cpu_states, cp_time, cp_old, cp_diff);
}
な感じで、 kernel 2.6 には対応していないようである。で、念のため、と思って
chris 氏のバージョン(最新は3.5) も見てみたけど同じ様子。ということは、
Fedora Core 4 の top はだいぶいじってあるやつみたいである。
そんな感じで眺めていたら、疑問がいくつか。man proc (Linux kernel 2.4)には
stat kernel/system statistics. Varies with architecture. Common
entries include:
cpu 3357 0 4313 1362393
The number of jiffies (1/100ths of a second) that the
system spent in user mode, user mode with low priority
(nice), system mode, and the idle task, respectively.
The last value should be 100 times the second entry in
the uptime pseudo-file.
と書いてある。これならば、 /proc/uptime だけを見れば CPU 使用率が計算できると
思って、念のために /proc/stat と /proc/uptime の結果を比較してみた。
[toyota@redhat9]% cat /proc/uptime ; cat /proc/stat | head -1
16776.53 16687.77
cpu 3574 1101 4983 1667995
違っている。2つの差が 0.1 秒とかなら許せるが 7.82 秒も異なる。約12分後に
もう一度やってみた。
[toyota@redhat9]% cat /proc/uptime ; cat /proc/stat | head -1
17487.80 17397.63
cpu 3691 1101 5029 1738960
8.03 秒と差が広がった。一体、どうなっているんだろうか。嫌な感じである。
調べたけど不明。
もう1つ不明なものがあって、世の人たちは CPU 使用率を出すときに /proc/stat の
値から出すようである。時差を使って求めるみたいなのだけど、なぜ /proc/uptime
を使わないのかと。/proc/stat だと
100 * ((user(n) + nice(n) + system(n)) -
(user(n-1) + nice(n-1) + system(n-1)))
/ ((user(n) + nice(n) + system(n) + idle(n)) -
(user(n-1) + nice(n-1) + system(n-1) + idle(n-1)))
の計算が /proc/uptime だと
100 * ((uptime(n) + idle(n)) - (uptime(n-1) + idle(n-1)))
/ ((uptime(n) + idle(n)) - (uptime(n-1) + idle(n-1)))
と、要素が半分になって、少しは簡単になるのに。
12/25
昨日の続きで、 kerenel (2.4.32)を眺めてみることにした。/proc/uptime の値は
idle = init_tasks[0]->times.tms_utime + init_tasks[0]->times.tms_stime;
という値を使っている。1CPU の場合限定だと、 /proc/stat は
jif - (user + nice + system)
という値。jif の値は uptime の値と同じもの。ということは、気になるのが
tms_utime と tms_stime の意味。名前からすると、ユーザ時間と system 時間、
そのままの気がする。調べてみた。
宣言は include/linux/times.h で行われていて、
struct tms {
clock_t tms_utime;
clock_t tms_stime;
clock_t tms_cutime;
clock_t tms_cstime;
};
こんな感じ。ちょっと調べて man 2 times を。
struct tms {
clock_t tms_utime; /* user time */
clock_t tms_stime; /* system time */
clock_t tms_cutime; /* user time of children */
clock_t tms_cstime; /* system time of children */
};
と。予想通り。こいつの中身の設定は kernel/times.c で user_mode(regs) という
ものから来ているようである。 /proc/stat の system も結局はこの kernel/times.c
から来ているので、同じもののようである。
同じものからきているのに、何故ずれが発生するのか、これはもう「誤差」の蓄積、
ということになるのだろうか。それを確かめるために、起動直後の PC で試してみた。
[toyota@redhat9]% cat /proc/uptime ; cat /proc/stat | head -1
97.36 72.17
cpu 891 0 1912 6933
起動して1分ちょっとでも 0.3 ほどの誤差があるなぁ…。本当に誤差の蓄積なのか、
自信がなくなってきた。
12/26
最近はだいぶ少なくなったけど、色々な場所で働くことが多かったので、環境に
とらわれないように、 SHELL やキーボードをなるべく選ばないことにしている。
が、本当のことを言うと、 SHELL は tcsh 、キーボードは HHK が好みだったり
する。で、今某所で使っているFedora Core 4 の環境が落ち着いてきたので、
家にある .cshrc をコピーして使うことにした。.cshrc は継ぎ足し継ぎ足し使って
いるので、
[toyota@test]% wc -l .cshrc
301 .cshrc
な具合に結構大きなサイズになっている。良い言い方をすれば、伝統あるウナギ屋が
タレを継ぎ足しながら伝統の味を守っているようなもの、なのだけど、悪い言い方を
すれば、整理をしていない、ということになる。
で、この .cshrc を Fedora Core 4 の環境で使ってみたら、
[toyota@test]% source .cshrc
hostname: 不明なホスト
とちょっとショックなことを言われてしまった。調べてみたら、 hostname -s の
コマンドが悪いようである。hostname のオプションが悪いのか、サーバの設定が
悪いのか、わからないので調べてみた。
hostname の source を公式サイトよりダウンロード。
http://www.tazenda.demon.co.uk/phil/net-tools/net-tools-1.60.tar.bz2
で、 source を見てみると
gethostname(myname, sizeof(myname));
で myname を得るところまでは、問題なくて
gethostbyname(hname)
のところで Unknown host をもらっているようである。ここの hname は gethostname
の myname の値なのだけど、ドメインを引きなおしているということは、name
サーバの設定が出来ていないということ。/etc/resolv.conf を見てみたら
search localdomain
なんてなっていて、これが原因のようである。とりあえず、resolv.conf を直して、
.cshrc が読み込めるようになった、と。そう言えば、 Solaris って hostname -s が
ないんだよなぁ…。
12/27
とある人のところに、ゴミが勝手に捨てられていたらしい。で、その人はかなり
怒っていたりして。ゴミには扇風機とか、ダンボールとか、食器乾燥機とか、
そんなもんとか。で、その中に古いパソコンがあった、と言っていたので、見せて
もらうことにした。
で、出てきたのが GATAWAY の G6-200 。マザーは家にある奴と同じだけど、
ケースがフルタワー(私のはミドルタワー)。しっかりとハードディスクも付いて
いて、ゴミを勝手に置いていった人を捕まえたい、ということらしいので、その
ハードディスクを解析することにした。
USB-IDE 経由でハードディスクを接続して、読み込んでみた。2.1GB の中身は空。
しかし、そんなんであきらめるような私ではない。2年前にデータが飛んだとき
買ったデータ復旧ソフトを通してみた。う〜ん、どうやらデータが出てきた感じ。
しかし、時間がかかっている…。結果は明日だな。
12/28
昨日のデータ取り出してみた。ハードディスクの最終アクセスが2001年の7月で、
ここ4年ほど電源を入れていないようである。個人名まで特定できるファイルが
あったけど、個人的にはあまり面白いファイルは残っていなかった。その所有者と
思われる PHS のメールアドレスもわかったけど、4年も経てばアドレスを変えて
いるだろうし、その前に携帯電話にしているか。とりあえず、怒っていた人には、
名前を伝えておいた。
12/29
12/25 の続き。/proc/uptime と /proc/stat による CPU 使用率の比較をすることに
した。使用したプログラムは C で作成したもので、 /proc/uptime, /proc/stat の
順にファイルを開き、 CPU 使用率を求める。ファイルオープン間隔を1秒にして、
10000回計測してみた。時間で言うと3時間弱。2つの方法で求めた CPU 使用率で、
異なった値となったのは以下の通り。単位は % 。
uptime stat
56 57
66 67
41 42
41 42
53 54
51 52
43 44
40 41
52 53
57 58
50 51
42 43
54 55
52 53
45 46
40 41
44 45
44 45
42 43
42 43
50 51
45 46
47 48
42 43
49 50
43 44
発生回数は26回で、発生確率で言うと 0.26% になる。全て誤差が1となり、
/proc/stat から計算した方が大きくなった。異なった原因、25回が idle 値が
異なっていて、残りの1回が total 値というか、計測間隔時間が異なっていた。
% の値に変換する前の値では、誤差が31回発生した。しかし、% に変換したときに
丸められて、確率を求めたときは26回という数字になった。
正直なところ、どちらが正しいか私にはわからないが、/proc/uptime から CPU
使用率を求めることは、実用範囲内ではないか、と思う。明日時間あれば、計測
間隔をもっと長くして、もう1度測ってみたい。
12/30
昨日の続き。ファイルオープン間隔を3秒にして、10000回計測してみた。時間で
言うと8時間ちょっと。CPU 使用率を /proc/uptime から求めた値と /proc/stat
から求めた値で、異なった値となったのは21回。発生確率で言うと 0.21% 。
1秒おきに計測したときと同じで、全て誤差が1となり、/proc/stat から計算した
方が大きくなった。
で、同じように。ファイルオープン間隔を10秒にして、10000回計測してみた。
時間で言うと28時間弱。異なった値となったのは19回。発生確率で言うと 0.19% 。
詳細なデータを表にしてみた。
計測間隔 秒 | %が 異なった回数 | %誤差確率 | 値が 異なった回数 | idleが 異なった回数 | totalが 異なった回数 | 両方が 異なった回数
|
---|
1 | 26 | 0.26% | 31 | 27 | 4 | 0
|
---|
3 | 21 | 0.21% | 53 | 51 | 2 | 0
|
---|
10 | 19 | 0.19% | 228 | 221 | 7 | 0 |
---|
計測間隔を増やすと、%の誤差が出る回数も減っていく傾向にある。これは誤差が
% に変換したときに消えてしまうからのようである。どれにしても、私から見れば、
許容範囲内の誤差のようである。
12/31
今年も1年ありがとうございました。
|