delete from hateblo.jp where 1=1;

タイトルに意味はありません。

追加書き込みにおける書き込みのエラー発生状況の調査

ターミナルよりコマンドを出し、意図的に動じ書き込みが起こるように走査しました
同時に16プロセスを開き、ノンストップで1つのファイルに書き込みました。
結果から判断すると、999*16回の内、2回書き込みが中止される現象が起きています。
可能性として考えられるのが、進行状況を確認するために別プロセスでログファイルを開いたことによるかもしれません。

$ perl ana.pl
missingdata     113     -1      14/15
missingdata     244     -1      14/15
統計完了。
同時プロセス数: 16
完全ミス: 0 回
書き込み損失: 2 回

実行結果:
プロセス:1700   1065秒
プロセス:1540   948秒
プロセス:1028   1046秒
プロセス:1508   975秒
プロセス:1776   1077秒
プロセス:1660   1025秒
プロセス:1240   962秒
プロセス:0932   1069秒
プロセス:1752   1078秒
プロセス:1504   985秒
プロセス:1560   947秒
プロセス:1572   946秒
プロセス:1640   1008秒
プロセス:1732   1076秒
プロセス:1716   1072秒
プロセス:1688   1057秒

調査要ログの出力方法は
ターミナル上で
perl filewriter.pl &
を手動で16回起動させました
各、調査スクリプトの内容は
ana.pl

#!/bin/perl -w
$docfile = './temp.log';

my(%time,%temp);
open(FH,$docfile);
foreach(readline(*FH)){
	my @dat = split(/\,/,$_);
	if(!defined($time{$dat[0]})){
		$time{$dat[0]} = 0;
		$len = $#dat;
	}
	if($#dat != $len){
		print "crossed\t$#dat/$len\t@dat\n";
	}
	$time{$dat[0]} += $dat[2];
	if(!defined($temp{$dat[1]})){
		$temp{$dat[1]} = 0;
	} else {
		$temp{$dat[1]}++;
	}
}
close(FH);
my $ids = keys %time;
my $c = -1;
my $no = 0;
my $miss = 0;
$ids--;
foreach(sort {sprintf("%03d",$a)<=>sprintf("%03d",$b)} keys %temp){
	if($c == -1){
		$c = int($_);
	} elsif(!(int($_) == ++$c)) {
		print "notfound\t$_\t$c\n";
		$no++;
		$c = int($_);
	}
	my $t = $temp{$_} - $ids;
	if ($t != 0){
		$miss++;
		print "missingdata\t$_\t$t\t$temp{$_}/$ids\n" ;
	}
}
$ids++;
print <<"EOFDATA";
統計完了。
同時プロセス数: $ids
完全ミス: $no 回
書き込み損失: $miss 回

実行結果:
EOFDATA
foreach(keys %time){
	print join('','プロセス:',$_,"\t",$time{$_},'秒',"\n");
}
__END__
foreach(readline(*FH)){
	my @dat = split(/\,/);
	my $c = 0;
	if(!defined($pid{$dat[0]})){
		$pid{$dat[0]} = $c++;
		$con{$dat[0]} = 0;
		$time{$dat[0]} = 0;
	}
	$result->$pid{$dat[0]}->[$con{$dat[0]}++] = $dat[1];
	$time{$dat[0]} += $dat[2];
}
close(FH);
foreach $p (keys %pid){
	my(@temp) = ();
	foreach(keys $result->$pid{$p}){
		push(@temp,$result->$pid{$p}->[$_]);
	}
	@temp = sort @temp;
	while($)
}


filewriter.pl

#!/bin/perl -w
$docfile = './temp.log';
#$maxWait = 0.05;
$| = 0;
$wait = 0;
$max = 999;
$now = time + 0;
foreach(0..$max){
	#my($un,$wait) = select undef,undef,undef,int(rand($maxWait)*100)/100;
	$wait = time - $now if ($_ == $max);
	&fileWrite($_,$wait);
	#print '.';
	print "$$\t$_\n" if (!($_ % 100));
}
sub fileWrite(){
	open(FH,'>>' . $docfile);
	print FH sprintf("%04d,%03d,%d,\n",$$,@_);
	close(FH);
}

以下は環境情報です

$ perl -V
Summary of my perl5 (revision 5 version 8 subversion 6) configuration:
  Platform:
    osname=cygwin, osvers=1.5.12(0.11642), archname=cygwin-thread-multi-64int
    uname='cygwin_nt-4.0 loreley 1.5.12(0.11642) 2004-11-10 08:34 i686 unknown u
nknown cygwin '
    config_args='-de -Dmksymlinks -Duse64bitint -Dusethreads -Doptimize=-O3 -Dma
n3ext=3pm'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=define use5005threads=undef useithreads=define usemultiplicity=de
fine
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=define use64bitall=undef uselongdouble=undef
    usemymalloc=y, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-DPERL_USE_SAFE_PUTENV -fno-strict-aliasing -pipe -I/usr
/local/include',
    optimize='-O3',
    cppflags='-DPERL_USE_SAFE_PUTENV -fno-strict-aliasing -pipe -I/usr/local/inc
lude'
    ccversion='', gccversion='3.4.1 (cygming special)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lsee
ksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='ld2', ldflags =' -s -L/usr/local/lib'
    libpth=/usr/local/lib /usr/lib /lib
    libs=-lgdbm -ldb -lcrypt -lgdbm_compat
    perllibs=-lcrypt -lgdbm_compat
    libc=/usr/lib/libc.a, so=dll, useshrplib=true, libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' -s'
    cccdlflags=' ', lddlflags=' -s -L/usr/local/lib'


Characteristics of this binary (from libperl):
  Compile-time options: MULTIPLICITY USE_ITHREADS USE_64_BIT_INT USE_LARGE_FILES
 PERL_IMPLICIT_CONTEXT
  Built under cygwin
  Compiled at Jan 27 2005 11:10:54
  %ENV:
    CYGWIN=""



Pentium lll 450MHz
Mem 128+256
HDD 20G (ATAPI NormalATA)