Tiếng AnhTiếng PhápTiếng Tây Ban Nha

Ad


Biểu tượng yêu thích OnWorks

perf-script-python - Trực tuyến trên đám mây

Chạy perf-script-python trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks trên Ubuntu Online, Fedora Online, trình mô phỏng trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

Đây là lệnh perf-script-python có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình mô phỏng trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


perf-script-python - Xử lý dữ liệu theo dõi bằng tập lệnh Python

SYNOPSIS


perf kịch bản [-s [Python]:script[.py] ]

MÔ TẢ


Tùy chọn tập lệnh hoàn hảo này được sử dụng để xử lý dữ liệu tập lệnh hoàn hảo bằng Python tích hợp của perf
thông dịch viên. Nó đọc và xử lý tệp đầu vào và hiển thị kết quả theo dõi
phân tích được triển khai trong tập lệnh Python đã cho, nếu có.

A NHANH THÍ DỤ


Phần này trình bày quá trình, bắt đầu đến kết thúc, tạo một tập lệnh Python hoạt động
tổng hợp và trích xuất thông tin hữu ích từ luồng tập lệnh hoàn hảo thô. Bạn có thể tránh
đọc phần còn lại của tài liệu này nếu bạn có đủ ví dụ; phân con lại của
tài liệu cung cấp thêm chi tiết về từng bước và liệt kê các chức năng thư viện có sẵn để
người viết kịch bản.

Ví dụ này thực sự nêu chi tiết các bước được sử dụng để tạo số lượng cuộc gọi syscall kịch bản
bạn sẽ thấy khi liệt kê các tập lệnh hoàn hảo có sẵn thông qua perf kịch bản -l. Như vậy, điều này
tập lệnh cũng cho thấy cách tích hợp tập lệnh của bạn vào danh sách mục đích chung perf
kịch bản các tập lệnh được liệt kê bởi lệnh đó.

Tập lệnh syscall-counts là một tập lệnh đơn giản nhưng thể hiện tất cả các ý tưởng cơ bản
cần thiết để tạo ra một tập lệnh hữu ích. Đây là một ví dụ về đầu ra của nó (tên tòa nhà là
chưa được hỗ trợ, chúng sẽ xuất hiện dưới dạng số):

.ft C
sự kiện tòa nhà:

số sự kiện
---------------------------------------- ---------- -
sys_write 455067
sys_getdents 4072
sys_đóng 3037
sys_swapoff 1769
sys_đọc 923
sys_sched_setparam 826
sys_open 331
sys_newfstat 326
sys_mmap 217
sys_munmap 216
sys_futex 141
sys_select 102
sys_thăm dò ý kiến ​​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
sys_access 1
.ft

Về cơ bản, nhiệm vụ của chúng tôi là giữ một bản kiểm đếm trên mỗi tòa nhà được cập nhật mỗi khi hệ thống
cuộc gọi xảy ra trong hệ thống. Kịch bản của chúng tôi sẽ làm điều đó, nhưng trước tiên chúng tôi cần ghi lại dữ liệu
sẽ được xử lý bởi tập lệnh đó. Về mặt lý thuyết, có một số cách chúng ta có thể
làm điều đó:

· chúng ta có thể kích hoạt mọi sự kiện trong thư mục tracing/events/syscalls, nhưng đây là
hơn 600 tòa nhà cao tầng, vượt xa con số được Perf cho phép. Những cuộc gọi chung này
Tuy nhiên, các sự kiện sẽ hữu ích nếu sau này chúng ta muốn sử dụng hướng dẫn mà chúng ta nhận được từ
các tập lệnh có mục đích chung để đi sâu hơn và biết thêm chi tiết về các tòa nhà riêng lẻ của
quan tâm.

· chúng ta có thể kích hoạt các tòa nhà sys_enter và/hoặc sys_exit được tìm thấy trong
truy tìm/sự kiện/raw_syscalls. Chúng được gọi cho tất cả các cuộc gọi chung; các id trường có thể
được sử dụng để phân biệt giữa các số syscall riêng lẻ.

Đối với tập lệnh này, chúng ta chỉ cần biết rằng một cuộc gọi chung đã được nhập; chúng tôi không quan tâm nó như thế nào
đã thoát nên chúng ta sẽ sử dụng perf ghi để chỉ ghi lại các sự kiện sys_enter:

.ft C
# bản ghi hoàn hảo -a -e raw_syscalls:sys_enter

^C[ bản ghi hoàn hảo: Thức dậy 1 lần để ghi dữ liệu ]
[ bản ghi hoàn hảo: Đã chụp và ghi 56.545 MB perf.data (~2470503 mẫu) ]
.ft

Về cơ bản, các tùy chọn có nghĩa là thu thập dữ liệu cho mọi sự kiện tòa nhà trên toàn hệ thống và
ghép kênh đầu ra trên mỗi CPU thành một luồng duy nhất. Luồng đơn đó sẽ được ghi lại trong
một tệp trong thư mục hiện tại có tên perf.data.

Khi chúng tôi có tệp perf.data chứa dữ liệu của mình, chúng tôi có thể sử dụng -g perf kịch bản tùy chọn để
tạo tập lệnh Python chứa trình xử lý gọi lại cho từng loại sự kiện được tìm thấy trong
luồng theo dõi perf.data (để biết thêm chi tiết, hãy xem phần KỊCH BẢN BẮT ĐẦU).

.ft C
# tập lệnh hoàn hảo -g python
tập lệnh Python được tạo: perf-script.py

Tệp đầu ra được tạo cũng trong thư mục hiện tại có tên
hoàn hảo-script.py. Đây là toàn bộ tập tin:

# trình xử lý sự kiện tập lệnh hoàn hảo, được tạo bởi tập lệnh hoàn hảo -g python
# Được cấp phép theo các điều khoản của Giấy phép GNU GPL phiên bản 2

# Các trường xử lý sự kiện common_* là các trường hữu ích nhất phổ biến cho
# tất cả sự kiện. Chúng không nhất thiết phải tương ứng với các trường 'common_*'
# trong các tệp định dạng. Những trường đó không có sẵn dưới dạng thông số xử lý có thể
# được truy xuất bằng cách sử dụng các hàm Python có dạng common_*(context).
# Xem Tài liệu perf-script-python để biết danh sách các hàm khả dụng.

nhập khẩu os
nhập khẩu hệ thống

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

từ nhập perf_trace_context *
từ Nhập lõi *

chắc chắn trace_begin():
in "trong trace_begin"

chắc chắn trace_end():
in "trong trace_end"

def raw_syscalls__sys_enter(event_name, context, common_cpu,
common_sec, common_nsec, common_pid, common_comm,
id, đối số):
print_header(event_name, common_cpu, common_secs, common_nsecs,
common_pid, common_comm)

in "id=%d, args=%s\n" % \
(id, đối số),

def trace_unhandled(event_name, context, 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):
print "%-20s %5u %05u.%09u %8u %-20s " % \
(event_name, cpu, giây, nsec, pid, comm),
.ft

Ở trên cùng là khối nhận xét, theo sau là một số câu lệnh nhập và một đường dẫn nối thêm.
mọi tập lệnh hoàn hảo nên bao gồm.

Sau đó là một vài hàm được tạo, trace_begin() và trace_end(), đó là
được gọi lần lượt ở đầu và cuối tập lệnh (để biết thêm chi tiết, xem phần
SCRIPT_LAYOUT bên dưới).

Theo sau đó là những sự kiện xử lý các hàm tạo ra một hàm cho mỗi sự kiện trong perf
ghi đầu ra. Các hàm xử lý có dạng hệ thống contên sự kiện, chứa tên
thông số, một cho mỗi lĩnh vực in các sự kiện; in điều này trường hợp, có thể một biến cố,
raw_syscallssys_enter(). (xem phần XỬ LÝ SỰ KIỆN bên dưới để biết thêm thông tin về sự kiện
người xử lý).

Một vài hàm cuối cùng, giống như hàm bắt đầu và kết thúc, được tạo ra cho mọi
kịch bản. Đầu tiên, trace_unhandled(), được gọi mỗi khi tập lệnh tìm thấy một sự kiện trong
tệp perf.data không tương ứng với bất kỳ trình xử lý sự kiện nào trong tập lệnh. Đây có thể
có nghĩa là bước bản ghi đã ghi lại các loại sự kiện mà nó không thực sự quan tâm,
hoặc tập lệnh được chạy dựa trên tệp theo dõi không tương ứng với tập lệnh.

