English프랑스어스페인어

온웍스 파비콘

perf-script-python - 클라우드의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터를 통해 OnWorks 무료 호스팅 제공업체에서 perf-script-python 실행

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 perf-script-python 명령입니다.

프로그램:

이름


perf-script-python - Python 스크립트로 추적 데이터 처리

개요


반환 한 스크립트 [-s [파이썬]:스크립트[.py] ]

기술


이 perf 스크립트 옵션은 perf의 내장 Python을 사용하여 perf 스크립트 데이터를 처리하는 데 사용됩니다.
통역사. 입력 파일을 읽고 처리하며 추적 결과를 표시합니다.
주어진 Python 스크립트에서 구현된 분석(있는 경우).

A 빨리


이 섹션은 작동하는 Python 스크립트를 만드는 시작부터 끝까지의 과정을 보여줍니다.
원시 성능 스크립트 스트림에서 유용한 정보를 집계하고 추출합니다. 당신은 피할 수 있습니다
예제로 충분하다면 이 문서의 나머지 부분을 읽으십시오. 나머지
문서는 각 단계에 대한 자세한 내용을 제공하고 사용할 수 있는 라이브러리 기능을 나열합니다.
스크립트 작가.

이 예는 실제로 생성하는 데 사용된 단계를 자세히 설명합니다. 시스템 호출 횟수 스크립트
다음을 통해 사용 가능한 perf 스크립트 스크립트를 나열하면 반환 한 스크립트 -l. 이와 같이 이
스크립트는 또한 스크립트를 범용 목록에 통합하는 방법을 보여줍니다. 반환 한
스크립트 해당 명령에 의해 나열된 스크립트.

syscall-counts 스크립트는 간단한 스크립트이지만 모든 기본 아이디어를 보여줍니다.
유용한 스크립트를 만드는 데 필요합니다. 다음은 출력의 예입니다(시스템 호출 이름은
아직 지원되지 않는 경우 숫자로 표시됨):

.피트 C
시스템 호출 이벤트:

이벤트 수
---------------------------------------- ---------- -
sys_write 455067
sys_getdents 4072
sys_close 3037
sys_swapoff 1769
sys_read 923
sys_sched_setparam 826
sys_open 331
sys_newfstat 326
sys_mmap 217
sys_munmap 216
sys_futex 141
sys_select 102
sys_poll 84
sys_settimer 12
sys_writev 8
15 8
sys_lseek 7
sys_rt_sigprocmask 6
sys_wait4 3
sys_ioctl 3
sys_set_robust_list 1
sys_exit 1
56 1
시스템 액세스 1
.피트

기본적으로 우리의 임무는 시스템이 매번 업데이트되는 시스템 호출별 집계를 유지하는 것입니다.
시스템에서 호출이 발생합니다. 스크립트가 이를 수행하지만 먼저 데이터를 기록해야 합니다.
해당 스크립트에 의해 처리됩니다. 이론적으로 몇 가지 방법이 있습니다.
그렇게:

· tracing/events/syscalls 디렉토리 아래의 모든 이벤트를 활성화할 수 있지만 이것은
600개 이상의 시스템 호출, perf에서 허용하는 수를 훨씬 초과합니다. 이러한 개별 시스템 호출
그러나 나중에 우리가 얻은 지침을 사용하려는 경우 이벤트가 유용합니다.
드릴다운하고 개별 시스템 호출에 대한 자세한 정보를 얻기 위한 범용 스크립트
관심.

· 우리는 아래에 있는 sys_enter 및/또는 sys_exit syscall을 활성화할 수 있습니다.
추적/이벤트/raw_syscalls. 이들은 모든 시스템 호출에 대해 호출됩니다. 그만큼 id 필드 수
개별 시스템 호출 번호를 구별하는 데 사용됩니다.

이 스크립트의 경우 시스템 호출이 입력되었다는 것만 알면 됩니다. 우리는 어떻게 상관하지 않습니다
종료되었으므로 다음을 사용합니다. 반환 한 기록 sys_enter 이벤트만 기록하려면:

.피트 C
# 성능 기록 -a -e raw_syscalls:sys_enter

