Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A benchmark utility for POSIX shell comparison

License

NotificationsYou must be signed in to change notification settings

shellspec/shellbench

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A benchmark utility for POSIX shell comparison

Usage

Usage: shellbench [options] files...  -s, --shell SHELL[,SHELL...]  The shell(s) to run the benchmark. [default: sh]  -t, --time SECONDS            Benchmark execution time. (SECONDS > 0) [default: 3]  -w, --warmup SECONDS          Benchmark preparation time. (SECONDS > 0) [default: 1]  -c, --correct                 Enable correction mode to eliminate loop overhead.  -e, --error                   Display error details.  -h, --help                    You're looking at it.

Sample

$./shellbench -s sh,bash,ksh,mksh,posh,zsh sample/count.sh sample/output.sh------------------------------------------------------------------------------------------------name                                   sh       bash        ksh       mksh       posh        zsh------------------------------------------------------------------------------------------------count.sh: posix                 1,034,369    248,929    282,537    364,627    411,116    577,090count.sh: typeset -i                error    237,421    288,133    341,660      error    593,124count.sh: increment                 error    272,415    443,765    350,265      error    835,077output.sh: echo                   279,335    121,104    375,175    179,903    201,718     59,138output.sh: printf                 277,989    118,461    209,123        180        179     63,644output.sh: print                    error      error    281,775    182,388      error     63,006------------------------------------------------------------------------------------------------* count: number of executions per second

file:sample/count.sh

#!/bin/shsetup() { i=1; }cleanup() {:; }#bench "posix"@begini=$((i+1))@end#bench "typeset -i"typeset -i i@begini=$((i+1))@end#bench "increment"typeset -i i@begin((i++))@end

file:sample/output.sh

#!/bin/sh#bench "echo"@beginecho"test"@end#bench "printf"@beginprintf"test\n"@end#bench "print"@beginprint"test"@end

Directives

#bench

Define new benchmark

#bench NAME

@begin & @end

Repeatedly execute between@begin to@end, and count the number of executions.

@beginecho"test"@end

Hooks

setup

Invoked before each benchmark.

cleanup

Invoked after each benchmark.

Environment variables

namedescriptiondefault
SHELLBENCH_SHELLSThe shell(s) to run the benchmarksh
SHELLBENCH_BENCHMARK_TIMEBenchmark execution time3
SHELLBENCH_WARMUP_TIMEBenchmark preparation time1
SHELLBENCH_NAME_WIDTHDisplay width of benchmark name30
SHELLBENCH_COUNT_WIDTHDisplay width of benchamrk count10
SHELLBENCH_NULLLOOP_COUNTnull loop measurement

How it works

ShellBench translates@begin and@end to loop as follows:

# From@beginecho"test"@end# Translate towhile __count=$(($__count+1));doecho"test"done

That is, during the benchmark time, not onlyecho butwhile,__ count=$(($__count+1)), count the number of times it is executed.

This loop will be killed by another process after benchmark time. Therefore, after@end is not executed.

Correction mode

Calculate the benchmark measurement results more strictly.This mode is suitable when the cost impact of the loop cannot be ignored.

Difference between default and modification mode

  • Default mode: Measurewhile,__count=$(($__count+1)) and target code.
  • Correction mode: Measure only target code

Correction mode first measures the null loop and then eliminatesthe null loop measurement from the benchmark measurement.

# Null loopwhile __count=$(($__count+1));do__CORRECTION_MODE=done

And translates@begin and@end in correction mode as follows:

# From@beginecho"test"@end# Translate towhile __count=$(($__count+1));do__CORRECTION_MODE=echo"test"done

Compute a corrected value from the null loop execution count and the benchmark count.

Corrected count:B / ( 1.0 - ( B * ( 1.0 / A ) ) )

  • A: null loop executed count
  • B: benchmark count

About

A benchmark utility for POSIX shell comparison

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Languages


[8]ページ先頭

©2009-2025 Movatter.jp