Tập lệnh được tạo bởi tùy chọn -g chỉ cần in một dòng cho mỗi sự kiện được tìm thấy trong dấu vết
luồng tức là về cơ bản nó chỉ chuyển sự kiện và các giá trị tham số của nó vào thiết bị xuất chuẩn. Các
Hàm print_header() đơn giản là một hàm tiện ích được sử dụng cho mục đích đó. Hãy đổi tên
tập lệnh và chạy nó để xem đầu ra mặc định:

.ft C
# mv perf-script.py syscall-counts.py
# tập lệnh hoàn hảo -s syscall-counts.py

raw_syscalls__sys_enter 1 00840.847582083 7506 perf id=1, args=
raw_syscalls__sys_enter 1 00840.847595764 7506 perf id=1, args=
raw_syscalls__sys_enter 1 00840.847620860 7506 perf id=1, args=
raw_syscalls__sys_enter 1 00840.847710478 6533 npviewer.bin id=78, args=
raw_syscalls__sys_enter 1 00840.847719204 6533 npviewer.bin id=142, args=
raw_syscalls__sys_enter 1 00840.847755445 6533 npviewer.bin id=3, args=
raw_syscalls__sys_enter 1 00840.847775601 6533 npviewer.bin id=3, args=
raw_syscalls__sys_enter 1 00840.847781820 6533 npviewer.bin id=3, args=
.
.
.
.ft

Tất nhiên, đối với tập lệnh này, chúng tôi không quan tâm đến việc in mọi sự kiện theo dõi mà thay vào đó
tổng hợp nó một cách hữu ích. Vì vậy, chúng ta cũng sẽ loại bỏ mọi thứ liên quan đến việc in ấn
như các hàm trace_begin() và trace_unhandled() mà chúng ta sẽ không sử dụng. Những chiếc lá đó
chúng tôi với bộ khung tối giản này:

.ft C
nhập khẩu os
nhập khẩu hệ thống

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

từ nhập perf_trace_context *
từ Nhập lõi *

chắc chắn trace_end():
in "trong trace_end"

def raw_syscalls__sys_enter(event_name, context, common_cpu,
common_sec, common_nsec, common_pid, common_comm,
id, đối số):
.ft

Trong trace_end(), chúng ta chỉ in kết quả, nhưng trước tiên chúng ta cần tạo ra một số kết quả
để in. Để làm được điều đó, chúng ta cần có trình xử lý sys_enter() thực hiện việc kiểm đếm cần thiết
cho đến khi tất cả các sự kiện đã được tính. Bảng băm được lập chỉ mục bởi id cuộc gọi tòa nhà là một cách tốt để
lưu trữ thông tin đó; mỗi khi trình xử lý sys_enter() được gọi, chúng ta chỉ cần tăng
số lượng liên quan đến mục băm đó được lập chỉ mục bởi id tòa nhà đó:

.ft C
syscalls = autodict()

thử:
syscalls[id] += 1
ngoại trừ Lỗi Loại:
syscalls[id] = 1
.ft

các tòa nhà cao tầng tự chế đối tượng là một loại từ điển Python đặc biệt (được triển khai trong
Core.py) triển khai Perl's tự động hóa băm trong Python tức là với tính năng tự động hóa
băm, bạn có thể gán các giá trị băm lồng nhau mà không cần phải gặp rắc rối khi tạo
cấp độ trung gian nếu chúng không tồn tại, ví dụ: syscalls[comm][pid][id] = 1 sẽ tạo
mức băm trung gian và cuối cùng gán giá trị 1 cho mục nhập băm cho id (bởi vì
giá trị được gán không phải là một đối tượng băm, giá trị ban đầu được gán trong
Ngoại lệ TypeError. Chà, có thể có cách tốt hơn để làm điều này bằng Python nhưng đó là điều
hiện đang hoạt động).

Đưa mã đó vào trình xử lý raw_syscalls__sys_enter(), chúng ta sẽ kết thúc bằng một
từ điển một cấp được khóa trên id cuộc gọi tòa nhà và có số lượng chúng tôi đã tính là giá trị.