^C[ perf 레코드: 데이터를 쓰기 위해 1번 깨우침 ]
[ 성능 기록: 56.545MB perf.data 캡처 및 작성(~2470503개 샘플) ]
.피트

옵션은 기본적으로 시스템 전체의 모든 syscall 이벤트에 대한 데이터를 수집하고
CPU당 출력을 단일 스트림으로 다중화합니다. 해당 단일 스트림은
perf.data라는 현재 디렉토리의 파일.

데이터가 포함된 perf.data 파일이 있으면 -g를 사용할 수 있습니다. 반환 한 스크립트 ~에 대한 옵션
에서 발견된 각 이벤트 유형에 대한 콜백 핸들러를 포함할 Python 스크립트를 생성합니다.
perf.data 추적 스트림(자세한 내용은 STARTER SCRIPTS 섹션 참조).

.피트 C
# perf 스크립트 -g 파이썬
생성된 Python 스크립트: perf-script.py

현재 디렉토리에도 생성된 출력 파일의 이름은
perf-script.py. 전체 파일은 다음과 같습니다.

# perf 스크립트 이벤트 핸들러, perf script -g python에 의해 생성됨
# GNU GPL 라이선스 버전 2의 조건에 따라 라이선스가 부여됨

# common_* 이벤트 핸들러 필드는 일반적으로 가장 유용한 필드입니다.
# 모든 이벤트. 반드시 'common_*' 필드와 일치하는 것은 아닙니다.
# 형식 파일에서. 핸들러 매개변수로 사용할 수 없는 필드는
# common_*(context) 형식의 Python 함수를 사용하여 검색됩니다.
# 사용 가능한 기능 목록은 perf-script-python 문서를 참조하십시오.

운영 체제 가져 오기
import sys

sys.path.append(os.environ['PERF_EXEC_PATH'] + \
'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')

perf_trace_context 가져오기에서 *
핵심 가져오기에서 *

def 추적_시작():
"in trace_begin" 인쇄

def 추적_끝():
"in trace_end" 인쇄

def raw_syscalls__sys_enter(event_name, 컨텍스트, common_cpu,
common_secs, common_nsecs, common_pid, common_comm,
아이디, 인수):
print_header(event_name, common_cpu, common_secs, common_nsecs,
common_pid, common_comm)

인쇄 "id=%d, 인수=%s\n" % \
(ID, 인수),

def trace_unhandled(event_name, 컨텍스트, common_cpu, common_secs, common_nsecs,
common_pid, common_comm):
print_header(event_name, common_cpu, common_secs, common_nsecs,
common_pid, common_comm)

def print_header(event_name, CPU, secs, nsecs, pid, comm):
인쇄 "%-20s %5u %05u.%09u %8u %-20s" % \
(event_name, CPU, secs, nsecs, pid, comm),
.피트

맨 위에는 주석 블록이 있고 그 뒤에 몇 가지 import 문과 경로 추가가 있습니다.
모든 perf 스크립트 스크립트에는 포함되어야 합니다.

다음은 몇 가지 생성된 함수인 trace_begin() 및 trace_end()입니다.
스크립트의 시작과 끝에서 각각 호출됩니다(자세한 내용은
아래 SCRIPT_LAYOUT 섹션).

그 다음은 event 매니저 모든 이벤트에 대해 하나씩 생성된 함수 반환 한
기록 산출. 핸들러 함수는 하위 시스템 형식을 취합니다.이벤트 이름, and 포함하는 이름
매개 변수, for 마다 in 전에, 이벤트; in 케이스, 있다 행사,
raw_syscallssys_enter(). (이벤트에 대한 자세한 내용은 아래 이벤트 핸들러 섹션을 참조하십시오.
핸들러).

시작 및 종료 함수와 마찬가지로 마지막 몇 가지 함수는 모든 작업에 대해 생성됩니다.
스크립트. 첫 번째 trace_unhandled()는 스크립트가 이벤트를 찾을 때마다 호출됩니다.
스크립트의 이벤트 핸들러에 해당하지 않는 perf.data 파일. 이럴수있다
기록 단계가 실제로 관심이 없는 이벤트 유형을 기록했음을 의미합니다.
또는 스크립트에 해당하지 않는 추적 파일에 대해 스크립트가 실행되었습니다.

