namazu-ml(avocado)


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

Re: page fault



馬場@京大宇宙物理 です。旧い話ですが...

 Date: Hajime BABA <baba@xxxxxxxxxxxxxxxxxxxxxx>
 From: [namazu:01761] Re: page fault
 Subject: Fri, 11 Dec 1998 18:13:43 JST

 >  > mknmzを実行するとCPUの30%以上がシステム時間として消費されているんで
 >  > おっかしいなぁとおもってvmstatで観測すると
 >  > どうもpage faultが多いように思います。
 >  > 頻繁にnkfをfork/execするためかなぁと想像しているんですが、
 >  > 他の方はどうでしょうか。
 > そうかもしれません。nkf1.7 の Perl module に変えたらちょっとは良く
 > なるんじゃないだろうかという気はしていますが、試してないので定量的
 > にはなんとも... _o_

現実逃避にちらっと試してみました。加えた変更は最後につけておきます。

変更は 1.3.0.1 の mknmz に対するものです。環境は Linux-2.0.33 /
Perl-5.005_01 / Pentium-120MHz / 40MBメモリで、他プロセスが動いて
いない中で数回繰り返し計った中での平均的な値を取ってみました。

  % time ./mknmz.orig /usr/local/namazu/doc/ >& /dev/null
  61.860u 1.600s 1:03.97 99.2% 0+0k 0+0io 4437pf+0w
  % time ./mknmz.nkf_module /usr/local/namazu/doc/ >& /dev/null
  62.160u 1.140s 1:04.09 98.7% 0+0k 0+0io 1860pf+0w

実行時間はほとんど変わりませんが、page fault は40%程度にまで減らせ
ています。mknmzからはKAKASIも呼んでますからこれ以上は下がらないだ
ろうけど...  WindowsやOS/2環境で Perl モジュールが使えるかどうかし
らないのですが、UNIX環境だけに目を向けるなら、このような変更も多少
意味あるかもしれません。


# 別件ですが、Perl-5.004_04 だと Perl-5.005_01 より15%程度
# 時間が余計にかかっていました。これは既知ですか?
# まああまり気にしていませんが...
#   % time ./mknmz.5.004_04 /usr/local/namazu/doc/ >& /dev/null
#   70.760u 2.320s 1:17.85 93.8% 0+0k 0+0io 5101pf+0w
--
馬場  肇 ( Hajime BABA )            E-mail: baba@xxxxxxxxxxxxxxxxxxxxxx
京都大学理学部宇宙物理学教室 博士課程二回生
--


--- mknmz.orig	Thu Dec 31 04:33:47 1998
+++ mknmz.nkf_module	Thu Dec 31 05:47:02 1998
@@ -28,6 +28,7 @@
 require 5.003;
 use Cwd;
 use Time::Local;
+use NKF;
 use strict;  # be strict since v1.2.0
 
 # global values
@@ -561,17 +562,17 @@
 	    last;
 	}
     } 
