Đây là bản ghi theo dõi lệnh 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, chẳng hạn 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
trace-cmd-record - ghi lại dấu vết từ trình theo dõi nội bộ Ftrace Linux
SYNOPSIS
dấu vết cmd ghi [LỰA CHỌN] [lệnh]
MÔ TẢ
dấu vết cmd(1) lệnh record sẽ thiết lập bộ theo dõi hạt nhân Ftrace Linux để ghi lại
các plugin hoặc sự kiện được chỉ định xảy ra trong khi lệnh thực thi. Nếu không có lệnh là
được đưa ra, sau đó nó sẽ ghi lại cho đến khi người dùng nhấn Ctrl-C.
Lệnh ghi lại của trace-cmd sẽ thiết lập Ftrace tracer để bắt đầu theo dõi các
sự kiện hoặc phần bổ trợ được cung cấp trên dòng lệnh. Sau đó, nó sẽ tạo ra một số
theo dõi các quy trình (một trên mỗi CPU) sẽ bắt đầu ghi từ bộ đệm vòng nhân
thẳng vào các tệp tạm thời. Khi lệnh hoàn tất (hoặc nhấn Ctrl-C) tất cả
các tệp sẽ được kết hợp thành tệp trace.dat mà sau này có thể đọc được (xem
báo cáo theo dõi cmd(1)).
LỰA CHỌN
-p Plugin
Chỉ định một plugin theo dõi. Plugin là các trình theo dõi Ftrace đặc biệt thường làm được nhiều hơn
chỉ theo dõi một sự kiện. Các plugin phổ biến là chức năng, hàm_đồ thị, ưu tiên,
khó chịu, ưu tiênvà thức dậy. Một plugin phải được hỗ trợ bởi hạt nhân đang chạy. Đến
xem danh sách các plugin có sẵn, xem theo dõi-cmd-danh sách(1).
-e sự kiện
Chỉ định một sự kiện để theo dõi. Nhiều điểm theo dõi tĩnh khác nhau đã được thêm vào Linux
hạt nhân. Chúng được nhóm theo hệ thống con, nơi bạn có thể kích hoạt tất cả các sự kiện của một
hệ thống con hoặc chỉ định các sự kiện cụ thể để được kích hoạt. Các sự kiện có định dạng
"hệ thống con: tên sự kiện". Bạn cũng có thể chỉ định hệ thống con mà không cần
: tên sự kiện hoặc tên sự kiện không có "hệ thống con:". Sử dụng "-e Sched_switch" sẽ
kích hoạt sự kiện "Sched_switch" trong đó, "-e Schedule" sẽ kích hoạt tất cả các sự kiện trong
hệ thống con "lên lịch".
'Sự kiện' cũng có thể chứa các biểu thức toàn cầu. Đó là, "* stat *" sẽ
chọn tất cả các sự kiện (hoặc hệ thống con) có các ký tự "stat" trong
tên.
Từ khóa 'tất cả' có thể được sử dụng để kích hoạt tất cả các sự kiện.
-a
Mọi sự kiện đang được ghi đều có tệp định dạng đầu ra của nó được lưu trong tệp đầu ra
để có thể hiển thị nó sau này. Nhưng nếu các sự kiện khác được kích hoạt trong dấu vết mà không
kiến thức của trace-cmd, các định dạng của những sự kiện đó sẽ không được ghi lại và theo dõi cmd
báo cáo sẽ không thể hiển thị chúng. Nếu đúng như vậy, hãy chỉ định -a
và định dạng cho tất cả các sự kiện trong hệ thống sẽ được lưu.
-T
Bật ngăn xếp trên mỗi sự kiện. Ví dụ:
-0 [003] 58549.289091: Sched_switch: kworker / 0: 1: 0 [120] R ==> trace-cmd: 2603 [120]
-0 [003] 58549.289092: kernel_stack:
=> lịch trình (ffffffff814b260e)
=> cpu_idle (ffffffff8100a38c)
=> start_secondary (ffffffff814ab828)
--func-stack
Cho phép theo dõi ngăn xếp trên tất cả các chức năng. Lưu ý điều này chỉ áp dụng cho "chức năng"
trình theo dõi plugin và sẽ chỉ có hiệu lực nếu tùy chọn -l được sử dụng và thành công trong
hạn chế các chức năng. Nếu dấu vết chức năng không được lọc, và dấu vết ngăn xếp là
được bật, bạn có thể khóa máy trực tiếp.
-f lọc
Chỉ định một bộ lọc cho sự kiện trước đó. Điều này phải đến sau một -e. Điều này sẽ lọc
những sự kiện nào được ghi lại dựa trên nội dung của sự kiện. Lọc được chuyển cho
kernel trực tiếp nên việc lọc nào được phép có thể phụ thuộc vào phiên bản của kernel
bạn có. Về cơ bản, nó sẽ cho phép bạn sử dụng ký hiệu C để kiểm tra xem một sự kiện có nên
đã xử lý hay chưa.
==,> =, <=,>, <, &, |, && và ||
Ở trên thường an toàn để sử dụng để so sánh các trường.
-R kích hoạt
Chỉ định một trình kích hoạt cho sự kiện trước đó. Điều này phải đến sau một -e. Điều này sẽ thêm một
đã cho kích hoạt sự kiện nhất định. Để chỉ kích hoạt trình kích hoạt chứ không phải chính sự kiện,
sau đó đặt sự kiện sau -v tùy chọn.
Xem Documentation / trace / events.txt trong nguồn nhân Linux để biết thêm
thông tin về trình kích hoạt.
-v
Điều này sẽ làm cho tất cả các sự kiện được chỉ định sau nó trên dòng lệnh không được theo dõi.
Điều này rất hữu ích để chọn một hệ thống con được theo dõi nhưng lại bỏ sót các sự kiện khác nhau.
Ví dụ: "-e Schedule -v -e" * stat \ * "" sẽ kích hoạt tất cả các sự kiện trong hệ thống con lập lịch
ngoại trừ những người có "stat" trong tên của họ.
Lưu ý: tùy chọn * -v * đã được sử dụng grep(1) đảo ngược những điều sau đây
diêm.
-F
Điều này sẽ chỉ lọc tệp thực thi được đưa ra trên dòng lệnh. Nếu không có lệnh
được đưa ra, sau đó nó sẽ tự lọc (khá vô nghĩa). Sử dụng -F sẽ cho phép bạn theo dõi
chỉ các sự kiện được gây ra bởi lệnh đã cho.
-P pid
Tương tự như -F nhưng cho phép bạn chỉ định một ID quy trình để theo dõi.
-c
Được sử dụng với một trong hai -F để theo dõi quá trình 'trẻ em quá.
-C đồng hồ
Đặt đồng hồ theo dõi thành "đồng hồ".
Sử dụng dấu vết cmd(1) danh sách -C để xem có những đồng hồ nào.
-o tập tin đầu ra
Theo mặc định, báo cáo theo dõi cmd sẽ tạo Trace.Dat tập tin. Bạn có thể chỉ định một
tệp để ghi vào -o tùy chọn.
-l Tên chức năng
Điều này sẽ hạn chế chức năng và hàm_đồ thị bộ theo dõi để chỉ theo dõi những gì đã cho
Tên chức năng. Nhiều hơn một -l có thể được chỉ định trên dòng lệnh để theo dõi thêm
hơn một chức năng. Việc sử dụng hạn chế các biểu thức toàn cầu cũng được cho phép. đó là
trận đấu* để chỉ lọc các chức năng bắt đầu bằng phù hợp với. *trận đấu để chỉ lọc
các chức năng kết thúc bằng phù hợp với. *trận đấu\* để chỉ lọc các chức năng có chứa
phù hợp với.
-g Tên chức năng
Tùy chọn này dành cho plugin function_graph. Nó sẽ vẽ đồ thị của hàm đã cho. Điều đó
nghĩa là, nó sẽ chỉ theo dõi chức năng và tất cả các chức năng mà nó gọi. Bạn có thể có nhiều hơn
hơn một -g trên dòng lệnh.
-n Tên chức năng
Điều này có tác dụng ngược lại -l. Chức năng được cung cấp với -n tùy chọn sẽ không được
đã truy tìm. Điều này được ưu tiên hơn, nghĩa là nếu bạn bao gồm cùng một chức năng cho cả hai -n
và -l, nó sẽ không được truy tìm.
-d
Một số plugin theo dõi bật tính năng theo dõi chức năng theo mặc định. Giống như bộ theo dõi độ trễ.
Tùy chọn này ngăn không cho trình đánh dấu chức năng được bật khi khởi động.
-D
Tùy chọn -d sẽ cố gắng sử dụng tùy chọn theo dõi chức năng để vô hiệu hóa trình theo dõi chức năng
(nếu có), nếu không nó sẽ mặc định là tệp proc:
/ proc / sys / kernel / ftrace_enabled, nhưng sẽ không chạm vào nó nếu tùy chọn theo dõi chức năng là
có sẵn. Các -D tùy chọn sẽ vô hiệu hóa cả tệp proc ftrace_enabled cũng như
tùy chọn theo dõi chức năng nếu nó tồn tại.
Lưu ý, tính năng này vô hiệu hóa theo dõi chức năng cho tất cả người dùng, bao gồm cả người dùng
bên ngoài bộ theo dõi ftrace (stack_tracer, perf, v.v.).
-O tùy chọn
Ftrace có nhiều tùy chọn khác nhau có thể được bật hoặc tắt. Điều này cho phép bạn thiết lập
họ. Nối văn bản Không đến một tùy chọn vô hiệu hóa nó. Ví dụ: "-O nograph-time"
sẽ tắt tùy chọn Ftrace "thời gian biểu đồ".
-s khoảng thời gian
Các quy trình mà track-cmd tạo ra để ghi lại từ bộ đệm vòng cần đánh thức
ghi âm. Đặt khoảng thời gian về XNUMX sẽ làm cho các quá trình đánh thức
mỗi khi dữ liệu mới được ghi vào bộ đệm. Nhưng vì Ftrace đang ghi lại hạt nhân
hoạt động, hành động của quá trình này trở lại trạng thái ngủ có thể gây ra các sự kiện mới trong
bộ đệm chuông sẽ đánh thức quá trình sao lưu. Điều này sẽ không cần thêm dữ liệu bổ sung
vào bộ đệm vòng.
Chỉ số 'khoảng thời gian' là micro giây. Giá trị mặc định được đặt thành 1000 (1 mili giây).
Đây là thời gian mỗi quá trình ghi âm sẽ ngủ trước khi thức dậy
ghi lại bất kỳ dữ liệu mới nào đã được ghi vào bộ đệm vòng.
-r ưu tiên
Mức độ ưu tiên để chạy các chuỗi chụp tại. Trong một hệ thống bận rộn, việc ghi lại dấu vết
chủ đề có thể được khoanh vùng và các sự kiện có thể bị mất. Điều này làm tăng mức độ ưu tiên của những
luồng ưu tiên theo thời gian thực (FIFO). Nhưng sử dụng tùy chọn này một cách cẩn thận, nó cũng có thể
thay đổi hành vi của hệ thống đang được truy tìm.
-b kích thước
Điều này đặt kích thước bộ đệm vòng thành kích thước kilobyte. Bởi vì bộ đệm vòng Ftrace là
trên mỗi CPU, kích thước này là kích thước của mỗi bộ đệm vòng CPU bên trong hạt nhân. Sử dụng
"-b 10000" trên máy có 4 CPU sẽ khiến Ftrace có tổng kích thước bộ đệm là 40
Meg.
-B tên đệm
Nếu hạt nhân hỗ trợ nhiều bộ đệm, điều này sẽ thêm một bộ đệm với tên đã cho.
Nếu tên bộ đệm đã tồn tại, bộ đệm đó chỉ được đặt lại và sẽ không bị xóa
khi kết thúc thực hiện hồ sơ. Nếu bộ đệm được tạo, nó sẽ bị xóa tại
kết thúc thực hiện (trừ khi -k được thiết lập, hoặc Bắt đầu lệnh đã được sử dụng).
Sau khi tên bộ đệm được nêu, tất cả các sự kiện được thêm vào sau đó sẽ là
liên kết với bộ đệm đó. Nếu không có bộ đệm nào được chỉ định hoặc một sự kiện
được chỉ định trước tên bộ đệm, nó sẽ được liên kết với
bộ đệm chính (toplevel).
theo dõi-cmd ghi -e lập lịch -B khối -e khối -B thời gian -e hẹn giờ ngủ 1
Ở trên là sẽ kích hoạt tất cả các sự kiện lên lịch trong bộ đệm chính. Nó sẽ
sau đó tạo một phiên bản đệm 'khối' và kích hoạt tất cả các sự kiện khối bên trong
đệm đó. Một phiên bản đệm 'thời gian' được tạo và tất cả các sự kiện hẹn giờ
sẽ được kích hoạt cho sự kiện đó.
-m kích thước
Kích thước tối đa tính bằng kilobyte mà bộ đệm trên mỗi cpu phải có. Lưu ý, do làm tròn thành
kích thước trang, số có thể không hoàn toàn chính xác. Ngoài ra, điều này được thực hiện bằng cách chuyển đổi
giữa hai bộ đệm có kích thước bằng một nửa đã cho, do đó đầu ra có thể không phải là
kích thước đã cho ngay cả khi nhiều hơn nữa đã được viết.
Sử dụng điều này để tránh hết dung lượng ổ đĩa trong thời gian dài.
-M mặt nạ cpu
Đặt cpumask để theo dõi. Nó chỉ ảnh hưởng đến phiên bản đệm cuối cùng được đưa ra. Nếu như
được cung cấp trước bất kỳ thể hiện bộ đệm nào, sau đó nó sẽ ảnh hưởng đến bộ đệm chính. Giá trị
được cung cấp phải là một số hex.
theo dõi-cmd bản ghi -p chức năng -M c -B sự kiện 13 -e tất cả -M 5
Nếu dấu-M được bỏ ra ngoài, thì mặt nạ vẫn giữ nguyên. Để kích hoạt tất cả
CPU, chuyển vào giá trị '-1'.
-k
Theo mặc định, khi trace-cmd hoàn tất theo dõi, nó sẽ đặt lại bộ đệm và vô hiệu hóa
tất cả các truy tìm mà nó đã kích hoạt. Tùy chọn này giữ cho trace-cmd không vô hiệu hóa trình theo dõi
và đóng lại bộ đệm. Tùy chọn này rất hữu ích để gỡ lỗi vết cmd.
Lưu ý: thường thì trace-cmd sẽ đặt tệp "tracing_on" trở lại như cũ
là trước khi nó được gọi. Tùy chọn này sẽ đặt tệp đó thành XNUMX.
-i
Theo mặc định, nếu một sự kiện được liệt kê mà trace-cmd không tìm thấy, nó sẽ thoát với một
lỗi. Tùy chọn này sẽ chỉ bỏ qua các sự kiện được liệt kê trên dòng lệnh nhưng
không tìm thấy trên hệ thống.
-N tổ cổng
Nếu một máy khác đang chạy "theo dõi cmd nghe", tùy chọn này được sử dụng để có dữ liệu
được gửi đến máy đó với các gói UDP. Thay vì ghi vào tệp đầu ra, dữ liệu
được gửi đến một hộp từ xa. Điều này lý tưởng cho các máy nhúng có dung lượng lưu trữ ít,
hoặc có một máy duy nhất sẽ giữ tất cả dữ liệu trong một kho lưu trữ duy nhất.
Lưu ý: Tùy chọn này không được hỗ trợ với các plugin theo dõi độ trễ:
thức dậy, Wakeup_rt, irqsoff, preemptoff và preemptirqsoff
-t
Tùy chọn này được sử dụng với -N, khi cần gửi dữ liệu trực tiếp bằng TCP
gói thay vì UDP. Mặc dù TCP gần như không nhanh bằng việc gửi các gói UDP,
nhưng nó có thể cần thiết nếu mạng không đáng tin cậy, lượng dữ liệu không
chuyên sâu đó và cần đảm bảo rằng tất cả thông tin đã theo dõi đều được chuyển giao
thành công.
--ngày
Với --ngày tùy chọn, "trace-cmd" sẽ ghi dấu thời gian vào bộ đệm theo dõi sau
nó đã hoàn thành ghi âm. Sau đó, nó sẽ ánh xạ dấu thời gian đến gettimeofday, điều này sẽ
cho phép đầu ra thời gian tường từ các dấu thời gian đọc Trace.Dat tập tin.
--Hồ sơ
Với --Hồ sơ tùy chọn, "trace-cmd" sẽ cho phép theo dõi có thể được sử dụng với
báo cáo theo dõi cmd(1) - tùy chọn hồ sơ. Nếu một người đánh dấu -p không được đặt và đồ thị hàm số
độ sâu được hỗ trợ bởi hạt nhân, sau đó trình theo dõi function_graph sẽ được kích hoạt với
độ sâu của một (chỉ hiển thị nơi không gian người dùng đi vào hạt nhân). Nó cũng sẽ kích hoạt
các điểm theo dõi khác nhau với theo dõi ngăn xếp để báo cáo có thể hiển thị nơi các nhiệm vụ có
đã bị chặn trong một thời gian dài.
Xem theo dõi-cmd-hồ sơ(1) để biết thêm chi tiết và ví dụ.
-H móc sự kiện
Thêm đối sánh sự kiện tùy chỉnh để kết nối hai sự kiện bất kỳ với nhau. Khi không sử dụng với
--Hồ sơ, nó sẽ lưu tham số và điều này sẽ được sử dụng bởi báo cáo theo dõi cmd
- hồ sơ cũng vậy. Đó là:
bản ghi theo dõi cmd -H hrtimer_expire_entry, hrtimer / hrtimer_expire_exit, hrtimer, sp
báo cáo theo dõi cmd - hồ sơ
Sẽ cấu hình thời gian hrtimer_expire_entry và hrtimer_expire_ext.
Xem theo dõi-cmd-hồ sơ(1) cho định dạng.
--stderr
Có đầu ra chuyển đến stderr thay vì stdout, nhưng đầu ra của lệnh được thực thi
sẽ không được thay đổi. Điều này hữu ích nếu bạn muốn giám sát đầu ra của lệnh
đang được thực thi, nhưng không thấy đầu ra từ trace-cmd.
VÍ DỤ
Cách cơ bản để theo dõi tất cả các sự kiện:
# trace-cmd record -e all ls> / dev / null
# báo cáo theo dõi cmd
trace-cmd-13541 [003] 106260.693809: filemap_fault: address = 0x128122 offset = 0xce
trace-cmd-13543 [001] 106260.693809: kmalloc: call_site = 81128dd4 ptr = 0xffff88003dd83800 bytes_req = 768 bytes_alloc = 1024 gfp_flags = GFP_KERNEL | GFP_ZERO
ls-13545 [002] 106260.693809: kfree: call_site = 810a7abb ptr = 0x0
ls-13545 [002] 106260.693818: sys_exit_write: 0x1
Để sử dụng bộ theo dõi chức năng với theo dõi chuyển đổi lịch:
# trace-cmd record -p function -e Sched_switch ls> / dev / null
# báo cáo theo dõi cmd
ls-13587 [002] 106467.860310: function: hrtick_start_fair <- pick_next_task_fair
ls-13587 [002] 106467.860313: Sched_switch: prev_comm = trace-cmd pres_pid = 13587 pres_prio = 120 prev_state = R ==> next_comm = trace-cmd next_pid = 13583 next_prio = 120
trace-cmd-13585 [001] 106467.860314: function: native_set_pte_at <- __do_fault
trace-cmd-13586 [003] 106467.860314: function: up_read <- do_page_fault
ls-13587 [002] 106467.860317: function: __phys_addr <- Schedule
trace-cmd-13585 [001] 106467.860318: function: _raw_spin_unlock <- __do_fault
ls-13587 [002] 106467.860320: function: native_load_sp0 <- __switch_to
trace-cmd-13586 [003] 106467.860322: function: down_read_trylock <- do_page_fault
Đây là một cách hay để tìm những ngắt nào có độ trễ cao nhất:
# bản ghi theo dõi-cmd -p function_graph -e irq_handler_entry -l do_IRQ ngủ 10
# báo cáo theo dõi cmd
-0 [000] 157412.933969: funcgraph_entry: | do_IRQ () {
-0 [000] 157412.933974: irq_handler_entry: irq = 48 name = eth0
-0 [000] 157412.934004: funcgraph_exit: + 36.358 chúng tôi | }
-0 [000] 157413.895004: funcgraph_entry: | do_IRQ () {
-0 [000] 157413.895011: irq_handler_entry: irq = 48 name = eth0
-0 [000] 157413.895026: funcgraph_exit: + 24.014 chúng tôi | }
-0 [000] 157415.891762: funcgraph_entry: | do_IRQ () {
-0 [000] 157415.891769: irq_handler_entry: irq = 48 name = eth0
-0 [000] 157415.891784: funcgraph_exit: + 22.928 chúng tôi | }
-0 [000] 157415.934869: funcgraph_entry: | do_IRQ () {
-0 [000] 157415.934874: irq_handler_entry: irq = 48 name = eth0
-0 [000] 157415.934906: funcgraph_exit: + 37.512 chúng tôi | }
-0 [000] 157417.888373: funcgraph_entry: | do_IRQ () {
-0 [000] 157417.888381: irq_handler_entry: irq = 48 name = eth0
-0 [000] 157417.888398: funcgraph_exit: + 25.943 chúng tôi | }
Một ví dụ về hồ sơ:
# bản ghi trace-cmd - chế độ ngủ 1
# báo cáo theo dõi cmd - hồ sơ --comm ngủ
nhiệm vụ: sleep-21611
Sự kiện: Sched_switch: R (1) Tổng: 99442 Trung bình: 99442 Tối đa: 99442 Tối thiểu: 99442
Tổng 1: 99442 tối thiểu: 99442 tối đa: 99442 trung bình = 99442
=> ftrace_raw_event_sched_switch (0xffffffff8105f812)
=> __schedule (0xffffffff8150810a)
=> preempt_schedule (0xffffffff8150842e)
=> ___preempt_schedule (0xffffffff81273354)
=> cpu_stop_queue_work (0xffffffff810b03c5)
=> stop_one_cpu (0xffffffff810b063b)
=> Sched_exec (0xffffffff8106136d)
=> do_execve_common.isra.27 (0xffffffff81148c89)
=> do_execve (0xffffffff811490b0)
=> SyS_execve (0xffffffff811492c4)
=> return_to_handler (0xffffffff8150e3c8)
=> ste_execve (0xffffffff8150c699)
Sự kiện: Sched_switch: S (1) Tổng: 1000506680 Trung bình: 1000506680 Tối đa: 1000506680 Tối thiểu: 1000506680
Tổng 1: 1000506680 tối thiểu: 1000506680 tối đa: 1000506680 trung bình = 1000506680
=> ftrace_raw_event_sched_switch (0xffffffff8105f812)
=> __schedule (0xffffffff8150810a)
=> lên lịch (0xffffffff815084b8)
=> do_nanosleep (0xffffffff8150b22c)
=> hrtimer_nanosleep (0xffffffff8108d647)
=> SyS_nanosleep (0xffffffff8108d72c)
=> return_to_handler (0xffffffff8150e3c8)
=> traceys_phase2 (0xffffffff8150c304)
Sự kiện: Sched_wakeup: 21611 (1) Tổng: 30326 Trung bình: 30326 Tối đa: 30326 Tối thiểu: 30326
Tổng 1: 30326 tối thiểu: 30326 tối đa: 30326 trung bình = 30326
=> ftrace_raw_event_sched_wakeup_template (0xffffffff8105f653)
=> ttwu_do_wakeup (0xffffffff810606eb)
=> ttwu_do_activate.constprop.124 (0xffffffff810607c8)
=> try_to_wake_up (0xffffffff8106340a)
Sử dụng bản ghi theo dõi cmd trực tuyến bằng các dịch vụ onworks.net