-g 옵션에 의해 생성된 스크립트는 단순히 추적에서 발견된 각 이벤트에 대한 행을 인쇄합니다.
스트림 즉, 기본적으로 이벤트와 해당 매개변수 값을 stdout에 덤프합니다. 그만큼
print_header() 함수는 단순히 그 목적으로 사용되는 유틸리티 함수입니다. 이름을 바꾸자
스크립트를 실행하고 기본 출력을 확인합니다.

.피트 C
# mv perf-script.py syscall-counts.py
# perf 스크립트 -s syscall-counts.py

raw_syscalls__sys_enter 1 00840.847582083 7506 성능 ID=1, 인수=
raw_syscalls__sys_enter 1 00840.847595764 7506 성능 ID=1, 인수=
raw_syscalls__sys_enter 1 00840.847620860 7506 성능 ID=1, 인수=
raw_syscalls__sys_enter 1 00840.847710478 6533 npviewer.bin ID=78, 인수=
raw_syscalls__sys_enter 1 00840.847719204 6533 npviewer.bin ID=142, 인수=
raw_syscalls__sys_enter 1 00840.847755445 6533 npviewer.bin ID=3, 인수=
raw_syscalls__sys_enter 1 00840.847775601 6533 npviewer.bin ID=3, 인수=
raw_syscalls__sys_enter 1 00840.847781820 6533 npviewer.bin ID=3, 인수=
.
.
.
.피트

물론 이 스크립트의 경우 모든 추적 이벤트를 인쇄하는 데 관심이 있는 것이 아니라
유용한 방식으로 집계합니다. 그래서 우리는 인쇄와 관련된 모든 것을 제거 할 것입니다.
우리가 사용하지 않을 trace_begin() 및 trace_unhandled() 함수로. 그 잎
이 최소한의 골격으로 우리를:

.피트 C
운영 체제 가져 오기
import sys

sys.path.append(os.environ['PERF_EXEC_PATH'] + \
'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')

perf_trace_context 가져오기에서 *
핵심 가져오기에서 *

def 추적_끝():
"in trace_end" 인쇄

def raw_syscalls__sys_enter(event_name, 컨텍스트, common_cpu,
common_secs, common_nsecs, common_pid, common_comm,
아이디, 인수):
.피트

trace_end()에서는 단순히 결과를 인쇄하지만 먼저 일부 결과를 생성해야 합니다.
인쇄합니다. 그렇게 하려면 sys_enter() 핸들러가 필요한 집계를 수행하도록 해야 합니다.
모든 이벤트가 계산될 때까지. syscall id로 인덱싱된 해시 테이블은 다음을 수행하는 좋은 방법입니다.
해당 정보를 저장합니다. sys_enter() 핸들러가 호출될 때마다 단순히 증가
해당 시스템 호출 ID에 의해 인덱싱된 해당 해시 항목과 관련된 카운트:

.피트 C
시스템 호출 = autodict()

시도 :
시스템 호출[id] += 1
TypeError 제외:
시스템 호출[ID] = 1
.피트

시스템 호출 독재자 object는 특별한 종류의 Python 사전입니다(
Core.py) Perl을 구현하는 자가 생존 Python의 해시, 즉 autovivifying과 함께
해시를 생성하는 번거로움 없이 중첩된 해시 값을 할당할 수 있습니다.
중간 레벨이 존재하지 않는 경우 예를 들어 syscalls[comm][pid][id] = 1은 다음을 생성합니다.
중간 해시 레벨 및 마지막으로 값 1을 해시 항목에 할당 id (때문에
할당되는 값은 해시 개체 자체가 아니며 초기 값은
유형 오류 예외. 글쎄, 파이썬에서 이것을 하는 더 좋은 방법이 있을 수 있지만 그것이 바로
지금은 작동합니다).

그 코드를 raw_syscalls__sys_enter() 핸들러에 넣으면 효과적으로
단일 레벨 사전은 syscall id에 키를 지정하고 값으로 집계한 개수를 갖습니다.