-    if ($LANGUAGE eq "ja") {
-	if ($filter eq "") {
-	    $filter = "$NKF -emXZ1 \"$cfile\" |";
-	} else {
-	    $filter .= "$NKF -emXZ1 |";
-	}
-    } else {
+#    if ($LANGUAGE eq "ja") {
+#	if ($filter eq "") {
+#	    $filter = "$NKF -emXZ1 \"$cfile\" |";
+#	} else {
+#	    $filter .= "$NKF -emXZ1 |";
+#	}
+#    } else {
 	if ($filter eq "") {
 	    $filter = "$cfile";
 	}
-    }
+#    }
     if ($ManOpt) { # man mode
 	if ($filter =~ /\|$/) {
 	    $filter .= "$HELPER_PROGRAMS{'man'} |";
@@ -584,6 +585,7 @@
     $filter =~ s|\\|\\\\|g if $SYSTEM eq "os2";
     open(CFILE, $filter) || die "$cfile: $!\n";
     $$contents = join("", <CFILE>);
+    $$contents = nkf("-emXZ1", $$contents) if ($LANGUAGE eq "ja");
 
     # if a zipped file, the size has been changed
     if ($zipped) {
@@ -1214,11 +1216,11 @@
 	# 例によって Win32 のパイプは変なので別処理になる
 	open(FLIST, ">$FLIST_") || die "Can't open $FLIST_.\n";
     } else {
-	if ($LANGUAGE eq "ja") {
-	    open(FLIST, "|$NKF -jZ >$FLIST_") || die "$FLIST_: $!\n";
-	} else {
+#	if ($LANGUAGE eq "ja") {
+#	    open(FLIST, "|$NKF -jZ >$FLIST_") || die "$FLIST_: $!\n";
+#	} else {
 	    open(FLIST, ">$FLIST_") || die "$FLIST_: $!\n";
-	}
+#	}
     } 
     binmode(FLIST);
     open(ERRORSFILE, ">>$ERRORSFILE") || die "$ERRORSFILE: $!\n";
@@ -1439,9 +1441,10 @@
 	if ($CCS eq "euc") {
 	    print STDERR $USAGE_JA;
 	} elsif ($CCS eq "sjis") {
-	    open(NKF, "|$NKF -s");
-	    print NKF $USAGE_JA;
-	    close(NKF);
+#	    open(NKF, "|$NKF -s");
+#	    print NKF $USAGE_JA;
+#	    close(NKF);
+	    print STDERR nkf("-s", $USAGE_JA);
 	}
     } else {
 	print STDERR $USAGE_EN;
@@ -1569,17 +1572,18 @@
 	if (-e $template) {
 	    my ($buf);
 	    open(TEMPLATE, $template) || die "$template: $!\n";
-	    if ($LANGUAGE eq "ja") {
-		open(OUTPUT ,"|$NKF -j >$full_path_name") 
-		    || die "$full_path_name: $!\n";
-	    } else {
+#	    if ($LANGUAGE eq "ja") {
+#		open(OUTPUT ,"|$NKF -j >$full_path_name") 
+#		    || die "$full_path_name: $!\n";
+#	    } else {
 		open(OUTPUT ,">$full_path_name") 
 		    || die "$full_path_name: $!\n";
-	    }
+#	    }
 	    $buf = join('', <TEMPLATE>);
 	    $buf =~ s/"/\\"/g;
 	    $buf =~ s/\@/\\@/g;
 	    $buf = eval("\"$buf\"");  # eval to interpolate variables in $buf
+	    $buf = nkf("-j", $buf) if ($LANGUAGE eq "ja");
 
 	    print OUTPUT $buf;
 
@@ -2039,13 +2043,14 @@
 
     if (-e $file) {
 	# ファイルは EUC で読み込みます
-	if ($LANGUAGE eq "ja") {
-	    open(FILE ,"$NKF -e $file|") || die "$file: $!\n";
-	} else {
+#	if ($LANGUAGE eq "ja") {
+#	    open(FILE ,"$NKF -e $file|") || die "$file: $!\n";
+#	} else {
 	    open(FILE ,"$file") || die "$file: $!\n";
-	}
+#	}
 	binmode(FILE);
 	$buf = join("", <FILE>);
+	$buf = nkf("-e", $buf) if ($LANGUAGE eq "ja");
 	close(FILE);
     } else {
 	my ($template, $fname);
@@ -2070,11 +2075,11 @@
     }
 
     # the file must be saved in ISO-2022-JP encoding.
-    if ($LANGUAGE eq "ja") {
-	open(FILE ,"|$NKF -j >$file") || die "$file: $!\n";
-    } else {
+#    if ($LANGUAGE eq "ja") {
+#	open(FILE ,"|$NKF -j >$file") || die "$file: $!\n";
+#    } else {
 	open(FILE ,">$file") || die "$file: $!\n";
-    }
+#    }
     binmode(FILE);
 
     if ($buf =~ /(<!-- FILE -->)\s*(.*)\s*(<!-- FILE -->)/) {
@@ -2093,6 +2098,7 @@
 	$buf =~ s/(<!-- KEY -->)(.*)(<!-- KEY -->)/$1 $tmp $3/;
     }
     $buf =~ s/(<!-- DATE -->)(.*)(<!-- DATE -->)/$1 $month\/$day\/$year $3/g;
+    $buf = nkf("-j", $buf) if ($LANGUAGE eq "ja");
 
     print FILE $buf;
     close(FILE);
@@ -2115,10 +2121,12 @@
     my ($url, $title, $cfile_size, $contents, $headings, $cfile, $fields) = @_;
 
     my $summary = make_summary($contents, $headings, $cfile, $fields);
+    $summary = nkf("-jZ", $summary) if ($LANGUAGE eq "ja");
     $title =~ s/\s+/ /g;
     $title =~ s/^\s+//;
     $title =~ s/\s+$//;
     $cfile_size = commas($cfile_size);
+    $title = nkf("-jZ", $title) if ($LANGUAGE eq "ja");
 
     # FLIST へ書き出し <DT> の後に改行が欲しいのです
     print FLIST "<DT>\n<STRONG><A HREF=\"$url\">$title</A></STRONG>\n";