benchmark.sh 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #!/bin/bash
  2. sysinfo () {
  3. cname=$( awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' )
  4. cores=$( awk -F: '/model name/ {core++} END {print core}' /proc/cpuinfo )
  5. freq=$( awk -F: ' /cpu MHz/ {freq=$2} END {print freq}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' )
  6. tram=$( free -m | awk 'NR==2 {print $2}' )
  7. vram=$( free -m | awk 'NR==4 {print $2}' )
  8. up=$( uptime | awk '{ $1=$2=$(NF-6)=$(NF-5)=$(NF-4)=$(NF-3)=$(NF-2)=$(NF-1)=$NF=""; print }' | sed 's/^[ \t]*//;s/[ \t]*$//' )
  9. opsy=$( cat /etc/issue.net | awk 'NR==1 {print}' )
  10. arch=$( uname -m )
  11. lbit=$( getconf LONG_BIT )
  12. hn=$( hostname )
  13. kern=$( uname -r )
  14. bdates=$( date )
  15. echo "Benchmark started on $bdates" | tee -a $HOME/bench.log
  16. echo "Full benchmark log: $HOME/bench.log" | tee -a $HOME/bench.log
  17. echo "" | tee -a $HOME/bench.log
  18. echo "System Info" | tee -a $HOME/bench.log
  19. echo "-----------" | tee -a $HOME/bench.log
  20. echo "Processor : $cname" | tee -a $HOME/bench.log
  21. echo "CPU Cores : $cores" | tee -a $HOME/bench.log
  22. echo "Frequency : $freq MHz" | tee -a $HOME/bench.log
  23. echo "Memory : $tram MB" | tee -a $HOME/bench.log
  24. echo "Swap : $vram MB" | tee -a $HOME/bench.log
  25. echo "Uptime : $up" | tee -a $HOME/bench.log
  26. echo "" | tee -a $HOME/bench.log
  27. echo "OS : $opsy" | tee -a $HOME/bench.log
  28. echo "Arch : $arch ($lbit Bit)" | tee -a $HOME/bench.log
  29. echo "Kernel : $kern" | tee -a $HOME/bench.log
  30. echo "Hostname : $hn" | tee -a $HOME/bench.log
  31. echo "" | tee -a $HOME/bench.log
  32. echo "" | tee -a $HOME/bench.log
  33. }
  34. speedtest4 () {
  35. ipiv=$( wget -qO- ipv4.icanhazip.com )
  36. echo "Speedtest (IPv4 only)" | tee -a $HOME/bench.log
  37. echo "---------------------" | tee -a $HOME/bench.log
  38. echo "Your public IPv4 is $ipiv" | tee -a $HOME/bench.log
  39. echo "" | tee -a $HOME/bench.log
  40. echo "Location Provider Speed" | tee -a $HOME/bench.log
  41. cachefly=$( wget -4 -O /dev/null http://cachefly.cachefly.net/100mb.test 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  42. echo "CDN Cachefly $cachefly" | tee -a $HOME/bench.log
  43. echo "" | tee -a $HOME/bench.log
  44. coloatatl=$( wget -4 -O /dev/null http://speed.atl.coloat.com/100mb.test 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  45. echo "Atlanta, GA, US Coloat $coloatatl " | tee -a $HOME/bench.log
  46. sldltx=$( wget -4 -O /dev/null http://speedtest.dal05.softlayer.com/downloads/test100.zip 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  47. echo "Dallas, TX, US Softlayer $sldltx " | tee -a $HOME/bench.log
  48. slwa=$( wget -4 -O /dev/null http://speedtest.sea01.softlayer.com/downloads/test100.zip 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  49. echo "Seattle, WA, US Softlayer $slwa " | tee -a $HOME/bench.log
  50. slsjc=$( wget -4 -O /dev/null http://speedtest.sjc01.softlayer.com/downloads/test100.zip 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  51. echo "San Jose, CA, US Softlayer $slsjc " | tee -a $HOME/bench.log
  52. slwdc=$( wget -4 -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test100.zip 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  53. echo "Washington, DC, US Softlayer $slwdc " | tee -a $HOME/bench.log
  54. echo "" | tee -a $HOME/bench.log
  55. linodejp=$( wget -4 -O /dev/null http://speedtest.tokyo.linode.com/100MB-tokyo.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  56. echo "Tokyo, Japan Linode $linodejp " | tee -a $HOME/bench.log
  57. slsg=$( wget -4 -O /dev/null http://speedtest.sng01.softlayer.com/downloads/test100.zip 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  58. echo "Singapore Softlayer $slsg " | tee -a $HOME/bench.log
  59. echo "" | tee -a $HOME/bench.log
  60. i3d=$( wget -4 -O /dev/null http://mirror.i3d.net/100mb.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  61. echo "Rotterdam, Netherlands id3.net $i3d" | tee -a $HOME/bench.log
  62. leaseweb=$( wget -4 -O /dev/null http://mirror.leaseweb.com/speedtest/100mb.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  63. echo "Haarlem, Netherlands Leaseweb $leaseweb " | tee -a $HOME/bench.log
  64. echo "" | tee -a $HOME/bench.log
  65. echo "" | tee -a $HOME/bench.log
  66. }
  67. speedtest6 () {
  68. ipvii=$( wget -qO- ipv6.icanhazip.com )
  69. echo "Speedtest (IPv6 only)" | tee -a $HOME/bench.log
  70. echo "---------------------" | tee -a $HOME/bench.log
  71. echo "Your public IPv6 is $ipvii" | tee -a $HOME/bench.log
  72. echo "" | tee -a $HOME/bench.log
  73. echo "Location Provider Speed" | tee -a $HOME/bench.log
  74. v6atl=$( wget -6 -O /dev/null http://speedtest.atlanta.linode.com/100MB-atlanta.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  75. echo "Atlanta, GA, US Linode $v6atl" | tee -a $HOME/bench.log
  76. v6dal=$( wget -6 -O /dev/null http://speedtest.dallas.linode.com/100MB-dallas.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  77. echo "Dallas, TX, US Linode $v6dal" | tee -a $HOME/bench.log
  78. v6new=$( wget -6 -O /dev/null http://speedtest.newark.linode.com/100MB-newark.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  79. echo "Newark, NJ, US Linode $v6new" | tee -a $HOME/bench.log
  80. v6fre=$( wget -6 -O /dev/null http://speedtest.fremont.linode.com/100MB-fremont.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  81. echo "Fremont, CA, US Linode $v6fre" | tee -a $HOME/bench.log
  82. v6chi=$( wget -6 -O /dev/null http://testfile.chi.steadfast.net/data.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  83. echo "Chicago, IL, US Steadfast $v6chi" | tee -a $HOME/bench.log
  84. echo "" | tee -a $HOME/bench.log
  85. v6tok=$( wget -6 -O /dev/null http://speedtest.tokyo.linode.com/100MB-tokyo.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  86. echo "Tokyo, Japan Linode $v6tok" | tee -a $HOME/bench.log
  87. v6sin=$( wget -6 -O /dev/null http://speedtest.singapore.linode.com/100MB-singapore.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  88. echo "Singapore Linode $v6sin" | tee -a $HOME/bench.log
  89. echo "" | tee -a $HOME/bench.log
  90. v6fra=$( wget -6 -O /dev/null http://speedtest.frankfurt.linode.com/100MB-frankfurt.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  91. echo "Frankfurt, Germany Linode $v6fra" | tee -a $HOME/bench.log
  92. v6lon=$( wget -6 -O /dev/null http://speedtest.london.linode.com/100MB-london.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  93. echo "London, UK Linode $v6lon" | tee -a $HOME/bench.log
  94. v6har=$( wget -6 -O /dev/null http://mirror.nl.leaseweb.net/speedtest/100mb.bin 2>&1 | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}' )
  95. echo "Haarlem, Netherlands Leaseweb $v6har" | tee -a $HOME/bench.log
  96. echo "" | tee -a $HOME/bench.log
  97. echo "" | tee -a $HOME/bench.log
  98. }
  99. iotest () {
  100. echo "Disk Speed" | tee -a $HOME/bench.log
  101. echo "----------" | tee -a $HOME/bench.log
  102. io=$( ( dd if=/dev/zero of=test_$$ bs=64k count=16k conv=fdatasync && rm -f test_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' )
  103. io2=$( ( dd if=/dev/zero of=test_$$ bs=64k count=16k conv=fdatasync && rm -f test_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' )
  104. io3=$( ( dd if=/dev/zero of=test_$$ bs=64k count=16k conv=fdatasync && rm -f test_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' )
  105. ioraw=$( echo $io | awk 'NR==1 {print $1}' )
  106. ioraw2=$( echo $io2 | awk 'NR==1 {print $1}' )
  107. ioraw3=$( echo $io3 | awk 'NR==1 {print $1}' )
  108. ioall=$( awk 'BEGIN{print '$ioraw' + '$ioraw2' + '$ioraw3'}' )
  109. ioavg=$( awk 'BEGIN{print '$ioall'/3}' )
  110. echo "I/O (1st run) : $io" | tee -a $HOME/bench.log
  111. echo "I/O (2nd run) : $io2" | tee -a $HOME/bench.log
  112. echo "I/O (3rd run) : $io3" | tee -a $HOME/bench.log
  113. echo "Average I/O : $ioavg MB/s" | tee -a $HOME/bench.log
  114. echo "" | tee -a $HOME/bench.log
  115. }
  116. gbench () {
  117. echo "" | tee -a $HOME/bench.log
  118. echo "System Benchmark (Experimental)" | tee -a $HOME/bench.log
  119. echo "-------------------------------" | tee -a $HOME/bench.log
  120. echo "" | tee -a $HOME/bench.log
  121. echo "Note: The benchmark might not always work (eg: missing dependencies)." | tee -a $HOME/bench.log
  122. echo "Failures are highly possible. We're using Geekbench for this test." | tee -a $HOME/bench.log
  123. echo "" | tee -a $HOME/bench.log
  124. gb_page=http://www.primatelabs.com/geekbench/download/linux/
  125. gb_dl=$(wget -qO - $gb_page | \
  126. sed -n 's/.*\(https\?:[^:]*\.tar\.gz\).*/\1/p')
  127. gb_noext=${gb_dl##*/}
  128. gb_noext=${gb_noext%.tar.gz}
  129. gb_name=${gb_noext//-/ }
  130. echo "File is located at $gb_dl" | tee -a $HOME/bench.log
  131. echo "Downloading and extracting $gb_name" | tee -a $HOME/bench.log
  132. wget -qO - "$gb_dl" | tar xzv 2>&1 >/dev/null
  133. echo "" | tee -a $HOME/bench.log
  134. echo "Starting $gb_name" | tee -a $HOME/bench.log
  135. echo "The system benchmark may take a while." | tee -a $HOME/bench.log
  136. echo "Don't close your terminal/SSH session!" | tee -a $HOME/bench.log
  137. echo "All output is redirected into a result file." | tee -a $HOME/bench.log
  138. echo "" >> $HOME/bench.log
  139. echo "--- Geekbench Results ---" >> $HOME/bench.log
  140. sleep 2
  141. $HOME/dist/$gb_noext/geekbench_x86_32 >> $HOME/bench.log
  142. echo "--- Geekbench Results End ---" >> $HOME/bench.log
  143. echo "" >> $HOME/bench.log
  144. echo "Finished. Removing Geekbench files" | tee -a $HOME/bench.log
  145. sleep 1
  146. rm -rf $HOME/dist/
  147. echo "" | tee -a $HOME/bench.log
  148. gbl=$(sed -n '/following link/,/following link/ {/following link\|^$/b; p}' $HOME/bench.log | sed 's/^[ \t]*//;s/[ \t]*$//' )
  149. echo "Benchmark Results: $gbl" | tee -a $HOME/bench.log
  150. echo "Full report available at $HOME/bench.log" | tee -a $HOME/bench.log
  151. echo "" | tee -a $HOME/bench.log
  152. }
  153. showHelp () {
  154. echo ""
  155. echo "Usage: bench.sh [OPTION]"
  156. echo ""
  157. echo "Available options:"
  158. echo "--info : Displays system information such as CPU, amount CPU cores, RAM and more."
  159. echo "--io : Runs a disk speed test and a IOPing benchmark and displays the results."
  160. echo "--speedtest : IPv4 Speed test."
  161. echo "--speedtest6 : IPv6 Speed test."
  162. echo ""
  163. }
  164. case $1 in
  165. '--info')
  166. sysinfo;;
  167. '--io')
  168. iotest;;
  169. '--speedtest6' )
  170. speedtest6;;
  171. '--speedtest' )
  172. speedtest4;;
  173. '--gbench' )
  174. gbench;;
  175. *)
  176. showHelp;;
  177. esac