print_syscall_totals() 함수는 사전의 항목을 반복하고
syscall 이름을 포함하는 각 항목에 대한 행을 표시합니다(사전 키에는
Util 함수 syscall_name()에 전달되는 syscall ID는 다음을 변환합니다.
원시 시스템 호출 번호를 해당 시스템 호출 이름 문자열에 연결). 출력은
추적의 모든 이벤트가 처리된 후에 표시됩니다.
스크립트 끝에서 호출되는 trace_end() 핸들러의 print_syscall_totals() 함수
처리.

위에 표시된 출력을 생성하는 최종 스크립트는 전체가 아래에 표시됩니다.
(syscall_name() 도우미는 아직 사용할 수 없습니다. 지금은 ID만 처리할 수 있습니다.):

.피트 C
운영 체제 가져 오기
import sys

sys.path.append(os.environ['PERF_EXEC_PATH'] + \
'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')

perf_trace_context 가져오기에서 *
핵심 가져오기에서 *
Util 가져오기에서 *

시스템 호출 = autodict()

def 추적_끝():
print_syscall_totals()

def raw_syscalls__sys_enter(event_name, 컨텍스트, common_cpu,
common_secs, common_nsecs, common_pid, common_comm,
아이디, 인수):
시도 :
시스템 호출[id] += 1
TypeError 제외:
시스템 호출[ID] = 1

def print_syscall_totals():
for_comm이 None이 아닌 경우:
인쇄 "\n%s에 대한 시스템 호출 이벤트:\n\n" %(for_comm),
그밖에:
"\nsyscall 이벤트:\n\n" 인쇄,

인쇄 "%-40s %10s\n" %("이벤트", "카운트"),
인쇄 "%-40s %10s\n" %("------------------------------------ ---", \
"------------"),

id, val in sorted(syscalls.iteritems(), 키 = 람다(k, v): (v, k), \
역 = 참):
인쇄 "%-40s %10d\n" % (syscall_name(id), val),
.피트

스크립트는 이전과 같이 실행할 수 있습니다.

# perf 스크립트 -s syscall-counts.py

따라서 스크립트를 작성하고 실행하는 데 필수적인 단계입니다. 프로세스는 다음과 같습니다.
관심 있는 모든 추적점 또는 추적점 집합으로 일반화됨 - 기본적으로 찾기
다음으로 표시된 사용 가능한 이벤트 목록을 보고 관심 있는 추적점
반환 한 명부 자세한 이벤트 및 필드는 /sys/kernel/debug/tracing events에서 확인하십시오.
info, 다음을 사용하여 해당 추적 데이터를 기록합니다. 반환 한 기록, 목록을 전달
흥미로운 이벤트, 다음을 사용하여 스켈레톤 스크립트 생성 반환 한 스크립트 -g 파이썬 및 수정
특정 요구 사항에 맞게 집계하고 표시하는 코드입니다.

이 작업을 수행한 후에는 유지하려는 범용 스크립트가 생성될 수 있습니다.
주변에 있으며 향후 사용할 수 있습니다. 몇 가지 매우 간단한 쉘 스크립트를 작성하여
올바른 위치에 배치하면 스크립트를 다른 스크립트와 함께 나열할 수 있습니다.
에 의해 나열된 스크립트 반환 한 스크립트 -l 명령 예:

.피트 C
root@tropicana:~# perf 스크립트 -l
사용 가능한 추적 스크립트 목록:
웨이크업 레이턴시 시스템 전체 최소/최대/평균 웨이크업 레이턴시
파일별 파일별 프로그램에 대한 r/w 활동
rw-by-pid 시스템 전체 r/w 활동
.피트

이 작업의 좋은 부작용은 아마도 긴 시간을 캡처한다는 것입니다. 반환 한
기록 스크립트에 대한 이벤트를 기록하는 데 필요한 명령입니다.

스크립트가 다음으로 표시되게 하려면 내장 스크립트, 두 개의 간단한 스크립트를 작성합니다.
녹음 및 하나 신고.

