다양한 명령어 실행 시간 비교 (time 명령어 활용)
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
이제 시간 측정을 한 세 가지 명령어를 모두 비교해 보겠습니다.
simple_echo.sh: 매우 빠른 실행 (0.001s total), 최소한의 CPU 및 시스템 시간.
cpu_intensive.sh: 더 긴 실행 (2.335s total), 주로 사용자 CPU 시간 (2.10s).
io_intensive.sh: 중간 실행 시간 (0.014s total), I/O 작업으로 인해 사용자 시간과 시스템 시간 사이의 균형.
grep -r "root" /etc: 중간 실행 시간 (0.259s total), 텍스트 처리와 파일 I/O 모두로 인해 사용자 시간과 시스템 시간 사이의 균형.
이 비교는 다양한 유형의 작업이 실행 시간 및 리소스 사용에 어떻게 영향을 미치는지 보여줍니다. 이러한 패턴을 이해하면 스크립트 및 명령어의 병목 현상을 식별하여 보다 효율적인 코드를 작성하는 데 도움이 될 수 있습니다.