Linuxシェルのパフォーマンス:ダッシュとbash
1. 概要
シェルとは何ですか? Linuxシステムでは、シェルは、関連するコマンドを実行して出力をユーザーに表示することにより、ユーザー入力を処理するためのインターフェイスです。 簡単に言うと、シェルはコマンドラインインターフェイスを介してタスクを実行するための環境です。 Linuxには、主にBourneシェルとCシェルの2種類のシェルがあります。 Bourneシェルには多くのサブカテゴリがあります:
この記事では、BashとDashという2つの特定のシェルについて詳しく見ていきましょう。
2. ダッシュとバッシュの主な違い
Bashは、長い間、ほとんどのLinuxディストリビューションのデフォルトの標準インタラクティブシェルでした。 ただし、Ubuntu 6.10以降では、DashがBashに置き換わりました。 デフォルトのシェルを変更する主な理由は効率でした。
Bashはインタラクティブに使用できるフル機能のシェルであり、デフォルトのログインシェルです。 ただし、起動して使用するのははるかに大きく、時間がかかります。 一方、Dashシェルは、Bourneシェルの単純化された最新のPOSIX準拠バージョンです。 ダッシュにはいくつかの機能上の利点があります:
- 最小限のディスクスペースを消費しますが、機能が豊富です
- 共有ライブラリへの依存度が低い
- 比較的短い起動時間
- 実行速度の向上
Bashシェルはより用途が広く、広範で、ユーザーとの対話型セッションに適していますが、前述のDashの機能は速度の点でBashを上回っています。 次のセクションでは、両方のシェルのパフォーマンスを比較してみましょう。
3. 起動時間ベンチマークテスト
単純なベンチマークテストは、一定の反復で一連のコマンドを実行し、プロセス全体の消費時間を計算することで構成されます。 対象となる両方のシェルは、相対的なパフォーマンスを測定するための時間消費を伴う同じテストを受けます。
起動時間ベンチマークは、「no-operation」(no-op、:)コマンドを使用した簡単なテストです。 各反復でシェルを開始し、no-opでは何もしません。 消費された合計時間は、追加の操作が実行されないため、各シェルの起動時間を示します。
まず、Bashの起動時間テストを見てみましょう。
$ cat bash_benchmark_script
#!/bin/bash
for i in $(seq 1 1000);
do bash -c ":" ;
done
$ time bash bash_benchmark_script
real 0m1.486s
user 0m1.152s
sys 0m0.327s
ここでは、 time ユーティリティを使用して、特定のスクリプトの実行にかかる時間を調べました。 bash_benchmark_script は、Bashシェルを呼び出して、1000の反復でno-opを実行しようとします。 これは、Bashシェルを1000回起動するだけで1.48秒かかることを意味します。
次に、Dashの起動時間テストを確認しましょう。
$ cat dash_benchmark_script
#!/bin/dash
for i in $(seq 1 1000);
do dash -c ":" ;
done
$ time dash dash_benchmark_script
real 0m0.999s
user 0m0.819s
sys 0m0.134s
dash_benchmark_script は、Dashシェルを呼び出して、1000の反復でno-opを実行しようとします。 これは、Dashシェルを1000回起動するのにわずか0.9秒かかることを意味します。
つまり、Dashシェルの起動時間はBashシェルの起動時間の約3分の1であることがわかります。 この効率は、Bash と比較して、共有ライブラリへの依存度が低く、Dashの合計サイズが小さいためです。
起動タイミングを比較したので、次のセクションでリアルタイムのコンピューティングパフォーマンスの比較について詳しく見ていきましょう。
4. シェルベンチテスト
シェルベンチ POSIXシェル比較のベンチマークユーティリティです。 The シェルベンチ ユーティリティは、任意のコマンドセットを無限ループで約1秒間実行します。 次に、1秒あたりの実行数を返します。これを使用して、スクリプトシェルの相対的なパフォーマンスが計算されます。 したがって、 1秒あたりの実行回数が多いほど、パフォーマンスが向上します。
さらに、ユーティリティは8つを提供します サンプルベンチマークテスト さまざまな操作でパフォーマンスを確認します。 実際には、 sh 、 bash 、 ksh 、 zsh 、dashなどのいくつかのシェルでテストを実行できます。同時にパフォーマンスを比較します。
それでは、 シェルベンチ BashとDashのパフォーマンスを比較するユーティリティ:
$ ./shellbench -s bash,dash sample/*
----------------------------------------------------
name bash dash
----------------------------------------------------
assign.sh: positional params 354,961 1,552,364
assign.sh: variable 486,657 1,826,733
assign.sh: local var 505,224 1,888,458
cmp.sh: [ ] 254,506 903,775
cmp.sh: case 487,977 1,984,710
count.sh: posix 394,556 1,219,866
eval.sh: direct assign 265,855 1,219,592
eval.sh: eval assign 127,999 780,953
eval.sh: command subs 2,171 4,932
func.sh: no func 471,705 1,964,937
func.sh: func 273,133 1,563,748
null.sh: assign variable 545,798 1,858,063
null.sh: define function 591,780 2,189,993
null.sh: undefined variable 440,758 1,943,129
null.sh: : command 501,115 1,946,933
output.sh: echo 331,422 1,020,727
output.sh: printf 318,519 999,600
subshell.sh: no subshell 488,495 1,966,461
subshell.sh: brace 454,453 1,920,703
subshell.sh: subshell 2,586 5,206
subshell.sh: command subs 2,234 4,963
subshell.sh: external command 1,037 1,083
----------------------------------------------------
* count: number of executions per second
-s スイッチを使用して、対象のシェル( bash、dash )を指定したことに注意してください。 shellbench の主な引数は、ベンチマークのために実行するスクリプトで構成されています。 ここでは、Shellbench自体に付属しているサンプルスクリプトを使用しました。
さらに、結果のグラフィック表現を見ることができます。
棒グラフは、変数の割り当て、論理比較、カウント操作、式の評価、関数呼び出し、表示操作、サブシェル操作などの複数の操作で、Bashと比較してDashのパフォーマンスが優れていることを示しています。 Dashシェルは、実行速度の点でBashシェルよりも約2〜5倍効率的です。
5. 結論
したがって、上記の実験から、 Dashシェルは、機能セットは小さいものの、起動時間と実行速度の両方の点でBashシェルよりもはるかに効率的であると結論付けられます。