이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 기록 스크립트는 스크립트와 기본 이름이 동일한 쉘 스크립트이지만
- 기록이 추가되었습니다. 셸 스크립트는 perf/scripts/python/bin에 넣어야 합니다.
커널 소스 트리의 디렉토리. 해당 스크립트에서 다음을 작성합니다. 반환 한 기록
스크립트에 필요한 명령줄:

.피트 C
# cat 커널 소스/도구/perf/scripts/python/bin/syscall-counts-record

#!/ bin / bash
성능 기록 -a -e raw_syscalls:sys_enter
.피트

이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 신고 스크립트는 또한 스크립트와 기본 이름이 동일한 쉘 스크립트이지만
- 보고서가 추가되었습니다. 또한 perf/scripts/python/bin 디렉토리에 있어야 합니다. 에
그 스크립트, 당신은 반환 한 스크립트 -s 스크립트 실행에 필요한 명령줄:

.피트 C
# cat 커널 소스/도구/perf/scripts/python/bin/syscall-counts-report

#!/ bin / bash
# 설명: 시스템 전체 시스템 호출 수
성능 스크립트 -s ~/libexec/perf-core/scripts/python/syscall-counts.py
.피트

쉘 스크립트에 제공된 Python 스크립트의 위치는
libexec/perf-core/scripts/python 디렉토리 - 스크립트가 복사될 위치입니다.
확인 설치 perf를 설치할 때 거기에 스크립트를 설치하기 위한 설치의 경우,
스크립트는 커널 소스의 perf/scripts/python 디렉토리에 있어야 합니다.
나무:

.피트 C
# ls -al 커널 소스/도구/perf/스크립트/파이썬

root@tropicana:/home/trz/src/tip# ls -al 도구/perf/scripts/python
총 32
drwxr-xr-x 4 trz trz 4096 2010-01-26 22:30 .
drwxr-xr-x 4 trz trz 4096 2010-01-26 22:29 ..
drwxr-xr-x 2 trz trz 4096 2010-01-26 22:29 빈
-rw-r--r-- 1 trz trz 2548 2010-01-26 22:29 check-perf-script.py
drwxr-xr-x 3 trz trz 4096 2010-01-26 22:49 성능 추적 유틸리티
-rw-r--r-- 1 trz trz 1462 2010-01-26 22:30 syscall-counts.py
.피트

일단 완료하면(새로 수행하는 것을 잊지 마십시오. 확인 설치, 그렇지 않으면 스크립트가
런타임에 표시), 반환 한 스크립트 -l 스크립트에 대한 새 항목을 표시해야 합니다.

.피트 C
root@tropicana:~# perf 스크립트 -l
사용 가능한 추적 스크립트 목록:
웨이크업 레이턴시 시스템 전체 최소/최대/평균 웨이크업 레이턴시
파일별 파일별 프로그램에 대한 r/w 활동
rw-by-pid 시스템 전체 r/w 활동
시스템 호출 수 시스템 전체 시스템 호출 수
.피트

이제 다음을 통해 녹음 단계를 수행할 수 있습니다. 반환 한 스크립트 기록:

# perf 스크립트 기록 syscall-counts

다음을 사용하여 출력을 표시합니다. 반환 한 스크립트 신고:

# perf 스크립트 보고서 syscall-counts

기동기 스크립트


다음을 통해 특정 추적 데이터 세트에 대한 스크립트 작성을 빠르게 시작할 수 있습니다.
다음을 사용하여 스켈레톤 스크립트 생성 반환 한 스크립트 -g 파이썬 와 같은 디렉토리에
기존 perf.data 추적 파일. 그러면 핸들러가 포함된 시작 스크립트가 생성됩니다.
추적 파일의 각 이벤트 유형에 대해 단순히 사용 가능한 모든 필드를 인쇄합니다.
추적 파일의 각 이벤트.

다음에서 기존 스크립트를 볼 수도 있습니다. ~/libexec/perf-core/scripts/python for
이벤트 데이터 집계, 결과 인쇄,
등등. 또한 check-perf-script.py 스크립트는 그 결과에 대해 흥미롭지 않지만,
모든 주요 스크립팅 기능을 실행하려고 시도합니다.

이달의 이벤트 핸들러


