웹사이트 검색

Perf - Linux용 성능 모니터링 및 분석 도구


컴퓨팅 성능에 관해 이야기할 때 우리는 리소스와 리소스를 통해 주어진 시간 내에 완료할 수 있는 작업 간의 관계를 언급합니다.

기업 간 경쟁이 치열한 시대에는 우리가 가지고 있는 것을 최대한 활용하는 방법을 배우는 것이 중요합니다. 하드웨어나 소프트웨어 자원의 낭비 또는 이를 보다 효율적으로 사용하는 방법을 아는 능력의 부족은 결국 우리가 게임에서 최고가 되고자 한다면 감당할 수 없는 손실이 됩니다.

동시에 우리는 자원을 지속적으로 사용하면 회복할 수 없는 피해를 입는 한계까지 자원을 사용하지 않도록 주의해야 합니다.

이 기사에서는 비교적 새로운 성능 분석 도구를 소개하고 하드웨어 및 애플리케이션을 포함하여 Linux 시스템을 모니터링하는 데 사용할 수 있는 팁을 제공합니다. 이는 자원이나 에너지를 낭비하지 않고 원하는 결과를 생산할 수 있도록 작동하는지 확인하는 데 도움이 될 것입니다.

Linux에 Perf 소개 및 설치

그 중에서도 Linux는 편리하게 perf라고 불리는 성능 모니터링 및 분석 도구를 제공합니다. 그렇다면 perf가 이미 익숙하고 잘 알려진 다른 도구와 다른 점은 무엇입니까?

대답은 perf가 CPU의 성능 모니터링 장치에 대한 액세스를 제공하므로 하드웨어 및 관련 이벤트의 동작을 면밀히 관찰할 수 있다는 것입니다.

또한 소프트웨어 이벤트를 모니터링하고 수집된 데이터로 보고서를 생성할 수도 있습니다.

다음을 사용하여 RPM 기반 배포판에 perf를 설치할 수 있습니다.

yum update && yum install perf     [CentOS / RHEL / Fedora]
dnf update && dnf install perf     [Fedora 23+ releases]

Debian 및 파생 제품:

sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

위 명령의 uname -r가 실제 버전(필자의 경우 3.2.0-23-generic) 외에 추가 문자열을 반환하는 경우 을 입력해야 할 수도 있습니다. uname의 출력을 사용하는 대신 linux-tools-3.2.0-23.

perf는 다른 가상화 기술(예: KVM 또는 XEN)처럼 하드웨어 카운터에 대한 액세스를 허용하지 않기 때문에 VirtualBox 또는 VMWare 상단의 게스트에서 실행될 때 불완전한 결과를 가져온다는 점에 유의하는 것도 중요합니다. .

또한 일부 perf 명령은 기본적으로 루트로 제한될 수 있으며 다음을 수행하여 시스템을 재부팅할 때까지 비활성화할 수 있습니다.

echo 0 > /proc/sys/kernel/perf_event_paranoid

편집증 모드를 영구적으로 비활성화해야 하는 경우 /etc/sysctl.conf 파일에서 다음 설정을 업데이트하세요.

kernel.perf_event_paranoid = 0

하위 명령

perf를 설치한 후에는 매뉴얼 페이지에서 사용 가능한 하위 명령 목록을 참조할 수 있습니다(하위 명령을 시스템의 특정 창을 여는 특수 옵션으로 생각할 수 있음). 보다 완전한 최상의 결과를 얻으려면 root로 또는 sudo를 통해 perf를 사용하세요.

성능 목록

perf 목록(옵션 없음)은 모든 기호 이벤트 유형(긴 목록)을 반환합니다. 특정 카테고리에서 사용 가능한 이벤트 목록을 보려면 perf 목록과 카테고리 이름([hw|sw|cache|tracepoint|pmu|event_glob)을 사용하세요. ]), 와 같은:

Linux에서 사전 정의된 소프트웨어 이벤트 목록 표시:

perf list sw 

성능 통계

perf stat는 명령을 실행하고 해당 명령이 실행되는 동안 Linux 성능 통계를 수집합니다. dd를 실행하면 시스템에서는 어떤 일이 발생하나요?

perf stat dd if=/dev/zero of=test.iso bs=10M count=1

