1f08c3bdfSopenharmony_ci#!/usr/bin/perl 2f08c3bdfSopenharmony_ci# 3f08c3bdfSopenharmony_ci# Copyright 2000 by Hans Reiser, licensing governed by reiserfs/README 4f08c3bdfSopenharmony_ci# 5f08c3bdfSopenharmony_ci 6f08c3bdfSopenharmony_ci# 7f08c3bdfSopenharmony_ci# Mongo.pl is reiserfs benchmark. 8f08c3bdfSopenharmony_ci# 9f08c3bdfSopenharmony_ci# To run please use run_mongo script or : 10f08c3bdfSopenharmony_ci# 11f08c3bdfSopenharmony_ci# # ./mongo.pl reiserfs /dev/xxxx /testfs log1 5 12f08c3bdfSopenharmony_ci# or 13f08c3bdfSopenharmony_ci# # ./mongo.pl ext2 /dev/xxxx /testfs log2 5 14f08c3bdfSopenharmony_ci# 15f08c3bdfSopenharmony_ci# 5 - number of processes, you can set any number here 16f08c3bdfSopenharmony_ci# 17f08c3bdfSopenharmony_ci# Test will format partition /dev/xxxx by 'mkreiserfs' or 'mke2fs' 18f08c3bdfSopenharmony_ci# mount it and run given number of processes during each phase : 19f08c3bdfSopenharmony_ci# Create, Copy, Symlinks, Read, Stats, Rename and Delete. 20f08c3bdfSopenharmony_ci# 21f08c3bdfSopenharmony_ci# Also, the program calc fragmentations after Create and Copy phases: 22f08c3bdfSopenharmony_ci# Fragm = number_of_fragments / number_of_files 23f08c3bdfSopenharmony_ci# (Current version use the files more than 16KB to calc Fragm.) 24f08c3bdfSopenharmony_ci# 25f08c3bdfSopenharmony_ci# You can find the same results in files : log, log.tbl, log_table 26f08c3bdfSopenharmony_ci# 27f08c3bdfSopenharmony_ci# log - raw results 28f08c3bdfSopenharmony_ci# log.tbl - results for compare program 29f08c3bdfSopenharmony_ci# log_table - results in table form 30f08c3bdfSopenharmony_ci# 31f08c3bdfSopenharmony_ci 32f08c3bdfSopenharmony_ci$EXTENDED_STATISTICS = 1; 33f08c3bdfSopenharmony_ci 34f08c3bdfSopenharmony_ci 35f08c3bdfSopenharmony_ciuse POSIX; 36f08c3bdfSopenharmony_ciuse File::stat; 37f08c3bdfSopenharmony_ci 38f08c3bdfSopenharmony_cisub print_usage { 39f08c3bdfSopenharmony_ci 40f08c3bdfSopenharmony_ci print "\nUsage: mongo.pl <filesystem> <device>"; 41f08c3bdfSopenharmony_ci print " <mount_point> <log> <processes>\n"; 42f08c3bdfSopenharmony_ci 43f08c3bdfSopenharmony_ci print "<filesystem> - the name of filesystem [reiserfs|ext2]\n"; 44f08c3bdfSopenharmony_ci print "<device> - the device for benchmark (e.g. /dev/hda9)\n"; 45f08c3bdfSopenharmony_ci print "<mount_point> - mount-point for the filesystem"; 46f08c3bdfSopenharmony_ci print " (e.g. /mnt/testfs)\n"; 47f08c3bdfSopenharmony_ci print "<log> - the name prefix for benchmark results\n"; 48f08c3bdfSopenharmony_ci print "<processes> - the number of benchmark processes\n"; 49f08c3bdfSopenharmony_ci 50f08c3bdfSopenharmony_ci print "\nexamples:\n"; 51f08c3bdfSopenharmony_ci print "mongo.pl reiserfs /dev/hda9 /testfs reiserfs_results 1\n"; 52f08c3bdfSopenharmony_ci print "mongo.pl ext2 /dev/hda9 /testfs ext2_results 1\n"; 53f08c3bdfSopenharmony_ci 54f08c3bdfSopenharmony_ci print "\nThe results will be put in ./results directory\n"; 55f08c3bdfSopenharmony_ci} 56f08c3bdfSopenharmony_ci 57f08c3bdfSopenharmony_ci 58f08c3bdfSopenharmony_ci#------- Subroutines declaration -------- 59f08c3bdfSopenharmony_cisub make_fsys; 60f08c3bdfSopenharmony_cisub mongo_x_process; 61f08c3bdfSopenharmony_cisub mongo_launcher; 62f08c3bdfSopenharmony_cisub set_params; 63f08c3bdfSopenharmony_ci 64f08c3bdfSopenharmony_ci#------- main() ------------------------- 65f08c3bdfSopenharmony_ci 66f08c3bdfSopenharmony_ciif ( $#{ARGV} != 4 ) { 67f08c3bdfSopenharmony_ci print_usage; 68f08c3bdfSopenharmony_ci exit(0); 69f08c3bdfSopenharmony_ci } 70f08c3bdfSopenharmony_ci 71f08c3bdfSopenharmony_ci#-------------------------------------------- 72f08c3bdfSopenharmony_ci# Set working directories 73f08c3bdfSopenharmony_ci#-------------------------------------------- 74f08c3bdfSopenharmony_ci$TOPDIR = "$ENV{PWD}"; 75f08c3bdfSopenharmony_ci 76f08c3bdfSopenharmony_ci$RESDIR = "${TOPDIR}/results"; 77f08c3bdfSopenharmony_ci$HTMLDIR = "${RESDIR}/html"; 78f08c3bdfSopenharmony_ci 79f08c3bdfSopenharmony_ci$FILESYSTEM = $ARGV[0]; 80f08c3bdfSopenharmony_ci$DEVICE = $ARGV[1]; 81f08c3bdfSopenharmony_ci$TESTDIR = $ARGV[2]; 82f08c3bdfSopenharmony_ci$PROCESSES = $ARGV[4]; 83f08c3bdfSopenharmony_ci 84f08c3bdfSopenharmony_ci$LOGFILE = "${RESDIR}/${ARGV[3]}"; 85f08c3bdfSopenharmony_ci$LOGFILE2 = "${LOGFILE}_table"; 86f08c3bdfSopenharmony_ci$LOGFILE3 = "${LOGFILE}.tbl"; 87f08c3bdfSopenharmony_ci 88f08c3bdfSopenharmony_ci$TMPFILE = "${RESDIR}/mongo_tmp"; 89f08c3bdfSopenharmony_ci$nproc = $PROCESSES; 90f08c3bdfSopenharmony_ci$READIT = "${TOPDIR}/mongo_read"; 91f08c3bdfSopenharmony_ci$SLINKS = "${TOPDIR}/mongo_slinks"; 92f08c3bdfSopenharmony_ci 93f08c3bdfSopenharmony_ci#-------- reiser_fract_tree parameters---------------- 94f08c3bdfSopenharmony_ci$x1mb = 1024 * 1024; 95f08c3bdfSopenharmony_ci$x2mb = 2 * $x1mb; 96f08c3bdfSopenharmony_ci$x3mb = 3 * $x1mb; 97f08c3bdfSopenharmony_ci 98f08c3bdfSopenharmony_ci$x5mb = 5 * $x1mb; 99f08c3bdfSopenharmony_ci$x50mb = 50 * $x1mb; 100f08c3bdfSopenharmony_ci$x100mb = 100 * $x1mb; 101f08c3bdfSopenharmony_ci 102f08c3bdfSopenharmony_ci# Total amount of bytes in all files on test partition 103f08c3bdfSopenharmony_ci#----------------------------------------------------- 104f08c3bdfSopenharmony_ci 105f08c3bdfSopenharmony_ci$small_bytes = $x50mb; 106f08c3bdfSopenharmony_ci$medium_bytes = $x100mb; 107f08c3bdfSopenharmony_ci$big_bytes = $x100mb; 108f08c3bdfSopenharmony_ci$large_bytes = $x100mb; 109f08c3bdfSopenharmony_ci 110f08c3bdfSopenharmony_ci# Median size of files in bytes for first tree to create 111f08c3bdfSopenharmony_ci#------------------------------------------------------- 112f08c3bdfSopenharmony_ci$small_size = 100; 113f08c3bdfSopenharmony_ci$medium_size = 1000; 114f08c3bdfSopenharmony_ci$big_size = 10000; 115f08c3bdfSopenharmony_ci$large_size = 100000; 116f08c3bdfSopenharmony_ci 117f08c3bdfSopenharmony_ci# Keep the largest file to one fifth (100 million bytes) 118f08c3bdfSopenharmony_ci# of the total tree size. 119f08c3bdfSopenharmony_ci#------------------------------------------------------- 120f08c3bdfSopenharmony_ci$max_file_size = 100000000; 121f08c3bdfSopenharmony_ci 122f08c3bdfSopenharmony_ci# Yuri Shevchuk says that 0 is the median size 123f08c3bdfSopenharmony_ci# in real life, so I believe him. 124f08c3bdfSopenharmony_ci#---------------------------------------------- 125f08c3bdfSopenharmony_ci$median_dir_nr_files = 0; 126f08c3bdfSopenharmony_ci 127f08c3bdfSopenharmony_ci# This should be larger, change once done testing. 128f08c3bdfSopenharmony_ci#------------------------------------------------- 129f08c3bdfSopenharmony_ci$bytes_to_consume = 10000000; 130f08c3bdfSopenharmony_ci 131f08c3bdfSopenharmony_ci$median_file_size = 100; 132f08c3bdfSopenharmony_ci$max_file_size = 1000000; 133f08c3bdfSopenharmony_ci 134f08c3bdfSopenharmony_ci$median_dir_nr_files = 100; 135f08c3bdfSopenharmony_ci$max_directory_nr_files = 10000; 136f08c3bdfSopenharmony_ci 137f08c3bdfSopenharmony_ci$median_dir_branching = 0; 138f08c3bdfSopenharmony_ci$max_dir_branching = 1; 139f08c3bdfSopenharmony_ci 140f08c3bdfSopenharmony_ci# This should be varying, someday.... 141f08c3bdfSopenharmony_ci#------------------------------------ 142f08c3bdfSopenharmony_ci$write_buffer_size = 4096; 143f08c3bdfSopenharmony_ci 144f08c3bdfSopenharmony_ci@numb_of_bytes = ($small_bytes, $medium_bytes, $big_bytes, $large_bytes); 145f08c3bdfSopenharmony_ci@size_of_files = ($small_size, $medium_size, $big_size, $large_size); 146f08c3bdfSopenharmony_ci 147f08c3bdfSopenharmony_ci$reiser_fract_tree_rep_counter = 3; 148f08c3bdfSopenharmony_ci 149f08c3bdfSopenharmony_ci$total_params = $#{numb_of_bytes}; 150f08c3bdfSopenharmony_ci 151f08c3bdfSopenharmony_ci#... Make directories for results 152f08c3bdfSopenharmony_ci#-------------------------------- 153f08c3bdfSopenharmony_ciunless (-e $RESDIR) { 154f08c3bdfSopenharmony_ci print "Creating dir: ${RESDIR} \n"; 155f08c3bdfSopenharmony_ci system("mkdir $RESDIR"); 156f08c3bdfSopenharmony_ci} 157f08c3bdfSopenharmony_ci 158f08c3bdfSopenharmony_ciunless ( -e $HTMLDIR ) { 159f08c3bdfSopenharmony_ci print "Creating dir: ${HTMLDIR} \n"; 160f08c3bdfSopenharmony_ci system("mkdir $HTMLDIR"); 161f08c3bdfSopenharmony_ci} 162f08c3bdfSopenharmony_ci 163f08c3bdfSopenharmony_ci#... Compile *.c files if it is necessary 164f08c3bdfSopenharmony_ci#---------------------------------------- 165f08c3bdfSopenharmony_cisub compile 166f08c3bdfSopenharmony_ci{ 167f08c3bdfSopenharmony_ci my $file = shift @_; 168f08c3bdfSopenharmony_ci my $opt = shift @_ if @_ ; 169f08c3bdfSopenharmony_ci my $cfile = $file . ".c"; 170f08c3bdfSopenharmony_ci die "source file \"${cfile}\" does not exist" unless (-e "$cfile"); 171f08c3bdfSopenharmony_ci if ( -e "$file" && (stat("$file")->mtime >= stat("$cfile")->mtime)) { 172f08c3bdfSopenharmony_ci print "$file is up to date ...\n"; 173f08c3bdfSopenharmony_ci } else { 174f08c3bdfSopenharmony_ci print "Compiling ${cfile} ...\n"; 175f08c3bdfSopenharmony_ci system ("gcc $cfile -o $file $opt"); 176f08c3bdfSopenharmony_ci } 177f08c3bdfSopenharmony_ci} 178f08c3bdfSopenharmony_ci 179f08c3bdfSopenharmony_cicompile("reiser_fract_tree", "-lm"); 180f08c3bdfSopenharmony_cicompile("mongo_slinks"); 181f08c3bdfSopenharmony_cicompile("mongo_read"); 182f08c3bdfSopenharmony_cicompile("map5"); 183f08c3bdfSopenharmony_cicompile("summ"); 184f08c3bdfSopenharmony_cicompile("mongo_compare"); 185f08c3bdfSopenharmony_ci 186f08c3bdfSopenharmony_ci#... Check the command string parameters 187f08c3bdfSopenharmony_ci#--------------------------------------- 188f08c3bdfSopenharmony_ciunless ( ($FILESYSTEM eq "reiserfs") or ($FILESYSTEM eq "ext2") ) { 189f08c3bdfSopenharmony_ci print "mongo.pl: not valid filesystem name: ${FILESYSTEM} \n"; 190f08c3bdfSopenharmony_ci print "Usage: mongo.pl <filesystem> <device> <mount_point> <log> <repeat>\n"; 191f08c3bdfSopenharmony_ci exit(0); 192f08c3bdfSopenharmony_ci} 193f08c3bdfSopenharmony_ci 194f08c3bdfSopenharmony_ciunless ( -b $DEVICE ) { 195f08c3bdfSopenharmony_ci print "mongo.pl: not valid device: ${DEVICE} \n"; 196f08c3bdfSopenharmony_ci print "Usage: mongo.pl <filesystem> <device> <mount_point> <log> <repeat>\n"; 197f08c3bdfSopenharmony_ci exit(0); 198f08c3bdfSopenharmony_ci} 199f08c3bdfSopenharmony_ci 200f08c3bdfSopenharmony_ci 201f08c3bdfSopenharmony_ci#------- Subroutines -------------------------------------- 202f08c3bdfSopenharmony_ci#---------------------------------------------------------- 203f08c3bdfSopenharmony_cisub get_blocks_usage ($) { 204f08c3bdfSopenharmony_ci my ($mp) = @_; 205f08c3bdfSopenharmony_ci my $df = `df -k $mp | tail -n 1`; 206f08c3bdfSopenharmony_ci chomp $df; 207f08c3bdfSopenharmony_ci my @items = split / +/, $df; 208f08c3bdfSopenharmony_ci return $items[2]; 209f08c3bdfSopenharmony_ci} 210f08c3bdfSopenharmony_ci 211f08c3bdfSopenharmony_cisub make_fsys { 212f08c3bdfSopenharmony_ci 213f08c3bdfSopenharmony_ci system ("umount $TESTDIR") ; 214f08c3bdfSopenharmony_ci 215f08c3bdfSopenharmony_ci if ( $FILESYSTEM eq "reiserfs" ) { 216f08c3bdfSopenharmony_ci system("echo y | mkreiserfs $DEVICE") ; 217f08c3bdfSopenharmony_ci system("mount -t reiserfs $DEVICE $TESTDIR") ; 218f08c3bdfSopenharmony_ci } 219f08c3bdfSopenharmony_ci 220f08c3bdfSopenharmony_ci if ( $FILESYSTEM eq "ext2" ) { 221f08c3bdfSopenharmony_ci system("mke2fs $DEVICE") ; 222f08c3bdfSopenharmony_ci system("mount $DEVICE $TESTDIR") ; 223f08c3bdfSopenharmony_ci } 224f08c3bdfSopenharmony_ci} 225f08c3bdfSopenharmony_ci 226f08c3bdfSopenharmony_ci 227f08c3bdfSopenharmony_ci#------------------------------------------------------------------ 228f08c3bdfSopenharmony_ci# Mongo Launcher 229f08c3bdfSopenharmony_ci#------------------------------------------------------------------ 230f08c3bdfSopenharmony_cisub mongo_launcher { 231f08c3bdfSopenharmony_ci 232f08c3bdfSopenharmony_ci my ($phase_num, $phase_name, $cmd, $dir1, $dir2, $flag, $processes) = @_ ; 233f08c3bdfSopenharmony_ci 234f08c3bdfSopenharmony_ci 235f08c3bdfSopenharmony_ci print "$phase_num.$phase_name files of median size $median_file_size bytes ($p processes)...\n"; 236f08c3bdfSopenharmony_ci print LOG "********* Phase $phase_num: $phase_name files of median size $median_file_size bytes ($p processes) *********\n"; 237f08c3bdfSopenharmony_ci $i=0; 238f08c3bdfSopenharmony_ci $total=0; 239f08c3bdfSopenharmony_ci 240f08c3bdfSopenharmony_ci# eliminate the rep counter and the while 241f08c3bdfSopenharmony_ci while ( $i < $reiser_fract_tree_rep_counter ) { 242f08c3bdfSopenharmony_ci print "$phase_name : "; 243f08c3bdfSopenharmony_ci print LOG "$phase_name : "; 244f08c3bdfSopenharmony_ci $com = ""; 245f08c3bdfSopenharmony_ci $pp=$processes; 246f08c3bdfSopenharmony_ci 247f08c3bdfSopenharmony_ci $j=0; 248f08c3bdfSopenharmony_ci while ($pp > 0) { 249f08c3bdfSopenharmony_ci $pp--; 250f08c3bdfSopenharmony_ci 251f08c3bdfSopenharmony_ci# the fact that this if statement was necessary indicated you 252f08c3bdfSopenharmony_ci# attempted excessive generalization and abstraction where it was not 253f08c3bdfSopenharmony_ci# natural to the task that makes the code harder to understand. put 254f08c3bdfSopenharmony_ci# every command on one line to execute. I like it when I can read a 255f08c3bdfSopenharmony_ci# one line command and see what that phase of the test does instead of 256f08c3bdfSopenharmony_ci# looking in many places throughout the code. 257f08c3bdfSopenharmony_ci 258f08c3bdfSopenharmony_ci if ($phase_num == 1) { 259f08c3bdfSopenharmony_ci $com .= "$cmd $dir1-$i-$j $flag"; 260f08c3bdfSopenharmony_ci } 261f08c3bdfSopenharmony_ci elsif ($phase_num == 2) { 262f08c3bdfSopenharmony_ci $com .= "$cmd $dir1-$i-$j $dir2-$i-$j"; 263f08c3bdfSopenharmony_ci } 264f08c3bdfSopenharmony_ci elsif ($phase_num == 3) { 265f08c3bdfSopenharmony_ci $com .= "$cmd $dir1-$i-$j "."-type f | while read X; do echo \$X \$X.lnk ; done | $TOPDIR/mongo_slinks "; 266f08c3bdfSopenharmony_ci } 267f08c3bdfSopenharmony_ci elsif ($phase_num == 4) { 268f08c3bdfSopenharmony_ci $com .= "$cmd"; 269f08c3bdfSopenharmony_ci } 270f08c3bdfSopenharmony_ci elsif ($phase_num == 5) { 271f08c3bdfSopenharmony_ci $com .= "$cmd"; 272f08c3bdfSopenharmony_ci } 273f08c3bdfSopenharmony_ci elsif ($phase_num == 6) { 274f08c3bdfSopenharmony_ci $com .= "$cmd $dir1-$i-$j -type f | perl -e 'while (<>) { chomp; rename (\$_, \"\$_.r\"); };'"; 275f08c3bdfSopenharmony_ci #$com .= " & $cmd $dir2-$i-$j "."-type d -exec mv {} {}.r ';'"; 276f08c3bdfSopenharmony_ci } 277f08c3bdfSopenharmony_ci elsif ($phase_num == 7) { 278f08c3bdfSopenharmony_ci if ($processes > 1) { 279f08c3bdfSopenharmony_ci $com .= "$cmd $dir1-$i-$j & $cmd $dir2-$i-$j"; 280f08c3bdfSopenharmony_ci } 281f08c3bdfSopenharmony_ci else { 282f08c3bdfSopenharmony_ci $com .= "$cmd $dir1-$i-$j ; $cmd $dir2-$i-$j"; 283f08c3bdfSopenharmony_ci } 284f08c3bdfSopenharmony_ci } 285f08c3bdfSopenharmony_ci $com .= " & "; 286f08c3bdfSopenharmony_ci $j++; 287f08c3bdfSopenharmony_ci } 288f08c3bdfSopenharmony_ci 289f08c3bdfSopenharmony_ci $com .= " wait"; 290f08c3bdfSopenharmony_ci #print $com, "\n"; 291f08c3bdfSopenharmony_ci 292f08c3bdfSopenharmony_ci @t=`(time -p $com) 2>&1`; 293f08c3bdfSopenharmony_ci 294f08c3bdfSopenharmony_ci @tt = split ' ', $t[0]; 295f08c3bdfSopenharmony_ci $res = $tt[1]; 296f08c3bdfSopenharmony_ci unless ( $res =~ /\s*\d+/) { 297f08c3bdfSopenharmony_ci print @t , "\n"; 298f08c3bdfSopenharmony_ci print LOG @t, "\n"; 299f08c3bdfSopenharmony_ci } else { 300f08c3bdfSopenharmony_ci print LOG "$res sec.\n"; 301f08c3bdfSopenharmony_ci print "$res sec.\n"; 302f08c3bdfSopenharmony_ci } 303f08c3bdfSopenharmony_ci 304f08c3bdfSopenharmony_ci $total += $res; 305f08c3bdfSopenharmony_ci $i++; 306f08c3bdfSopenharmony_ci } 307f08c3bdfSopenharmony_ci 308f08c3bdfSopenharmony_ci print "total $phase_name time: $total sec.\n"; 309f08c3bdfSopenharmony_ci print LOG "total $phase_name time: $total sec.\n"; 310f08c3bdfSopenharmony_ci 311f08c3bdfSopenharmony_ci $ares[$phase_num]=$total; # ser array of results 312f08c3bdfSopenharmony_ci 313f08c3bdfSopenharmony_ci if ($EXTENDED_STATISTICS) { 314f08c3bdfSopenharmony_ci if( $phase_num < 3) { 315f08c3bdfSopenharmony_ci $used = get_blocks_usage($TESTDIR) - $used0; 316f08c3bdfSopenharmony_ci if ($phase_num == 1) { 317f08c3bdfSopenharmony_ci $used1=$used; 318f08c3bdfSopenharmony_ci }elsif($phase_num == 2){ 319f08c3bdfSopenharmony_ci $used2=$used; 320f08c3bdfSopenharmony_ci } 321f08c3bdfSopenharmony_ci print "Used disk space (df) : $used KB\n"; 322f08c3bdfSopenharmony_ci print LOG "Used disk space (df) : $used KB\n"; 323f08c3bdfSopenharmony_ci 324f08c3bdfSopenharmony_ci open (FIND_PIPE, "find $TESTDIR|") || die "cannnot open pipe from \"find\": $!\n"; 325f08c3bdfSopenharmony_ci $dirs = 0; 326f08c3bdfSopenharmony_ci $files = 0; 327f08c3bdfSopenharmony_ci $files16 = 0; 328f08c3bdfSopenharmony_ci 329f08c3bdfSopenharmony_ci while(<FIND_PIPE>) { 330f08c3bdfSopenharmony_ci chomp; 331f08c3bdfSopenharmony_ci $st = lstat ($_); 332f08c3bdfSopenharmony_ci if (S_ISDIR($st->mode)) { 333f08c3bdfSopenharmony_ci $dirs ++; 334f08c3bdfSopenharmony_ci } elsif (S_ISREG($st->mode)) { 335f08c3bdfSopenharmony_ci $files ++; 336f08c3bdfSopenharmony_ci $files16 ++ if ($st->size > 16384); 337f08c3bdfSopenharmony_ci } 338f08c3bdfSopenharmony_ci } 339f08c3bdfSopenharmony_ci 340f08c3bdfSopenharmony_ci close (FIND_PIPE); 341f08c3bdfSopenharmony_ci 342f08c3bdfSopenharmony_ci print "Total dirs: $dirs\n"; 343f08c3bdfSopenharmony_ci print "Total files: $files\n"; 344f08c3bdfSopenharmony_ci print LOG "Total dirs: $dirs\n"; 345f08c3bdfSopenharmony_ci print LOG "Total files: $files\n"; 346f08c3bdfSopenharmony_ci 347f08c3bdfSopenharmony_ci #$f=$frag; 348f08c3bdfSopenharmony_ci $f16 = $files16; 349f08c3bdfSopenharmony_ci $fr16 =`find $TESTDIR -type f -size +16k | xargs $TOPDIR/map5 | $TOPDIR/summ | tail -n 1 2>&1`; 350f08c3bdfSopenharmony_ci @ff16= split ' ', $f16; 351f08c3bdfSopenharmony_ci @ffr16= split ' ', $fr16; 352f08c3bdfSopenharmony_ci $files16 = $ff16[0]; 353f08c3bdfSopenharmony_ci $frag = $ffr16[0]; 354f08c3bdfSopenharmony_ci $procent = $frag / $files16; 355f08c3bdfSopenharmony_ci print "Total fragments : $frag \n"; 356f08c3bdfSopenharmony_ci print LOG "Total fragments : $frag \n"; 357f08c3bdfSopenharmony_ci 358f08c3bdfSopenharmony_ci printf "Fragments / files :%.3f\n", $procent; 359f08c3bdfSopenharmony_ci printf LOG "Fragments / files :%.3f\n", $procent; 360f08c3bdfSopenharmony_ci $frag_res[$phase_num]=$procent; # ser array of results 361f08c3bdfSopenharmony_ci } 362f08c3bdfSopenharmony_ci } 363f08c3bdfSopenharmony_ci 364f08c3bdfSopenharmony_ci system("sync"); 365f08c3bdfSopenharmony_ci print "\n"; 366f08c3bdfSopenharmony_ci print LOG "\n"; 367f08c3bdfSopenharmony_ci 368f08c3bdfSopenharmony_ci} 369f08c3bdfSopenharmony_ci 370f08c3bdfSopenharmony_ci# and what is an x process? 371f08c3bdfSopenharmony_ci 372f08c3bdfSopenharmony_ci#------------------------------------------------------------------ 373f08c3bdfSopenharmony_ci# MONGO_X_PROCESS ( x is number of processes to run ) 374f08c3bdfSopenharmony_ci#------------------------------------------------------------------ 375f08c3bdfSopenharmony_cisub mongo_x_process { 376f08c3bdfSopenharmony_ci 377f08c3bdfSopenharmony_ci my ($processes) = @_ ; 378f08c3bdfSopenharmony_ci $p = $processes; 379f08c3bdfSopenharmony_ci 380f08c3bdfSopenharmony_ci make_fsys; # make and mount the file system 381f08c3bdfSopenharmony_ci $used0 = get_blocks_usage($TESTDIR); 382f08c3bdfSopenharmony_ci 383f08c3bdfSopenharmony_ci open LOG, ">>$LOGFILE" or die "Can not open log file $LOGFILE\n"; 384f08c3bdfSopenharmony_ci open LOG2, ">>$LOGFILE2" or die "Can not open log file $LOGFILE2\n"; 385f08c3bdfSopenharmony_ci open LOG3, ">>$LOGFILE3" or die "Can not open log file $LOGFILE2\n"; 386f08c3bdfSopenharmony_ci 387f08c3bdfSopenharmony_ci print LOG "FILESYSTEM=$FILESYSTEM \n"; 388f08c3bdfSopenharmony_ci 389f08c3bdfSopenharmony_ci print "\n"; 390f08c3bdfSopenharmony_ci if($p == 1) { 391f08c3bdfSopenharmony_ci print "mongo_single_process, the_set_of_param.N=$par_set_n of $total_params \n"; 392f08c3bdfSopenharmony_ci print LOG "mongo_single_process, the_set_of_paramN=$par_set_n of $total_params \n"; 393f08c3bdfSopenharmony_ci } elsif ($p > 1) { 394f08c3bdfSopenharmony_ci print "mongo_multi_process ($p processes), the_set_of_param.N=$par_set_n of $total_params \n"; 395f08c3bdfSopenharmony_ci print LOG "mongo_multi_process ($p processes), the_set_of_paramN=$par_set_n of $total_params \n"; 396f08c3bdfSopenharmony_ci } 397f08c3bdfSopenharmony_ci 398f08c3bdfSopenharmony_ci print "Results in file : $LOGFILE \n"; 399f08c3bdfSopenharmony_ci print "\n"; 400f08c3bdfSopenharmony_ci 401f08c3bdfSopenharmony_ci $dir1 = "$TESTDIR/testdir1"; 402f08c3bdfSopenharmony_ci $dir2 = "$TESTDIR/testdir2"; 403f08c3bdfSopenharmony_ci $flag = 0; 404f08c3bdfSopenharmony_ci 405f08c3bdfSopenharmony_ci $cmd_1 = "$TOPDIR/reiser_fract_tree $bytes_to_consume $median_file_size $max_file_size $median_dir_nr_files $max_directory_nr_files $median_dir_branching $max_dir_branching $write_buffer_size"; 406f08c3bdfSopenharmony_ci $cmd_2 = "cp -r"; 407f08c3bdfSopenharmony_ci $cmd_3 = "find"; 408f08c3bdfSopenharmony_ci $cmd_4 = "find $TESTDIR -type f | xargs $TOPDIR/mongo_read"; 409f08c3bdfSopenharmony_ci $cmd_5 = "find $TESTDIR -type f > /dev/null"; # it should be enough for stat all files. -zam 410f08c3bdfSopenharmony_ci $cmd_6 = "find"; #" $TESTDIR -type f -exec mv {} {}.r ';'"; 411f08c3bdfSopenharmony_ci $cmd_7 = "rm -r"; 412f08c3bdfSopenharmony_ci 413f08c3bdfSopenharmony_ci system("sync"); 414f08c3bdfSopenharmony_ci $frag = 0; 415f08c3bdfSopenharmony_ci mongo_launcher ( 1, "Create", $cmd_1, $dir1, $dir2, $flag, $p); # phase 1 416f08c3bdfSopenharmony_ci mongo_launcher ( 2, "Copy ", $cmd_2, $dir1, $dir2, $flag, $p); # phase 2 417f08c3bdfSopenharmony_ci mongo_launcher ( 3, "Slinks", $cmd_3, $dir1, $dir2, $flag, $p); # phase 3 418f08c3bdfSopenharmony_ci mongo_launcher ( 4, "Read ", $cmd_4, $dir1, $dir2, $flag, $p); # phase 4 419f08c3bdfSopenharmony_ci mongo_launcher ( 5, "Stats ", $cmd_5, $dir1, $dir2, $flag, $p); # phase 5 420f08c3bdfSopenharmony_ci mongo_launcher ( 6, "Rename", $cmd_6, $dir1, $dir2, $flag, $p); # phase 6 421f08c3bdfSopenharmony_ci mongo_launcher ( 7, "Delete", $cmd_7, $dir1, $dir2, $flag, $p); # phase 7 422f08c3bdfSopenharmony_ci 423f08c3bdfSopenharmony_ci print LOG2 "\n"; 424f08c3bdfSopenharmony_ci if ($processes > 1) { 425f08c3bdfSopenharmony_ci print LOG2 "MONGO_MULTI_PROCESS ($processes processes) BENCHMARK RESULTS (time in sec.)\n"; 426f08c3bdfSopenharmony_ci }else { 427f08c3bdfSopenharmony_ci print LOG2 "MONGO_SINGLE_PROCESS BENCHMARK RESULTS (time in sec.)\n"; 428f08c3bdfSopenharmony_ci } 429f08c3bdfSopenharmony_ci print LOG2 " FILESYSTEM=$FILESYSTEM\n"; 430f08c3bdfSopenharmony_ci print LOG2 " parameters: files=$files, base_size=$median_file_size bytes, dirs=$dirs\n"; 431f08c3bdfSopenharmony_ci print LOG2 "--------------------------------------------------------------\n"; 432f08c3bdfSopenharmony_ci print LOG2 "Create\tCopy\tSlink\tRead\tStats\tRename\tDelete\n"; 433f08c3bdfSopenharmony_ci print LOG2 " time \ttime\ttime\ttime\ttime \t time \t time\n"; 434f08c3bdfSopenharmony_ci print LOG2 "--------------------------------------------------------------\n"; 435f08c3bdfSopenharmony_ci print LOG2 "$ares[1]\t$ares[2]\t$ares[3]\t$ares[4]\t$ares[5]\t$ares[6]\t$ares[7]\n"; 436f08c3bdfSopenharmony_ci print LOG2 "--------------------------------------------------------------\n"; 437f08c3bdfSopenharmony_ci print LOG2 "The size of files tree : \n"; 438f08c3bdfSopenharmony_ci print LOG2 " after create = $used1 kb\n"; 439f08c3bdfSopenharmony_ci print LOG2 " after copy = $used2 kb\n"; 440f08c3bdfSopenharmony_ci print LOG2 "\n"; 441f08c3bdfSopenharmony_ci 442f08c3bdfSopenharmony_ci 443f08c3bdfSopenharmony_ci print LOG3 "\n"; 444f08c3bdfSopenharmony_ci if ($processes > 1) { 445f08c3bdfSopenharmony_ci print LOG3 "MONGO_MULTI_PROCESS ($processes) \n"; 446f08c3bdfSopenharmony_ci }else { 447f08c3bdfSopenharmony_ci print LOG3 "MONGO_SINGLE_PROCESS \n"; 448f08c3bdfSopenharmony_ci } 449f08c3bdfSopenharmony_ci print LOG3 "parameters: \n"; 450f08c3bdfSopenharmony_ci print LOG3 "files=$files \n"; 451f08c3bdfSopenharmony_ci print LOG3 "base_size=$median_file_size bytes \n"; 452f08c3bdfSopenharmony_ci print LOG3 "dirs=$dirs \n"; 453f08c3bdfSopenharmony_ci print LOG3 "\n"; 454f08c3bdfSopenharmony_ci 455f08c3bdfSopenharmony_ci print LOG3 "FSYS=$FILESYSTEM \n"; 456f08c3bdfSopenharmony_ci print LOG3 "(time in sec.) \n"; 457f08c3bdfSopenharmony_ci print LOG3 "Create : $ares[1]\n"; 458f08c3bdfSopenharmony_ci print LOG3 "Fragm. : $frag_res[1]\n"; 459f08c3bdfSopenharmony_ci print LOG3 "df : $used1\n\n"; 460f08c3bdfSopenharmony_ci print LOG3 "Copy : $ares[2] \n"; 461f08c3bdfSopenharmony_ci print LOG3 "Fragm. : $frag_res[2]\n"; 462f08c3bdfSopenharmony_ci print LOG3 "df : $used2\n\n"; 463f08c3bdfSopenharmony_ci print LOG3 "Slinks : $ares[3]\n"; 464f08c3bdfSopenharmony_ci print LOG3 "Read : $ares[4]\n"; 465f08c3bdfSopenharmony_ci print LOG3 "Stats : $ares[5]\n"; 466f08c3bdfSopenharmony_ci print LOG3 "Rename : $ares[6] \n"; 467f08c3bdfSopenharmony_ci print LOG3 "Delete : $ares[7]\n"; 468f08c3bdfSopenharmony_ci 469f08c3bdfSopenharmony_ci print LOG3 "\n"; 470f08c3bdfSopenharmony_ci 471f08c3bdfSopenharmony_ci 472f08c3bdfSopenharmony_ci if($processes > 1) { 473f08c3bdfSopenharmony_ci print LOG "******* The end of mongo_multi_process *******"; 474f08c3bdfSopenharmony_ci }else { 475f08c3bdfSopenharmony_ci print LOG "******* The end of mongo_single_process *******"; 476f08c3bdfSopenharmony_ci } 477f08c3bdfSopenharmony_ci} 478f08c3bdfSopenharmony_ci 479f08c3bdfSopenharmony_ci#--------------------------------------------------- 480f08c3bdfSopenharmony_ci# Set parameters 481f08c3bdfSopenharmony_ci#--------------------------------------------------- 482f08c3bdfSopenharmony_cisub set_params { 483f08c3bdfSopenharmony_ci my ($n) = @_ ; 484f08c3bdfSopenharmony_ci 485f08c3bdfSopenharmony_ci $bytes_to_consume = $numb_of_bytes[$n]; 486f08c3bdfSopenharmony_ci $median_file_size = $size_of_files[$n]; 487f08c3bdfSopenharmony_ci 488f08c3bdfSopenharmony_ci #$max_file_size = 1000000; 489f08c3bdfSopenharmony_ci 490f08c3bdfSopenharmony_ci #$median_dir_nr_files = 100; 491f08c3bdfSopenharmony_ci #$max_directory_nr_files = 10000; 492f08c3bdfSopenharmony_ci 493f08c3bdfSopenharmony_ci #$median_dir_branching = 0; 494f08c3bdfSopenharmony_ci #$max_dir_branching = 1; 495f08c3bdfSopenharmony_ci 496f08c3bdfSopenharmony_ci} 497f08c3bdfSopenharmony_ci 498f08c3bdfSopenharmony_ci#---------------------------------------------------------- 499f08c3bdfSopenharmony_ci# TEST START 500f08c3bdfSopenharmony_ci#---------------------------------------------------------- 501f08c3bdfSopenharmony_ci 502f08c3bdfSopenharmony_ci $par_set_n = 0; 503f08c3bdfSopenharmony_ci foreach $fsize (@size_of_files) { 504f08c3bdfSopenharmony_ci set_params ($par_set_n); 505f08c3bdfSopenharmony_ci mongo_x_process( $nproc ); # run n processes 506f08c3bdfSopenharmony_ci $par_set_n++; 507f08c3bdfSopenharmony_ci } 508f08c3bdfSopenharmony_ci system("umount $TESTDIR"); 509f08c3bdfSopenharmony_ci exit; 510f08c3bdfSopenharmony_ci 511f08c3bdfSopenharmony_ci 512