pastebin - collaborative debugging tool
nrubsig.kpaste.net RSS


fstest_make_numtree1.ksh93 - filesystem stress test using parallel makefile
Posted by Anonymous on Fri 19th Jul 2024 12:06
raw | new post

  1. #!/bin/ksh93
  2.  
  3. #
  4. # fstest_make_numtree1.ksh93 - filesystem stress test using parallel makefile
  5. #
  6. # The script builds a makefile to generate number sequence
  7. # The resulting Makefile is intended to be used with
  8. # $ bmake -j128 all # as filesystem test
  9. #
  10. # Written by Roland Mainz <roland.mainz@nrubsig.org>
  11. #
  12.  
  13. function genmakefile_make_number_seq
  14. {
  15.         set -o nounset
  16.         nameref out_maketarget=$1
  17.         integer start_i=$2
  18.         integer stop_i=$3
  19.         typeset payload=$4
  20.         integer i
  21.         typeset -a make_targets
  22.  
  23.         if (( (stop_i - start_i) > 10 )) ; then
  24.                 (( i=(stop_i - start_i)/2 ))
  25.                 genmakefile_make_number_seq make_targets[0] $start_i $(( start_i+i )) "$payload"
  26.                 genmakefile_make_number_seq make_targets[1] $(( start_i+i )) $stop_i  "$payload"
  27.         else
  28.                 for ((i=start_i ; i < stop_i ; i++ )) ; do
  29.                         printf 'i_%d:\n' i
  30.                         printf '\t@printf "%d\\t%s\\n" >"i_%d"\n' i "$payload" i
  31.                         make_targets+=( "i_$i" )
  32.                 done
  33.         fi
  34.  
  35.         out_maketarget="i_${start_i}_${stop_i}"
  36.         printf 'i_%d_%d: %s\n' start_i stop_i "${make_targets[*]}"
  37.  
  38.         printf '\tcat '
  39.         printf '%q ' "${make_targets[@]}"
  40.         printf ' >"%s"\n' "$out_maketarget"
  41.  
  42.         return 0
  43. }
  44.  
  45. function genmakefile
  46. {
  47.         set -o nounset
  48.         typeset make_target
  49.         integer max_num=$1
  50.         typeset string_payload=$2
  51.  
  52.         genmakefile_make_number_seq make_target 0 ${max_num} "${string_payload}"
  53.  
  54.         printf 'all: %s\n' "$make_target"
  55.  
  56.         return 0
  57. }
  58.  
  59. function main
  60. {
  61.         set -o nounset
  62.         typeset cmd="$1"
  63.  
  64.         #
  65.         # config
  66.         #
  67.  
  68.         # max number of iterations
  69.         integer max_num=2000
  70.         # 4096 bytes of payload
  71.         typeset string_payload="$(
  72.                 integer p ;
  73.                 for ((p=0 ; p < 4096 ; p++ )) ; do
  74.                         printf '%x' $((p%0x10)) ;
  75.                 done)"
  76.  
  77.         #
  78.         # We need BSD make, as GNU make -j128 somehow does not
  79.         # yield parallism
  80.         #
  81.         if [[ "$(which bmake 2>'/dev/null')" == '' ]] ; then
  82.                 print -u2 -f $"%s: bmake required\n" "${.sh.file}"
  83.                 return 1
  84.         fi
  85.  
  86.         case "$cmd" in
  87.                 'generate')
  88.                         set -o xtrace
  89.                         genmakefile ${max_num} "${string_payload}" >"make_numtree1.Makefile"
  90.                         set +o xtrace
  91.                         ;;
  92.                 'run')
  93.                         set -o xtrace
  94.                         time bmake -j128 -f "make_numtree1.Makefile" all
  95.                         set +o xtrace
  96.                         ;;
  97.                 'clean')
  98.                         set -o xtrace
  99.                         rm -- i_*
  100.                         rm -- "make_numtree1.Makefile"
  101.                         set +o xtrace
  102.                         ;;
  103.                 # all-in-one
  104.                 'all')
  105.                         set -o xtrace
  106.                         (
  107.                                 set -o errexit
  108.                                 rm -- i_*
  109.                                 rm -- "make_numtree1.Makefile"
  110.  
  111.                                 genmakefile ${max_num} "${string_payload}" >"make_numtree1.Makefile"
  112.  
  113.                                 time bmake -j32 -f "make_numtree1.Makefile" all
  114.                                 ls -l "i_0_${max_num}"
  115.  
  116.                                 diff -u <(awk '{ print $1 }' "i_0_${max_num}") <(seq 0 $(( max_num )))
  117.                                 set +o xtrace
  118.                         )
  119.                         return $?
  120.                         ;;
  121.  
  122.                 *)
  123.                         print -u2 -f \
  124.                                 $"%s: Unknown subcmd, supported are 'generate', 'run', 'clean', 'all'\n" "${.sh.file}"
  125.                         return 1
  126.                         ;;
  127.         esac
  128.  
  129.         return 0
  130. }
  131.  
  132. builtin printf
  133.  
  134. main "$@"
  135. # EOF.

Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:

To highlight particular lines, prefix each line with {%HIGHLIGHT}




All content is user-submitted.
The administrators of this site (kpaste.net) are not responsible for their content.
Abuse reports should be emailed to us at