컴퓨팅에서 성능에 대해 이야기할 때, 우리는 자원과 특정 기간 내에 완료할 수 있는 작업 사이의 관계를 말합니다.

기업 간의 치열한 경쟁이 일어나는 오늘날에는, 우리가 가진 것을 최대한 활용하는 법을 배우는 것이 중요합니다. 하드웨어나 소프트웨어 자원의 낭비, 또는 더 효율적으로 사용하는 방법을 모르는 것은 우리가 게임에서 성공하기 위해 감당할 수 없는 손실이 됩니다.
동시에, 우리는 지속적인 사용이 치명적인 손상을 일으킬 수 있는 한계까지 자원을 사용하지 않도록 주의해야 합니다.
이 글에서는 상대적으로 새로운 성능 분석 도구를 소개하고 하드웨어와 응용 프로그램을 포함한 Linux 시스템을 모니터링할 수 있는 팁을 제공하겠습니다. 이를 통해 원하는 결과를 생산하면서 자원이나 자신의 에너지를 낭비하지 않도록 할 수 있습니다.
Linux에 Perf 소개 및 설치
Linux는 편리하게 perf라고 불리는 성능 모니터링 및 분석 도구를 제공합니다. 그렇다면 다른 잘 알려진 도구와 구별되는 점은 무엇일까요?
답은 perf가 CPU의 성능 모니터링 유닛에 액세스할 수 있으며 따라서 하드웨어 및 관련 이벤트의 동작을 자세히 살펴볼 수 있다는 것입니다.
또한 수집된 데이터로부터 모니터 소프트웨어 이벤트 및 보고서를 생성할 수 있습니다.
perf를 RPM 기반 배포판에 설치할 수 있습니다:
# 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는 하드웨어 카운터에 액세스를 허용하지 않는 VirtualBox 또는 VMWare 위의 게스트에서 실행될 때 다른 가상화 기술 (예: KVM 또는 XEN)과 같이 불완전한 결과를 제공할 수 있음을 유의해야 합니다.
또한 기본적으로 일부 perf 명령어가 루트에게 제한될 수 있으며, 시스템이 다시 부팅될 때까지 비활성화할 수 있습니다:
# echo 0 > /proc/sys/kernel/perf_event_paranoid
paranoid 모드를 영구적으로 비활성화하려면 /etc/sysctl.conf 파일에서 다음 설정을 업데이트하십시오.
kernel.perf_event_paranoid = 0
하위 명령어
perf를 설치한 후 사용 가능한 하위 명령어 목록을 확인하려면 해당 매뉴얼 페이지를 참조할 수 있습니다 (하위 명령어는 시스템의 특정 창을 열어주는 특별한 옵션으로 생각할 수 있습니다). 더 나은 결과를 얻으려면 perf를 루트 또는 sudo를 통해 사용하십시오.
Perf 목록
옵션 없이 perf 목록을 실행하면 모든 심볼 이벤트 유형(긴 목록)이 반환됩니다. 특정 카테고리에서 사용 가능한 이벤트 목록을 보려면 [hw|sw|cache|tracepoint|pmu|event_glob]과 같이 카테고리 이름 뒤에 이어서 perf 목록을 사용하십시오.
Linux에서 소프트웨어 사전 정의 이벤트 목록 표시:
# perf list sw

Perf stat
perf stat는 명령을 실행하고 해당 명령 실행 중에 Linux 성능 통계를 수집합니다. dd를 실행할 때 시스템에서 어떤 일이 발생합니까?
# perf stat dd if=/dev/zero of=test.iso bs=10M count=1

