Đây là lệnh perf-report có thể được 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 giả lập trực tuyến Windows hoặc trình giả lập trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
perf-report - Đọc perf.data (được tạo bởi perf record) và hiển thị hồ sơ
SYNOPSIS
perf báo cáo [-tôi | --input = tệp]
MÔ TẢ
Lệnh này hiển thị thông tin hồ sơ bộ đếm hiệu suất được ghi lại qua perf
ghi lại.
LỰA CHỌN
-i, --input =
Tên tệp đầu vào. (mặc định: perf.data trừ khi stdin là năm mươi)
-v, --verbose
Dài dòng hơn. (hiển thị địa chỉ biểu tượng, v.v.)
-n, --show-nr-sample
Hiển thị số lượng mẫu cho mỗi ký hiệu
--show-cpu-using
Hiển thị phần trăm mẫu cho các chế độ cpu khác nhau.
-T, --chủ đề
Hiển thị bộ đếm sự kiện theo chuỗi. Tệp dữ liệu đầu vào phải được ghi với tùy chọn -s.
-c, --comms =
Chỉ xem xét các ký hiệu trong các thư này. CSV hiểu tệp: // tên tệp mục.
Tùy chọn này sẽ ảnh hưởng đến tỷ lệ phần trăm của cột trên cao. Xem - phần trăm cho
thêm thông tin.
--pid =
Chỉ hiển thị các sự kiện cho ID quy trình đã cho (danh sách được phân tách bằng dấu phẩy).
--tid =
Chỉ hiển thị các sự kiện cho ID chuỗi đã cho (danh sách được phân tách bằng dấu phẩy).
-d, --dsos =
Chỉ xem xét các biểu tượng trong các dsos này. CSV hiểu tệp: // tên tệp mục.
Tùy chọn này sẽ ảnh hưởng đến tỷ lệ phần trăm của cột trên cao. Xem - phần trăm cho
thêm thông tin.
-S, --symbols =
Chỉ xem xét những biểu tượng này. CSV hiểu tệp: // tên tệp mục. Tùy chọn này
sẽ ảnh hưởng đến tỷ lệ phần trăm của cột trên cao. Xem - phần trăm để biết thêm thông tin.
--symbol-filter =
Chỉ hiển thị các ký hiệu phù hợp (một phần) với bộ lọc này.
-U, - ẩn-chưa được giải quyết
Chỉ hiển thị các mục nhập được giải quyết thành một biểu tượng.
-s, --sort =
Sắp xếp các mục nhập biểu đồ theo (các) khóa nhất định - nhiều khóa có thể được chỉ định ở định dạng CSV.
Các phím sắp xếp sau có sẵn: pid, comm, dso, ký hiệu, cha, cpu, socket,
srcline, trọng lượng, local_weight.
Mỗi phím có ý nghĩa sau:
· Comm: lệnh (tên) của nhiệm vụ có thể được đọc qua / proc // comm
· Pid: lệnh và quy tắc của nhiệm vụ
· Dso: tên của thư viện hoặc mô-đun được thực thi tại thời điểm lấy mẫu
· Ký hiệu: tên của hàm được thực thi tại thời điểm lấy mẫu
· Cha: tên của hàm phù hợp với bộ lọc regex chính. Các mục nhập chưa từng có là
hiển thị là "[khác]".
· Cpu: số cpu mà tác vụ đã chạy tại thời điểm lấy mẫu
· Socket: số hiệu socket bộ xử lý mà tác vụ đã chạy tại thời điểm lấy mẫu
· Srcline: tên tệp và số dòng được thực thi tại thời điểm lấy mẫu. DWARF
thông tin gỡ lỗi phải được cung cấp.
· Srcfile: tên tệp của tệp nguồn giống nhau. Yêu cầu thông tin lùn.
· Trọng lượng: Trọng lượng cụ thể của sự kiện, ví dụ như độ trễ bộ nhớ hoặc chi phí hủy bỏ giao dịch. Điều này
là trọng lượng toàn cầu.
· Local_weight: Phiên bản trọng lượng cục bộ của trọng lượng ở trên.
· Transaction: Cờ hủy bỏ giao dịch.
· Overhead: Tỷ lệ phần trăm mẫu trên không
· Overhead_sys: Tỷ lệ phần trăm mẫu chạy ở chế độ hệ thống
· Overhead_us: Phần trăm chi phí của mẫu đang chạy ở chế độ người dùng
· Overhead_guest_sys: Tỷ lệ phần trăm mẫu chạy ở chế độ hệ thống khi khách
máy
· Overhead_guest_us: Tỷ lệ phần trăm mẫu chạy ở chế độ người dùng khi khách
máy
· Mẫu: Số lượng mẫu
· Thời gian: Số lượng sự kiện thô của mẫu
Theo mặc định, các phím dấu phẩy, dso và phím biểu tượng được sử dụng.
(tức là - sắp xếp dấu phẩy, dso, biểu tượng)
Nếu tùy chọn --branch-stack được sử dụng, các khóa sắp xếp sau cũng được
có sẵn:
dso_from, dso_to, Symbol_from, Symbol_to, dự đoán sai.
· Dso_from: tên của thư viện hoặc mô-đun được phân nhánh từ
· Dso_to: tên của thư viện hoặc mô-đun được phân nhánh thành
· Symbol_from: tên của hàm được phân nhánh từ
· Symbol_to: tên của hàm được phân nhánh thành
· Dự đoán sai: "N" cho nhánh dự đoán, "Y" cho nhánh dự đoán sai
· In_tx: chi nhánh trong giao dịch TSX
· Hủy bỏ: Hủy bỏ giao dịch TSX.
· Chu kỳ: Các chu kỳ trong khối cơ bản
Và các phím sắp xếp mặc định được thay đổi thành comm, dso_from, Symbol_from, dso_to
và Symbol_to, xem '--branch-stack'.
-F, --fields =
Chỉ định trường đầu ra - nhiều khóa có thể được chỉ định ở định dạng CSV. Các lĩnh vực sau
có sẵn: overhead, overhead_sys, overhead_us, overhead_children, mẫu và
khoảng thời gian. Ngoài ra, nó có thể chứa bất kỳ (các) khóa sắp xếp nào.
Theo mặc định, mọi khóa sắp xếp không được chỉ định trong -F sẽ được thêm vào
tự động.
Nếu tùy chọn --mem-mode được sử dụng, các phím sắp xếp sau cũng khả dụng
(không tương thích với --branch-stack):
Symbol_daddr, dso_daddr, bị khóa, tlb, mem, snoop, dcacheline.
· Symbol_daddr: tên của biểu tượng dữ liệu đang được thực thi tại thời điểm lấy mẫu
· Dso_daddr: tên của thư viện hoặc mô-đun chứa dữ liệu đang được thực thi trên
thời gian của mẫu
· Bị khóa: xe buýt có bị khóa tại thời điểm lấy mẫu hay không
· Tlb: kiểu truy cập tlb cho dữ liệu tại thời điểm lấy mẫu
· Mem: kiểu truy cập bộ nhớ cho dữ liệu tại thời điểm lấy mẫu
· Snoop: kiểu rình mò (nếu có) cho dữ liệu tại thời điểm lấy mẫu
· Dcacheline: dòng cache địa chỉ dữ liệu có tại thời điểm lấy mẫu
Và các khóa sắp xếp mặc định được thay đổi thành local_weight, mem, sym, dso,
Symbol_daddr, dso_daddr, snoop, tlb, bị khóa, hãy xem '--mem-mode'.
-p, --parent =
Một bộ lọc regex để xác định cha mẹ. Cha mẹ là người gọi hàm này và
đã tìm kiếm thông qua chuỗi gọi, do đó, nó yêu cầu ghi lại thông tin chuỗi gọi. Các
mẫu ở định dạng regex được mở rộng và mặc định là "^ sys_ | ^ do_page_fault", hãy xem
--loại cha mẹ.
-x, --exclude-khác
Chỉ hiển thị các mục nhập có đối sánh gốc.
-w, --column-widths =
Buộc mỗi chiều rộng cột vào danh sách được cung cấp, để có thể đọc đầu cuối lớn. 0 nghĩa là
không có giới hạn (hành vi mặc định).
-t, - dấu phân cách trường =
Sử dụng một ký tự phân cách đặc biệt và không thêm dấu cách, thay thế tất cả các lần xuất hiện
của dấu phân tách này trong tên ký hiệu (và đầu ra khác) với . nhân vật, do đó
nó là dấu phân cách không hợp lệ duy nhất.
-D, --dump-raw-dấu vết
Kết xuất dấu vết thô trong ASCII.
-g, --call-graph =
Hiển thị chuỗi cuộc gọi bằng cách sử dụng loại, ngưỡng phần trăm tối thiểu, giới hạn in, thứ tự cuộc gọi, sắp xếp
chìa khóa và chi nhánh. Lưu ý rằng thứ tự của các tham số không cố định vì vậy bất kỳ sự thay thế nào cũng có thể
đưa ra theo một thứ tự tùy tiện. Một ngoại lệ là print_limit phải được đặt trước
theo ngưỡng.
print_type có thể là:
- phẳng: cột đơn, tiếp xúc tuyến tính của chuỗi cuộc gọi.
- graph: sử dụng một cây biểu đồ, hiển thị tỷ lệ chi phí tuyệt đối. (vỡ nợ)
- Fractal: giống như đồ thị, nhưng hiển thị tỷ lệ tương đối. Mỗi nhánh của
cây được coi là một đối tượng mới.
- none: tắt hiển thị chuỗi cuộc gọi.
ngưỡng là một giá trị phần trăm chỉ định một phần trăm tối thiểu là
bao gồm trong đồ thị cuộc gọi đầu ra. Mặc định là 0.5 (%).
print_limit chỉ được áp dụng khi giao diện stdio được sử dụng. Nó để giới hạn
số lượng mục nhập biểu đồ cuộc gọi trong một mục nhập lịch sử. Lưu ý rằng nó cần
được đưa ra sau ngưỡng (nhưng không nhất thiết phải liên tiếp).
Mặc định là 0 (không giới hạn).
thứ tự có thể là:
- callee: đồ thị cuộc gọi dựa trên callee.
- người gọi: đồ thị cuộc gọi dựa trên người gọi đảo ngược.
Mặc định là 'caller' khi --children được sử dụng, ngược lại là "callee".
sort_key có thể là:
- chức năng: so sánh trên các chức năng (mặc định)
- địa chỉ: so sánh trên các địa chỉ mã riêng lẻ
nhánh có thể là:
- nhánh: bao gồm thông tin nhánh cuối cùng trong biểu đồ gọi khi có sẵn.
Thường thuận tiện hơn khi sử dụng --branch-history cho việc này.
--bọn trẻ
Tích lũy chuỗi gọi của trẻ em vào mục nhập của cha mẹ để sau đó có thể hiển thị trong
đầu ra. Đầu ra sẽ có cột "Con" mới và sẽ được sắp xếp trên dữ liệu.
Nó yêu cầu các callchains được ghi lại. Xem phần 'tính toán chi phí' để biết thêm
chi tiết.
- max-stack
Đặt giới hạn độ sâu ngăn xếp khi phân tích cú pháp chuỗi gọi, bất kỳ thứ gì vượt quá quy định được chỉ định
độ sâu sẽ bị bỏ qua. Đây là sự đánh đổi giữa mất thông tin và nhanh hơn
xử lý đặc biệt đối với khối lượng công việc có thể có một ngăn xếp chuỗi gọi rất dài. Ghi chú
rằng khi sử dụng tùy chọn --itrace, kích thước chuỗi gọi tổng hợp sẽ ghi đè lên
giá trị nếu kích thước chuỗi gọi tổng hợp lớn hơn.
Mặc định: 127
-G, - ngược
bí danh cho biểu đồ cuộc gọi dựa trên người gọi ngược.
--ignore-callees =
Bỏ qua callees của (các) hàm phù hợp với regex đã cho. Điều này có tác dụng
thu thập các lệnh gọi của mỗi hàm như vậy vào một nơi trong cây đồ thị lệnh.
--pretty =
Phong cách in ấn đẹp. chìa khóa: bình thường, thô
--stdio
Sử dụng giao diện stdio.
--tui
Sử dụng giao diện TUI, được tích hợp với chú thích và cho phép phóng to các DSO
hoặc chủ đề, trong số các tính năng khác. Việc sử dụng --tui yêu cầu một tty, nếu không có,
như khi đường ống đến các lệnh khác, giao diện stdio được sử dụng.
--gtk
Sử dụng giao diện GTK2.
-k, --vmlinux =
tên đường dẫn vmlinux
--kallsyms =
tên đường dẫn kallsyms
-m, - mô-đun
Nạp ký hiệu mô-đun. CẢNH BÁO: Điều này chỉ nên được sử dụng với -k và một hạt nhân LIVE.
-f, - lực lượng
Đừng phàn nàn, hãy làm điều đó.
--symfs =
Tìm các tệp có ký hiệu liên quan đến thư mục này.
-C, --cpu
Chỉ báo cáo các mẫu cho danh sách các CPU được cung cấp. Nhiều CPU có thể được cung cấp như một
danh sách được phân tách bằng dấu phẩy không có khoảng trắng: 0,1. Phạm vi CPU được chỉ định bằng -: 0-2.
Mặc định là báo cáo các mẫu trên tất cả các CPU.
-M, --disassembler-style =
Đặt kiểu trình tháo gỡ cho objdump.
--nguồn
Xen kẽ mã nguồn với mã lắp ráp. Được bật theo mặc định, tắt bằng
--Không có nguồn.
--asm-thô
Hiển thị mã hóa hướng dẫn thô của hướng dẫn lắp ráp.
--show-total-giai đoạn
Hiển thị một cột với tổng các khoảng thời gian.
-Tôi, --show-thông tin
Hiển thị thông tin mở rộng về tệp perf.data. Điều này bổ sung thông tin có thể
rất lớn và do đó có thể làm lộn xộn màn hình. Nó hiện bao gồm: cpu và numa
cấu trúc liên kết của hệ thống máy chủ.
-b, --nhánh-ngăn xếp
Sử dụng địa chỉ của các chi nhánh đã lấy mẫu thay vì địa chỉ hướng dẫn để
xây dựng biểu đồ. Để tạo đầu ra có ý nghĩa, tệp perf.data phải được
có được bằng cách sử dụng bản ghi perf -b hoặc bản ghi perf --branch-filter xxx trong đó xxx là một nhánh
tùy chọn bộ lọc. báo cáo perf có thể tự động phát hiện xem tệp perf.data có chứa
ngăn xếp nhánh và nó sẽ tự động chuyển sang chế độ xem nhánh, trừ khi
--no-branch-stack được sử dụng.
--nhánh-lịch sử
Thêm địa chỉ của các chi nhánh đã lấy mẫu vào callstack. Điều này cho phép kiểm tra
đường dẫn chương trình đến từng mẫu. Việc thu thập dữ liệu phải được sử dụng -b (hoặc
-j) và -g.
--objdump =
Đường dẫn đến tệp nhị phân objdump.
--tập đoàn
Hiển thị thông tin nhóm sự kiện cùng nhau.
- hình tam giác
Gỡ tên biểu tượng sang dạng con người có thể đọc được. Nó được bật theo mặc định, tắt bằng
- không có gì khó hiểu.
--demangle-kernel
Gỡ tên biểu tượng hạt nhân thành dạng con người có thể đọc được (đối với hạt nhân C ++).
--chế độ mem
Sử dụng địa chỉ dữ liệu của các mẫu ngoài địa chỉ hướng dẫn để xây dựng
biểu đồ. Để tạo đầu ra có ý nghĩa, tệp perf.data phải được lấy
sử dụng bản ghi hoàn hảo -d -W và sử dụng sự kiện đặc biệt -e cpu / mem -load / or -e
cpu / mem-store /. Nhìn thấy perf mem để truy cập đơn giản hơn.
- giới hạn phần trăm
Không hiển thị các mục nhập có chi phí dưới phần trăm đó. (Mặc định: 0).
- tỷ lệ
Xác định cách hiển thị phần trăm chi phí của các mục đã lọc. Bộ lọc có thể
được áp dụng bởi các tùy chọn --comms, --dsos và / hoặc --symbols và các hoạt động Zoom trên TUI
(chủ đề, dso, v.v.).
"tương đối" có nghĩa là nó chỉ liên quan đến các mục nhập được lọc để
tổng các mục được hiển thị sẽ luôn là 100%. "tuyệt đối" có nghĩa là nó giữ lại
giá trị ban đầu trước và sau khi bộ lọc được áp dụng.
--tiêu đề
Hiển thị thông tin tiêu đề trong tệp perf.data. Điều này bao gồm các thông tin khác nhau như
tên máy chủ, hệ điều hành và phiên bản hoàn thiện, thông tin cpu / mem, dòng lệnh perf, danh sách sự kiện, v.v.
Hiện chỉ có đầu ra --stdio hỗ trợ tính năng này.
- chỉ dành cho người đứng đầu
Chỉ hiển thị tiêu đề perf.data (lực lượng --stdio).
--itrace
Các tùy chọn để giải mã dữ liệu theo dõi lệnh. Các tùy chọn là:
tôi tổng hợp các sự kiện hướng dẫn
b tổng hợp các sự kiện chi nhánh
c tổng hợp các sự kiện chi nhánh (chỉ cuộc gọi)
r tổng hợp các sự kiện nhánh (chỉ trả về)
x tổng hợp các sự kiện giao dịch
e tổng hợp các sự kiện lỗi
d tạo nhật ký gỡ lỗi
g tổng hợp chuỗi cuộc gọi (sử dụng với i hoặc x)
Tôi tổng hợp các mục nhập nhánh cuối cùng (sử dụng với i hoặc x)
Mặc định là tất cả các sự kiện giống như --itrace = ibxe
Ngoài ra, khoảng thời gian (mặc định 100000) cho các sự kiện hướng dẫn
có thể được chỉ định theo đơn vị:
tôi hướng dẫn
tích tắc
mili giây mili giây
chúng tôi micro giây
ns nano giây (mặc định)
Ngoài ra, kích thước chuỗi cuộc gọi (mặc định 16, tối đa 1024) để được hướng dẫn hoặc
các sự kiện giao dịch có thể được chỉ định.
Cũng là số mục nhập nhánh cuối cùng (mặc định 64, tối đa 1024) cho
hướng dẫn hoặc các sự kiện giao dịch có thể được chỉ định.
Để tắt hoàn toàn giải mã, hãy sử dụng --no-itrace.
--đường dẫn nguồn đầy đủ
Hiển thị đường dẫn đầy đủ cho các tệp nguồn cho đầu ra srcline.
--show-ref-cuộc gọi-đồ thị
Khi nhiều sự kiện được lấy mẫu, có thể không cần thu thập các biểu đồ gọi cho tất cả
của họ. Các địa điểm mẫu thường ở gần đó và đủ để thu thập
đồ thị về một sự kiện tham chiếu. Vì vậy, người dùng có thể sử dụng công cụ sửa đổi sự kiện "call-graph = no" để
vô hiệu hóa callgraph cho các sự kiện khác để giảm chi phí. Tuy nhiên, báo cáo hiệu suất không thể
hiển thị các bản đồ gọi cho sự kiện vô hiệu bản đồ gọi. Tùy chọn này mở rộng
báo cáo hoàn hảo để hiển thị các biểu đồ gọi tham chiếu, được thu thập bởi sự kiện tham chiếu, không
sự kiện callgraph.
- bộ lọc ổ cắm
Chỉ báo cáo các mẫu trên ổ cắm bộ xử lý phù hợp với bộ lọc này
TRÊN KHÔNG PHÉP TÍNH
Chi phí có thể được hiển thị trong hai cột như Trẻ em và Tự khi perf thu thập
callchains. Các tự tổng chi phí được tính đơn giản bằng cách thêm tất cả các giá trị chu kỳ của
mục nhập - thường là một hàm (ký hiệu). Đây là giá trị mà perf thể hiện theo truyền thống và
tổng của tất cả tự giá trị chi phí phải là 100%.
trẻ em tổng chi phí được tính bằng cách thêm tất cả các giá trị chu kỳ của các hàm con để
rằng nó có thể hiển thị tổng chi phí của các chức năng cấp cao hơn ngay cả khi chúng không
trực tiếp thực hiện nhiều. Trẻ em ở đây có nghĩa là các hàm được gọi từ một (cha) khác
chức năng.
Có thể gây nhầm lẫn rằng tổng của tất cả trẻ em giá trị trên không vượt quá 100% kể từ khi
mỗi người trong số họ đã là sự tích lũy của tự chi phí các chức năng con của nó. Nhưng vơi
tính năng này được bật, người dùng có thể tìm thấy chức năng nào có chi phí cao nhất ngay cả khi các mẫu
lây lan trên trẻ em.
Hãy xem xét ví dụ sau đây; có ba chức năng như dưới đây.
.ft C
void foo (void) {
/* làm việc gì đó */
}
thanh void (void) {
/* làm việc gì đó */
foo ();
}
int main (void) {
quán ba()
0 trở về;
}
.ft
Trong trường hợp này foo là con của thanhvà thanh là con của chính so foo cũng là một
đứa bé của chính. Nói cách khác, chính là cha mẹ của foo và thanhvà thanh là cha mẹ của
foo.
Giả sử tất cả các mẫu được ghi lại trong foo và thanh chỉ một. Khi nó được ghi lại bằng callchains
đầu ra sẽ hiển thị một cái gì đó giống như bên dưới trong đầu ra thông thường (chỉ tự trả phí) của perf
báo cáo:
.ft C
Biểu tượng trên không
......... .....................
60.00% foo
|
--- foo
thanh
chính
__libc_start_main
40.00% thanh
|
--- quán ba
chính
__libc_start_main
.ft
Khi tùy chọn --children được bật, tự các giá trị tổng quát của các hàm con (tức là
foo và thanh) được thêm vào cha mẹ để tính toán trẻ em trên không. Trong trường hợp này,
báo cáo có thể được hiển thị dưới dạng:
.ft C
Biểu tượng tự cho trẻ em
........ ........ ........ ...
100.00% 0.00% __libc_start_main
|
--- __libc_start_main
100.00% 0.00% chính
|
--- chủ chốt
__libc_start_main
100.00% thanh 40.00%
|
--- quán ba
chính
__libc_start_main
60.00% 60.00% foo
|
--- foo
thanh
chính
__libc_start_main
.ft
Trong đầu ra ở trên, tự trên đầu của foo (60%) đã được thêm vào trẻ em trên đầu của
thanh, chính và __libc_start_main. Tương tự như vậy, tự trên đầu của thanh (40%) đã được thêm vào
trẻ em trên đầu của chính và \ _ \ _ libc_start_main.
So \ _ \ _ libc_start_main và chính được hiển thị đầu tiên vì chúng giống nhau (100%) trẻ em
chi phí (mặc dù chúng không có tự trên cao) và họ là cha mẹ của foo và
thanh.
Kể từ v3.16, trẻ em overhead được hiển thị theo mặc định và đầu ra được sắp xếp theo
các giá trị. Các trẻ em overhead bị vô hiệu hóa bằng cách chỉ định tùy chọn --no-children trên
dòng lệnh hoặc bằng cách thêm báo cáo.trẻ em = sai or top.con = sai trong hoàn cảnh
tập tin cấu hình.
Sử dụng báo cáo hoàn hảo trực tuyến bằng các dịch vụ onworks.net