• Linux 운영체제의 성능 분석 도구
• Performance counter 의 userspace 인터페이스
• 하드웨어 이벤트를 모니터링
• 소프트웨어 이벤트 트레이싱
• 시스템의 전반적인 성능 측정 및 분석
• 다양한 sub command 를 가지고 있음
• 아키텍쳐마다, 현재 컴파일 되어있는 커널마다,
지원하는 카운터 / 트레이싱 포인트가 다르기에
사용할 때 어떤걸 지원하는지 확인한 후에 사용해야함.
• 중요 한 것 하나, 동시에 사용가능한 하드웨어 카운터의 숫자가
시스템마다 다르다.
• 이벤트는 독립적 입니다.
• Perf 의 subcmd
• 현재 시스템 / application 이 지원하는 프로파일링 가능한 list
• 여러가지 종류의 이벤트가 지원됨
import multiprocessing
import time
import random
# 공유 리소스를 위한 락을 생성합니다.
lock = multiprocessing.Lock()
counter = multiprocessing.Value('i', 0)
def worker():
end_time = time.time() + 5 # 5초 후의 시간을 계산
while time.time() < end_time:
# 락을 획득
lock.acquire()
try:
# 숫자를 출력하고 카운터를 증가시킵니다.
print(counter.value)
counter.value += 1
# 임의의 작업을 수행합니다.
time.sleep(random.uniform(0, 1))
finally:
# 락을 반납합니다.
lock.release()
# 두 개의 프로세스를 생성하고 시작합니다.
p1 = multiprocessing.Process(target=worker)
p2 = multiprocessing.Process(target=worker)
p1.start()
p2.start()
# 두 프로세스가 종료될 때 까지 기다립니다.
p1.join()
p2.join()
#!/bin/bash
if [ "$1" == "stat" ]; then
if [ "$2" == "1" ]; then
sudo perf stat -e branch-misses,bus-cycles,cache-misses,cache-references,cpu-cycles,instructions
elif [ "$2" == "2" ]; then
sudo perf stat -e alignment-faults,bpf-output,cgroup-switches,context-switches,cpu-clock,cpu-migrations,dummy,emulation-faults,major-faults,minor-faults,page-faults,task-clock $@
else
echo "1: hardware event 2: software event"
fi
elif [ "$1" == "lock" ]; then
sudo perf lock record python3 perf_lock.py
sudo perf lock report
fi