추적 스크립트를 사용하여 perf 스크립트를 호출하면 사용자 정의 매니저 기능 is
추적의 각 이벤트에 대해 호출됩니다. 특정 핸들러 함수가 정의되지 않은 경우
이벤트 유형인 경우 이벤트는 무시됩니다(또는 추적_처리 기능, 아래 참조) 및
다음 이벤트가 처리됩니다.

대부분의 이벤트 필드 값은 핸들러 함수에 인수로 전달됩니다. 일부
덜 일반적인 것은 그렇지 않습니다. perf 실행 파일에 대한 호출로 사용할 수 있습니다.
(아래 참조).

예를 들어, 다음 perf Record 명령을 사용하여 모든 sched_wakeup을 기록할 수 있습니다.
시스템의 이벤트:

# 성능 기록 -a -e sched:sched_wakeup

스크립트를 사용하여 처리하려는 추적은 위 옵션: -a를 사용하여 기록해야 합니다.
시스템 전체 수집을 활성화합니다.

sched_wakep 이벤트의 형식 파일은 다음 필드를 정의합니다(참조:
/sys/kernel/debug/tracing/events/sched/sched_wakeup/format):

.피트 C
형식 :
필드:부호 없는 짧은 common_type;
필드:부호 없는 char common_flags;
필드:부호 없는 char common_preempt_count;
필드:int common_pid;

필드:문자 통신[TASK_COMM_LEN];
필드:pid_t pid;
필드:int 프리오;
필드:int 성공;
필드:int target_cpu;
.피트

이 이벤트에 대한 핸들러 함수는 다음과 같이 정의됩니다.

.피트 C
def sched__sched_wakeup(event_name, 컨텍스트, common_cpu, common_secs,
common_nsecs, common_pid, common_comm,
통신, PID, 프리오, 성공, target_cpu):
패스
.피트

핸들러 함수는 Subsystem__event_name 형식을 취합니다.

핸들러의 인수 목록에 있는 common_* 인수는
모든 이벤트 핸들러; 일부 필드는 다음 형식의 common_* 필드에 해당합니다.
파일이지만 일부는 합성되어 있으며 common_* 필드 중 일부는 그렇게 일반적이지 않습니다.
모든 이벤트에 인수로 전달되지만 라이브러리 함수로 사용할 수 있습니다.

다음은 각 고정 이벤트 인수에 대한 간략한 설명입니다.

event_name 이벤트 이름을 텍스트로
perf로 다시 호출하는 데 사용되는 불투명한 '쿠키' 컨텍스트
common_cpu cpu에서 이벤트가 발생했습니다.
common_secs 이벤트 타임스탬프의 초 부분
common_nsecs 이벤트 타임스탬프의 nsecs 부분
common_pid 현재 작업의 pid
common_comm 현재 프로세스의 이름

이벤트 형식 파일의 나머지 모든 필드에는 처리기로서의 대응 항목이 있습니다.
위의 예에서 볼 수 있듯이 동일한 이름의 함수 인수입니다.

위 내용은 모든 이벤트의 모든 필드에 직접 액세스하는 데 필요한 기본 사항을 제공합니다.
유용한 추적 스크립트를 작성하기 위해 알아야 할 내용의 90%를 다루고 있습니다. 그만큼
아래 섹션에서는 나머지 부분을 다룹니다.

SCRIPT LAYOUT


모든 perf 스크립트 Python 스크립트는 Python 모듈 검색 경로를 설정하고 시작해야 합니다.
몇 가지 지원 모듈 '가져오기'(아래 모듈 설명 참조):

.피트 C
운영 체제 가져 오기
import sys

sys.path.append(os.environ['PERF_EXEC_PATH'] + \
'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')

perf_trace_context 가져오기에서 *
핵심 가져오기에서 *
.피트

스크립트의 나머지 부분에는 순서에 관계없이 처리기 함수와 지원 함수가 포함될 수 있습니다.

위에서 설명한 이벤트 핸들러 함수 외에도 모든 스크립트는 집합을 구현할 수 있습니다.
선택적 기능:

추적_시작정의된 경우 이벤트가 처리되기 전에 호출되며 스크립트에
설정 작업을 수행할 기회:

