| TRACE-CMD-REPORT(1) | libtracefs Manual | TRACE-CMD-REPORT(1) |
نام (NAME)
trace-cmd-report - نمایش ردگیری ایجادشده توسط trace-cmd record به صورت ASCII
خلاصه دستور (SYNOPSIS)
trace-cmd report [OPTIONS] [input-file [input-file ...]]
توضیحات (DESCRIPTION)
دستور trace-cmd(1) report گزارشی خوانا برای انسان از ردگیری (trace) ایجادشده توسط trace-cmd record در خروجی ارائه میدهد.
گزینهها (OPTIONS)
-i input-file
-e
-f
-P
-E
--events
--event regex
trace-cmd report --event sys:read
دستور بالا فقط با رویدادهایی مطابقت دارد که نام سامانهٔ آنها شامل "sys" و نام رویداد شامل "read" باشد.
trace-cmd report --event read
دستور بالا با تمام رویدادهایی که نامشان شامل "read" است مطابقت خواهد داشت. همچنین ممکن است تمام رویدادهای سامانهای را که نام آن شامل "read" است نیز فهرست کند.
--check-events
-t
-F filter
قالب فیلتر به این صورت است:
<events> ':' <filter>
<events> = SYSTEM'/'EVENT | SYSTEM | EVENT | <events> ',' <events>
<filter> = EVENT_FIELD <op> <value> | <filter> '&&' <filter> |
<filter> '||' <filter> | '(' <filter> ')' | '!' <filter>
<op> = '==' | '!=' | '>=' | '<=' | '>' | '<' | '&' | '|' | '^' |
'+' | '-' | '*' | '/' | '%'
<value> = NUM | STRING | EVENT_FIELD
عبارت SYSTEM نام سامانهای است که فیلتر بر روی آن اعمال میشود. اگر EVENT ذکر نشود، فیلتر بر تمام رویدادهای ذیل آن SYSTEM اعمال خواهد شد. اگر تنها از یک رشته بدون کاراکتر '/' برای تفکیک بین SYSTEM و EVENT استفاده شود، در این صورت فیلتر بر روی تمام سامانهها و رویدادهایی که با رشتهٔ دادهشده مطابقت دارند اعمال خواهد شد.
مقدار STRING با نقلقولهای تکی یا جفت تعریف میشود (نقلقول تکی باید با نقلقول تکی، و جفت با جفت پایان یابد). فاصلههای خالی درون نقلقولها نادیده گرفته نمیشوند.
نمایش یک SYSTEM یا EVENT همچنین میتواند یک عبارت باقاعده (regular expression) تعریفشده توسط 'regcomp(3)' باشد.
مقدار EVENT_FIELD نام فیلدی از یک رویداد است که در حال پالایش (فیلتر) شدن است. اگر رویداد شامل EVENT_FIELD نباشد، آن بخش از معادله نادرست (false) در نظر گرفته خواهد شد.
-F 'sched : bogus == 1 || common_pid == 2'
عبارت "bogus == 1" همواره به FALSE ارزیابی میشود زیرا هیچ رویدادی دارای فیلدی به نام "bogus" نیست، اما "common_pid == 2" همچنان ارزیابی خواهد شد زیرا تمام رویدادها دارای فیلد "common_pid" هستند. هر رویداد "sched" که توسط فرایندی با PID برابر با ۲ ردگیری شده باشد نشان داده خواهد شد.
توجه داشته باشید، EVENT_FIELD نام فیلدی است که توسط قالب رویداد نشان داده میشود (همانطور که با *--events* نمایش داده میشود)، نه آنچه در خروجی یافت میشود. اگر خروجی "ID:foo" را نشان دهد اما فیلدی که "foo" به آن تعلق دارد در قالب رویداد "name" نامیده شده باشد، باید از "name" در فیلتر استفاده شود. همین امر درباره مقادیر نیز صادق است. اگر مقدار نمایشدادهشده به یک نماد رشتهای تبدیل شده باشد، فیلتر مقدار اصلی را بررسی میکند و نه مقدار نمایشدادهشده را. برای مثال، جهت فیلتر کردن روی تمام وظایفی که در هنگام تعویض زمینه (context switch) در وضعیت در حال اجرا بودند:
-F 'sched/sched_switch : prev_state==0'
اگرچه خروجی 'R' را نمایش میدهد، اما داشتن 'prev_stat=="R"' کار نخواهد کرد.
نکته: شما همچنین میتوانید 'COMM' را به عنوان یک EVENT_FIELD مشخص کنید. این کار از نام وظیفه (یا comm) رکورد برای مقایسه استفاده میکند. برای مثال، برای فیلتر کردن و کنار گذاشتن تمام وظایف "trace-cmd":
-F '.*:COMM != "trace-cmd"'
-I
-S
-v
-v -F 'sched/sched_switch : prev_state == 0'
هیچ رویداد sched_switch را که دارای prev_state برابر با 0 باشد نمایش نخواهد داد. حذف کردن *-v* باعث میشود که تنها همان رویدادها چاپ شوند.
-T
-V
-L
-n event-re
--profile
برای جزئیات و مثالهای بیشتر، trace-cmd-profile(1) را ببینید.
-G
-H event-hooks
برای ساختار، trace-cmd-profile(1) را ببینید.
-R
-r event-re
-l
<idle>-0 0d.h1. 106467.859747: function: ktime_get <-- tick_check_idle
عبارت 0d.h1. این اطلاعات را نشان میدهد.
با یک عدد شروع میشود. این نشاندهندهٔ شماره CPU است که رویداد روی آن رخ داده است.
نویسهٔ دوم یکی از موارد زیر است:
'd' - وقفهها غیرفعال هستند '.' - وقفهها فعال هستند 'X' - دارای پرچمهایی است که هنوز برای trace-cmd شناختهشده نیستند
نویسهٔ سوم پرچم «نیاز به زمانبندی مجدد» (need rescheduling) است.
'N' - یک زمانبندی برای اجرا تنظیم شده است '.' - هیچ زمانبندیای تنظیم نشده است
نویسهٔ چهارم نشاندهندهٔ بافتی است که رویداد هنگام رخ دادن در آن قرار داشته است
'h' - بافت وقفه سختافزاری 's' - بافت وقفه نرمافزاری 'H' - بافت وقفه سختافزاری که یک وقفه نرمافزاری را قطع کرده است '.' - بافت عادی
مورد بعدی یک عدد است (باید کمتر از ۱۰ باشد) که عمق پیشدستی (preemption depth) را نشان میدهد (تعداد دفعاتی که preempt_disable() بدون preempt_enable() فراخوانی شده است). '.' به معنای فعال بودن پیشدستی است.
اگر lockdep روی سامانه فعال باشد، عدد نشاندهنده عمق قفلهایی است که هنگام تحریک رویداد نگهداشته شدهاند. '.' به معنای عدم نگهداری هیچ قفلی است.
-w
-q
-O
-O plugin:var=value
عبارتهای 'plugin:' و '=value' اختیاری هستند. برای گزینههای بولی (boolean) میتوان مقدار را نادیده گرفت. اگر 'plugin:' حذف شود، هر متغیری که در تمام افزونهها مطابقت داشته باشد تنظیم خواهد شد.
مثال: -O fgraph:tailprint
--cpu <cpu list>
مثال: "--cpu 0,3" - نمایش رویدادها از پردازندههای 0 و 3
"--cpu 2-4" - نمایش رویدادها از پردازندههای 2، 3 و 4
--cpus
--first-event
--last-event
--stat
--uname
--version
--ts-offset offset
trace-cmd report -i host.dat --ts-offset -1000 -i guest.dat
این دستور هنگام ادغام با رویدادهای guest.dat، مقدار 1000 واحد زمانی را از تمامی رویدادهای میزبان کسر میکند. توجه داشته باشید که این واحدها، واحدهای خام ثبتشده در ردگیری هستند. اگر واحدها نانوثانیه باشند، عمل جمع (یا تفریق) آفست برحسب نانوثانیه خواهد بود، حتی اگر واحدهای نمایشدادهشده میکروثانیه باشند.
--ts2secs HZ
این گزینه بر روی هر فایل trace.dat که پس از آن با *-i* مشخص شود تأثیر میگذارد. اگر این گزینه پیش از هر گزینه *-i* قرار گیرد، آن مقدار به ضریب تبدیل پیشفرض برای تمام فایلهای دیگر trace.dat بدل خواهد شد. اگر گزینه --ts2secs دیگری پس از یک فایل trace.dat همراه با *-i* ظاهر شود، آن گزینه مقدار پیشفرض را بازنویسی میکند.
مثال: روی یک رایانه 3.4 گیگاهرتزی
trace-cmd record -p function -C x86-tsc
trace-cmd report --ts2ns 3400000000
گزارش، برچسبهای زمانی چرخهها (cycles) را به یک نمایش ثانیهای خوانا تبدیل خواهد کرد. تفکیکپذیری پیشفرض نمایش، میکروثانیه است، مگر اینکه از *-t* استفاده شود.
مقدار --ts-offset حتی با این گزینه نیز همچنان باید در واحدهای برچسب زمانی خام باشد. این آفست نیز تبدیل خواهد شد.
--ts-diff
--ts-check
--nodate
--raw-ts
--align-ts
--verbose[=level]
مثال: فعالسازی تمام لاگهای بحرانی، خطا و هشدار
trace-cmd report --verbose=warning
با استفاده از یک فایل trace.dat که با دستور زیر ایجاد شده است:
# trace-cmd record -p function -e all sleep 5
گزارش پیشفرض نشان میدهد:
# trace-cmd report
cpus=8
sleep-89142 [001] ...1. 162573.215752: function: mutex_unlock
sleep-89142 [001] ...1. 162573.215754: function: __mutex_unlock_slowpath
sleep-89142 [001] ..... 162573.215755: lock_release: 0xffffffff855e7448 trace_types_lock
sleep-89142 [001] ..... 162573.215757: lock_release: 0xffff892a01b54420 sb_writers
sleep-89142 [001] ...1. 162573.215757: function: preempt_count_add
sleep-89142 [001] ...1. 162573.215758: preempt_disable: caller=vfs_write+0x147 parent=vfs_write+0x147
sleep-89142 [001] ...2. 162573.215758: function: rcu_read_lock_any_held
sleep-89142 [001] ...2. 162573.215759: function: rcu_lockdep_current_cpu_online
sleep-89142 [001] ...2. 162573.215759: function: preempt_count_sub
sleep-89142 [001] ...1. 162573.215760: preempt_enable: caller=vfs_write+0x176 parent=vfs_write+0x176
sleep-89142 [001] ...1. 162573.215761: function: __f_unlock_pos
sleep-89142 [001] ...1. 162573.215761: function: mutex_unlock
[...]
نکته در مورد ستون سوم:
sleep-89998 [002] ...1. 223087.004011: lock_acquire: 0xffff892b7cf32c20 lock sleep-89998 [002] ...1. 223087.004011: lock_acquire: 0xffffffff85517f00 read rcu_read_lock <idle>-0 [005] dNh2. 223087.004012: sched_wakeup: trace-cmd:89992 [120] CPU:005 sleep-89998 [002] ...1. 223087.004012: lock_acquire: 0xffffffff85517f00 read rcu_read_lock sleep-89998 [002] ...1. 223087.004013: lock_release: 0xffffffff85517f00 rcu_read_lock
این ستون از همان ساختاری پیروی میکند که در فایل /sys/kernel/tracing/trace در هسته لینوکس نشان داده شده است.
# cat /sys/kernel/tracing/trace # tracer: nop # # entries-in-buffer/entries-written: 0/0 #P:8 # # _-----=> irqs-off/BH-disabled # / _----=> need-resched # | / _---=> hardirq/softirq # || / _--=> preempt-depth # ||| / _-=> migrate-disable # |||| / delay # TASK-PID CPU# ||||| TIMESTAMP FUNCTION # | | | ||||| | |
مشابه توضیحات دادهشده در گزینه -l است. بهطوری که موقعیت نخست:
'.' - به معنی فعال بودن وقفهها و bottom halfها است 'd' - به معنی غیرفعال بودن وقفهها و bottom halfها است
موقعیت دوم:
'N' - به این معنی است که پرچم "NEED_RESCHED" تنظیم شده و هسته باید
در سریعترین زمان ممکن زمانبندی را انجام دهد.
موقعیت سوم:
'.' - در زمینه عادی/قابل زمانبندی 's' - در زمینه وقفه نرمافزاری (soft interrupt) 'h' - در زمینه وقفه سختافزاری (hard interrupt) 'H' - در زمینه وقفه سختافزاری که یک وقفه نرمافزاری را قطع کرده است
جایگاه چهارم عمق preempt count است:
'pass:[.]' - قابلیت preemption فعال است '#' - عمق غیرفعال بودن preemption (تودرتو)
ستون پنجم شمارنده غیرفعال بودن مهاجرت (migration disabled counter) است:
'.' - مهاجرت (migration) فعال است '#' - عمق غیرفعال بودن مهاجرت (تودرتو)
برای دیدن همهچیز بهجز ردگیریهای تابع (function):
# trace-cmd report -v -F 'function'
cpus=8
sleep-89142 [001] ..... 162573.215755: lock_release: 0xffffffff855e7448 trace_types_lock
sleep-89142 [001] ..... 162573.215757: lock_release: 0xffff892a01b54420 sb_writers
sleep-89142 [001] ...1. 162573.215758: preempt_disable: caller=vfs_write+0x147 parent=vfs_write+0x147
sleep-89142 [001] ...1. 162573.215760: preempt_enable: caller=vfs_write+0x176 parent=vfs_write+0x176
sleep-89142 [001] ..... 162573.215762: lock_release: 0xffff892a19601ac8 &f->f_pos_lock
sleep-89142 [001] ..... 162573.215764: sys_exit: NR 1 = 1
sleep-89142 [001] ..... 162573.215766: sys_exit_write: 0x1
sleep-89142 [001] d.... 162573.215767: irq_disable: caller=syscall_exit_to_user_mode+0x15 parent=0x0
sleep-89142 [001] d.... 162573.215768: irq_enable: caller=syscall_exit_to_user_mode+0xed parent=0x0
sleep-89142 [001] ..... 162573.215773: lock_acquire: 0xffff892a4ad29318 read &mm->mmap_lock
sleep-89142 [001] ..... 162573.215775: lock_release: 0xffff892a4ad29318 &mm->mmap_lock
sleep-89142 [001] ..... 162573.215778: lock_acquire: 0xffff892a4ad29318 read &mm->mmap_lock
[...]
برای مشاهده تنها فراخوانیهای kmalloc که بزرگتر از ۱۰۰۰ بایت بودهاند:
# trace-cmd report -F 'kmalloc: bytes_req > 1000'
cpus=8
sleep-89142 [001] ..... 162573.219401: kmalloc: (tomoyo_find_next_domain+0x84) call_site=tomoyo_find_next_domain+0x84 ptr=0xffff892a176c0000 bytes_req=4096 bytes_alloc=4096 gfp_flags=0xd40 node=-1 accounted=false
sleep-89142 [001] ..... 162573.219511: kmalloc: (tomoyo_realpath_from_path+0x42) call_site=tomoyo_realpath_from_path+0x42 ptr=0xffff892a176c6000 bytes_req=4096 bytes_alloc=4096 gfp_flags=0xc40 node=-1 accounted=false
trace-cmd-89135 [000] ..... 162573.244301: kmalloc: (kvmalloc_node_noprof+0x43) call_site=kvmalloc_node_noprof+0x43 ptr=0xffff892a63f84000 bytes_req=8193 bytes_alloc=16384 gfp_flags=0x12dc0 node=-1 accounted=false
trace-cmd-89135 [000] ..... 162573.244471: kmalloc: (kvmalloc_node_noprof+0x43) call_site=kvmalloc_node_noprof+0x43 ptr=0xffff892a63f84000 bytes_req=8193 bytes_alloc=16384 gfp_flags=0x12dc0 node=-1 accounted=false
trace-cmd-89134 [007] ..... 162573.267148: kmalloc: (kvmalloc_node_noprof+0x43) call_site=kvmalloc_node_noprof+0x43 ptr=0xffff892a628d4000 bytes_req=8193 bytes_alloc=16384 gfp_flags=0x12dc0 node=-1 accounted=false
trace-cmd-89134 [007] ..... 162573.267403: kmalloc: (kvmalloc_node_noprof+0x43) call_site=kvmalloc_node_noprof+0x43 ptr=0xffff892a628d4000 bytes_req=8193 bytes_alloc=16384 gfp_flags=0x12dc0 node=-1 accounted=false
trace-cmd-89141 [002] ..... 162573.290583: kmalloc: (kvmalloc_node_noprof+0x43) call_site=kvmalloc_node_noprof+0x43 ptr=0xffff892a12d3c000 bytes_req=8193 bytes_alloc=16384 gfp_flags=0x12dc0 node=-1 accounted=false
trace-cmd-89141 [002] ..... 162573.290754: kmalloc: (kvmalloc_node_noprof+0x43) call_site=kvmalloc_node_noprof+0x43 ptr=0xffff892a12d3c000 bytes_req=8193 bytes_alloc=16384 gfp_flags=0x12dc0 node=-1 accounted=false
trace-cmd-89139 [004] ..... 162573.784636: kmalloc: (kvmalloc_node_noprof+0x43) call_site=kvmalloc_node_noprof+0x43 ptr=0xffff892a63d70000 bytes_req=8193 bytes_alloc=16384 gfp_flags=0x12dc0 node=-1 accounted=false
[...]
# trace-cmd report -F 'sched: prev_state == 0' -F 'sched_waking'
cpus=8
sleep-89142 [001] d.h6. 162573.215941: sched_waking: comm=trace-cmd pid=89135 prio=120 target_cpu=000
<idle>-0 [000] dNh7. 162573.216219: sched_waking: comm=trace-cmd pid=89134 prio=120 target_cpu=007
<idle>-0 [000] d..2. 162573.216423: sched_switch: swapper/0:0 [120] R ==> trace-cmd:89135 [120]
<idle>-0 [007] dNh7. 162573.216511: sched_waking: comm=trace-cmd pid=89141 prio=120 target_cpu=002
<idle>-0 [007] d..2. 162573.216698: sched_switch: swapper/7:0 [120] R ==> trace-cmd:89134 [120]
<idle>-0 [002] dNh7. 162573.216776: sched_waking: comm=trace-cmd pid=89136 prio=120 target_cpu=001
<idle>-0 [002] d..2. 162573.216951: sched_switch: swapper/2:0 [120] R ==> trace-cmd:89141 [120]
sleep-89142 [001] d.s3. 162573.231260: sched_waking: comm=rcu_preempt pid=17 prio=120 target_cpu=002
<idle>-0 [002] d..2. 162573.231568: sched_switch: swapper/2:0 [120] R ==> rcu_preempt:17 [120]
sleep-89142 [001] d.s2. 162573.240425: sched_waking: comm=rcu_preempt pid=17 prio=120 target_cpu=002
<idle>-0 [002] d..2. 162573.240719: sched_switch: swapper/2:0 [120] R ==> rcu_preempt:17 [120]
sleep-89142 [001] d.h7. 162573.241983: sched_waking: comm=trace-cmd pid=89135 prio=120 target_cpu=000
مورد بالا به کمی توضیح نیاز دارد. فیلتر، زیرسیستم «sched» را مشخص میکند که شامل تمام رویدادهای زمانبندی است. هر رویدادی که فیلد قالبی «prev_state» را نداشته باشد، آن عبارات را FALSE ارزیابی میکند و هیچ تطابقی تولید نخواهد کرد. تنها رویداد sched_switch با آن تطابق خواهد داشت. گزینه دوم «-F» رویداد sched_waking را در بر خواهد گرفت.
# trace-cmd report -w -F 'sched_switch, sched_wakeup.*'
[...]
trace-cmd-89141 [007] d..2. 162583.263060: sched_switch: trace-cmd:89141 [120] R ==> trace-cmd:89135 [120]
kworker/u36:1-51219 [000] d..2. 162583.266957: sched_switch: kworker/u36:1:51219 [120] R ==> kworker/u33:2:49692 [120] Latency: 4024.977 usecs
trace-cmd-89135 [007] d..2. 162583.267109: sched_switch: trace-cmd:89135 [120] R ==> trace-cmd:89141 [120]
trace-cmd-89139 [001] d..2. 162583.267147: sched_switch: trace-cmd:89139 [120] D ==> swapper/1:0 [120]
kworker/u36:2-88857 [002] d..2. 162583.267913: sched_switch: kworker/u36:2:88857 [120] R ==> trace-cmd:89136 [120]
kworker/u33:2-49692 [000] d..2. 162583.268334: sched_switch: kworker/u33:2:49692 [120] I ==> kworker/u36:1:51219 [120]
<idle>-0 [001] dNh4. 162583.268747: sched_wakeup: sleep:89142 [120] CPU:001
<idle>-0 [001] d..2. 162583.268833: sched_switch: swapper/1:0 [120] R ==> sleep:89142 [120] Latency: 85.751 usecs
sleep-89142 [001] d.h4. 162583.269022: sched_wakeup: trace-cmd:89139 [120] CPU:001
trace-cmd-89141 [007] d..2. 162583.271009: sched_switch: trace-cmd:89141 [120] R ==> trace-cmd:89135 [120]
trace-cmd-89136 [002] d..2. 162583.271020: sched_switch: trace-cmd:89136 [120] R ==> kworker/u36:2:88857 [120]
kworker/u36:2-88857 [002] d..2. 162583.271079: sched_switch: kworker/u36:2:88857 [120] I ==> trace-cmd:89136 [120]
trace-cmd-89137 [006] d.h2. 162583.273950: sched_wakeup: trace-cmd:89133 [120] CPU:006
sleep-89142 [001] d..2. 162583.274064: sched_switch: sleep:89142 [120] Z ==> trace-cmd:89139 [120] Latency: 5042.285 usecs
trace-cmd-89135 [007] d..2. 162583.275043: sched_switch: trace-cmd:89135 [120] R ==> trace-cmd:89141 [120]
trace-cmd-89137 [006] d..2. 162583.275158: sched_switch: trace-cmd:89137 [120] R ==> trace-cmd:89133 [120] Latency: 1207.327 usecs
trace-cmd-89136 [002] dNh3. 162583.275229: sched_wakeup: rcu_preempt:17 [120] CPU:002
trace-cmd-89136 [002] d..2. 162583.275294: sched_switch: trace-cmd:89136 [120] R ==> rcu_preempt:17 [120] Latency: 65.255 usecs
rcu_preempt-17 [002] d..2. 162583.275399: sched_switch: rcu_preempt:17 [120] I ==> trace-cmd:89136 [120]
Average wakeup latency: 20082.580 usecs
Maximum Latency: 1032049.277 usecs at timestamp: 162574.787022
Minimum Latency: 29.023 usecs at timestamp: 162583.189731
RT task timings:
Average wakeup latency: 139.568 usecs
Maximum Latency: 220.583 usecs at timestamp: 162577.347038
Minimum Latency: 75.902 usecs at timestamp: 162577.719121
ردیابی بالا زمانهای تأخیر بیدارباش (wakeup latencies) تسکها را تولید میکند. رویداد «sched_switch» هر تأخیر مجزا را پس از نوشتن اطلاعات رویداد گزارش میدهد. در انتهای گزارش، میانگین تأخیر بیدارباش، و همچنین بیشترین و کمترین تأخیر همراه با برچسب زمانیِ رخ دادن آنها گزارش میشود. این کار هم برای تسکهای عادی و هم برای تسکهای بلادرنگ (real-time) انجام میگیرد.
# trace-cmd report -w -F 'sched_switch, sched_wakeup.*: prio < 100 || next_prio < 100'
cpus=8
<idle>-0 [001] dNh5. 162573.291142: sched_wakeup: migration/1:23 [0] CPU:001
<idle>-0 [001] d..2. 162573.291237: sched_switch: swapper/1:0 [120] R ==> migration/1:23 [0] Latency: 94.643 usecs
trace-cmd-89141 [002] dNh6. 162573.346785: sched_wakeup: migration/2:28 [0] CPU:002
trace-cmd-89141 [002] d..2. 162573.346929: sched_switch: trace-cmd:89141 [120] R ==> migration/2:28 [0] Latency: 143.971 usecs
trace-cmd-89134 [003] dNh4. 162573.410852: sched_wakeup: migration/3:33 [0] CPU:003
trace-cmd-89134 [003] d..2. 162573.411039: sched_switch: trace-cmd:89134 [120] R ==> migration/3:33 [0] Latency: 187.640 usecs
<idle>-0 [004] dNh5. 162573.490944: sched_wakeup: migration/4:38 [0] CPU:004
<idle>-0 [004] d..2. 162573.491098: sched_switch: swapper/4:0 [120] R ==> migration/4:38 [0] Latency: 153.913 usecs
<idle>-0 [005] dNh5. 162573.574955: sched_wakeup: migration/5:43 [0] CPU:005
<idle>-0 [005] d..2. 162573.575107: sched_switch: swapper/5:0 [120] R ==> migration/5:43 [0] Latency: 152.875 usecs
<idle>-0 [006] dNh5. 162573.646878: sched_wakeup: migration/6:48 [0] CPU:006
<idle>-0 [006] d..2. 162573.646992: sched_switch: swapper/6:0 [120] R ==> migration/6:48 [0] Latency: 113.788 usecs
trace-cmd-89140 [002] dNh7. 162577.346818: sched_wakeup: migration/2:28 [0] CPU:002
trace-cmd-89140 [002] d..2. 162577.347038: sched_switch: trace-cmd:89140 [120] R ==> migration/2:28 [0] Latency: 220.583 usecs
trace-cmd-89134 [003] dNh5. 162577.410869: sched_wakeup: migration/3:33 [0] CPU:003
trace-cmd-89141 [005] dNh6. 162577.574792: sched_wakeup: migration/5:43 [0] CPU:005
trace-cmd-89141 [005] d..2. 162577.574915: sched_switch: trace-cmd:89141 [120] R ==> migration/5:43 [0] Latency: 122.648 usecs
trace-cmd-89136 [007] dNh6. 162577.719045: sched_wakeup: migration/7:53 [0] CPU:007
trace-cmd-89136 [007] d..2. 162577.719121: sched_switch: trace-cmd:89136 [120] R ==> migration/7:53 [0] Latency: 75.902 usecs
trace-cmd-89140 [005] dNh4. 162581.574827: sched_wakeup: migration/5:43 [0] CPU:005
trace-cmd-89140 [005] d..2. 162581.574957: sched_switch: trace-cmd:89140 [120] R ==> migration/5:43 [0] Latency: 129.717 usecs
kworker/u46:1-51211 [006] dNh4. 162581.646809: sched_wakeup: migration/6:48 [0] CPU:006
Average wakeup latency: 139.568 usecs
Maximum Latency: 220.583 usecs at timestamp: 162577.347038
Minimum Latency: 75.902 usecs at timestamp: 162577.719121
RT task timings:
Average wakeup latency: 139.568 usecs
Maximum Latency: 220.583 usecs at timestamp: 162577.347038
Minimum Latency: 75.902 usecs at timestamp: 162577.719121
نسخه بالا فقط بیدارباشها و تعویضهای زمینه (context switches) تسکهای Real Time را نشان خواهد داد. مقدار prio استفادهشده در داخل هسته، از 0 برای بالاترین اولویت آغاز میشود. بدین معنا که prio معادل 0 برابر با اولویت بلادرنگ ۹۹ در فضای کاربری (user space)، و اولویت ۹۸ معادل با اولویت بلادرنگ ۱ در فضای کاربری است. مقادیر prio کمتر از 100 نمایانگر تسکهای Real Time هستند. توجه داشته باشید که زمانهای کلی بیدارباش با زمانهای تسکهای RT یکسان هستند.
نمونهای از profile:
# trace-cmd record --profile sleep 1
# trace-cmd report --profile --comm sleep
task: sleep-21611
Event: sched_switch:R (1) Total: 99442 Avg: 99442 Max: 99442 Min:99442
<stack> 1 total:99442 min:99442 max:99442 avg=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)
=> stub_execve (0xffffffff8150c699)
Event: sched_switch:S (1) Total: 1000506680 Avg: 1000506680 Max: 1000506680 Min:1000506680
<stack> 1 total:1000506680 min:1000506680 max:1000506680 avg=1000506680
=> ftrace_raw_event_sched_switch (0xffffffff8105f812)
=> __schedule (0xffffffff8150810a)
=> schedule (0xffffffff815084b8)
=> do_nanosleep (0xffffffff8150b22c)
=> hrtimer_nanosleep (0xffffffff8108d647)
=> SyS_nanosleep (0xffffffff8108d72c)
=> return_to_handler (0xffffffff8150e3c8)
=> tracesys_phase2 (0xffffffff8150c304)
Event: sched_wakeup:21611 (1) Total: 30326 Avg: 30326 Max: 30326 Min:30326
<stack> 1 total:30326 min:30326 max:30326 avg=30326
=> ftrace_raw_event_sched_wakeup_template (0xffffffff8105f653)
=> ttwu_do_wakeup (0xffffffff810606eb)
=> ttwu_do_activate.constprop.124 (0xffffffff810607c8)
=> try_to_wake_up (0xffffffff8106340a)
trace-cmd(1), trace-cmd-record(1), trace-cmd-start(1), trace-cmd-stop(1), trace-cmd-extract(1), trace-cmd-reset(1), trace-cmd-split(1), trace-cmd-list(1), trace-cmd-listen(1), trace-cmd-profile(1)
نویسنده (AUTHOR)
نوشتهشده توسط Steven Rostedt، <rostedt@goodmis.org[1]>
منابع (RESOURCES)
https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git
کپیرایت و تکثیر (COPYING)
کپیرایت (C) 2010 متعلق به Red Hat, Inc. استفاده آزاد از این نرمافزار تحت شرایط مجوز عمومی همگانی گنو (GPL) مجاز است.
نکات (NOTES)
- 1.
- rostedt@goodmis.org
| 03/09/2026 | libtracefs |