さまざまなシェルをベンチマークする方法

さまざまなシェルをベンチマークする方法

シェル1がシェル2よりも作業が良いかどうかを知りたいです。 ksh、dash、bash、zshなどのシェル3を使用してテストできます。私はテストスクリプトを使用してプロジェクトを構築し、起動し、標準入力を介して入力を提供し、Valgrindを使用してシェルの動作を分析し、コードが実行する操作の有益なトレースを取得します。今、2つのシェルとより複雑なパイプラインの間をベンチマークしたいかどうか疑問に思います。テストケースを作成するために主にランダムな重要でないパイプラインを使用しているので、テストのための良いシェルコマンドを助けることができますか?

私は大きなファイルを通して大きな仕事をすることを想像できます。これは、高価なタスクを実行してどのシェルが「より高速」であるかを知るための良い方法ですか、それとも大きなシェルスクリプトを実行するのですか?

私がテストしたいシェルはこのスクリプトのような入力を受け入れることができ、Valgrindは高価なパイプラインをテストするときに照合順序の問題やその他のエラーを測定できます。

さまざまなシェルをベンチマークするための良いシェルスクリプトを知っていますか?

#!/bin/sh
echo "-- Testing our implementation of POSIX shell --"
echo ""
echo "- If you have any problem in passing a test read the corresponding"
echo "- source file to understand what the test is checking"
echo ""
printf "********************* PRESS ENTER TO RUN TESTS  ... "
#read _
make
valgrind --leak-check=yes ./shell .<< EOF
ls -al|grep open|awk '{print \$9}'
EOF
printf "********************* TEST WILDCARDS \n***** Press any key to listing all files in current directory...\nYou should see filesnames *.* below "
read _
./shell << EOF
ls
EOF
printf "********************* TEST ALGORITHMS ...  \n***** Press any key to run the algorithms... .\nYou should see the output from top -b -n1|head -8|tail -1 "
read _
valgrind --leak-check=yes ./shell .<< EOF
top|head -8|tail -1|sort -n|wc -l
EOF

printf "********************* TEST ALGORITHMS Part II.  ... .\nYou should see the output from who|awk '{print \$4 ; print \$3}'|sort -n|wc -l. "
read _
valgrind --leak-check=yes ./shell .<< EOF
who|awk '{print \$4 ; print \$3}'|sort -n|wc -l
EOF

printf "********************* TEST CHECKENV.  ..... .\nYou should see the output checkenv below "
read _
valgrind --leak-check=yes ./shell .<< EOF
checkenv
EOF
printf "********************* TEST DONE. YOU SHOULD SEE OUTPUT FROM TEST ABOVE ... "
read _

ベストアンサー1

シェルのパフォーマンスの鍵は、高価なシステムコール、fork()特にexec()

シェルループ内には、またはを使用しないでくださいgrepsedいいえどちらもパイプを使用します。ほとんどの場合、または で簡素化できsedますawk

複雑になると正規表現を解析できる言語を使用し、そして次のようなループを実行します。または

一方、シェルが提供する単純なテキスト処理機能を使用できる場合は、パフォーマンスを大幅に向上させることができます。

つまり、at&t ksh93は常に速度に最適化されていますが、bashとzshはより多くの機能を提供します。

おすすめ記事