위에 표시된 통계는 다른 것들 중에서 다음을 나타냅니다:
- dd 명령어 실행에 CPU가 21.812281 밀리초 소요되었습니다. 이 숫자를 아래의 “경과된 시간(초)” 값인 23.914596 밀리초로 나누면 0.912가 나옵니다 (CPU 사용률).
- 명령이 실행되는 동안 15개의 컨텍스트 스위치(프로세스 스위치로도 알려짐)가 발생하여 CPU가 한 프로세스(또는 스레드)에서 다른 프로세스(또는 스레드)로 15번 전환되었음을 나타냅니다.
- 2개의 CPU 이주는 2코어 CPU에서 작업 부하가 코어 수에 고르게 분산될 때 예상되는 결과입니다.
그 시간 동안(21.812281밀리초), 소비된 총 CPU 사이클 수는 62,025,623이며, 이를 0.021812281초로 나눈 값은 2.843GHz입니다. - 사이클 수를 총 명령어 수로 나누면 4.9명령어 당 사이클(CPI)을 얻게 되는데, 이는 각 명령어가 평균적으로 거의 5개의 CPU 사이클을 소요했음을 의미합니다. 이는 CPU 사이클을 낭비하거나 오용하는 분기 및 분기 미스(아래 참조)의 수에 부분적으로 기인할 수 있습니다.
- 명령이 실행되는 동안 총 3,552,630개의 분기가 발생했습니다. 이는 코드의 결정 지점과 루프를 나타내는 CPU 수준의 표현입니다. 분기가 많을수록 성능이 낮아집니다. 이를 보상하기 위해 모든 현대 CPU는 코드의 흐름을 예측하려고 시도합니다. 51,348개의 분기 미스는 예측 기능이 1.45%의 시간을 잘못 예측했음을 나타냅니다.
동일한 원칙이 응용 프로그램이 실행되는 동안 통계를 수집(다시 말해 프로파일링)하는 데도 적용됩니다. 원하는 응용 프로그램을 실행하고 합리적인 시간(당신이 결정하는 대로)이 지난 후에 종료하면 perf가 화면에 통계를 표시합니다. 이러한 통계를 분석하여 잠재적인 문제를 식별할 수 있습니다.
Perf top
perf top는 top 명령어와 유사하게 거의 실시간 시스템 프로파일(라이브 분석이라고도 함)을 표시합니다.
-a
옵션을 사용하면 모든 알려진 이벤트 유형을 표시하고, -e
옵션을 사용하면 perf list에서 반환된 특정 이벤트 범주를 선택할 수 있습니다:
모든 사이클 이벤트를 표시합니다.
perf top -a
모든 cpu-clock 관련 이벤트를 표시합니다.
perf top -e cpu-clock

위의 출력 중 첫 번째 열은 실행 시작 이후 취한 샘플의 백분율을 함수 심볼 및 공유 객체별로 그룹화한 것입니다. 더 많은 옵션은 man perf-top에서 확인할 수 있습니다.
Perf record
perf record는 명령을 실행하고 통계 데이터를 현재 작업 디렉토리 내의 perf.data라는 파일에 저장합니다. 이는 perf stat와 유사하게 실행됩니다.
perf record를 입력한 후 명령을 입력하세요:
# perf record dd if=/dev/null of=test.iso bs=10M count=1

Perf report
perf report는 perf.data에 수집된 데이터를 성능 보고서로 포맷합니다:
# sudo perf report

위의 모든 하위 명령어는 다음과 같이 호출할 수 있는 전용 매뉴얼 페이지가 있습니다:
# man perf-subcommand
하위 명령은 목록, 통계, 상위, 기록, 또는 보고서 중 하나입니다. 이들은 가장 자주 사용되는 하위 명령어입니다. 다른 것들은 문서에서 나열되어 있습니다(링크는 요약 섹션을 참조하십시오).
요약
본 안내서에서는 리눅스용 성능 모니터링 및 분석 도구인 perf를 소개했습니다. https://perf.wiki.kernel.org에서 유지되는 해당 문서에 익숙해지는 것을 강력히 권장합니다.
자원을 많이 소비하는 응용 프로그램을 발견하면 소스 코드를 수정하거나 다른 대안을 사용하는 것을 고려할 수 있습니다.
이 문서에 대한 질문이나 개선 제안이 있으면 언제든지 연락해 주세요. 아래의 댓글 양식을 사용하여 연락해 주세요.
Source:
https://www.tecmint.com/perf-performance-monitoring-and-analysis-tool-for-linux/