리눅스 명령어 시간 측정

LinuxBeginner
지금 연습하기

소개

이 랩에서는 Linux 에서 명령어의 실행 시간을 측정하는 방법을 배우게 됩니다. 명령어가 실행되는 데 걸리는 시간을 추적하는 능력은 성능 분석, 최적화 및 문제 해결에 유용한 기술입니다.

time 명령어는 프로그램 또는 명령어가 실행되는 데 걸리는 시간을 측정할 수 있는 간단하면서도 강력한 도구입니다. 이는 스크립트를 최적화하거나 문제를 해결하기 위한 다양한 접근 방식의 효율성을 비교하려는 경우 특히 유용할 수 있습니다.

이 랩을 마치면 time 명령어를 사용하여 실행 시간을 측정하고 결과를 해석하여 명령어 효율성에 대한 정보에 입각한 결정을 내릴 수 있게 됩니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 89%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

Time 명령어 소개

time 명령어는 주어진 명령어 또는 프로그램의 실행 시간을 측정하는 유틸리티입니다. 이 도구는 명령이 완료되는 데 걸리는 시간을 이해하는 데 도움이 되며, 이는 성능 모니터링 및 최적화에 유용합니다.

time 명령어를 시연하는 데 사용할 수 있는 간단한 스크립트를 만들어 보겠습니다.

먼저, 아직 해당 디렉토리에 있지 않다면 프로젝트 디렉토리로 이동합니다.

cd ~/project

이제 메시지를 출력하는 simple_echo.sh라는 간단한 스크립트를 만들어 보겠습니다.

echo '#!/bin/bash' > ~/project/simple_echo.sh
echo 'echo "Hello, this is a simple script!"' >> ~/project/simple_echo.sh

스크립트를 실행하기 전에 실행 가능하게 만들어야 합니다.

chmod +x ~/project/simple_echo.sh

이제 time 명령어를 사용하여 이 스크립트를 실행하는 데 걸리는 시간을 측정해 보겠습니다.

time ~/project/simple_echo.sh

다음과 유사한 출력을 볼 수 있습니다.

Hello, this is a simple script!
~/project/simple_echo.sh  0.00s user 0.00s system 90% cpu 0.001 total

이 출력에서:

  • 첫 번째 줄은 스크립트의 출력입니다.
  • 두 번째 줄은 타이밍 정보를 보여줍니다.
    • user: 사용자 모드에서 소비된 CPU 시간 (이 경우 0.00s).
    • system: 커널 모드에서 소비된 CPU 시간 (이 경우 0.00s).
    • cpu: CPU 사용률의 백분율 (이 경우 90%).
    • total: 시작부터 완료까지의 총 경과 시간 (벽시계 시간, 이 경우 0.001 초).

이 간단한 예제는 예상대로 스크립트가 매우 빠르게 실행됨을 보여줍니다.

Time 명령어 출력 이해

time 명령어의 기본적인 사용법을 살펴봤으니, 이제 제공되는 출력을 자세히 살펴보겠습니다. 이러한 지표를 이해하는 것은 적절한 성능 분석에 매우 중요합니다.

이전 단계에서 time 명령어를 실행했을 때, 한 줄에 여러 시간 측정값이 표시되는 것을 보셨을 것입니다.

  1. user - 이는 사용자 모드 코드 (커널 외부) 에서 소비된 CPU 시간입니다. 이는 CPU 가 프로그램의 코드를 적극적으로 처리하는 데 걸린 시간만 계산합니다.

  2. system - 이는 커널에서 소비된 CPU 시간입니다. 여기에는 파일 읽기 또는 쓰기와 같은 시스템 호출에 소요된 시간이 포함됩니다.

  3. cpu - 이는 실행 중 CPU 사용률의 백분율을 보여줍니다.

  4. total - 이는 명령이 시작된 시점부터 종료된 시점까지의 총 벽시계 시간입니다. 이는 스톱워치로 측정하는 시간입니다.

간단한 스크립트의 경우, 스크립트가 수행하는 작업이 거의 없기 때문에 이러한 모든 시간은 매우 작았습니다.

이러한 값을 더 명확하게 확인하기 위해 더 CPU 집약적인 스크립트를 만들어 보겠습니다.