.피트 C
데프 추적_시작:
패스
.피트

추적_끝정의된 경우 모든 이벤트가 처리된 후에 호출되며 스크립트에
결과 표시와 같은 스크립트 종료 작업을 수행할 수 있는 기회:

.피트 C
데프 추적_끝:
패스
.피트

추적_처리되지 않음, 정의된 경우 핸들러가 없는 모든 이벤트에 대해 호출됩니다.
이에 대해 명시적으로 정의되어 있습니다. 표준 공통 인수 세트가 여기에 전달됩니다.

.피트 C
def trace_unhandled(event_name, 컨텍스트, common_cpu, common_secs,
common_nsecs, common_pid, common_comm):
패스
.피트

나머지 섹션에서는 사용 가능한 각 내장 성능 스크립트에 대한 설명을 제공합니다.
Python 모듈 및 관련 기능.

유효한 모듈 기능


다음 섹션에서는 다양한 성능을 통해 사용할 수 있는 함수와 변수에 대해 설명합니다.
스크립트 Python 모듈. 주어진 모듈의 함수와 변수를 사용하려면 다음을 추가하십시오.
일치하는 부스번호: XNUMX홀XNUMXCXNUMX import 성능 스크립트 스크립트에 대한 줄입니다.

코어.py 모듈
이러한 기능은 사용자 스크립트에 몇 가지 필수 기능을 제공합니다.

이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 flag_str and 기호_str 함수는 플래그 및 기호에 대해 사람이 읽을 수 있는 문자열을 제공합니다.
필드. 이는 구문 분석된 문자열 및 값에 해당합니다. 인쇄 fmt 분야
이벤트 형식 파일:

flag_str(event_name, field_name, field_value) - 이벤트 event_name의 field_name 플래그 필드에 대한 field_value에 해당하는 문자열 표현을 반환합니다.
symbol_str(event_name, field_name, field_value) - 이벤트 event_name의 기호 필드 field_name에 대한 field_value에 해당하는 문자열 표현을 반환합니다.

이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 독재자 함수는 Perl을 구현하는 특별한 종류의 Python 사전을 반환합니다.
자가 생존 Python의 해시, 즉 자동 생성 해시를 사용하면 중첩 해시를 할당할 수 있습니다.
값이 없으면 중간 수준을 만드는 수고를 겪지 않아도 됩니다.
있다.

autodict() - autovivifying 사전 인스턴스를 반환합니다.

perf_trace_context 모듈
의 일부 공통의 이벤트 형식 파일의 필드는 그다지 일반적이지는 않지만
그럼에도 불구하고 사용자 스크립트에 액세스할 수 있게 되었습니다.

perf_trace_context는 이 데이터에 액세스하는 데 사용할 수 있는 함수 집합을 정의합니다.
현재 이벤트의 컨텍스트입니다. 이러한 각 함수는 컨텍스트 변수를 필요로 합니다.
두 번째 인수로 모든 이벤트 핸들러에 전달된 컨텍스트 변수와 동일합니다.

common_pc(context) - 현재 이벤트에 대한 common_preempt 카운트를 반환합니다.
common_flags(context) - 현재 이벤트에 대한 common_flags를 반환합니다.
common_lock_depth(context) - 현재 이벤트에 대한 common_lock_depth를 반환합니다.

Util.py 모듈
perf 스크립트와 함께 사용할 수 있는 다양한 유틸리티 기능:

nsecs(secs, nsecs) - 주어진 secs/nsecs 쌍에서 총 nsecs를 반환합니다.
nsecs_secs(nsecs) - nsecs가 지정된 전체 초 부분을 반환합니다.
nsecs_nsecs(nsecs) - nsecs가 주어진 nsecs 나머지를 반환합니다.
nsecs_str(nsecs) - secs.nsecs 형식으로 인쇄 가능한 문자열을 반환합니다.
avg(total, n) - 주어진 합계와 값의 총 개수가 있는 평균을 반환합니다.

onworks.net 서비스를 사용하여 온라인으로 perf-script-python 사용


무료 서버 및 워크스테이션

Windows 및 Linux 앱 다운로드

Linux 명령

Ad