Hàm print_syscall_totals() lặp lại các mục trong từ điển và
hiển thị một dòng cho mỗi mục chứa tên tòa nhà (các khóa từ điển chứa
id tòa nhà, được chuyển tới hàm Util syscall_name(), dịch
số hệ thống thô vào chuỗi tên hệ thống tương ứng). Đầu ra là
được hiển thị sau khi tất cả các sự kiện trong dấu vết đã được xử lý bằng cách gọi phương thức
Hàm print_syscall_totals() từ trình xử lý trace_end() được gọi ở cuối tập lệnh
Chế biến.

Tập lệnh cuối cùng tạo ra kết quả hiển thị ở trên được hiển thị toàn bộ bên dưới
(Trình trợ giúp syscall_name() chưa khả dụng, hiện tại bạn chỉ có thể xử lý id):

.ft C
nhập khẩu os
nhập khẩu hệ thống

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

từ nhập perf_trace_context *
từ Nhập lõi *
từ Nhập sử dụng *

syscalls = autodict()

chắc chắn trace_end():
print_syscall_totals()

def raw_syscalls__sys_enter(event_name, context, common_cpu,
common_sec, common_nsec, common_pid, common_comm,
id, đối số):
thử:
syscalls[id] += 1
ngoại trừ Lỗi Loại:
syscalls[id] = 1

def print_syscall_totals():
nếu for_comm không phải là Không:
in "\nsự kiện cuộc gọi cho %s:\n\n" % (for_comm),
khác:
in "\nsự kiện cuộc gọi:\n\n",

print "%-40s %10s\n" % ("sự kiện", "đếm"),
in "%-40s %10s\n" % ("-------------------------------------- ---", \
"----------"),

đối với id, val insort(syscalls.iteritems(), key = lambda(k, v): (v, k), \
đảo ngược = Đúng):
in "%-40s %10d\n" % (syscall_name(id), val),
.ft

Tập lệnh có thể được chạy như trước:

# tập lệnh hoàn hảo -s syscall-counts.py

Vì vậy, đó là những bước thiết yếu trong việc viết và chạy một tập lệnh. Quá trình này có thể được
được khái quát hóa cho bất kỳ điểm theo dõi hoặc tập hợp điểm theo dõi nào mà bạn quan tâm - về cơ bản hãy tìm
(các) điểm theo dõi mà bạn quan tâm bằng cách xem danh sách các sự kiện có sẵn được hiển thị bởi
perf và/hoặc xem trong các sự kiện /sys/kernel/debug/tracing để biết trường và sự kiện chi tiết
thông tin, ghi lại dữ liệu theo dõi tương ứng bằng cách sử dụng perf ghi, chuyển cho nó danh sách
sự kiện thú vị, tạo tập lệnh khung bằng cách sử dụng perf kịch bản -g mãng xà và sửa đổi
mã để tổng hợp và hiển thị nó cho các nhu cầu cụ thể của bạn.

Sau khi thực hiện xong, bạn có thể có được một tập lệnh có mục đích chung mà bạn muốn giữ lại
xung quanh và có sẵn để sử dụng trong tương lai. Bằng cách viết một vài tập lệnh shell rất đơn giản
và đặt chúng vào đúng vị trí, bạn có thể liệt kê tập lệnh của mình cùng với tập lệnh khác
các kịch bản được liệt kê bởi perf kịch bản -l lệnh, ví dụ:

.ft C
root@tropicana:~# tập lệnh hoàn hảo -l
Danh sách các tập lệnh theo dõi có sẵn:
độ trễ đánh thức độ trễ đánh thức tối thiểu/tối đa/trung bình trên toàn hệ thống
rw-by-file hoạt động r/w cho một chương trình, theo tập tin
hoạt động r/w trên toàn hệ thống rw-by-pid
.ft

Một tác dụng phụ thú vị của việc này là bạn cũng có thể nắm bắt được đoạn video có thể dài perf
ghi lệnh cần thiết để ghi lại các sự kiện cho tập lệnh.

Để tập lệnh xuất hiện dưới dạng được xây dựng trong script, bạn viết hai script đơn giản, một cho
ghi âm và một cho báo cáo.