echo '#!/bin/bash' > ~/project/cpu_intensive.sh
echo 'for i in {1..1000000}; do' >> ~/project/cpu_intensive.sh
echo '  let "sum = $i + $i"' >> ~/project/cpu_intensive.sh
echo 'done' >> ~/project/cpu_intensive.sh
echo 'echo "Calculation complete"' >> ~/project/cpu_intensive.sh

스크립트를 실행 가능하게 만듭니다.

chmod +x ~/project/cpu_intensive.sh

이제 이 스크립트의 시간을 측정해 보겠습니다.

time ~/project/cpu_intensive.sh

다음과 유사한 출력을 볼 수 있습니다 (실제 시간은 시스템에 따라 다릅니다).

Calculation complete
~/project/cpu_intensive.sh  2.10s user 0.09s system 93% cpu 2.335 total

이번에는 스크립트가 더 많은 작업을 수행하기 때문에 값이 상당히 높다는 것을 알 수 있습니다. user 시간은 스크립트가 사용자 모드에서 계산을 수행하는 데 대부분의 시간을 소비하기 때문에 훨씬 더 높습니다 (2.10s). system 시간도 더 높지만 (0.09s) 스크립트가 많은 시스템 호출을 수행하지 않기 때문에 상대적으로 작습니다. 총 벽시계 시간은 2.335 초이고 CPU 사용률은 93% 입니다.

이러한 지표를 사용하여 프로그램이 시간을 소비하는 위치를 식별할 수 있습니다.

  • 높은 user 시간은 프로그램이 사용자 공간에서 CPU 집약적임을 의미합니다.
  • 높은 system 시간은 프로그램이 많은 시스템 호출을 하거나 I/O 를 기다리고 있음을 의미합니다.
  • totalusersystem의 합보다 훨씬 높으면 프로그램이 리소스를 기다리거나 병렬로 실행되고 있음을 나타낼 수 있습니다.
  • CPU 백분율은 실행 중에 CPU 가 얼마나 효율적으로 사용되었는지 알려줍니다.

다양한 명령어 실행 시간 비교 (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

이제 시간 측정을 한 세 가지 명령어를 모두 비교해 보겠습니다.

  1. simple_echo.sh: 매우 빠른 실행 (0.001s total), 최소한의 CPU 및 시스템 시간.
  2. cpu_intensive.sh: 더 긴 실행 (2.335s total), 주로 사용자 CPU 시간 (2.10s).
  3. io_intensive.sh: 중간 실행 시간 (0.014s total), I/O 작업으로 인해 사용자 시간과 시스템 시간 사이의 균형.
  4. grep -r "root" /etc: 중간 실행 시간 (0.259s total), 텍스트 처리와 파일 I/O 모두로 인해 사용자 시간과 시스템 시간 사이의 균형.

이 비교는 다양한 유형의 작업이 실행 시간 및 리소스 사용에 어떻게 영향을 미치는지 보여줍니다. 이러한 패턴을 이해하면 스크립트 및 명령어의 병목 현상을 식별하여 보다 효율적인 코드를 작성하는 데 도움이 될 수 있습니다.

요약

이 랩에서는 Linux 에서 time 명령어를 사용하여 명령어와 스크립트의 실행 시간을 측정하고 분석하는 방법을 배웠습니다. 다음 사항에 대한 실질적인 경험을 얻었습니다.

  • 실행 시간을 측정하기 위한 기본적인 time 명령어 구문 사용
  • 주요 지표 이해: user, system, CPU 백분율, total time
  • 다양한 성능 특성을 가진 스크립트 생성 및 시간 측정
  • 실행 시간 비교를 통한 성능 패턴 식별
  • 상세한 성능 분석을 위한 타이밍 도구 사용

명령어 실행 시간을 측정하는 능력은 시스템 관리자, 개발자 및 파워 유저에게 필수적인 기술입니다. 이를 통해 성능 병목 현상을 식별하고, 코드를 최적화하며, 리소스 할당에 대한 정보에 입각한 결정을 내릴 수 있습니다.

Linux 를 계속 사용하면서 time 명령어가 성능 분석 도구 모음에서 가치 있는 도구임을 알게 될 것입니다. 이는 보다 효율적인 스크립트와 명령어를 만드는 데 도움이 됩니다.