'\" t .\" Title: trace-cmd-sqlhist .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 03/09/2026 .\" Manual: libtracefs Manual .\" Source: libtracefs .\" Language: English .\" .TH "TRACE\-CMD\-SQLHIST" "1" "03/09/2026" "libtracefs" "libtracefs Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" trace-cmd-sqlhist \- استفاده از زبان SQL برای ایجاد یا نمایش ساخت هیستوگرام‌ها و رویدادهای ساختگی در tracefs .SH "خلاصه دستور (SYNOPSIS)" .sp \fBtrace\-cmd sqlhist\fR [\fIOPTIONS\fR] [\fISQL\-select\-command\fR] .SH "توضیحات (DESCRIPTION)" .sp دستور \fBtrace\-cmd sqlhist\fR(1) یک عبارت شبیه به SQL را برای ایجاد هیستوگرام‌های tracefs و رویدادهای ساختگی (synthetic events) دریافت می‌کند که می‌توانند اقدامات گوناگونی را برای پردازش‌های مختلف داده‌ها انجام دهند\&. .sp سامانه فایل tracefs با زیرساخت ردیابی (tracing) لینوکس که شامل رویدادهای ایستا و پویای مختلف در سراسر هسته است ارتباط برقرار می‌کند\&. هر یک از این رویدادها می‌تواند یک «هیستوگرام» متصل به خود داشته باشد، به‌طوری که فیلدهای رویداد، دسته‌های (buckets) هیستوگرام را تعیین می‌کنند\&. .sp یک رویداد ساختگی (synthetic event) روشی برای پیوند دادن دو رویداد مجزا و استفاده از فیلدها و برچسب‌های زمانی آن رویدادها جهت ایجاد یک رویداد پویای جدید است\&. این رویداد پویای جدید، یک رویداد ساختگی نامیده می‌شود\&. می‌توان محاسبات ساده‌ای روی فیلدهای هر رویداد انجام داد؛ برای مثال، محاسبه تفاضل (delta) میان یک فیلد از یک رویداد و فیلدی از رویداد دیگر\&. این قابلیت برای برچسب‌های زمانی رویدادها نیز کار می‌کند، به‌طوری که اختلاف زمانی بین دو رویداد نیز قابل استخراج و درج در رویداد ساختگی است\&. .sp اقدامات دیگری نیز می‌توان بر پایه فیلدهای رویدادها انجام داد\&. هنگامی که یک متغیر استفاده‌شده در ساخت رویداد ساختگی به یک مقدار بیشینه برسد، یا صرفاً مقدارش تغییر کند، می‌توان یک تصویر لحظه‌ای (snapshot) از بافر حلقه‌ای هسته تهیه کرد\&. .sp دستورات لازم برای ایجاد هیستوگرام‌ها و رویدادهای ساختگی پیچیده هستند و به‌خاطرسپاری آن‌ها آسان نیست\&. ابزار \fBtrace\-cmd sqlhist\fR برای تبدیل نحو SQL به دستورات لازم جهت ایجاد هیستوگرام یا رویداد ساختگی به کار می‌رود\&. .sp بخش \fBSQL\-select\-command\fR یک رشته SQL است که توسط \fBtracefs_sqlhist\fR(3) تعریف می‌شود\&. .sp توجه داشته باشید که این دستور باید با دسترسی ریشه (یا sudo) اجرا شود، زیرا تعامل با دایرکتوری tracefs نیازمند دسترسی کاربر ریشه است؛ مگر اینکه گزینه \fB\-t\fR به همراه رونوشتی از دایرکتوری \fItracefs\fR و رویدادهای آن مشخص شده باشد\&. .SH "گزینه‌ها (OPTIONS)" .PP \fB\-n\fR \fIname\fR .RS 4 نام رویداد ساختگی جهت ایجاد\&. این رویداد سپس می‌تواند مانند هر رویداد دیگری استفاده شده و از طریق \fBtrace\-cmd record\fR(1) فعال شود\&. .RE .PP \fB\-t\fR \fItracefs\-dir\fR .RS 4 به‌منظور آزمایش این دستور توسط کاربر غیر ریشه، می‌توان از یک رونوشت از دایرکتوری tracefs استفاده کرد و ارسال آن دایرکتوری با این گزینه، امکان کارکرد برنامه را فراهم می‌سازد\&. مسلماً، \fB\-e\fR بدون دسترسی ریشه کار نخواهد کرد زیرا قادر به اجرا نخواهد بود\&. .sp .if n \{\ .RS 4 .\} .nf # mkdir /tmp/tracing # cp \-r /sys/kernel/tracing/events /tmp/tracing # exit $ trace\-cmd sqlhist \-t /tmp/tracing \&.\&.\&. .fi .if n \{\ .RE .\} .RE .PP \fB\-e\fR .RS 4 نه تنها دستورات ایجاد هیستوگرام را نمایش می‌دهد، بلکه آن‌ها را اجرا نیز می‌کند\&. این کار نیازمند دسترسی ریشه است\&. .RE .PP \fB\-f\fR \fIfile\fR .RS 4 به جای خواندن دستورات SQL از خط فرمان، آن‌ها را از \fIfile\fR می‌خواند\&. اگر \fIfile\fR برابر با \fI\-\fR باشد، ورودی از ورودی استاندارد خوانده می‌شود\&. .RE .PP \fB\-m\fR \fIvar\fR .RS 4 انجام اقدام تعیین‌شده هنگامی که متغیر \fIvar\fR به یک مقدار بیشینه جدید برسد\&. این گزینه به همراه \fB\-c\fR قابل استفاده نیست\&. متغیر \fIvar\fR باید در \fBSQL\-select\-command\fR تعریف شده باشد\&. .RE .PP \fB\-c\fR \fIvar\fR .RS 4 انجام اقدام تعیین‌شده هنگامی که متغیر \fIvar\fR تغییر مقدار دهد\&. این گزینه به همراه \fB\-m\fR قابل استفاده نیست\&. متغیر \fIvar\fR باید در \fBSQL\-select\-command\fR تعریف شده باشد\&. .RE .PP \fB\-s\fR .RS 4 تهیه یک تصویر لحظه‌ای (snapshot) به جای فراخوانی رویداد ساختگی\&. .RE .PP \fB\-T\fR .RS 4 انجام هم‌زمان تهیه تصویر لحظه‌ای و ردیابی رویداد ساختگی\&. .RE .PP \fB\-S\fR \fIfields[,fields]\fR .RS 4 ذخیره فیلدهای مشخص‌شده\&. این فیلدها باید از فیلدهای رویداد پایانی («end») مشخص‌شده در \fBSQL\-select\-command\fR باشند\&. .RE .PP \fB\-B\fR \fIinstance\fR .RS 4 برای عبارت‌های ساده‌ای که فقط یک هیستوگرام تولید می‌کنند، نمایه (instance) ارائه‌شده در اینجا مکانی خواهد بود که هیستوگرام در آن ساخته می‌شود\&. این گزینه برای ایجاد کامل رویداد ساختگی نادیده گرفته می‌شود، زیرا رویدادهای ساختگی تأثیری سراسری روی تمام نمونه‌های ردیابی دارند، در حالی که هیستوگرام‌ها فقط بر یک نمایه منفرد اثر می‌گذارند\&. .RE.SH "مثال‌ها (EXAMPLES)" .sp همان‌طور که در بالا شرح داده شد، برای اهداف آزمایشی، یک رونوشت از دایرکتوری رویداد تهیه کنید: .sp .if n \{\ .RS 4 .\} .nf $ mkdir /tmp/tracing $ sudo cp \-r /sys/kernel/tracing/events /tmp/tracing/ $ sudo chmod \-R 0644 /tmp/tracing/ .fi .if n \{\ .RE .\} .sp برای نمونه‌ای از یک خروجی هیستوگرام ساده با استفاده از رونوشت دایرکتوری tracefs\&. .sp .if n \{\ .RS 4 .\} .nf $ trace\-cmd sqlhist \-t /tmp/tracing/ \*(AqSELECT CAST(call_site as SYM\-OFFSET), bytes_req, CAST(bytes_alloc AS _COUNTER_) FROM kmalloc\*(Aq .fi .if n \{\ .RE .\} .sp خروجی زیر را تولید می‌کند: .sp .if n \{\ .RS 4 .\} .nf echo \*(Aqhist:keys=call_site\&.sym\-offset,bytes_req:vals=bytes_alloc\*(Aq > /sys/kernel/tracing/events/kmem/kmalloc/trigger .fi .if n \{\ .RE .\} .sp که می‌تواند توسط کاربر ریشه (root) استفاده شود: .sp .if n \{\ .RS 4 .\} .nf # echo \*(Aqhist:keys=call_site\&.sym\-offset,bytes_req:vals=bytes_alloc\*(Aq > /sys/kernel/tracing/events/kmem/kmalloc/trigger # cat /sys/kernel/tracing/events/kmem/kmalloc/hist # event histogram # # trigger info: hist:keys=call_site\&.sym\-offset,bytes_req:vals=hitcount,bytes_alloc:sort=hitcount:size=2048 [active] # { call_site: [ffffffff813f8d8a] load_elf_phdrs+0x4a/0xb0 , bytes_req: 728 } hitcount: 1 bytes_alloc: 1024 { call_site: [ffffffffc0c69e74] nf_ct_ext_add+0xd4/0x1d0 [nf_conntrack] , bytes_req: 128 } hitcount: 1 bytes_alloc: 128 { call_site: [ffffffff818355e6] dma_resv_get_fences+0xf6/0x440 , bytes_req: 8 } hitcount: 1 bytes_alloc: 8 { call_site: [ffffffffc06dc73f] intel_gt_get_buffer_pool+0x15f/0x290 [i915] , bytes_req: 424 } hitcount: 1 bytes_alloc: 512 { call_site: [ffffffff813f8d8a] load_elf_phdrs+0x4a/0xb0 , bytes_req: 616 } hitcount: 1 bytes_alloc: 1024 { call_site: [ffffffff8161a44c] __sg_alloc_table+0x11c/0x180 , bytes_req: 32 } hitcount: 1 bytes_alloc: 32 { call_site: [ffffffffc070749d] shmem_get_pages+0xad/0x5d0 [i915] , bytes_req: 16 } hitcount: 1 bytes_alloc: 16 { call_site: [ffffffffc07507f5] intel_framebuffer_create+0x25/0x60 [i915] , bytes_req: 408 } hitcount: 1 bytes_alloc: 512 { call_site: [ffffffffc06fc20f] eb_parse+0x34f/0x910 [i915] , bytes_req: 408 } hitcount: 1 bytes_alloc: 512 { call_site: [ffffffffc0700ebd] i915_gem_object_get_pages_internal+0x5d/0x270 [i915] , bytes_req: 16 } hitcount: 1 bytes_alloc: 16 { call_site: [ffffffffc0771188] intel_frontbuffer_get+0x38/0x220 [i915] , bytes_req: 400 } hitcount: 1 bytes_alloc: 512 { call_site: [ffffffff8161a44c] __sg_alloc_table+0x11c/0x180 , bytes_req: 128 } hitcount: 1 bytes_alloc: 128 { call_site: [ffffffff813f8f45] load_elf_binary+0x155/0x1680 , bytes_req: 28 } hitcount: 1 bytes_alloc: 32 { call_site: [ffffffffc07038c8] __assign_mmap_offset+0x208/0x3d0 [i915] , bytes_req: 288 } hitcount: 1 bytes_alloc: 512 { call_site: [ffffffff813737b2] alloc_bprm+0x32/0x2f0 , bytes_req: 416 } hitcount: 1 bytes_alloc: 512 { call_site: [ffffffff813f9027] load_elf_binary+0x237/0x1680 , bytes_req: 64 } hitcount: 1 bytes_alloc: 64 { call_site: [ffffffff8161a44c] __sg_alloc_table+0x11c/0x180 , bytes_req: 64 } hitcount: 1 bytes_alloc: 64 { call_site: [ffffffffc040ffe7] drm_vma_node_allow+0x27/0xe0 [drm] , bytes_req: 40 } hitcount: 2 bytes_alloc: 128 { call_site: [ffffffff813cda98] __do_sys_timerfd_create+0x58/0x1c0 , bytes_req: 336 } hitcount: 2 bytes_alloc: 1024 { call_site: [ffffffff818355e6] dma_resv_get_fences+0xf6/0x440 , bytes_req: 40 } hitcount: 2 bytes_alloc: 128 { call_site: [ffffffff8139b75a] single_open+0x2a/0xa0 , bytes_req: 32 } hitcount: 2 bytes_alloc: 64 { call_site: [ffffffff815df715] bio_kmalloc+0x25/0x80 , bytes_req: 136 } hitcount: 2 bytes_alloc: 384 { call_site: [ffffffffc071e5cd] i915_vma_work+0x1d/0x50 [i915] , bytes_req: 416 } hitcount: 3 bytes_alloc: 1536 { call_site: [ffffffff81390d0d] alloc_fdtable+0x4d/0x100 , bytes_req: 56 } hitcount: 3 bytes_alloc: 192 { call_site: [ffffffffc06ff65f] i915_gem_do_execbuffer+0x158f/0x2440 [i915] , bytes_req: 16 } hitcount: 4 bytes_alloc: 64 { call_site: [ffffffff8137713c] alloc_pipe_info+0x5c/0x230 , bytes_req: 384 } hitcount: 5 bytes_alloc: 2560 { call_site: [ffffffff813771b4] alloc_pipe_info+0xd4/0x230 , bytes_req: 640 } hitcount: 5 bytes_alloc: 5120 { call_site: [ffffffff81834cdb] dma_resv_list_alloc+0x1b/0x40 , bytes_req: 40 } hitcount: 6 bytes_alloc: 384 { call_site: [ffffffff81834cdb] dma_resv_list_alloc+0x1b/0x40 , bytes_req: 56 } hitcount: 9 bytes_alloc: 576 { call_site: [ffffffff8120086e] tracing_map_sort_entries+0x9e/0x3e0 , bytes_req: 24 } hitcount: 60 bytes_alloc: 1920 Totals: Hits: 122 Entries: 30 Dropped: 0 .fi .if n \{\ .RE .\} .sp توجه داشته باشید گرچه در مثال‌ها برای کلیدواژه‌های SQL از حروف بزرگ استفاده شده است، اما این کار اجباری نیست\&. \fISELECT\fR می‌تواند به صورت \fIselect\fR یا حتی \fIsElEcT\fR نیز باشد\&. .sp با استفاده از زبان کامل SQL، می‌توان رویدادهای ساختگی (synthetic events) را ایجاد و پردازش کرد\&. به عنوان مثال، با استفاده از \fBtrace\-cmd sqlhist\fR به همراه \fBtrace\-cmd record\fR(1)، می‌توان تأخیر بیداری (wake up latency) را با ایجاد یک رویداد ساختگی از طریق پیوند دادن رویدادهای \fIsched_waking\fR و \fIsched_switch\fR ثبت کرد\&. .sp .if n \{\ .RS 4 .\} .nf # trace\-cmd sqlhist \-n wakeup_lat \-e \-T \-m lat \*(AqSELECT end\&.next_comm AS comm, (end\&.TIMESTAMP_USECS \- start\&.TIMESTAMP_USECS) AS lat FROM \*(Aq \e \*(Aqsched_waking AS start JOIN sched_switch AS end ON start\&.pid = end\&.next_pid WHERE end\&.next_prio < 100 && end\&.next_comm == "cyclictest"\*(Aq # trace\-cmd start \-e all \-e wakeup_lat \-R stacktrace # cyclictest \-l 1000 \-p80 \-i250 \-a \-t \-q \-m \-d 0 \-b 1000 \-\-tracemark # trace\-cmd show \-s | tail \-30 \-0 [002] dNh4 23454\&.902246: sched_wakeup: comm=cyclictest pid=12272 prio=120 target_cpu=002 \-0 [005] \&.\&.\&.1 23454\&.902246: cpu_idle: state=4294967295 cpu_id=5 \-0 [007] d\&.\&.1 23454\&.902246: cpu_idle: state=0 cpu_id=7 \-0 [002] dNh1 23454\&.902247: hrtimer_expire_exit: hrtimer=0000000037956dc2 \-0 [005] d\&.\&.1 23454\&.902248: cpu_idle: state=0 cpu_id=5 \-0 [002] dNh1 23454\&.902248: write_msr: 6e0, value 4866ce957272 \-0 [006] \&.\&.\&.1 23454\&.902248: cpu_idle: state=4294967295 cpu_id=6 \-0 [002] dNh1 23454\&.902249: local_timer_exit: vector=236 \-0 [006] d\&.\&.1 23454\&.902250: cpu_idle: state=0 cpu_id=6 \-0 [002] \&.N\&.1 23454\&.902250: cpu_idle: state=4294967295 cpu_id=2 \-0 [002] dN\&.1 23454\&.902251: rcu_utilization: Start context switch \-0 [002] dN\&.1 23454\&.902252: rcu_utilization: End context switch \-0 [001] \&.\&.\&.1 23454\&.902252: cpu_idle: state=4294967295 cpu_id=1 \-0 [002] dN\&.3 23454\&.902253: prandom_u32: ret=3692516021 \-0 [001] d\&.\&.1 23454\&.902254: cpu_idle: state=0 cpu_id=1 \-0 [002] d\&.\&.2 23454\&.902254: sched_switch: prev_comm=swapper/2 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=cyclictest next_pid=12275 next_prio=19 \-0 [002] d\&.\&.4 23454\&.902256: wakeup_lat: next_comm=cyclictest lat=17 \-0 [002] d\&.\&.5 23454\&.902258: => trace_event_raw_event_synth => action_trace => event_hist_trigger => event_triggers_call => trace_event_buffer_commit => trace_event_raw_event_sched_switch => __traceiter_sched_switch => __schedule => schedule_idle => do_idle => cpu_startup_entry => secondary_startup_64_no_verify .fi .if n \{\ .RE .\} .sp در اینجا گزینه‌های مثال بالا توضیح داده شده‌اند: .PP \fB\-n wakeup_lat\fR .RS 4 نام رویداد ساختگیِ مورد استفاده را \fBwakeup_lat\fR تعیین می‌کند\&. .RE .PP \fB\-e\fR .RS 4 دستورهایی را که چاپ می‌شوند اجرا می‌کند\&. .RE .PP \fB\-T\fR .RS 4 هم یک کنش ردگیری (trace) و سپس یک کنش تصویر لحظه‌ای (snapshot) انجام می‌دهد (جابه‌جایی بافر به بافر ایستان \fIsnapshot\fR)\&. .RE .PP \fB\-m lat\fR .RS 4 هر زمان که \fIlat\fR به یک مقدار بیشینه جدید برسد، کنش‌ها را فعال می‌کند\&. .RE .sp اکنون تجزیه و تحلیل عبارت SQL: .sp .if n \{\ .RS 4 .\} .nf \*(AqSELECT end\&.next_comm AS comm, (end\&.TIMESTAMP_USECS \- start\&.TIMESTAMP_USECS) AS lat FROM \*(Aq \e \*(Aqsched_waking AS start JOIN sched_switch AS end ON start\&.pid = end\&.next_pid WHERE end\&.next_prio < 100 && end\&.next_comm == "cyclictest"\*(Aq .fi .if n \{\ .RE .\}.PP \fBend\&.next_comm AS comm\fR .RS 4 فیلد \fBnext_comm\fR از رویداد \fIsched_switch\fR را ذخیره کرده و آن را در فیلد \fBcomm\fR از رویداد ساختگی \fIwakeup_lat\fR قرار می‌دهد\&. .RE .PP \fB(end\&.TIMESTAMP_USECS \- start\&.TIMESTAMP_USECS) AS lat\fR .RS 4 اختلاف (دلتا) برچسب‌های زمانی بین رویداد \fIsched_switch\fR و رویداد \fIsched_waking\fR را محاسبه می‌کند\&. از آنجا که برچسب‌های زمانی معمولاً بر حسب نانوثانیه ثبت می‌شوند، \fBTIMESTAMP\fR برچسب زمانی کامل به نانوثانیه را ارائه می‌دهد، اما در اینجا، \fBTIMESTAMP_USECS\fR آن را به میکروثانیه کوتاه می‌کند\&. این مقدار در متغیر \fBlat\fR ذخیره می‌شود که در رویداد ساختگی نیز ثبت خواهد شد\&. .RE .PP \fBFROM \fR\fB\fIsched_waking\fR\fR\fB AS start JOIN sched_switch AS end ON start\&.pid = end\&.next_pid\fR .RS 4 رویداد ساختگی را با پیوند دادن (join) \fIsched_waking\fR به \fIsched_switch\fR و تطبیق فیلد \fIpid\fR در \fIsched_waking\fR با فیلد \fInext_pid\fR در \fIsched_switch\fR ایجاد می‌کند\&. همچنین \fBstart\fR را یک نام مستعار برای \fIsched_waking\fR و \fBend\fR را یک نام مستعار برای \fIsched_switch\fR قرار می‌دهد تا در ادامه عبارت SQL بتوان به ترتیب از \fBstart\fR و \fBend\fR به عنوان جایگزین \fIsched_waking\fR و \fIsched_switch\fR استفاده کرد\&. .RE .PP \fBWHERE end\&.next_prio < 100 && end\&.next_comm == "cyclictest"\fR .RS 4 منطق را فیلتر می‌کند تا تنها در صورتی اجرا شود که فیلد \fInext_prio\fR در \fIsched_waking\fR کمتر از ۱۰۰ باشد\&. (توجه داشته باشید که در کرنل، اولویت‌ها معکوس هستند و اولویت‌های بلادرنگ بین ۰ تا ۱۰۰ نمایش داده می‌شوند که در آن ۰ بالاترین اولویت است)\&. همچنین ردگیری فقط زمانی انجام می‌شود که \fInext_comm\fR (وظیفه‌ای که وارد زمان‌بندی می‌شود) از رویداد \fIsched_switch\fR نام "cyclictest" را داشته باشد\&. .RE .sp برای دستور \fBtrace\-cmd\fR(3): .sp .if n \{\ .RS 4 .\} .nf trace\-cmd start \-e all \-e wakeup_lat \-R stacktrace .fi .if n \{\ .RE .\} .PP \fBtrace\-cmd start\fR .RS 4 ردگیری را فعال می‌کند (روی فایل ذخیره نمی‌کند)\&. .RE .PP \fB\-e all\fR .RS 4 فعال‌سازی همه رویدادها .RE .PP \fB\-e wakeup_lat \-R stacktrace\fR .RS 4 باعث می‌شود رویداد "wakeup_lat" (رویداد ساختگی ما) تریگر \fBstacktrace\fR را فعال کند، به طوری که برای هر نمونه از رویداد "wakeup_lat"، یک ردپای پشته کرنل (kernel stack trace) در بافر حلقه‌ای ثبت خواهد شد\&. .RE .sp پس از فراخوانی \fBcyclictest\fR (یک ابزار بلادرنگ برای سنجش تاخیر بیدار شدن)، بافر snapshot را بخوانید\&. .PP \fBtrace\-cmd show \-s\fR .RS 4 دستور \fBtrace\-cmd show\fR بافر حلقه‌ای کرنل را می‌خواند و گزینه \fB\-s\fR به جای بافر عادی، بافر \fBsnapshot\fR را خواهد خواند\&. .RE .sp .if n \{\ .RS 4 .\} .nf \-0 [002] d\&.\&.4 23454\&.902256: wakeup_lat: next_comm=cyclictest lat=17 .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf مشاهده می‌کنیم که رویداد "wakeup_lat" روی CPU 2 با تاخیر بیدار شدن ۱۷ میکروثانیه رخ داده است\&. .fi .if n \{\ .RE .\} .sp این مورد می‌تواند درون یک فایل \fBtrace\&.dat\fR استخراج شود تا \fBtrace\-cmd\fR(3) و همچنین \fBkernelshark\fR بتوانند آن را خوانده و تحلیل‌های بیشتری انجام دهند\&. .sp .if n \{\ .RS 4 .\} .nf # trace\-cmd extract \-s # trace\-cmd report \-\-cpu 2 | tail \-30 \-0 [002] 23454\&.902238: prandom_u32: ret=1633425088 \-0 [002] 23454\&.902239: sched_wakeup: cyclictest:12275 [19] CPU:002 \-0 [002] 23454\&.902241: hrtimer_expire_exit: hrtimer=0xffffbbd68286fe60 \-0 [002] 23454\&.902241: hrtimer_cancel: hrtimer=0xffffbbd6826efe70 \-0 [002] 23454\&.902242: hrtimer_expire_entry: hrtimer=0xffffbbd6826efe70 now=23455294430750 function=hrtimer_wakeup/0x0 \-0 [002] 23454\&.902243: sched_waking: comm=cyclictest pid=12272 prio=120 target_cpu=002 \-0 [002] 23454\&.902244: prandom_u32: ret=1102749734 \-0 [002] 23454\&.902246: sched_wakeup: cyclictest:12272 [120] CPU:002 \-0 [002] 23454\&.902247: hrtimer_expire_exit: hrtimer=0xffffbbd6826efe70 \-0 [002] 23454\&.902248: write_msr: 6e0, value 4866ce957272 \-0 [002] 23454\&.902249: local_timer_exit: vector=236 \-0 [002] 23454\&.902250: cpu_idle: state=4294967295 cpu_id=2 \-0 [002] 23454\&.902251: rcu_utilization: Start context switch \-0 [002] 23454\&.902252: rcu_utilization: End context switch \-0 [002] 23454\&.902253: prandom_u32: ret=3692516021 \-0 [002] 23454\&.902254: sched_switch: swapper/2:0 [120] R ==> cyclictest:12275 [19] \-0 [002] 23454\&.902256: wakeup_lat: next_comm=cyclictest lat=17 \-0 [002] 23454\&.902258: kernel_stack: => trace_event_raw_event_synth (ffffffff8121a0db) => action_trace (ffffffff8121e9fb) => event_hist_trigger (ffffffff8121ca8d) => event_triggers_call (ffffffff81216c72) => trace_event_buffer_commit (ffffffff811f7618) => trace_event_raw_event_sched_switch (ffffffff8110fda4) => __traceiter_sched_switch (ffffffff8110d449) => __schedule (ffffffff81c02002) => schedule_idle (ffffffff81c02c86) => do_idle (ffffffff8111e898) => cpu_startup_entry (ffffffff8111eba9) => secondary_startup_64_no_verify (ffffffff81000107) .fi .if n \{\ .RE .\}.SH "همچنین ببینید (SEE ALSO)" .sp trace\-cmd(1), tracefs_sqlhist(3) .SH "نویسندگان (AUTHORS)" .sp نوشته شده توسط Steven Rostedt، <\m[blue]\fBrostedt@goodmis\&.org\fR\m[]\&\s-2\u[1]\d\s+2> .SH "منابع (RESOURCES)" .sp \m[blue]\fBhttps://git\&.kernel\&.org/pub/scm/utils/trace\-cmd/trace\-cmd\&.git\fR\m[] .SH "کپی‌رایت و تکثیر (COPYING)" .sp کپی‌رایت (C) 2021 ، Inc\&. استفاده آزاد از این نرم‌افزار تحت شرایط مجوز عمومی همگانی گنو (GPL) مجاز است\&. .SH "نکات (NOTES)" .IP " 1." 4 rostedt@goodmis.org .RS 4 \%mailto:rostedt@goodmis.org .RE