Sản phẩm ghi tập lệnh là tập lệnh shell có cùng tên cơ sở với tập lệnh của bạn, nhưng có
-bản ghi được thêm vào. Tập lệnh shell nên được đặt vào perf/scripts/python/bin
thư mục trong cây nguồn kernel. Trong tập lệnh đó, bạn viết perf ghi
dòng lệnh cần thiết cho tập lệnh của bạn:

.ft C
# cat kernel-source/tools/perf/scripts/python/bin/syscall-counts-record

#!/ bin / bash
bản ghi hoàn hảo -a -e raw_syscalls:sys_enter
.ft

Sản phẩm báo cáo tập lệnh cũng là tập lệnh shell có cùng tên cơ sở với tập lệnh của bạn, nhưng có
-báo cáo được đính kèm. Nó cũng phải được đặt trong thư mục perf/scripts/python/bin. TRONG
kịch bản đó, bạn viết perf kịch bản -s dòng lệnh cần thiết để chạy tập lệnh của bạn:

.ft C
# cat kernel-source/tools/perf/scripts/python/bin/syscall-counts-report

#!/ bin / bash
# mô tả: số lượng cuộc gọi toàn hệ thống
kịch bản hoàn hảo -s ~/libexec/perf-core/scripts/python/syscall-counts.py
.ft

Lưu ý rằng vị trí của tập lệnh Python được cung cấp trong tập lệnh shell nằm trong
thư mục libexec/perf-core/scripts/python - đây là nơi tập lệnh sẽ được sao chép bởi
làm cho cài đặt, dựng lên khi bạn cài đặt perf. Để cài đặt, hãy cài đặt tập lệnh của bạn ở đó,
tập lệnh của bạn cần được đặt trong thư mục perf/scripts/python trong nguồn kernel
cây:

.ft C
# ls -al kernel-source/tools/perf/scripts/python

root@tropicana:/home/trz/src/tip# ls -al tools/perf/scripts/python
Tổng số 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 bin
-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 Perf-Trace-Util
-rw-r--r-- 1 trz trz 1462 2010-01-26 22:30 syscall-counts.py
.ft

Khi bạn đã làm xong việc đó (đừng quên làm một làm cho cài đặt, dựng lên, nếu không tập lệnh của bạn sẽ không
xuất hiện vào thời gian chạy), perf kịch bản -l sẽ hiển thị một mục mới cho tập lệnh của bạn:

.ft C
root@tropicana:~# tập lệnh hoàn hảo -l
Danh sách các tập lệnh theo dõi có sẵn:
độ trễ đánh thức độ trễ đánh thức tối thiểu/tối đa/trung bình trên toàn hệ thống
rw-by-file hoạt động r/w cho một chương trình, theo tập tin
hoạt động r/w trên toàn hệ thống rw-by-pid
số lượng cuộc gọi tòa nhà số lượng cuộc gọi tòa nhà trên toàn hệ thống
.ft

Bây giờ bạn có thể thực hiện bước ghi thông qua perf kịch bản ghi:

# perf script ghi lại số cuộc gọi tòa nhà

và hiển thị đầu ra bằng cách sử dụng perf kịch bản báo cáo:

# hoàn hảo báo cáo tập lệnh syscall-counts

STARTER KỊCH BẢN


Bạn có thể nhanh chóng bắt đầu viết tập lệnh cho một tập hợp dữ liệu theo dõi cụ thể bằng cách
tạo tập lệnh khung bằng cách sử dụng perf kịch bản -g mãng xà trong cùng thư mục với một
tệp theo dõi perf.data hiện có. Điều đó sẽ tạo ra một tập lệnh khởi động có chứa trình xử lý
đối với từng loại sự kiện trong tệp theo dõi; nó chỉ đơn giản là in mọi trường có sẵn cho
mỗi sự kiện trong tệp theo dõi.

Bạn cũng có thể xem các tập lệnh hiện có trong ~/libexec/perf-core/scripts/python cho
ví dụ điển hình cho thấy cách thực hiện những việc cơ bản như tổng hợp dữ liệu sự kiện, in kết quả,
v.v. Ngoài ra, tập lệnh check-perf-script.py, mặc dù không thú vị về kết quả của nó,
cố gắng thực hiện tất cả các tính năng kịch bản chính.

TRƯỜNG NGƯỜI XỬ LÝ


