Php nhận mức sử dụng cpu
Perf là một công cụ hồ sơ cho Linux 2. Hơn 6 hệ thống dựa trên trừu tượng hóa sự khác biệt về phần cứng CPU trong các phép đo hiệu suất Linux và trình bày giao diện dòng lệnh đơn giản. Perf dựa trên giao diện perf_events được xuất bởi các phiên bản gần đây của nhân Linux. Bài viết này minh họa công cụ hoàn hảo thông qua các lần chạy ví dụ. Đầu ra thu được trên Ubuntu 11. 04 hệ thống với hạt nhân 2. 6. 38-8-kết quả chung chạy trên HP 6710b với CPU Intel Core2 T7100 lõi kép). Để dễ đọc, một số đầu ra được viết tắt bằng dấu chấm lửng ([. ]) Show
lệnhCông cụ hoàn hảo cung cấp một tập hợp phong phú các lệnh để thu thập và phân tích hiệu suất và theo dõi dữ liệu. Cách sử dụng dòng lệnh gợi nhớ đến git ở chỗ có một công cụ chung, perf, thực hiện một tập hợp các lệnh. thống kê, bản ghi, báo cáo, [. ] Danh sách các lệnh được hỗ trợ perf usage: perf [--version] [--help] COMMAND [ARGS] The most commonly used perf commands are: annotate Read perf.data (created by perf record) and display annotated code archive Create archive with object files with build-ids found in perf.data file bench General framework for benchmark suites buildid-cache Manage build-id cache. buildid-list List the buildids in a perf.data file diff Read two perf.data files and display the differential profile inject Filter to augment the events stream with additional information kmem Tool to trace/measure kernel memory(slab) properties kvm Tool to trace/measure kvm guest os list List all symbolic event types lock Analyze lock events probe Define new dynamic tracepoints record Run a command and record its profile into perf.data report Read perf.data (created by perf record) and display the profile sched Tool to trace/measure scheduler properties (latencies) script Read perf.data (created by perf record) and display trace output stat Run a command and gather performance counter statistics test Runs sanity tests. timechart Tool to visualize total system behavior during a workload top System profiling tool. See 'perf help COMMAND' for more information on a specific command. Một số lệnh yêu cầu hỗ trợ đặc biệt trong kernel và có thể không khả dụng. Để có được danh sách các tùy chọn cho mỗi lệnh, chỉ cần nhập tên lệnh theo sau -h perf stat -h usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events -i, --no-inherit child tasks do not inherit counters -p, --pid stat events on existing process id -t, --tid stat events on existing thread id -a, --all-cpus system-wide collection from all CPUs -c, --scale scale/normalize counters -v, --verbose be more verbose (show counter open errors, etc) -r, --repeat repeat command and print average + stddev (max: 100) -n, --null null run - dont start any counters -B, --big-num print large numbers with thousands' separators Sự kiệnCông cụ hoàn hảo hỗ trợ danh sách các sự kiện có thể đo lường. Công cụ và giao diện hạt nhân cơ bản có thể đo lường các sự kiện đến từ các nguồn khác nhau. Chẳng hạn, một số sự kiện là bộ đếm hạt nhân thuần túy, trong trường hợp này chúng được gọi là sự kiện phần mềm. Những ví dụ bao gồm. chuyển ngữ cảnh, lỗi nhỏ Một nguồn sự kiện khác là chính bộ xử lý và Đơn vị Giám sát Hiệu suất (PMU) của nó. Nó cung cấp một danh sách các sự kiện để đo lường các sự kiện kiến trúc vi mô như số chu kỳ, các lệnh đã ngừng hoạt động, lỗi bộ đệm L1, v.v. Các sự kiện đó được gọi là sự kiện phần cứng PMU hay gọi tắt là sự kiện phần cứng. Chúng thay đổi theo từng loại và kiểu bộ xử lý Giao diện perf_events cũng cung cấp một tập hợp nhỏ các biệt danh sự kiện phần cứng phổ biến. Trên mỗi bộ xử lý, các sự kiện đó được ánh xạ vào một sự kiện thực tế do CPU cung cấp, nếu chúng tồn tại, nếu không thì sự kiện đó không thể được sử dụng. Hơi khó hiểu, chúng còn được gọi là sự kiện phần cứng và sự kiện bộ đệm phần cứng Cuối cùng, cũng có các sự kiện theo dõi được triển khai bởi cơ sở hạ tầng kernel ftrace. Những thứ đó chỉ khả dụng với 2. 6. Hạt nhân 3x và mới hơn Để có được danh sách các sự kiện được hỗ trợ perf list List of pre-defined events (to be used in -e): cpu-cycles OR cycles [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event] branch-instructions OR branches [Hardware event] branch-misses [Hardware event] bus-cycles [Hardware event] cpu-clock [Software event] task-clock [Software event] page-faults OR faults [Software event] minor-faults [Software event] major-faults [Software event] context-switches OR cs [Software event] cpu-migrations OR migrations [Software event] alignment-faults [Software event] emulation-faults [Software event] L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] L1-dcache-stores [Hardware cache event] L1-dcache-store-misses [Hardware cache event] L1-dcache-prefetches [Hardware cache event] L1-dcache-prefetch-misses [Hardware cache event] L1-icache-loads [Hardware cache event] L1-icache-load-misses [Hardware cache event] L1-icache-prefetches [Hardware cache event] L1-icache-prefetch-misses [Hardware cache event] LLC-loads [Hardware cache event] LLC-load-misses [Hardware cache event] LLC-stores [Hardware cache event] LLC-store-misses [Hardware cache event] LLC-prefetch-misses [Hardware cache event] dTLB-loads [Hardware cache event] dTLB-load-misses [Hardware cache event] dTLB-stores [Hardware cache event] dTLB-store-misses [Hardware cache event] dTLB-prefetches [Hardware cache event] dTLB-prefetch-misses [Hardware cache event] iTLB-loads [Hardware cache event] iTLB-load-misses [Hardware cache event] branch-loads [Hardware cache event] branch-load-misses [Hardware cache event] rNNN (see 'perf list --help' on how to encode it) [Raw hardware event descriptor] mem:[:access] [Hardware breakpoint] kvmmmu:kvm_mmu_pagetable_walk [Tracepoint event] [...] sched:sched_stat_runtime [Tracepoint event] sched:sched_pi_setprio [Tracepoint event] syscalls:sys_enter_socket [Tracepoint event] syscalls:sys_exit_socket [Tracepoint event] [...] Một sự kiện có thể có các sự kiện phụ (hoặc mặt nạ đơn vị). Trên một số bộ xử lý và đối với một số sự kiện, có thể kết hợp các mặt nạ đơn vị và đo lường khi một trong hai sự kiện phụ xảy ra. Cuối cùng, một sự kiện có thể có bổ ngữ, tôi. e. , bộ lọc thay đổi thời điểm hoặc cách tính sự kiện sự kiện phần cứngCác sự kiện phần cứng của PMU là CPU cụ thể và được ghi lại bởi nhà cung cấp CPU. Công cụ hoàn hảo, nếu được liên kết với thư viện libpfm4, sẽ cung cấp một số mô tả ngắn về các sự kiện. Để biết danh sách các sự kiện phần cứng PMU dành cho bộ xử lý Intel và AMD, hãy xem
Đếm với chỉ số hoàn hảoĐối với bất kỳ sự kiện nào được hỗ trợ, perf có thể duy trì số lần chạy trong quá trình thực thi quy trình. Trong các chế độ đếm, số lần xuất hiện của các sự kiện được tổng hợp đơn giản và được trình bày trên đầu ra tiêu chuẩn khi kết thúc quá trình chạy ứng dụng. Để tạo các số liệu thống kê này, hãy sử dụng lệnh stat của perf. Ví dụ perf stat -B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 records in 1000000+0 records out 512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 5,099 cache-misses # 0.005 M/sec (scaled from 66.58%) 235,384 cache-references # 0.246 M/sec (scaled from 66.56%) 9,281,660 branch-misses # 3.858 % (scaled from 33.50%) 240,609,766 branches # 251.559 M/sec (scaled from 33.66%) 1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%) 2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%) 217 page-faults # 0.000 M/sec 3 CPU-migrations # 0.000 M/sec 83 context-switches # 0.000 M/sec 956.474238 task-clock-msecs # 0.999 CPUs 0.957617512 seconds time elapsed Không có sự kiện nào được chỉ định, perf stat thu thập các sự kiện phổ biến được liệt kê ở trên. Một số là sự kiện phần mềm, chẳng hạn như chuyển đổi ngữ cảnh, một số khác là sự kiện phần cứng chung, chẳng hạn như chu kỳ. Sau dấu thăng, số liệu dẫn xuất có thể được trình bày, chẳng hạn như 'IPC' (hướng dẫn trên mỗi chu kỳ) Tùy chọn kiểm soát lựa chọn sự kiệnCó thể đo lường một hoặc nhiều sự kiện cho mỗi lần chạy công cụ hoàn hảo. Các sự kiện được chỉ định bằng tên tượng trưng của chúng, theo sau là mặt nạ đơn vị tùy chọn và công cụ sửa đổi. Tên sự kiện, mặt nạ đơn vị và công cụ sửa đổi không phân biệt chữ hoa chữ thường Theo mặc định, các sự kiện được đo ở cả cấp độ người dùng và nhân perf stat -e cycles dd if=/dev/zero of=/dev/null count=100000 Để chỉ đo lường ở cấp độ người dùng, cần phải chuyển một công cụ sửa đổi perf stat -e cycles:u dd if=/dev/zero of=/dev/null count=100000 Để đo lường cả người dùng và kernel (rõ ràng) perf stat -e cycles:uk dd if=/dev/zero of=/dev/null count=100000 sửa đổiCác sự kiện có thể tùy chọn có một công cụ sửa đổi bằng cách thêm dấu hai chấm và một hoặc nhiều công cụ sửa đổi. Công cụ sửa đổi cho phép người dùng hạn chế khi các sự kiện được tính Để đo lường một sự kiện PMU và vượt qua các công cụ sửa đổi perf stat -e instructions:u dd if=/dev/zero of=/dev/null count=100000 Trong ví dụ này, chúng tôi đang đo số lượng hướng dẫn ở cấp độ người dùng. Lưu ý rằng đối với các sự kiện thực tế, công cụ sửa đổi phụ thuộc vào mô hình PMU cơ bản. Tất cả các công cụ sửa đổi có thể được kết hợp theo ý muốn. Dưới đây là một bảng đơn giản để tóm tắt các công cụ sửa đổi phổ biến nhất cho bộ xử lý Intel và AMD x86 Công cụ sửa đổi Mô tảExampuMonitor ở cấp độ riêng tư 3, 2, 1 (người dùng)sự kiện. ukmonitor tại sự kiện private level 0 (kernel). các sự kiện của trình ảo hóa khmonitor trên môi trường ảo hóasự kiện. Máy chủ hHmonitor trên môi trường ảo hóasự kiện. Máy khách HGmonitor trên môi trường ảo hóasự kiện. GTất cả các công cụ sửa đổi ở trên được coi là một boolean (cờ) sự kiện phần cứngĐể đo một PMU thực tế như được cung cấp bởi tài liệu của nhà cung cấp CTNH, hãy chuyển mã tham số thập lục phân ________số 8nhiều sự kiệnĐể đo lường nhiều sự kiện, chỉ cần cung cấp một danh sách được phân tách bằng dấu phẩy và không có khoảng trắng perf stat -e cycles,instructions,cache-misses [...] Không có giới hạn lý thuyết về số lượng sự kiện có thể được cung cấp. Nếu có nhiều sự kiện hơn số lượng bộ đếm hw thực tế, kernel sẽ tự động ghép chúng lại. Không giới hạn số lượng sự kiện phần mềm. Có thể đo đồng thời các sự kiện đến từ các nguồn khác nhau Tuy nhiên, do có một bộ mô tả tệp được sử dụng cho mỗi sự kiện và mỗi luồng (chế độ mỗi luồng) hoặc mỗi cpu (toàn hệ thống), có thể đạt đến số lượng bộ mô tả tệp mở tối đa cho mỗi quy trình như được áp đặt bởi . Trong trường hợp đó, perf sẽ báo lỗi. Xem phần khắc phục sự cố để được trợ giúp về vấn đề này các sự kiện ghép kênh và chia tỷ lệNếu có nhiều sự kiện hơn bộ đếm, thì hạt nhân sử dụng ghép kênh theo thời gian (tần số chuyển đổi = HZ, thường là 100 hoặc 1000) để mỗi sự kiện có cơ hội truy cập vào phần cứng giám sát. Ghép kênh chỉ áp dụng cho các sự kiện PMU. Với ghép kênh, một sự kiện không được đo lường mọi lúc. Khi kết thúc quá trình chạy, công cụ sẽ chia tỷ lệ số đếm dựa trên tổng thời gian được bật so với thời gian chạy. Công thức thực tế là final_count = raw_count * time_enabled/time_running Điều này cung cấp ước tính về số lượng sẽ là bao nhiêu, nếu sự kiện được đo lường trong toàn bộ quá trình chạy. Điều rất quan trọng là phải hiểu đây là ước tính không phải là số lượng thực tế. Tùy thuộc vào khối lượng công việc, sẽ có những điểm mù có thể gây ra lỗi trong quá trình mở rộng quy mô Các sự kiện hiện đang được quản lý theo kiểu vòng tròn. Do đó, mỗi sự kiện cuối cùng sẽ có cơ hội chạy. Nếu có N bộ đếm, thì tối đa N sự kiện đầu tiên trong danh sách vòng tròn được lập trình trong PMU. Trong một số tình huống nhất định, nó có thể ít hơn vì một số sự kiện có thể không được đo cùng nhau hoặc chúng cạnh tranh cho cùng một bộ đếm. Hơn nữa, giao diện perf_events cho phép nhiều công cụ đo lường cùng một luồng hoặc CPU cùng một lúc. Mỗi sự kiện được thêm vào cùng một danh sách vòng tròn. Không có gì đảm bảo rằng tất cả các sự kiện của một công cụ được lưu trữ tuần tự trong danh sách Để tránh mở rộng quy mô (khi chỉ có một người dùng perf_event đang hoạt động), người ta có thể thử và giảm số lượng sự kiện. Bảng sau đây cung cấp số lượng bộ đếm cho một số bộ xử lý phổ biến Bộ đếm chung có thể đo bất kỳ sự kiện nào. Bộ đếm cố định chỉ có thể đo một sự kiện. Một số bộ đếm có thể được dành riêng cho các mục đích đặc biệt, chẳng hạn như bộ đếm thời gian giám sát Các ví dụ sau đây cho thấy tác dụng của việc chia tỷ lệ perf stat -h usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events -i, --no-inherit child tasks do not inherit counters -p, --pid stat events on existing process id -t, --tid stat events on existing thread id -a, --all-cpus system-wide collection from all CPUs -c, --scale scale/normalize counters -v, --verbose be more verbose (show counter open errors, etc) -r, --repeat repeat command and print average + stddev (max: 100) -n, --null null run - dont start any counters -B, --big-num print large numbers with thousands' separators0 Ở đây, không có ghép kênh và do đó không có tỷ lệ. Hãy thêm một sự kiện nữa perf stat -h usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events -i, --no-inherit child tasks do not inherit counters -p, --pid stat events on existing process id -t, --tid stat events on existing thread id -a, --all-cpus system-wide collection from all CPUs -c, --scale scale/normalize counters -v, --verbose be more verbose (show counter open errors, etc) -r, --repeat repeat command and print average + stddev (max: 100) -n, --null null run - dont start any counters -B, --big-num print large numbers with thousands' separators1 Có ghép kênh và do đó nhân rộng. Có thể thú vị khi thử và sắp xếp các sự kiện theo cách đảm bảo rằng sự kiện A và B luôn được đo cùng nhau. Mặc dù giao diện kernel perf_events cung cấp hỗ trợ cho nhóm sự kiện, công cụ perf hiện tại không Đo lường lặp đi lặp lạiCó thể sử dụng chỉ số hoàn hảo để chạy cùng một khối lượng công việc thử nghiệm nhiều lần và nhận được độ lệch chuẩn so với giá trị trung bình cho mỗi lần đếm perf stat -h usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events -i, --no-inherit child tasks do not inherit counters -p, --pid stat events on existing process id -t, --tid stat events on existing thread id -a, --all-cpus system-wide collection from all CPUs -c, --scale scale/normalize counters -v, --verbose be more verbose (show counter open errors, etc) -r, --repeat repeat command and print average + stddev (max: 100) -n, --null null run - dont start any counters -B, --big-num print large numbers with thousands' separators2 Ở đây, chế độ ngủ được chạy 5 lần và số lượng trung bình cho mỗi sự kiện, cùng với tỷ lệ std-dev/mean được in Tùy chọn kiểm soát lựa chọn môi trườngCông cụ hoàn hảo có thể được sử dụng để đếm các sự kiện trên cơ sở mỗi luồng, mỗi quy trình, mỗi cpu hoặc toàn hệ thống. Ở chế độ mỗi luồng, bộ đếm chỉ giám sát việc thực hiện một luồng được chỉ định. Khi luồng được lên lịch, quá trình giám sát sẽ dừng lại. Khi một luồng di chuyển từ bộ xử lý này sang bộ xử lý khác, bộ đếm được lưu trên bộ xử lý hiện tại và được khôi phục trên bộ xử lý mới Chế độ theo quy trình là một biến thể của chế độ theo luồng trong đó tất cả các luồng của quy trình đều được giám sát. Số lượng và mẫu được tổng hợp ở cấp độ quy trình. Giao diện perf_events cho phép kế thừa tự động trên fork() và pthread_create(). Theo mặc định, công cụ hoàn hảo kích hoạt tính kế thừa Ở chế độ mỗi cpu, tất cả các luồng chạy trên bộ xử lý được chỉ định đều được theo dõi. Do đó, số lượng và mẫu được tổng hợp trên mỗi CPU. Một sự kiện chỉ giám sát một CPU tại một thời điểm. Để giám sát trên nhiều bộ xử lý, cần tạo nhiều sự kiện. Công cụ hoàn hảo có thể tổng hợp số lượng và mẫu trên nhiều bộ xử lý. Nó cũng chỉ có thể giám sát một tập hợp con của bộ xử lý Đếm và kế thừaTheo mặc định, chỉ số hoàn hảo được tính cho tất cả các luồng của quy trình và các quy trình và luồng con tiếp theo. Điều này có thể được thay đổi bằng tùy chọn -i. Không thể có được số lượng phân tích trên mỗi luồng hoặc trên mỗi quá trình Chế độ toàn bộ bộ xử lýTheo mặc định, chỉ số hoàn hảo được tính ở chế độ mỗi luồng. Để tính trên cơ sở mỗi cpu, hãy vượt qua tùy chọn -a. Khi nó được chỉ định bởi chính nó, tất cả các bộ xử lý trực tuyến được theo dõi và số lượng được tổng hợp. Ví dụ perf stat -h usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events -i, --no-inherit child tasks do not inherit counters -p, --pid stat events on existing process id -t, --tid stat events on existing thread id -a, --all-cpus system-wide collection from all CPUs -c, --scale scale/normalize counters -v, --verbose be more verbose (show counter open errors, etc) -r, --repeat repeat command and print average + stddev (max: 100) -n, --null null run - dont start any counters -B, --big-num print large numbers with thousands' separators3 Phép đo này thu thập các chu kỳ sự kiện và hướng dẫn trên tất cả các CPU. Thời lượng của phép đo được xác định bằng cách thực hiện dd. Nói cách khác, phép đo này ghi lại việc thực thi quy trình dd và bất kỳ thứ gì khác ngoài việc chạy ở cấp độ người dùng trên tất cả các CPU Để tính thời gian của phép đo mà không tiêu thụ tích cực các chu kỳ, có thể sử dụng lệnh =/usr/bin/sleep= perf stat -h usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events -i, --no-inherit child tasks do not inherit counters -p, --pid stat events on existing process id -t, --tid stat events on existing thread id -a, --all-cpus system-wide collection from all CPUs -c, --scale scale/normalize counters -v, --verbose be more verbose (show counter open errors, etc) -r, --repeat repeat command and print average + stddev (max: 100) -n, --null null run - dont start any counters -B, --big-num print large numbers with thousands' separators4 Có thể hạn chế giám sát đối với một tập hợp con của CPU bằng tùy chọn -C. Một danh sách các CPU để giám sát có thể được thông qua. Chẳng hạn, để đo trên CPU0, CPU2 và CPU3 perf stat -h usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events -i, --no-inherit child tasks do not inherit counters -p, --pid stat events on existing process id -t, --tid stat events on existing thread id -a, --all-cpus system-wide collection from all CPUs -c, --scale scale/normalize counters -v, --verbose be more verbose (show counter open errors, etc) -r, --repeat repeat command and print average + stddev (max: 100) -n, --null null run - dont start any counters -B, --big-num print large numbers with thousands' separators5 Máy trình diễn chỉ có hai CPU, nhưng chúng tôi có thể giới hạn ở CPU 1 perf stat -h usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events -i, --no-inherit child tasks do not inherit counters -p, --pid stat events on existing process id -t, --tid stat events on existing thread id -a, --all-cpus system-wide collection from all CPUs -c, --scale scale/normalize counters -v, --verbose be more verbose (show counter open errors, etc) -r, --repeat repeat command and print average + stddev (max: 100) -n, --null null run - dont start any counters -B, --big-num print large numbers with thousands' separators6 Số lượng được tổng hợp trên tất cả các CPU được giám sát. Lưu ý cách số lượng chu kỳ và hướng dẫn được tính đều giảm một nửa khi đo một CPU Gắn vào một tiến trình đang chạyCó thể sử dụng perf để đính kèm vào một luồng hoặc quy trình đang chạy. Điều này yêu cầu quyền đính kèm cùng với chuỗi hoặc ID tiến trình. Để đính kèm vào một quy trình, tùy chọn -p phải là ID quy trình. Để đính kèm với dịch vụ sshd thường chạy trên nhiều máy Linux, hãy phát hành perf stat -h usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events -i, --no-inherit child tasks do not inherit counters -p, --pid stat events on existing process id -t, --tid stat events on existing thread id -a, --all-cpus system-wide collection from all CPUs -c, --scale scale/normalize counters -v, --verbose be more verbose (show counter open errors, etc) -r, --repeat repeat command and print average + stddev (max: 100) -n, --null null run - dont start any counters -B, --big-num print large numbers with thousands' separators7 Điều quyết định thời lượng của phép đo là lệnh thực hiện. Mặc dù chúng tôi đang đính kèm vào một quy trình, chúng tôi vẫn có thể chuyển tên của lệnh. Nó được sử dụng để đo thời gian. Không có nó, màn hình hoàn hảo cho đến khi nó bị giết. Cũng lưu ý rằng khi đính kèm vào một quy trình, tất cả các luồng của quy trình đều được theo dõi. Hơn nữa, do tính kế thừa được bật theo mặc định, các tiến trình hoặc luồng con cũng sẽ được theo dõi. Để tắt tính năng này, bạn phải sử dụng tùy chọn -i. Có thể đính kèm một luồng cụ thể trong một quy trình. Theo chủ đề, chúng tôi có nghĩa là chủ đề có thể nhìn thấy hạt nhân. Nói cách khác, một luồng có thể nhìn thấy bằng các lệnh ps hoặc top. Để đính kèm vào một chủ đề, tùy chọn -t phải được sử dụng. Chúng tôi xem rsyslogd, vì nó luôn chạy trên Ubuntu 11. 04, với nhiều chủ đề perf stat -h usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events -i, --no-inherit child tasks do not inherit counters -p, --pid stat events on existing process id -t, --tid stat events on existing thread id -a, --all-cpus system-wide collection from all CPUs -c, --scale scale/normalize counters -v, --verbose be more verbose (show counter open errors, etc) -r, --repeat repeat command and print average + stddev (max: 100) -n, --null null run - dont start any counters -B, --big-num print large numbers with thousands' separators8 Trong ví dụ này, luồng 932 không chạy trong 2 giây của phép đo. Nếu không, chúng ta sẽ thấy một giá trị đếm. Có thể gắn vào các luồng nhân, mặc dù không thực sự được khuyến nghị. Cho rằng các luồng nhân có xu hướng được ghim vào một CPU cụ thể, tốt nhất nên sử dụng chế độ toàn cpu Tùy chọn kiểm soát đầu raperf stat có thể sửa đổi đầu ra để phù hợp với các nhu cầu khác nhau In số lượng lớn đẹpĐối với hầu hết mọi người, thật khó để đọc số lớn. Với chỉ số hoàn hảo, có thể in số lượng lớn bằng cách sử dụng dấu phẩy tách hàng nghìn (kiểu Hoa Kỳ). Đối với điều đó, tùy chọn -B và ngôn ngữ chính xác cho LC_NUMERIC phải được đặt. Như ví dụ trên cho thấy, Ubuntu đã đặt chính xác thông tin ngôn ngữ. Một cuộc gọi rõ ràng trông như sau perf stat -h usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events -i, --no-inherit child tasks do not inherit counters -p, --pid stat events on existing process id -t, --tid stat events on existing thread id -a, --all-cpus system-wide collection from all CPUs -c, --scale scale/normalize counters -v, --verbose be more verbose (show counter open errors, etc) -r, --repeat repeat command and print average + stddev (max: 100) -n, --null null run - dont start any counters -B, --big-num print large numbers with thousands' separators9 Đầu ra có thể đọc được bằng máyperf stat cũng có thể in số lượng ở định dạng có thể dễ dàng nhập vào bảng tính hoặc phân tích cú pháp bằng tập lệnh. Tùy chọn -x thay đổi định dạng của đầu ra và cho phép người dùng chuyển dấu phân cách trường. Điều này giúp dễ dàng tạo đầu ra kiểu CSV perf list List of pre-defined events (to be used in -e): cpu-cycles OR cycles [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event] branch-instructions OR branches [Hardware event] branch-misses [Hardware event] bus-cycles [Hardware event] cpu-clock [Software event] task-clock [Software event] page-faults OR faults [Software event] minor-faults [Software event] major-faults [Software event] context-switches OR cs [Software event] cpu-migrations OR migrations [Software event] alignment-faults [Software event] emulation-faults [Software event] L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] L1-dcache-stores [Hardware cache event] L1-dcache-store-misses [Hardware cache event] L1-dcache-prefetches [Hardware cache event] L1-dcache-prefetch-misses [Hardware cache event] L1-icache-loads [Hardware cache event] L1-icache-load-misses [Hardware cache event] L1-icache-prefetches [Hardware cache event] L1-icache-prefetch-misses [Hardware cache event] LLC-loads [Hardware cache event] LLC-load-misses [Hardware cache event] LLC-stores [Hardware cache event] LLC-store-misses [Hardware cache event] LLC-prefetch-misses [Hardware cache event] dTLB-loads [Hardware cache event] dTLB-load-misses [Hardware cache event] dTLB-stores [Hardware cache event] dTLB-store-misses [Hardware cache event] dTLB-prefetches [Hardware cache event] dTLB-prefetch-misses [Hardware cache event] iTLB-loads [Hardware cache event] iTLB-load-misses [Hardware cache event] branch-loads [Hardware cache event] branch-load-misses [Hardware cache event] rNNN (see 'perf list --help' on how to encode it) [Raw hardware event descriptor] mem:[:access] [Hardware breakpoint] kvmmmu:kvm_mmu_pagetable_walk [Tracepoint event] [...] sched:sched_stat_runtime [Tracepoint event] sched:sched_pi_setprio [Tracepoint event] syscalls:sys_enter_socket [Tracepoint event] syscalls:sys_exit_socket [Tracepoint event] [...]0 Lưu ý rằng tùy chọn -x không tương thích với -B Lấy mẫu với bản ghi hoàn hảoCông cụ hoàn hảo có thể được sử dụng để thu thập hồ sơ trên cơ sở mỗi luồng, mỗi quy trình và mỗi cpu Có một số lệnh liên quan đến lấy mẫu. ghi lại, báo cáo, chú thích. Trước tiên, bạn phải thu thập các mẫu bằng bản ghi hoàn hảo. Điều này tạo ra một tệp đầu ra gọi là perf. dữ liệu. Sau đó, tệp đó có thể được phân tích, có thể trên một máy khác, sử dụng báo cáo hoàn hảo và các lệnh chú thích hoàn hảo. Mô hình khá giống với mô hình của OProfile Tổng quan về lấy mẫu dựa trên sự kiệnPerf_events dựa trên lấy mẫu dựa trên sự kiện. Khoảng thời gian được biểu thị bằng số lần xuất hiện của một sự kiện, không phải số lần tích tắc của bộ đếm thời gian. Một mẫu được ghi lại khi bộ đếm lấy mẫu bị tràn, tôi. e. , kết thúc tốt đẹp từ 2^64 trở lại 0. Không có PMU nào triển khai bộ đếm phần cứng 64 bit, nhưng perf_events mô phỏng các bộ đếm đó trong phần mềm Cách perf_events mô phỏng bộ đếm 64 bit bị giới hạn trong việc thể hiện các khoảng thời gian lấy mẫu bằng cách sử dụng số bit trong bộ đếm phần cứng thực tế. Nếu giá trị này nhỏ hơn 64, hạt nhân sẽ âm thầm cắt bớt khoảng thời gian trong trường hợp này. Do đó, tốt nhất là khoảng thời gian luôn nhỏ hơn 2^31 nếu chạy trên hệ thống 32 bit Khi tràn bộ đếm, hạt nhân ghi lại thông tin, tôi. e. , một mẫu, về việc thực hiện chương trình. Nội dung được ghi lại tùy thuộc vào loại phép đo. Tất cả điều này được chỉ định bởi người dùng và công cụ. Nhưng thông tin chính phổ biến trong tất cả các mẫu là con trỏ lệnh, tôi. e. chương trình ở đâu khi nó bị gián đoạn Lấy mẫu dựa trên ngắt giới thiệu đường trượt trên bộ xử lý hiện đại. Điều đó có nghĩa là con trỏ lệnh được lưu trữ trong mỗi mẫu chỉ định nơi chương trình bị ngắt để xử lý ngắt PMU, không phải nơi bộ đếm thực sự bị tràn, i. e. , vị trí của nó vào cuối giai đoạn lấy mẫu. Trong một số trường hợp, khoảng cách giữa hai điểm đó có thể là vài chục lệnh hoặc hơn nếu có các nhánh được lấy. Khi chương trình không thể thực hiện tiến trình chuyển tiếp, hai vị trí đó thực sự giống hệt nhau. Vì lý do này, cần phải cẩn thận khi giải thích hồ sơ sự kiện mặc định. đếm chu kỳTheo mặc định, bản ghi hoàn hảo sử dụng sự kiện chu kỳ làm sự kiện lấy mẫu. Đây là một sự kiện phần cứng chung được ánh xạ tới một sự kiện PMU dành riêng cho phần cứng bởi hạt nhân. Đối với Intel, nó được ánh xạ tới UNHALTED_CORE_CYCLES. Sự kiện này không duy trì mối tương quan liên tục với thời gian khi có sự thay đổi tần số CPU. Intel cung cấp một sự kiện khác, được gọi là UNHALTED_REFERENCE_CYCLES nhưng sự kiện này hiện KHÔNG khả dụng với perf_events Trên các hệ thống AMD, sự kiện được ánh xạ tới CPU_CLK_UNHALTED và sự kiện này cũng có thể thay đổi tần số. Trên bất kỳ bộ xử lý Intel hoặc AMD nào, sự kiện chu kỳ không được tính khi bộ xử lý không hoạt động, tôi. e. , khi nó gọi mwait() Thời gian và tỷ lệGiao diện perf_events cho phép hai chế độ thể hiện khoảng thời gian lấy mẫu
Công cụ perf mặc định là tỷ lệ trung bình. Nó được đặt thành 1000Hz hoặc 1000 mẫu/giây. Điều đó có nghĩa là hạt nhân đang tự động điều chỉnh khoảng thời gian lấy mẫu để đạt được tốc độ trung bình mục tiêu. Việc điều chỉnh trong thời gian được báo cáo trong dữ liệu hồ sơ thô. Ngược lại, với chế độ còn lại, khoảng thời gian lấy mẫu do người dùng đặt và không thay đổi giữa các mẫu. Hiện tại không có hỗ trợ cho ngẫu nhiên thời gian lấy mẫu Thu mẫuTheo mặc định, bản ghi hoàn hảo hoạt động ở chế độ mỗi luồng, với chế độ kế thừa được bật. Chế độ đơn giản nhất trông như sau, khi thực hiện một chương trình đơn giản có các vòng lặp bận perf list List of pre-defined events (to be used in -e): cpu-cycles OR cycles [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event] branch-instructions OR branches [Hardware event] branch-misses [Hardware event] bus-cycles [Hardware event] cpu-clock [Software event] task-clock [Software event] page-faults OR faults [Software event] minor-faults [Software event] major-faults [Software event] context-switches OR cs [Software event] cpu-migrations OR migrations [Software event] alignment-faults [Software event] emulation-faults [Software event] L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] L1-dcache-stores [Hardware cache event] L1-dcache-store-misses [Hardware cache event] L1-dcache-prefetches [Hardware cache event] L1-dcache-prefetch-misses [Hardware cache event] L1-icache-loads [Hardware cache event] L1-icache-load-misses [Hardware cache event] L1-icache-prefetches [Hardware cache event] L1-icache-prefetch-misses [Hardware cache event] LLC-loads [Hardware cache event] LLC-load-misses [Hardware cache event] LLC-stores [Hardware cache event] LLC-store-misses [Hardware cache event] LLC-prefetch-misses [Hardware cache event] dTLB-loads [Hardware cache event] dTLB-load-misses [Hardware cache event] dTLB-stores [Hardware cache event] dTLB-store-misses [Hardware cache event] dTLB-prefetches [Hardware cache event] dTLB-prefetch-misses [Hardware cache event] iTLB-loads [Hardware cache event] iTLB-load-misses [Hardware cache event] branch-loads [Hardware cache event] branch-load-misses [Hardware cache event] rNNN (see 'perf list --help' on how to encode it) [Raw hardware event descriptor] mem:[:access] [Hardware breakpoint] kvmmmu:kvm_mmu_pagetable_walk [Tracepoint event] [...] sched:sched_stat_runtime [Tracepoint event] sched:sched_pi_setprio [Tracepoint event] syscalls:sys_enter_socket [Tracepoint event] syscalls:sys_exit_socket [Tracepoint event] [...]1 Ví dụ trên thu thập các mẫu cho các chu kỳ sự kiện ở tốc độ mục tiêu trung bình là 1000Hz. Các mẫu kết quả được lưu vào perf. tập tin dữ liệu. Nếu tệp đã tồn tại, bạn có thể được nhắc chuyển -f để ghi đè lên tệp. Để đưa kết quả vào một tệp cụ thể, hãy sử dụng tùy chọn -o CẢNH BÁO. Số lượng mẫu được báo cáo chỉ là ước tính. Nó không phản ánh số lượng mẫu thực tế được thu thập. Ước tính dựa trên số byte được ghi vào perf. tệp dữ liệu và kích thước mẫu tối thiểu. Nhưng kích thước của mỗi mẫu phụ thuộc vào loại phép đo. Một số mẫu được tạo bởi chính bộ đếm nhưng những mẫu khác được ghi lại để hỗ trợ tương quan ký hiệu trong quá trình xử lý hậu kỳ, ví dụ:. g. thông tin , mmap() Để có được số lượng mẫu chính xác cho sự hoàn hảo. tệp dữ liệu, có thể sử dụng lệnh báo cáo hoàn hảo perf list List of pre-defined events (to be used in -e): cpu-cycles OR cycles [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event] branch-instructions OR branches [Hardware event] branch-misses [Hardware event] bus-cycles [Hardware event] cpu-clock [Software event] task-clock [Software event] page-faults OR faults [Software event] minor-faults [Software event] major-faults [Software event] context-switches OR cs [Software event] cpu-migrations OR migrations [Software event] alignment-faults [Software event] emulation-faults [Software event] L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] L1-dcache-stores [Hardware cache event] L1-dcache-store-misses [Hardware cache event] L1-dcache-prefetches [Hardware cache event] L1-dcache-prefetch-misses [Hardware cache event] L1-icache-loads [Hardware cache event] L1-icache-load-misses [Hardware cache event] L1-icache-prefetches [Hardware cache event] L1-icache-prefetch-misses [Hardware cache event] LLC-loads [Hardware cache event] LLC-load-misses [Hardware cache event] LLC-stores [Hardware cache event] LLC-store-misses [Hardware cache event] LLC-prefetch-misses [Hardware cache event] dTLB-loads [Hardware cache event] dTLB-load-misses [Hardware cache event] dTLB-stores [Hardware cache event] dTLB-store-misses [Hardware cache event] dTLB-prefetches [Hardware cache event] dTLB-prefetch-misses [Hardware cache event] iTLB-loads [Hardware cache event] iTLB-load-misses [Hardware cache event] branch-loads [Hardware cache event] branch-load-misses [Hardware cache event] rNNN (see 'perf list --help' on how to encode it) [Raw hardware event descriptor] mem:[:access] [Hardware breakpoint] kvmmmu:kvm_mmu_pagetable_walk [Tracepoint event] [...] sched:sched_stat_runtime [Tracepoint event] sched:sched_pi_setprio [Tracepoint event] syscalls:sys_enter_socket [Tracepoint event] syscalls:sys_exit_socket [Tracepoint event] [...]2 Để chỉ định tỷ lệ tùy chỉnh, cần sử dụng tùy chọn -F. Chẳng hạn, để lấy mẫu các hướng dẫn sự kiện chỉ ở cấp độ người dùng và perf list List of pre-defined events (to be used in -e): cpu-cycles OR cycles [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event] branch-instructions OR branches [Hardware event] branch-misses [Hardware event] bus-cycles [Hardware event] cpu-clock [Software event] task-clock [Software event] page-faults OR faults [Software event] minor-faults [Software event] major-faults [Software event] context-switches OR cs [Software event] cpu-migrations OR migrations [Software event] alignment-faults [Software event] emulation-faults [Software event] L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] L1-dcache-stores [Hardware cache event] L1-dcache-store-misses [Hardware cache event] L1-dcache-prefetches [Hardware cache event] L1-dcache-prefetch-misses [Hardware cache event] L1-icache-loads [Hardware cache event] L1-icache-load-misses [Hardware cache event] L1-icache-prefetches [Hardware cache event] L1-icache-prefetch-misses [Hardware cache event] LLC-loads [Hardware cache event] LLC-load-misses [Hardware cache event] LLC-stores [Hardware cache event] LLC-store-misses [Hardware cache event] LLC-prefetch-misses [Hardware cache event] dTLB-loads [Hardware cache event] dTLB-load-misses [Hardware cache event] dTLB-stores [Hardware cache event] dTLB-store-misses [Hardware cache event] dTLB-prefetches [Hardware cache event] dTLB-prefetch-misses [Hardware cache event] iTLB-loads [Hardware cache event] iTLB-load-misses [Hardware cache event] branch-loads [Hardware cache event] branch-load-misses [Hardware cache event] rNNN (see 'perf list --help' on how to encode it) [Raw hardware event descriptor] mem:[:access] [Hardware breakpoint] kvmmmu:kvm_mmu_pagetable_walk [Tracepoint event] [...] sched:sched_stat_runtime [Tracepoint event] sched:sched_pi_setprio [Tracepoint event] syscalls:sys_enter_socket [Tracepoint event] syscalls:sys_exit_socket [Tracepoint event] [...]3____24 Thay vào đó, để chỉ định khoảng thời gian lấy mẫu, phải sử dụng tùy chọn -c. Chẳng hạn, để thu thập một mẫu sau mỗi 2000 lần xuất hiện của các hướng dẫn sự kiện chỉ ở cấp độ người dùng perf list List of pre-defined events (to be used in -e): cpu-cycles OR cycles [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event] branch-instructions OR branches [Hardware event] branch-misses [Hardware event] bus-cycles [Hardware event] cpu-clock [Software event] task-clock [Software event] page-faults OR faults [Software event] minor-faults [Software event] major-faults [Software event] context-switches OR cs [Software event] cpu-migrations OR migrations [Software event] alignment-faults [Software event] emulation-faults [Software event] L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] L1-dcache-stores [Hardware cache event] L1-dcache-store-misses [Hardware cache event] L1-dcache-prefetches [Hardware cache event] L1-dcache-prefetch-misses [Hardware cache event] L1-icache-loads [Hardware cache event] L1-icache-load-misses [Hardware cache event] L1-icache-prefetches [Hardware cache event] L1-icache-prefetch-misses [Hardware cache event] LLC-loads [Hardware cache event] LLC-load-misses [Hardware cache event] LLC-stores [Hardware cache event] LLC-store-misses [Hardware cache event] LLC-prefetch-misses [Hardware cache event] dTLB-loads [Hardware cache event] dTLB-load-misses [Hardware cache event] dTLB-stores [Hardware cache event] dTLB-store-misses [Hardware cache event] dTLB-prefetches [Hardware cache event] dTLB-prefetch-misses [Hardware cache event] iTLB-loads [Hardware cache event] iTLB-load-misses [Hardware cache event] branch-loads [Hardware cache event] branch-load-misses [Hardware cache event] rNNN (see 'perf list --help' on how to encode it) [Raw hardware event descriptor] mem:[:access] [Hardware breakpoint] kvmmmu:kvm_mmu_pagetable_walk [Tracepoint event] [...] sched:sched_stat_runtime [Tracepoint event] sched:sched_pi_setprio [Tracepoint event] syscalls:sys_enter_socket [Tracepoint event] syscalls:sys_exit_socket [Tracepoint event] [...]5 Chế độ toàn bộ bộ xử lýỞ chế độ chế độ trên mỗi cpu, các mẫu được thu thập cho tất cả các luồng đang thực thi trên CPU được giám sát. Để chuyển bản ghi hiệu suất ở chế độ mỗi cpu, phải sử dụng tùy chọn -a. Theo mặc định ở chế độ này, TẤT CẢ các CPU trực tuyến đều được giám sát. Có thể giới hạn một tập hợp con CPU bằng tùy chọn -C, như đã giải thích với chỉ số hoàn hảo ở trên Để lấy mẫu theo chu kỳ ở cả cấp độ người dùng và nhân trong 5 giây trên tất cả các CPU với tốc độ mục tiêu trung bình là 1000 mẫu/giây perf list List of pre-defined events (to be used in -e): cpu-cycles OR cycles [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event] branch-instructions OR branches [Hardware event] branch-misses [Hardware event] bus-cycles [Hardware event] cpu-clock [Software event] task-clock [Software event] page-faults OR faults [Software event] minor-faults [Software event] major-faults [Software event] context-switches OR cs [Software event] cpu-migrations OR migrations [Software event] alignment-faults [Software event] emulation-faults [Software event] L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] L1-dcache-stores [Hardware cache event] L1-dcache-store-misses [Hardware cache event] L1-dcache-prefetches [Hardware cache event] L1-dcache-prefetch-misses [Hardware cache event] L1-icache-loads [Hardware cache event] L1-icache-load-misses [Hardware cache event] L1-icache-prefetches [Hardware cache event] L1-icache-prefetch-misses [Hardware cache event] LLC-loads [Hardware cache event] LLC-load-misses [Hardware cache event] LLC-stores [Hardware cache event] LLC-store-misses [Hardware cache event] LLC-prefetch-misses [Hardware cache event] dTLB-loads [Hardware cache event] dTLB-load-misses [Hardware cache event] dTLB-stores [Hardware cache event] dTLB-store-misses [Hardware cache event] dTLB-prefetches [Hardware cache event] dTLB-prefetch-misses [Hardware cache event] iTLB-loads [Hardware cache event] iTLB-load-misses [Hardware cache event] branch-loads [Hardware cache event] branch-load-misses [Hardware cache event] rNNN (see 'perf list --help' on how to encode it) [Raw hardware event descriptor] mem:[:access] [Hardware breakpoint] kvmmmu:kvm_mmu_pagetable_walk [Tracepoint event] [...] sched:sched_stat_runtime [Tracepoint event] sched:sched_pi_setprio [Tracepoint event] syscalls:sys_enter_socket [Tracepoint event] syscalls:sys_exit_socket [Tracepoint event] [...]6 Phân tích mẫu với báo cáo hoàn hảoCác mẫu được thu thập bởi bản ghi perf được lưu vào một tệp nhị phân có tên là perf theo mặc định. dữ liệu. Lệnh báo cáo hoàn hảo đọc tệp này và tạo một hồ sơ thực thi ngắn gọn. Theo mặc định, các mẫu được sắp xếp theo chức năng có nhiều mẫu nhất trước tiên. Có thể tùy chỉnh thứ tự sắp xếp và do đó xem dữ liệu theo cách khác perf list List of pre-defined events (to be used in -e): cpu-cycles OR cycles [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event] branch-instructions OR branches [Hardware event] branch-misses [Hardware event] bus-cycles [Hardware event] cpu-clock [Software event] task-clock [Software event] page-faults OR faults [Software event] minor-faults [Software event] major-faults [Software event] context-switches OR cs [Software event] cpu-migrations OR migrations [Software event] alignment-faults [Software event] emulation-faults [Software event] L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] L1-dcache-stores [Hardware cache event] L1-dcache-store-misses [Hardware cache event] L1-dcache-prefetches [Hardware cache event] L1-dcache-prefetch-misses [Hardware cache event] L1-icache-loads [Hardware cache event] L1-icache-load-misses [Hardware cache event] L1-icache-prefetches [Hardware cache event] L1-icache-prefetch-misses [Hardware cache event] LLC-loads [Hardware cache event] LLC-load-misses [Hardware cache event] LLC-stores [Hardware cache event] LLC-store-misses [Hardware cache event] LLC-prefetch-misses [Hardware cache event] dTLB-loads [Hardware cache event] dTLB-load-misses [Hardware cache event] dTLB-stores [Hardware cache event] dTLB-store-misses [Hardware cache event] dTLB-prefetches [Hardware cache event] dTLB-prefetch-misses [Hardware cache event] iTLB-loads [Hardware cache event] iTLB-load-misses [Hardware cache event] branch-loads [Hardware cache event] branch-load-misses [Hardware cache event] rNNN (see 'perf list --help' on how to encode it) [Raw hardware event descriptor] mem:[:access] [Hardware breakpoint] kvmmmu:kvm_mmu_pagetable_walk [Tracepoint event] [...] sched:sched_stat_runtime [Tracepoint event] sched:sched_pi_setprio [Tracepoint event] syscalls:sys_enter_socket [Tracepoint event] syscalls:sys_exit_socket [Tracepoint event] [...]7 Cột 'Chi phí chung' cho biết tỷ lệ phần trăm của các mẫu tổng thể được thu thập trong chức năng tương ứng. Cột thứ hai báo cáo quá trình thu thập các mẫu. Ở chế độ mỗi luồng/mỗi quá trình, đây luôn là tên của lệnh được giám sát. Nhưng ở chế độ toàn cpu, lệnh có thể thay đổi. Cột thứ ba hiển thị tên của hình ảnh ELF nơi lấy mẫu. Nếu một chương trình được liên kết động, thì chương trình này có thể hiển thị tên của thư viện được chia sẻ. Khi các mẫu đến từ kernel, thì tên hình ảnh ELF giả [kernel. kallsyms] được sử dụng. Cột thứ tư cho biết mức đặc quyền mà tại đó mẫu được lấy, i. e. khi chương trình đang chạy khi nó bị gián đoạn
Cột cuối cùng hiển thị tên biểu tượng Có nhiều cách khác nhau để trình bày mẫu, tôi. e. , sắp xếp. Để sắp xếp theo đối tượng dùng chung, tôi. e. , dso perf list List of pre-defined events (to be used in -e): cpu-cycles OR cycles [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event] branch-instructions OR branches [Hardware event] branch-misses [Hardware event] bus-cycles [Hardware event] cpu-clock [Software event] task-clock [Software event] page-faults OR faults [Software event] minor-faults [Software event] major-faults [Software event] context-switches OR cs [Software event] cpu-migrations OR migrations [Software event] alignment-faults [Software event] emulation-faults [Software event] L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] L1-dcache-stores [Hardware cache event] L1-dcache-store-misses [Hardware cache event] L1-dcache-prefetches [Hardware cache event] L1-dcache-prefetch-misses [Hardware cache event] L1-icache-loads [Hardware cache event] L1-icache-load-misses [Hardware cache event] L1-icache-prefetches [Hardware cache event] L1-icache-prefetch-misses [Hardware cache event] LLC-loads [Hardware cache event] LLC-load-misses [Hardware cache event] LLC-stores [Hardware cache event] LLC-store-misses [Hardware cache event] LLC-prefetch-misses [Hardware cache event] dTLB-loads [Hardware cache event] dTLB-load-misses [Hardware cache event] dTLB-stores [Hardware cache event] dTLB-store-misses [Hardware cache event] dTLB-prefetches [Hardware cache event] dTLB-prefetch-misses [Hardware cache event] iTLB-loads [Hardware cache event] iTLB-load-misses [Hardware cache event] branch-loads [Hardware cache event] branch-load-misses [Hardware cache event] rNNN (see 'perf list --help' on how to encode it) [Raw hardware event descriptor] mem:[:access] [Hardware breakpoint] kvmmmu:kvm_mmu_pagetable_walk [Tracepoint event] [...] sched:sched_stat_runtime [Tracepoint event] sched:sched_pi_setprio [Tracepoint event] syscalls:sys_enter_socket [Tracepoint event] syscalls:sys_exit_socket [Tracepoint event] [...]8 Tùy chọn kiểm soát đầu raĐể làm cho đầu ra dễ phân tích cú pháp hơn, có thể thay đổi dấu tách cột thành một ký tự perf list List of pre-defined events (to be used in -e): cpu-cycles OR cycles [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event] branch-instructions OR branches [Hardware event] branch-misses [Hardware event] bus-cycles [Hardware event] cpu-clock [Software event] task-clock [Software event] page-faults OR faults [Software event] minor-faults [Software event] major-faults [Software event] context-switches OR cs [Software event] cpu-migrations OR migrations [Software event] alignment-faults [Software event] emulation-faults [Software event] L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] L1-dcache-stores [Hardware cache event] L1-dcache-store-misses [Hardware cache event] L1-dcache-prefetches [Hardware cache event] L1-dcache-prefetch-misses [Hardware cache event] L1-icache-loads [Hardware cache event] L1-icache-load-misses [Hardware cache event] L1-icache-prefetches [Hardware cache event] L1-icache-prefetch-misses [Hardware cache event] LLC-loads [Hardware cache event] LLC-load-misses [Hardware cache event] LLC-stores [Hardware cache event] LLC-store-misses [Hardware cache event] LLC-prefetch-misses [Hardware cache event] dTLB-loads [Hardware cache event] dTLB-load-misses [Hardware cache event] dTLB-stores [Hardware cache event] dTLB-store-misses [Hardware cache event] dTLB-prefetches [Hardware cache event] dTLB-prefetch-misses [Hardware cache event] iTLB-loads [Hardware cache event] iTLB-load-misses [Hardware cache event] branch-loads [Hardware cache event] branch-load-misses [Hardware cache event] rNNN (see 'perf list --help' on how to encode it) [Raw hardware event descriptor] mem:[:access] [Hardware breakpoint] kvmmmu:kvm_mmu_pagetable_walk [Tracepoint event] [...] sched:sched_stat_runtime [Tracepoint event] sched:sched_pi_setprio [Tracepoint event] syscalls:sys_enter_socket [Tracepoint event] syscalls:sys_exit_socket [Tracepoint event] [...]9 Tùy chọn kiểm soát báo cáo hạt nhânCông cụ hoàn hảo không biết cách trích xuất các ký hiệu từ hình ảnh hạt nhân đã nén (vmlinuz). Do đó, người dùng phải chuyển đường dẫn của kernel không nén bằng tùy chọn -k perf stat -B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 records in 1000000+0 records out 512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 5,099 cache-misses # 0.005 M/sec (scaled from 66.58%) 235,384 cache-references # 0.246 M/sec (scaled from 66.56%) 9,281,660 branch-misses # 3.858 % (scaled from 33.50%) 240,609,766 branches # 251.559 M/sec (scaled from 33.66%) 1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%) 2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%) 217 page-faults # 0.000 M/sec 3 CPU-migrations # 0.000 M/sec 83 context-switches # 0.000 M/sec 956.474238 task-clock-msecs # 0.999 CPUs 0.957617512 seconds time elapsed0 Tất nhiên, điều này chỉ hoạt động nếu hạt nhân được biên dịch thành các ký hiệu gỡ lỗi Chế độ toàn bộ bộ xử lýỞ chế độ trên mỗi cpu, các mẫu được ghi lại từ tất cả các luồng đang chạy trên các CPU được giám sát. Do đó, các mẫu từ nhiều quy trình khác nhau có thể được thu thập. Chẳng hạn, nếu chúng tôi giám sát trên tất cả các CPU trong 5 giây perf stat -B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 records in 1000000+0 records out 512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 5,099 cache-misses # 0.005 M/sec (scaled from 66.58%) 235,384 cache-references # 0.246 M/sec (scaled from 66.56%) 9,281,660 branch-misses # 3.858 % (scaled from 33.50%) 240,609,766 branches # 251.559 M/sec (scaled from 33.66%) 1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%) 2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%) 217 page-faults # 0.000 M/sec 3 CPU-migrations # 0.000 M/sec 83 context-switches # 0.000 M/sec 956.474238 task-clock-msecs # 0.999 CPUs 0.957617512 seconds time elapsed1 Khi ký hiệu được in dưới dạng địa chỉ thập lục phân, điều này là do hình ảnh ELF không có bảng ký hiệu. Điều này xảy ra khi các tệp nhị phân bị tước. Chúng ta cũng có thể sắp xếp theo cpu. Điều này có thể hữu ích để xác định xem khối lượng công việc có được cân bằng tốt hay không perf stat -B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 records in 1000000+0 records out 512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 5,099 cache-misses # 0.005 M/sec (scaled from 66.58%) 235,384 cache-references # 0.246 M/sec (scaled from 66.56%) 9,281,660 branch-misses # 3.858 % (scaled from 33.50%) 240,609,766 branches # 251.559 M/sec (scaled from 33.66%) 1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%) 2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%) 217 page-faults # 0.000 M/sec 3 CPU-migrations # 0.000 M/sec 83 context-switches # 0.000 M/sec 956.474238 task-clock-msecs # 0.999 CPUs 0.957617512 seconds time elapsed2 tính toán chi phíChi phí hoạt động có thể được hiển thị trong hai cột là 'Trẻ em' và 'Bản thân' khi perf thu thập chuỗi cuộc gọi. Chi phí 'bản thân' được tính đơn giản bằng cách cộng tất cả các giá trị khoảng thời gian của mục nhập - thường là một hàm (ký hiệu). Đây là giá trị mà perf hiển thị theo truyền thống và tổng của tất cả các giá trị chi phí 'tự' phải là 100% Chi phí 'con' được tính bằng cách cộng tất cả các giá trị chu kỳ của các hàm con để nó có thể hiển thị tổng chi phí của các hàm cấp cao hơn ngay cả khi chúng không thực thi trực tiếp nhiều. 'Trẻ em' ở đây có nghĩa là các hàm được gọi từ một hàm (cha) khác Có thể gây nhầm lẫn khi tổng của tất cả các giá trị chi phí 'con' vượt quá 100% vì mỗi giá trị trong số chúng đã là sự tích lũy chi phí 'bản thân' của các hàm 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ó nhiều chi phí nhất ngay cả khi các mẫu trải rộng trên trẻ em Hãy xem xét ví dụ sau; perf stat -B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 records in 1000000+0 records out 512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 5,099 cache-misses # 0.005 M/sec (scaled from 66.58%) 235,384 cache-references # 0.246 M/sec (scaled from 66.56%) 9,281,660 branch-misses # 3.858 % (scaled from 33.50%) 240,609,766 branches # 251.559 M/sec (scaled from 33.66%) 1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%) 2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%) 217 page-faults # 0.000 M/sec 3 CPU-migrations # 0.000 M/sec 83 context-switches # 0.000 M/sec 956.474238 task-clock-msecs # 0.999 CPUs 0.957617512 seconds time elapsed3 Trong trường hợp này, 'foo' là con của 'bar' và 'bar' là con trực tiếp của 'main' nên 'foo' cũng là con của 'main'. Nói cách khác, 'main' là cấp độ gốc của 'foo' và 'bar' và 'bar' là cấp độ gốc của 'foo' Giả sử tất cả các mẫu chỉ được ghi trong 'foo' và 'bar'. Khi nó được ghi lại bằng chuỗi cuộc gọi, đầ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ỉ dành cho bản thân) của báo cáo hoàn hảo perf stat -B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 records in 1000000+0 records out 512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 5,099 cache-misses # 0.005 M/sec (scaled from 66.58%) 235,384 cache-references # 0.246 M/sec (scaled from 66.56%) 9,281,660 branch-misses # 3.858 % (scaled from 33.50%) 240,609,766 branches # 251.559 M/sec (scaled from 33.66%) 1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%) 2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%) 217 page-faults # 0.000 M/sec 3 CPU-migrations # 0.000 M/sec 83 context-switches # 0.000 M/sec 956.474238 task-clock-msecs # 0.999 CPUs 0.957617512 seconds time elapsed4 Khi tùy chọn --children được bật, các giá trị 'tự' của các hàm con (i. e. 'foo' và 'bar') được thêm vào cha mẹ để tính chi phí 'con'. Trong trường hợp này, báo cáo có thể được hiển thị dưới dạng perf stat -B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 records in 1000000+0 records out 512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 5,099 cache-misses # 0.005 M/sec (scaled from 66.58%) 235,384 cache-references # 0.246 M/sec (scaled from 66.56%) 9,281,660 branch-misses # 3.858 % (scaled from 33.50%) 240,609,766 branches # 251.559 M/sec (scaled from 33.66%) 1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%) 2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%) 217 page-faults # 0.000 M/sec 3 CPU-migrations # 0.000 M/sec 83 context-switches # 0.000 M/sec 956.474238 task-clock-msecs # 0.999 CPUs 0.957617512 seconds time elapsed5 Trong đầu ra ở trên, chi phí 'tự' của 'foo' (60%) đã được thêm vào chi phí 'con' của 'bar', 'main' và '__libc_start_main'. Tương tự như vậy, chi phí 'tự' của 'thanh' (40%) đã được thêm vào chi phí 'con' của 'chính' và '__libc_start_main' Vì vậy, '__libc_start_main' và 'main' được hiển thị đầu tiên vì chúng có cùng (100%) chi phí 'con' (mặc dù chúng không có chi phí 'self') và chúng là cha của 'foo' và 'bar' kể từ v3. 16 chi phí 'con' được hiển thị theo mặc định và đầu ra được sắp xếp theo giá trị của nó. Chi phí 'trẻ em' 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 = false' hoặc 'top. children = false' trong tệp cấu hình perf Phân tích mức nguồn với chú thích hoàn hảoCó thể đi sâu vào cấp độ hướng dẫn với chú thích hoàn hảo. Đối với điều đó, bạn cần gọi perf chú thích với tên của lệnh để chú thích. Tất cả các chức năng với các mẫu sẽ được phân tách và mỗi hướng dẫn sẽ có tỷ lệ phần trăm mẫu tương đối được báo cáo perf stat -B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 records in 1000000+0 records out 512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 5,099 cache-misses # 0.005 M/sec (scaled from 66.58%) 235,384 cache-references # 0.246 M/sec (scaled from 66.56%) 9,281,660 branch-misses # 3.858 % (scaled from 33.50%) 240,609,766 branches # 251.559 M/sec (scaled from 33.66%) 1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%) 2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%) 217 page-faults # 0.000 M/sec 3 CPU-migrations # 0.000 M/sec 83 context-switches # 0.000 M/sec 956.474238 task-clock-msecs # 0.999 CPUs 0.957617512 seconds time elapsed6 Cột đầu tiên báo cáo tỷ lệ phần trăm mẫu cho chức năng ==noploop()== được chụp cho hướng dẫn đó. Như đã giải thích trước đó, bạn nên diễn giải thông tin này một cách cẩn thận chú thích perf có thể tạo thông tin cấp mã nguồn nếu ứng dụng được biên dịch bằng -ggdb. Đoạn mã sau hiển thị đầu ra nhiều thông tin hơn cho cùng một lần thực thi noploop khi được biên dịch với thông tin gỡ lỗi này perf stat -B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 records in 1000000+0 records out 512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 5,099 cache-misses # 0.005 M/sec (scaled from 66.58%) 235,384 cache-references # 0.246 M/sec (scaled from 66.56%) 9,281,660 branch-misses # 3.858 % (scaled from 33.50%) 240,609,766 branches # 251.559 M/sec (scaled from 33.66%) 1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%) 2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%) 217 page-faults # 0.000 M/sec 3 CPU-migrations # 0.000 M/sec 83 context-switches # 0.000 M/sec 956.474238 task-clock-msecs # 0.999 CPUs 0.957617512 seconds time elapsed7 Sử dụng chú thích perf trên mã kernelCông cụ hoàn hảo không biết cách trích xuất các biểu tượng từ hình ảnh hạt nhân đã nén (vmlinuz). Như trong trường hợp báo cáo hoàn hảo, người dùng phải chuyển đường dẫn của kernel không nén bằng tùy chọn -k perf stat -B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 records in 1000000+0 records out 512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 5,099 cache-misses # 0.005 M/sec (scaled from 66.58%) 235,384 cache-references # 0.246 M/sec (scaled from 66.56%) 9,281,660 branch-misses # 3.858 % (scaled from 33.50%) 240,609,766 branches # 251.559 M/sec (scaled from 33.66%) 1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%) 2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%) 217 page-faults # 0.000 M/sec 3 CPU-migrations # 0.000 M/sec 83 context-switches # 0.000 M/sec 956.474238 task-clock-msecs # 0.999 CPUs 0.957617512 seconds time elapsed8 Một lần nữa, điều này chỉ hoạt động nếu kernel được biên dịch thành các ký hiệu gỡ lỗi Phân tích trực tiếp với perf topCông cụ hoàn hảo có thể hoạt động ở chế độ tương tự như công cụ hàng đầu của Linux, in các chức năng được lấy mẫu trong thời gian thực. Sự kiện lấy mẫu mặc định là các chu kỳ và thứ tự mặc định là số lượng mẫu giảm dần trên mỗi ký hiệu, do đó perf top hiển thị các chức năng chiếm phần lớn thời gian. Theo mặc định, perf top hoạt động ở chế độ toàn bộ xử lý, giám sát tất cả các CPU trực tuyến ở cả cấp độ người dùng và nhân. Chỉ có thể giám sát một tập hợp con của CPU bằng tùy chọn -C perf stat -B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 records in 1000000+0 records out 512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 5,099 cache-misses # 0.005 M/sec (scaled from 66.58%) 235,384 cache-references # 0.246 M/sec (scaled from 66.56%) 9,281,660 branch-misses # 3.858 % (scaled from 33.50%) 240,609,766 branches # 251.559 M/sec (scaled from 33.66%) 1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%) 2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%) 217 page-faults # 0.000 M/sec 3 CPU-migrations # 0.000 M/sec 83 context-switches # 0.000 M/sec 956.474238 task-clock-msecs # 0.999 CPUs 0.957617512 seconds time elapsed9 Theo mặc định, cột đầu tiên hiển thị tổng số mẫu kể từ khi bắt đầu chạy. Bằng cách nhấn phím 'Z', điều này có thể được thay đổi để in số lượng mẫu kể từ lần làm mới cuối cùng. Nhớ lại rằng sự kiện chu kỳ đếm chu kỳ CPU khi bộ xử lý không ở trạng thái tạm dừng, tôi. e. không nhàn rỗi. Do đó, điều này không tương đương với thời gian đồng hồ treo tường. Hơn nữa, sự kiện này cũng có thể thay đổi tần số Cũng có thể đi sâu vào các chức năng đơn lẻ để xem hướng dẫn nào có nhiều mẫu nhất. Để đi sâu vào một chức năng xác định, nhấn phím 's' và nhập tên của chức năng. Ở đây chúng tôi đã chọn chức năng hàng đầu noploop (không hiển thị ở trên) perf stat -e cycles dd if=/dev/zero of=/dev/null count=1000000 Đo điểm chuẩn với băng ghế hoàn hảoLệnh băng ghế dự bị hoàn hảo bao gồm một số điểm chuẩn vi mô đa luồng để thực hiện các hệ thống con khác nhau trong nhân Linux và các cuộc gọi hệ thống. Điều này cho phép tin tặc dễ dàng nhấn mạnh và đo lường tác động của các thay đổi, do đó giúp giảm thiểu hiệu suất hồi quy Nó cũng phục vụ như một khung chuẩn chung, cho phép các nhà phát triển dễ dàng tạo các trường hợp thử nghiệm và tích hợp một cách minh bạch và sử dụng hệ thống con công cụ hoàn hảo phong phú lịch trình. Điểm chuẩn của bộ lập lịch biểuĐo hoạt động của đường ống (2) và ổ cắm (2) giữa nhiều tác vụ. Cho phép đo lường hiệu suất chuyển ngữ cảnh của luồng so với quy trình perf stat -e cycles dd if=/dev/zero of=/dev/null count=1000001 mem. Điểm chuẩn truy cập bộ nhớnuma. Lập lịch NUMA và điểm chuẩn MMcầu lông. Điểm chuẩn nhấn mạnh FutexGiải quyết các khía cạnh chi tiết hơn của việc triển khai futexes của kernel. Nó chủ yếu hữu ích cho việc hack kernel. Nó hiện hỗ trợ các hoạt động đánh thức và yêu cầu/chờ đợi, cũng như nhấn mạnh sơ đồ băm cho cả futex riêng tư và chia sẻ. Một ví dụ chạy cho các luồng nCPU, mỗi xử lý 1024 futex đo logic băm perf stat -e cycles dd if=/dev/zero of=/dev/null count=1000002 Khắc phục sự cố và mẹoPhần này liệt kê một số mẹo để tránh những cạm bẫy phổ biến khi sử dụng perf Mở giới hạn tệpThiết kế của giao diện hạt nhân perf_event được sử dụng bởi công cụ perf sao cho nó sử dụng một bộ mô tả tệp cho mỗi sự kiện trên mỗi luồng hoặc trên mỗi cpu Trên hệ thống 16 chiều, khi bạn làm perf stat -e cycles dd if=/dev/zero of=/dev/null count=1000003 Bạn đang tạo 16 sự kiện một cách hiệu quả và do đó sử dụng 16 bộ mô tả tệp Ở chế độ mỗi luồng, khi bạn đang lấy mẫu một quy trình có 100 luồng trên cùng một hệ thống 16 chiều perf stat -e cycles dd if=/dev/zero of=/dev/null count=1000004 Sau đó, khi tất cả các luồng được tạo, bạn sẽ có 100 * 1 (sự kiện) * 16 (cpus) = 1600 bộ mô tả tệp. Perf tạo một phiên bản của sự kiện trên mỗi CPU. Chỉ khi luồng thực thi trên CPU đó thì sự kiện mới đo lường hiệu quả. Cách tiếp cận này thực thi cục bộ bộ đệm lấy mẫu và do đó giảm thiểu chi phí lấy mẫu. Khi kết thúc quá trình chạy, công cụ sẽ tổng hợp tất cả các mẫu vào một tệp đầu ra duy nhất Trong trường hợp perf bị hủy do lỗi 'too many open files', có một vài giải pháp
tăng giới hạn tệp mởSiêu người dùng có thể ghi đè giới hạn tệp mở cho mỗi quá trình bằng cách sử dụng lệnh dựng sẵn shell ulimit perf stat -e cycles dd if=/dev/zero of=/dev/null count=1000005 Lệnh ghi perf lưu trong perf. dữ liệu định danh duy nhất cho tất cả các hình ảnh ELF có liên quan đến phép đo. Ở chế độ mỗi luồng, điều này bao gồm tất cả các hình ảnh ELF của các quy trình được giám sát. Ở chế độ toàn cpu, nó bao gồm tất cả các tiến trình đang chạy trên hệ thống. Các mã định danh duy nhất đó được tạo bởi trình liên kết nếu tùy chọn -Wl,--build-id được sử dụng. Vì vậy, chúng được gọi là build-id. Id bản dựng là một công cụ hữu ích khi liên kết địa chỉ hướng dẫn với hình ảnh ELF. Để trích xuất tất cả các mục nhập id bản dựng được sử dụng trong một buổi hoàn thiện. tập tin dữ liệu, vấn đề perf stat -e cycles dd if=/dev/zero of=/dev/null count=1000006 Bộ đệm id bản dựngVào cuối mỗi lần chạy, lệnh bản ghi perf cập nhật bộ đệm id bản dựng, với các mục mới cho hình ảnh ELF có mẫu. Bộ đệm chứa
Cho rằng id bản dựng là bất biến, chúng xác định duy nhất một tệp nhị phân. Nếu tệp nhị phân được biên dịch lại, id bản dựng mới sẽ được tạo và bản sao mới của hình ảnh ELF được lưu trong bộ đệm. Bộ đệm được lưu trên đĩa trong một thư mục theo mặc định là $HOME/. gỡ lỗi. Có một tệp cấu hình chung ==/etc/perfconfig== có thể được sysadmin sử dụng để chỉ định một thư mục chung thay thế cho bộ đệm perf stat -e cycles dd if=/dev/zero of=/dev/null count=1000007 Trong một số trường hợp nhất định, có thể tắt hoàn toàn các bản cập nhật bộ nhớ cache của id bản dựng. Để làm được điều đó, bạn phải chuyển tùy chọn -N để hoàn thành bản ghi perf stat -e cycles dd if=/dev/zero of=/dev/null count=1000008 Kiểm soát truy cậpĐối với một số sự kiện, cần phải root để gọi công cụ hoàn hảo. Tài liệu này giả định rằng người dùng có quyền root. Nếu bạn cố chạy perf mà không đủ đặc quyền, nó sẽ báo perf stat -e cycles dd if=/dev/zero of=/dev/null count=1000009 Các tình huống khácTính năng này cho biết vị trí và thời gian một chương trình đang ngủ hoặc chờ một thứ gì đó Bước đầu tiên là thu thập dữ liệu. Chúng tôi cần thu thập các sự kiện sched_stat và sched_switch. Các sự kiện Sched_stat là không đủ, bởi vì chúng được tạo trong ngữ cảnh của một tác vụ, sẽ đánh thức một tác vụ đích (e. g. phát hành một khóa). Chúng tôi cần cùng một sự kiện nhưng với chuỗi cuộc gọi của tác vụ đích. Chuỗi cuộc gọi này có thể được trích xuất từ sự kiện sched_switch trước đó Bước thứ hai là hợp nhất các sự kiện sched_start và sched_switch. Nó có thể được thực hiện với sự trợ giúp của "perf injection -s" perf stat -e cycles:u dd if=/dev/zero of=/dev/null count=1000000 perf stat -e cycles:u dd if=/dev/zero of=/dev/null count=1000001 Các nguồn lực khácmã nguồn LinuxMã nguồn của công cụ hoàn hảo sống trong cây nhân Linux bên dưới /tools/perf. Bạn sẽ tìm thấy nhiều tài liệu hơn trong. /công cụ/hoàn hảo/Tài liệu. Để xây dựng các trang, trang thông tin, v.v., hãy cài đặt các công cụ này
và đưa ra một make install-man từ /tools/perf. Bước này cũng được yêu cầu để có thể chạy perf help Hướng dẫn này được điều chỉnh từ hướng dẫn của Stephane Eranian tại Google, với sự đóng góp của Eric Gouriou, Tipp Moseley và Willem de Bruijn. Nội dung gốc được nhập vào wiki. hoàn hảo. Google. com được cung cấp theo CreativeCommons ghi công sharealike 3. 0 giấy phép |