위에 표시된 통계는 무엇보다도 다음을 나타냅니다.

  1. dd 명령을 실행하는 데 21.812281밀리초의 CPU가 소요되었습니다. 이 숫자를 아래의 '경과 시간 초' 값(23.914596밀리초)으로 나누면 0.912(CPU 사용)이 나옵니다.
  2. 명령이 실행되는 동안 15 컨텍스트 스위치(프로세스 스위치라고도 함)는 CPU가 한 프로세스(또는 스레드)에서 다른 프로세스(또는 스레드)로 15번 전환되었음을 나타냅니다.
  3. 2 CPU 마이그레이션은 2코어 CPU에서 작업 부하가 코어 수 간에 균등하게 분산될 때 예상되는 결과입니다.
    해당 시간(21.812281밀리초) 동안 소비된 총 CPU 주기 수는 62,025,623이며, 이를 0.021812281초로 나누면 2.843GHz.
  4. 사이클 수를 총 명령어 수로 나누면 명령어당 4.9사이클을 얻게 됩니다. 이는 각 명령어를 완료하는 데 평균적으로 거의 5개의 CPU 사이클이 걸렸다는 의미입니다. 우리는 이를 (적어도 부분적으로) 분기 수와 분기 누락(아래 참조)으로 인해 CPU 주기를 낭비하거나 오용하게 된다고 비난할 수 있습니다.
  5. 명령이 실행되면서 총 3,552,630개의 분기가 발견되었습니다. 이는 코드의 결정 지점과 루프를 CPU 수준에서 표현한 것입니다. 분기가 많을수록 성능이 저하됩니다. 이를 보완하기 위해 모든 최신 CPU는 코드가 취할 흐름을 예측하려고 시도합니다. 51,348개의 분기 누락은 예측 기능이 해당 시간의 1.45% 틀렸음을 나타냅니다.

애플리케이션이 실행되는 동안 통계를 수집(즉, 프로파일링)하는 데에도 동일한 원칙이 적용됩니다. 원하는 애플리케이션을 실행하고 적당한 시간(귀하에게 달려 있음)이 지난 후 닫으면 perf가 화면에 통계를 표시합니다. 이러한 통계를 분석하면 잠재적인 문제를 식별할 수 있습니다.

퍼프 탑

perf top은 거의 실시간 시스템 프로필(라이브 분석이라고도 함)을 표시한다는 점에서 top 명령과 유사합니다.

-a 옵션을 사용하면 알려진 모든 이벤트 유형이 표시되는 반면, -e 옵션을 사용하면 특정 이벤트 카테고리(에서 반환됨)를 선택할 수 있습니다. 성능 목록):

모든 사이클 이벤트를 표시합니다.

perf top -a 

모든 CPU 시계 관련 이벤트를 표시합니다.

perf top -e cpu-clock 

위 출력의 첫 번째 열은 실행 시작 이후 수집된 샘플의 비율을 나타내며 함수 기호 및 공유 개체별로 그룹화됩니다. man perf-top에서 더 많은 옵션을 사용할 수 있습니다.

성능 기록

perf 레코드는 명령을 실행하고 통계 데이터를 현재 작업 디렉터리 내의 perf.data라는 파일에 저장합니다. 성능 통계와 유사하게 실행됩니다.

성능 기록을 입력한 뒤 다음 명령을 입력하세요.

perf record dd if=/dev/null of=test.iso bs=10M count=1

성능 보고서

성능 보고서는 위의 perf.data에서 수집된 데이터를 성능 보고서 형식으로 지정합니다.

sudo perf report

위의 모든 하위 명령에는 다음과 같이 호출할 수 있는 전용 매뉴얼 페이지가 있습니다.

man perf-subcommand

여기서 하위 명령list, stat, top, record 또는 입니다. >보고. 이는 가장 자주 사용되는 하위 명령입니다. 다른 것들은 문서에 나열되어 있습니다(링크는 요약 섹션 참조).

요약

이 가이드에서는 Linux용 성능 모니터링 및 분석 도구인 perf를 소개했습니다. https://perf.wiki.kernel.org에서 관리되는 문서에 익숙해지는 것이 좋습니다.

높은 비율의 리소스를 소비하는 애플리케이션을 찾으면 소스 코드 수정을 고려하거나 다른 대안을 사용할 수 있습니다.

이 기사에 대한 질문이나 개선 제안 사항이 있으면 언제든지 알려주세요. 아래 의견 양식을 사용하여 언제든지 문의해 주세요.