Khi tập lệnh hoàn hảo được gọi bằng cách sử dụng tập lệnh theo dõi, một tập lệnh do người dùng xác định xử lý chức năng is
được gọi cho mỗi sự kiện trong dấu vết. Nếu không có hàm xử lý nào được xác định cho một
loại sự kiện, sự kiện đó sẽ bị bỏ qua (hoặc được chuyển đến một trace_handled chức năng, xem bên dưới) và
sự kiện tiếp theo được xử lý.

Hầu hết các giá trị trường của sự kiện được chuyển dưới dạng đối số cho hàm xử lý; một số
những cái ít phổ biến hơn thì không - những cái đó có sẵn dưới dạng lệnh gọi trở lại tệp thực thi hoàn hảo
(xem bên dưới).

Ví dụ: lệnh ghi hoàn hảo sau đây có thể được sử dụng để ghi lại tất cả sched_wakeup
các sự kiện trong hệ thống:

# bản ghi hoàn hảo -a -e sched:sched_wakeup

Các dấu vết được xử lý bằng tập lệnh phải được ghi lại bằng tùy chọn trên: -a
để cho phép thu thập trên toàn hệ thống.

Tệp định dạng cho sự kiện sched_wakep xác định các trường sau (xem
/sys/kernel/debug/tracing/events/sched/sched_wakeup/format):

.ft C
định dạng:
trường:unsigned short common_type;
trường: char không dấu common_flags;
trường: char không dấu common_preempt_count;
trường:int common_pid;

trường:char comm[TASK_COMM_LEN];
trường:pid_t pid;
trường:int ưu tiên;
trường:int thành công;
trường:int target_cpu;
.ft

Hàm xử lý sự kiện này sẽ được định nghĩa là:

.ft C
def sched__sched_wakeup(event_name, context, common_cpu, common_secs,
common_nsec, common_pid, common_comm,
comm, pid, ưu tiên, thành công, target_cpu):
vượt qua
.ft

Hàm xử lý có dạng subsystem__event_name.

Các đối số common_* trong danh sách đối số của trình xử lý là tập hợp các đối số được truyền cho
tất cả các trình xử lý sự kiện; một số trường tương ứng với các trường common_* ở định dạng
tệp, nhưng một số được tổng hợp và một số trường common_* không đủ phổ biến để
được chuyển đến mọi sự kiện dưới dạng đối số nhưng có sẵn dưới dạng hàm thư viện.

Dưới đây là mô tả ngắn gọn về từng đối số sự kiện bất biến:

event_name tên của sự kiện dưới dạng văn bản
bối cảnh một 'cookie' mờ đục được sử dụng trong các cuộc gọi trở lại sự hoàn hảo
common_cpu cpu sự kiện xảy ra vào
common_secs phần giây của dấu thời gian sự kiện
common_nsecs phần nsecs của dấu thời gian sự kiện
common_pid pid của tác vụ hiện tại
common_comm tên của quy trình hiện tại

Tất cả các trường còn lại trong tệp định dạng của sự kiện đều có các trường tương ứng làm trình xử lý
các đối số của hàm có cùng tên, như có thể thấy trong ví dụ trên.

Phần trên cung cấp những kiến ​​thức cơ bản cần thiết để truy cập trực tiếp vào mọi lĩnh vực của mọi sự kiện trong một
trace, bao gồm 90% những gì bạn cần biết để viết một tập lệnh trace hữu ích. Các
phần bên dưới bao gồm phần còn lại.

SCRIPT BỐ TRÍ


Mọi tập lệnh hoàn hảo Tập lệnh Python phải bắt đầu bằng cách thiết lập đường dẫn tìm kiếm mô-đun Python và
'nhập khẩu một số mô-đun hỗ trợ (xem mô tả mô-đun bên dưới):

.ft C
nhập khẩu os
nhập khẩu hệ thống

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

từ nhập perf_trace_context *
từ Nhập lõi *
.ft

Phần còn lại của tập lệnh có thể chứa các hàm xử lý và các hàm hỗ trợ theo bất kỳ thứ tự nào.

Ngoài các hàm xử lý sự kiện được thảo luận ở trên, mọi tập lệnh đều có thể triển khai một tập hợp
của các chức năng tùy chọn:

dấu vết_bắt đầu, nếu được xác định, sẽ được gọi trước khi bất kỳ sự kiện nào được xử lý và cung cấp cho các tập lệnh một
cơ hội thực hiện các nhiệm vụ thiết lập:

.ft C
def trace_begin:
vượt qua
.ft

dấu vết_kết thúc, nếu được xác định, sẽ được gọi sau khi tất cả các sự kiện đã được xử lý và cung cấp cho tập lệnh một
cơ hội thực hiện các tác vụ cuối tập lệnh, chẳng hạn như hiển thị kết quả:

.ft C
chắc chắn trace_end:
vượt qua
.ft

dấu vết_chưa được xử lý, nếu được xác định, sẽ được gọi sau cho bất kỳ sự kiện nào không có trình xử lý
được xác định rõ ràng cho nó. Tập hợp tiêu chuẩn các đối số chung được truyền vào nó:

.ft C
def trace_unhandled(event_name, context, common_cpu, common_secs,
common_nsecs, common_pid, common_comm):
vượt qua
.ft

Các phần còn lại cung cấp mô tả về từng tập lệnh hoàn thiện tích hợp sẵn
Các mô-đun Python và các chức năng liên quan của chúng.

MODULES CHỨC NĂNG


Các phần sau đây mô tả các hàm và biến có sẵn thông qua các cách hoàn thiện khác nhau.
tập lệnh mô-đun Python. Để sử dụng các hàm và biến từ mô-đun đã cho, hãy thêm
tương ứng từ XXXX nhập khẩu dòng vào tập lệnh hoàn hảo của bạn.

Core.py Mô-đun
Các chức năng này cung cấp một số chức năng cần thiết cho tập lệnh người dùng.

Sản phẩm flag_strký hiệu_str các hàm cung cấp các chuỗi có thể đọc được cho cờ và biểu tượng
lĩnh vực. Chúng tương ứng với các chuỗi và giá trị được phân tích từ in fmt lĩnh vực của
tập tin định dạng sự kiện:

flag_str(event_name, field_name, field_value) - trả về biểu diễn chuỗi tương ứng với field_value cho trường cờ field_name của sự kiện event_name
Symbol_str(event_name, field_name, field_value) - trả về biểu diễn chuỗi tương ứng với field_value cho trường ký hiệu field_name của sự kiện event_name

Sản phẩm tự chế hàm trả về một loại từ điển Python đặc biệt triển khai Perl
tự động hóa băm trong Python tức là với hàm băm tự động hóa, bạn có thể gán hàm băm lồng nhau
giá trị mà không cần phải gặp khó khăn trong việc tạo ra các cấp độ trung gian nếu không
hiện hữu.

autodict() - trả về một phiên bản từ điển tự động kích hoạt

perf_trace_context Mô-đun
Một số chung các trường trong tệp định dạng sự kiện không phổ biến lắm nhưng cần phải có
Tuy nhiên, các tập lệnh của người dùng vẫn có thể truy cập được.

perf_trace_context xác định một tập hợp các hàm có thể được sử dụng để truy cập dữ liệu này trong
bối cảnh của sự kiện hiện tại. Mỗi hàm này mong đợi một biến ngữ cảnh, đó là
giống như biến bối cảnh được truyền vào mọi trình xử lý sự kiện làm đối số thứ hai.

common_pc(context) - trả về số common_preempt cho sự kiện hiện tại
common_flags(context) - trả về common_flags cho sự kiện hiện tại
common_lock_deep(context) - trả về common_lock_deep cho sự kiện hiện tại

Util.py Mô-đun
Các chức năng tiện ích khác nhau để sử dụng với tập lệnh hoàn hảo:

nsecs(secs, nsecs) - trả về tổng số nsec cho cặp giây/nsec
nsecs_secs(nsecs) - trả về toàn bộ phần giây cho nsec
nsecs_nsecs(nsecs) - trả về nsec còn lại cho nsec
nsecs_str(nsecs) - trả về chuỗi có thể in được ở dạng secs.nsecs
avg(total, n) - trả về giá trị trung bình cho một tổng và tổng số giá trị

Sử dụng perf-script-python trực tuyến bằng dịch vụ onworks.net


