in reply to Re: BitStream revisited
in thread BitStream revisited

You would play with the BLOCK_SIZE (probably 1-2MB will be optimal as a stab in the dark - see Re: Performance Question for details) to spend as much memory as you can/need to/is optimal and limit disk access.

There's actually only a marginal speedup for anything over the system block size, usually 4K or 8K. In fact, when the buffer size gets up to around a MB, things slow down a little bit.

All of these tests are with a warm cache on an approximately 1GB file.

#!/usr/bin/perl my $i = 0; while (sysread(STDIN,$buf,$ENV{BLOCKSIZE})) { $i++; } print "Called read $i times.\n";
$ BLOCKSIZE=4096 time perl /tmp/t6 <root_fs
Called read 262144 times.
0.55user 8.93system 0:38.36elapsed 24%CPU

$ BLOCKSIZE=8192 time perl /tmp/t6 <root_fs
Called read 131072 times.
0.47user 8.53system 0:39.10elapsed 23%CPU

$ BLOCKSIZE=16384 time perl /tmp/t6 <root_fs
Called read 65536 times.
0.24user 7.46system 0:38.04elapsed 20%CPU

$ BLOCKSIZE=65536 time perl /tmp/t6 <root_fs
Called read 16384 times.
0.17user 9.04system 0:38.16elapsed 24%CPU

$ BLOCKSIZE=262144 time perl /tmp/t6 <root_fs
Called read 4096 times.
0.13user 11.77system 0:38.53elapsed 30%CPU 

$ BLOCKSIZE=524288 time perl /tmp/t6 <root_fs
Called read 2048 times.
0.06user 12.49system 0:39.15elapsed 32%CPU 

$ BLOCKSIZE=1048576 time perl /tmp/t6 <root_fs
Called read 1024 times.
0.04user 12.94system 0:38.34elapsed 33%CPU

Replies are listed 'Best First'.
Re: Re: Re: BitStream revisited
by tachyon (Chancellor) on Dec 31, 2003 at 05:11 UTC

    Re: Re: Re: Re: BitStream revisited. As noted you need to test the exact code/OS/hardware combo. You will see I got somewhat different results with a 65K sweetspot for throughput speed (but with a defined 4096 read buffer as seen in other node). On my test system a 65k buffer would give me a 40% odd performance boost (over a 4K buffer) whereas on yours it would cost me 20% over your optimum 16k buffer. Just goes to show you can't overgeneralize tuning results.

    Out of interest the last lot of testing I did on this sort of thing was using IDE disks whereas this is on RAID V SCSI hardware.

    [root@devel3 root]# cat reader.pl #!/usr/bin/perl open $fh, '/root/big.file' or die $!; 1 while read( $fh, $buf, $ENV{BLOCK_SIZE} ); close $fh; [root@devel3 root]# ll big.file -rw-r--r-- 1 root root 100000000 Dec 31 04:59 big.file [root@devel3 root]# BLOCK_SIZE=1024 time perl /root/reader.pl 0.11user 0.08system 0:00.20elapsed 94%CPU (0avgtext+0avgdata 0maxresid +ent)k 0inputs+0outputs (275major+31minor)pagefaults 0swaps [root@devel3 root]# BLOCK_SIZE=2048 time perl /root/reader.pl 0.05user 0.12system 0:00.16elapsed 104%CPU (0avgtext+0avgdata 0maxresi +dent)k 0inputs+0outputs (275major+33minor)pagefaults 0swaps [root@devel3 root]# BLOCK_SIZE=4192 time perl /root/reader.pl 0.03user 0.10system 0:00.13elapsed 94%CPU (0avgtext+0avgdata 0maxresid +ent)k 0inputs+0outputs (275major+32minor)pagefaults 0swaps [root@devel3 root]# BLOCK_SIZE=4096 time perl /root/reader.pl 0.05user 0.06system 0:00.11elapsed 94%CPU (0avgtext+0avgdata 0maxresid +ent)k 0inputs+0outputs (275major+33minor)pagefaults 0swaps [root@devel3 root]# BLOCK_SIZE=1024 time perl /root/reader.pl 0.09user 0.11system 0:00.19elapsed 103%CPU (0avgtext+0avgdata 0maxresi +dent)k 0inputs+0outputs (275major+33minor)pagefaults 0swaps [root@devel3 root]# BLOCK_SIZE=2048 time perl /root/reader.pl 0.03user 0.13system 0:00.15elapsed 100%CPU (0avgtext+0avgdata 0maxresi +dent)k 0inputs+0outputs (275major+34minor)pagefaults 0swaps [root@devel3 root]# BLOCK_SIZE=4096 time perl /root/reader.pl 0.01user 0.11system 0:00.11elapsed 102%CPU (0avgtext+0avgdata 0maxresi +dent)k 0inputs+0outputs (275major+33minor)pagefaults 0swaps [root@devel3 root]# BLOCK_SIZE=8192 time perl /root/reader.pl 0.02user 0.08system 0:00.09elapsed 107%CPU (0avgtext+0avgdata 0maxresi +dent)k 0inputs+0outputs (275major+33minor)pagefaults 0swaps [root@devel3 root]# BLOCK_SIZE=16384 time perl /root/reader.pl 0.01user 0.07system 0:00.08elapsed 98%CPU (0avgtext+0avgdata 0maxresid +ent)k 0inputs+0outputs (275major+34minor)pagefaults 0swaps [root@devel3 root]# BLOCK_SIZE=65536 time perl /root/reader.pl 0.00user 0.07system 0:00.07elapsed 93%CPU (0avgtext+0avgdata 0maxresid +ent)k 0inputs+0outputs (275major+45minor)pagefaults 0swaps [root@devel3 root]# BLOCK_SIZE=262144 time perl /root/reader.pl 0.02user 0.12system 0:00.13elapsed 100%CPU (0avgtext+0avgdata 0maxresi +dent)k 0inputs+0outputs (275major+95minor)pagefaults 0swaps [root@devel3 root]# BLOCK_SIZE=524288 time perl /root/reader.pl 0.01user 0.18system 0:00.25elapsed 74%CPU (0avgtext+0avgdata 0maxresid +ent)k 0inputs+0outputs (275major+159minor)pagefaults 0swaps [root@devel3 root]#

    cheers

    tachyon