異なるコマンドの実行時間の比較
time コマンドの使用方法とその出力の解釈方法を理解したので、さまざまなコマンドの実行時間を比較して、それらのパフォーマンス特性を理解しましょう。
まず、データを読み書きする I/O 負荷の高いスクリプトを作成しましょう。
echo '#!/bin/bash' > ~/project/io_intensive.sh
echo 'for i in {1..10}; do' >> ~/project/io_intensive.sh
echo ' cat /etc/passwd > ~/project/temp_file_$i.txt' >> ~/project/io_intensive.sh
echo ' cat ~/project/temp_file_$i.txt > /dev/null' >> ~/project/io_intensive.sh
echo 'done' >> ~/project/io_intensive.sh
echo 'rm ~/project/temp_file_*.txt' >> ~/project/io_intensive.sh
echo 'echo "I/O operations complete"' >> ~/project/io_intensive.sh
スクリプトを実行可能にします。
chmod +x ~/project/io_intensive.sh
次に、この I/O 負荷の高いスクリプトの時間を測定しましょう。
time ~/project/io_intensive.sh
次のような出力が表示されるはずです。
I/O operations complete
~/project/io_intensive.sh 0.01s user 0.00s system 96% cpu 0.014 total
CPU 負荷の高いスクリプトと比較して、system 時間が user 時間よりも相対的に高くなっていることに注意してください。これは、ファイル I/O 操作にはシステムコールが必要であり、システムコールはカーネルモードで実行されるためです。高い CPU パーセンテージ (96%) は、実行中にシステムがほとんどの時間アクティブに動作していたことを示しています。
テキストパターンを検索する一般的な Linux コマンドの時間も測定しましょう。
time grep -r "root" /etc
このコマンドは、/etc ディレクトリ以下のすべてのファイルで "root" という単語を再帰的に検索します。出力は次のようになります。
[many matches shown here]
grep -r "root" /etc 0.18s user 0.08s system 99% cpu 0.259 total
次に、時間を測定した 3 つのコマンドすべてを比較しましょう。
simple_echo.sh: 非常に高速な実行 (合計 0.001 秒)、最小限の CPU 時間とシステム時間。
cpu_intensive.sh: より長い実行 (合計 2.335 秒)、主にユーザー CPU 時間 (2.10 秒)。
io_intensive.sh: 適度な実行時間 (合計 0.014 秒)、I/O 操作のため、ユーザー時間とシステム時間のバランスが取れています。
grep -r "root" /etc: 適度な実行時間 (合計 0.259 秒)、テキスト処理とファイル I/O の両方のため、ユーザー時間とシステム時間のバランスが取れています。
この比較は、さまざまな種類の操作が実行時間とリソース使用量にどのように影響するかを示しています。これらのパターンを理解すると、スクリプトとコマンドのボトルネックを特定し、より効率的なコードを作成するのに役立ちます。