Máy chủ & Máy trạm miễn phí

Tải xuống ứng dụng Windows & Linux

  • 1
    VBA-M (Đã lưu trữ - Hiện có trên Github)
    VBA-M (Đã lưu trữ - Hiện có trên Github)
    Dự án đã chuyển sang
    https://github.com/visualboyadvance-m/visualboyadvance-m
    Các tính năng: Tạo gian lận lưu trạng thái đa
    hệ thống, hỗ trợ gba, gbc, gb, sgb,
    sgb2Tu...
    Tải xuống VBA-M (Đã lưu trữ - Hiện có trên Github)
  • 2
    Stacer
    Stacer
    Giám sát và tối ưu hóa hệ thống Linux
    Kho lưu trữ Github:
    https://github.com/oguzhaninan/Stacer.
    Đối tượng: Người dùng cuối / Máy tính để bàn. Người sử dụng
    giao diện: Qt. Lập trình La ...
    Tải xuống Stacer
  • 3
    CamCáo
    CamCáo
    Ngã ba của TeamWinRecoveryProject(TWRP)
    với nhiều chức năng bổ sung, thiết kế lại
    và nhiều tính năng khác: Hỗ trợ Treble và
    ROM không phải TrebleNhân Oreo cập nhật,
    được xây dựng...
    Tải xuống OrangeFox
  • 4
    itop - ITSM CMDB OpenSource
    itop - Nguồn mở ITSM CMDB
    Cổng hoạt động CNTT: hoàn toàn mở
    nguồn, ITIL, dịch vụ dựa trên web
    công cụ quản lý bao gồm đầy đủ
    CMDB có thể tùy chỉnh, hệ thống trợ giúp và
    một người đàn ông tài liệu ...
    Tải xuống itop - ITSM CMDB OpenSource
  • 5
    Clementine
    Clementine
    Clementine là một bản nhạc đa nền tảng
    người chơi và tổ chức thư viện lấy cảm hứng từ
    Amarok 1.4. Nó có một tốc độ nhanh và
    giao diện dễ sử dụng và cho phép bạn
    tìm kiếm và...
    Tải xuống Clementine
  • 6
    XISMuS
    XISMuS
    CHÚ Ý: Bản cập nhật tích lũy 2.4.3 có
    đã được phát hành !! Bản cập nhật hoạt động cho bất kỳ
    phiên bản 2.xx trước đó. Nếu nâng cấp
    từ phiên bản v1.xx, vui lòng tải xuống và
    i ...
    Tải xuống XISMuS
  • Khác »

Lệnh Linux

  • 1
    abi từ
    abi từ
    abiword � từ đa nền tảng linh hoạt
    bộ xử lý...
    Chạy abiword
  • 2
    abl
    abl
    abl - Đại diện tiền tố cho
    các hàm boolean MÔ TẢ:
    libablmmm.a là một thư viện cho phép
    biểu diễn hàm boolean trong một
    Dạng giống LISP. MỘT ...
    Chạy abl
  • 3
    create_bmp_for_orth_in_circ
    create_bmp_for_orth_in_circ
    xin lỗi_no_writing_yet - một phần của atlc Sử dụng
    create_bmp_for_ect_in_circ trực tuyến bằng cách sử dụng
    dịch vụ onworks.net. ...
    Chạy create_bmp_for_orth_in_circ
  • 4
    tạo_bmp_for_rect_in_rect
    tạo_bmp_for_rect_in_rect
    create_bmp_for_ect_in_ect - bitmap
    máy phát điện cho dây dẫn hình chữ nhật
    bên trong dây dẫn hình chữ nhật (một phần của
    atc)...
    Chạy create_bmp_for_orct_in_ort
  • 5
    gap5
    gap5
    Gap5 - Chương trình tập hợp bộ gen (một phần của
    gói staden)...
    Chạy khoảng cách5
  • 6
    Gapi2-codegen
    Gapi2-codegen
    không có giấy tờ - Không có trang hướng dẫn nào cho việc này
    chương trình. MÔ TẢ: Chương trình này thực hiện
    không có manpage. Chạy lệnh này
    với công tắc trợ giúp để xem nó là gì
    làm. Đối với ...
    Chạy Gapi2-codegen
  • Khác »

Ad