'\" t .\" Title: trace-cmd-report .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 03/09/2026 .\" Manual: libtracefs Manual .\" Source: libtracefs .\" Language: Persian .\" .TH "TRACE\-CMD\-REPORT" "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-report \- نمایش ردگیری ایجادشده توسط trace\-cmd record به صورت ASCII .SH "خلاصه دستور (SYNOPSIS)" .sp \fBtrace\-cmd report\fR [\fIOPTIONS\fR] [\fIinput\-file\fR [\fIinput\-file\fR \&...]] .SH "توضیحات (DESCRIPTION)" .sp دستور trace\-cmd(1) report گزارشی خوانا برای انسان از ردگیری (trace) ایجادشده توسط trace\-cmd record در خروجی ارائه می‌دهد\&. .SH "گزینه‌ها (OPTIONS)" .PP \fB\-i\fR \fIinput\-file\fR .RS 4 به‌طور پیش‌فرض، trace\-cmd report فایل \fItrace\&.dat\fR را می‌خواند؛ اما گزینهٔ \fB\-i\fR به‌جای آن، \fIinput\-file\fR داده‌شده را باز می‌کند\&. توجه داشته باشید که فایل ورودی می‌تواند به‌عنوان آخرین مؤلفه در خط فرمان نیز مشخص شود\&. .RE .PP \fB\-e\fR .RS 4 ترتیب بایت‌ها (endianness) فایل را در خروجی نمایش می‌دهد\&. دستور trace\-cmd report به‌اندازهٔ کافی هوشمند است تا بتواند فایل‌های big-endian را روی ماشین‌های little-endian بخواند و بالعکس\&. .RE .PP \fB\-f\fR .RS 4 فهرست تمام توابعی را که در فایل trace\&.dat نگاشت شده‌اند در خروجی نمایش می‌دهد\&. توجه داشته باشید که این فهرست ممکن است شامل توابعی باشد که در ردگیری ظاهر نشده‌اند، زیرا این فهرست شامل نگاشت‌هایی برای ترجمهٔ نشانی‌های توابع به نام آن‌ها است\&. .RE .PP \fB\-P\fR .RS 4 فهرست داده‌های «trace_printk()» را در خروجی نمایش می‌دهد\&. داده‌های خام ردگیری به اشاره‌گرهای ایستا در کرنل اشاره می‌کنند\&. این داده‌ها باید در فایل trace\&.dat ذخیره شده باشند\&. .RE .PP \fB\-E\fR .RS 4 رویدادهای احتمالی موجود در فایل را فهرست می‌کند (اما این فهرست لزوماً فهرست قطعی رویدادهای موجود در فایل نیست)\&. .RE .PP \fB\-\-events\fR .RS 4 قالب‌های رویداد ذخیره‌شده در فایل trace\&.dat را فهرست می‌کند\&. .RE .PP \fB\-\-event\fR regex .RS 4 رویدادهایی را که با regex داده‌شده مطابقت دارند چاپ می‌کند\&. در صورت مشخص شدن دو‌نقطه (:)، نویسه‌های قبل از دونقطه برای تطابق با سامانه (system) و نویسه‌های بعد از آن برای تطابق با رویداد (event) به کار می‌روند\&. .sp .if n \{\ .RS 4 .\} .nf trace\-cmd report \-\-event sys:read .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور بالا فقط با رویدادهایی مطابقت دارد که نام سامانهٔ آن‌ها شامل "sys" و نام رویداد شامل "read" باشد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf trace\-cmd report \-\-event read .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور بالا با تمام رویدادهایی که نامشان شامل "read" است مطابقت خواهد داشت\&. همچنین ممکن است تمام رویدادهای سامانه‌ای را که نام آن شامل "read" است نیز فهرست کند\&. .fi .if n \{\ .RE .\} .RE .PP \fB\-\-check\-events\fR .RS 4 رشته‌های قالب رویداد ذخیره‌شده در فایل trace\&.dat را تجزیه کرده و اعلام می‌کند که آیا این قالب‌ها می‌توانند به درستی تجزیه شوند یا خیر\&. این گزینه افزونه‌ها را بارگذاری می‌کند، مگر آنکه \fB\-N\fR مشخص شده باشد\&. .RE .PP \fB\-t\fR .RS 4 برچسب زمانی (timestamp) کامل را چاپ می‌کند\&. برچسب‌های زمانی در فایل داده معمولاً با دقت نانوثانیه ضبط می‌شوند، اما نمایش پیش‌فرض برچسب زمانی فقط تا دقت میکروثانیه است\&. برای مشاهدهٔ برچسب زمانی کامل، گزینهٔ \fB\-t\fR را اضافه کنید\&. .RE .PP \fB\-F\fR \fIfilter\fR .RS 4 افزودن فیلتر برای محدود کردن رویدادهای نمایش‌داده‌شده\&. فیلترهایی که پس از یک فایل ورودی (مشخص‌شده با \fB\-i\fR) تعریف می‌شوند تنها بر همان فایل ورودی اعمال می‌گردند\&. فیلترهایی که قبل از ذکر هرگونه فایل ورودی ارائه شوند عمومی تلقی شده و به تمام فایل‌های ورودی اعمال می‌گردند\&. .sp .if n \{\ .RS 4 .\} .nf قالب فیلتر به این صورت است: .fi .if n \{\ .RE .\} .RE .sp .if n \{\ .RS 4 .\} .nf \*(Aq:\*(Aq = SYSTEM\*(Aq/\*(AqEVENT | SYSTEM | EVENT | \*(Aq,\*(Aq = EVENT_FIELD | \*(Aq&&\*(Aq | \*(Aq||\*(Aq | \*(Aq(\*(Aq \*(Aq)\*(Aq | \*(Aq!\*(Aq = \*(Aq==\*(Aq | \*(Aq!=\*(Aq | \*(Aq>=\*(Aq | \*(Aq<=\*(Aq | \*(Aq>\*(Aq | \*(Aq<\*(Aq | \*(Aq&\*(Aq | \*(Aq|\*(Aq | \*(Aq^\*(Aq | \*(Aq+\*(Aq | \*(Aq\-\*(Aq | \*(Aq*\*(Aq | \*(Aq/\*(Aq | \*(Aq%\*(Aq = NUM | STRING | EVENT_FIELD .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf عبارت SYSTEM نام سامانه‌ای است که فیلتر بر روی آن اعمال می‌شود\&. اگر EVENT ذکر نشود، فیلتر بر تمام رویدادهای ذیل آن SYSTEM اعمال خواهد شد\&. اگر تنها از یک رشته بدون کاراکتر \*(Aq/\*(Aq برای تفکیک بین SYSTEM و EVENT استفاده شود، در این صورت فیلتر بر روی تمام سامانه‌ها و رویدادهایی که با رشتهٔ داده‌شده مطابقت دارند اعمال خواهد شد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\}.nf فاصله‌های خالی نادیده گرفته می‌شوند، به‌طوری که "sched:next_pid==123" معادل "sched : next_pid == 123"\& است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf مقدار STRING با نقل‌قول‌های تکی یا جفت تعریف می‌شود (نقل‌قول تکی باید با نقل‌قول تکی، و جفت با جفت پایان یابد)\&. فاصله‌های خالی درون نقل‌قول‌ها نادیده گرفته نمی‌شوند\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf نمایش یک SYSTEM یا EVENT همچنین می‌تواند یک عبارت باقاعده (regular expression) تعریف‌شده توسط \*(Aqregcomp(3)\*(Aq باشد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf مقدار EVENT_FIELD نام فیلدی از یک رویداد است که در حال پالایش (فیلتر) شدن است\&. اگر رویداد شامل EVENT_FIELD نباشد، آن بخش از معادله نادرست (false) در نظر گرفته خواهد شد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-F \*(Aqsched : bogus == 1 || common_pid == 2\*(Aq .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf عبارت "bogus == 1" همواره به FALSE ارزیابی می‌شود زیرا هیچ رویدادی دارای فیلدی به نام "bogus" نیست، اما "common_pid == 2" همچنان ارزیابی خواهد شد زیرا تمام رویدادها دارای فیلد "common_pid" هستند\&. هر رویداد "sched" که توسط فرایندی با PID برابر با ۲ ردگیری شده باشد نشان داده خواهد شد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf توجه داشته باشید، EVENT_FIELD نام فیلدی است که توسط قالب رویداد نشان داده می‌شود (همان‌طور که با *\-\-events* نمایش داده می‌شود)، نه آنچه در خروجی یافت می‌شود\&. اگر خروجی "ID:foo" را نشان دهد اما فیلدی که "foo" به آن تعلق دارد در قالب رویداد "name" نامیده شده باشد، باید از "name" در فیلتر استفاده شود\&. همین امر درباره مقادیر نیز صادق است\&. اگر مقدار نمایش‌داده‌شده به یک نماد رشته‌ای تبدیل شده باشد، فیلتر مقدار اصلی را بررسی می‌کند و نه مقدار نمایش‌داده‌شده را\&. برای مثال، جهت فیلتر کردن روی تمام وظایفی که در هنگام تعویض زمینه (context switch) در وضعیت در حال اجرا بودند: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-F \*(Aqsched/sched_switch : prev_state==0\*(Aq .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf اگرچه خروجی \*(AqR\*(Aq را نمایش می‌دهد، اما داشتن \*(Aqprev_stat=="R"\*(Aq کار نخواهد کرد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf نکته: شما همچنین می‌توانید \*(AqCOMM\*(Aq را به عنوان یک EVENT_FIELD مشخص کنید\&. این کار از نام وظیفه (یا comm) رکورد برای مقایسه استفاده می‌کند\&. برای مثال، برای فیلتر کردن و کنار گذاشتن تمام وظایف "trace\-cmd": .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-F \*(Aq\&.*:COMM != "trace\-cmd"\*(Aq .fi .if n \{\ .RE .\} .PP \fB\-I\fR .RS 4 رویدادهایی را که پرچم تأخیر HARDIRQ در آن‌ها تنظیم شده است، چاپ نکن\&. این گزینه بیشتر رویدادهایی را که از زمینه وقفه (interrupt context) هستند فیلتر می‌کند\&. توجه داشته باشید، ممکن است توابع ردگیری‌شده‌ای را که در زمینه وقفه هستند اما پیش از تنظیم پرچم "in interrupt" هسته فراخوانی شده‌اند، فیلتر نکند\&. .RE .PP \fB\-S\fR .RS 4 رویدادهایی را که پرچم تأخیر SOFTIRQ در آن‌ها تنظیم شده است، چاپ نکن\&. این گزینه بیشتر رویدادهایی را که از زمینه وقفه نرم‌افزاری (soft interrupt context) هستند فیلتر می‌کند\&. .RE .PP \fB\-v\fR .RS 4 این گزینه باعث می‌شود که فیلترهای پس از \fB\-F\fR رویدادهای منطبق را فیلتر کرده و کنار بگذارند\&. .RE .sp .if n \{\ .RS 4 .\} .nf \-v \-F \*(Aqsched/sched_switch : prev_state == 0\*(Aq .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf هیچ رویداد sched_switch را که دارای prev_state برابر با 0 باشد نمایش نخواهد داد\&. حذف کردن *\-v* باعث می‌شود که تنها همان رویدادها چاپ شوند\&. .fi .if n \{\ .RE .\} .PP \fB\-T\fR .RS 4 فیلترهای \-F را آزمایش کن\&. پس از پردازش یک رشته فیلتر، فیلتر حاصل برای هر رویداد نمایش داده خواهد شد\&. این قابلیت برای استفاده از یک فیلتر برای بیش از یک رویداد که ممکن است فیلدی در همه رویدادها وجود نداشته باشد، مفید است\&. همچنین می‌توان از آن برای اطمینان از نبود غلط املایی در نام فیلدهای رویداد استفاده کرد، زیرا آن‌ها صرفاً نادیده گرفته خواهند شد\&. در صورتی که \fB\-F\fR مشخص نشده باشد، \fB\-T\fR نادیده گرفته می‌شود\&. .RE .PP \fB\-V\fR .RS 4 نمایش پیام‌های پرجزئیات (مشاهده کنید \fB\-\-verbose\fR اما فقط برای اعداد) .RE .PP \fB\-L\fR .RS 4 پلاگین‌های سراسری سیستم را بارگذاری نخواهد کرد\&. این گزینه فقط پلاگین‌ها را به‌صورت محلی («local only») بارگذاری می‌کند؛ یعنی آنچه را که در دایرکتوری ~/\&.trace\-cmd/plugins می‌یابد\&. .RE.PP \fB\-N\fR .RS 4 این گزینه هیچ افزونه‌ای را بارگذاری نمی‌کند\&. .RE .PP \fB\-n\fR \fIevent\-re\fR .RS 4 این گزینه باعث می‌شود تمام رویدادهایی که با این گزینه مطابقت دارند، هرگونه کنترل‌کنندهٔ ثبت‌شده (توسط افزونه‌ها) برای چاپ رویداد را نادیده بگیرند\&. در عوض، رویداد عادی چاپ خواهد شد\&. آرگومان \fIevent\-re\fR یک عبارت منظم مطابق با تعریف \fIregcomp(3)\fR است\&. .RE .PP \fB\-\-profile\fR .RS 4 با گزینهٔ \fB\-\-profile\fR ، دستور «trace\-cmd report» ابتدا تمام رویدادها را پردازش کرده و سپس قالبی را خروجی می‌دهد که نشان می‌دهد وظایف زمان خود را در کجای هسته صرف کرده‌اند، و همچنین در کجا بیشترین انسداد را داشته‌اند و تأخیرهای بیدارباش (wake up latencies) در کجا قرار دارند\&. .sp .if n \{\ .RS 4 .\} .nf برای جزئیات و مثال‌های بیشتر، trace\-cmd\-profile(1) را ببینید\&. .fi .if n \{\ .RE .\} .RE .PP \fB\-G\fR .RS 4 تنظیم رویدادهای وقفه (نرم و سخت) به صورت سراسری (وابسته به CPU به جای وظایف)\&. این گزینه فقط برای \-\-profile کار می‌کند\&. .RE .PP \fB\-H\fR \fIevent\-hooks\fR .RS 4 افزودن تطبیق رویداد سفارشی برای پیوند دادن هر دو رویداد به یکدیگر\&. .sp .if n \{\ .RS 4 .\} .nf برای ساختار، trace\-cmd\-profile(1) را ببینید\&. .fi .if n \{\ .RE .\} .RE .PP \fB\-R\fR .RS 4 این گزینه رویدادها را در قالب «خام» (raw) نشان می‌دهد؛ بدین معنا که قالب‌بندی چاپ رویداد نادیده گرفته شده و صرفاً محتویات هر فیلد چاپ می‌شود\&. .RE .PP \fB\-r\fR \fIevent\-re\fR .RS 4 این گزینه باعث می‌شود تمام رویدادهایی که با این گزینه مطابقت دارند، فیلدهای خام خود را چاپ کنند\&. آرگومان \fIevent\-re\fR یک عبارت منظم مطابق با تعریف \fIregcomp(3)\fR است\&. .RE .PP \fB\-l\fR .RS 4 این گزینه یک قالب «خروجی تأخیر» (latency output) اضافه می‌کند\&. اطلاعات مربوط به غیرفعال بودن وقفه‌ها، غیرفعال بودن soft irq، تنظیم بودن پرچم «need_resched»، شمارندهٔ پیش‌دستی (preempt count) و قفل بزرگ هسته (big kernel lock) همگی با هر رویداد ثبت می‌شوند\&. اما در حالت پیش‌فرض، این اطلاعات نمایش داده نمی‌شوند\&. این گزینه نمایش این اطلاعات را با ۶ نویسه تنظیم می‌کند\&. هنگامی که یکی از فیلدها صفر یا N/A باشد، یک \*(Aq\&.\e\*(Aq نشان داده می‌شود\&. .RE .sp .if n \{\ .RS 4 .\} .nf \-0 0d\&.h1\&. 106467\&.859747: function: ktime_get <\-\- tick_check_idle .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf عبارت 0d\&.h1\&. این اطلاعات را نشان می‌دهد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf با یک عدد شروع می‌شود\&. این نشان‌دهندهٔ شماره CPU است که رویداد روی آن رخ داده است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf نویسهٔ دوم یکی از موارد زیر است: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \*(Aqd\*(Aq \- وقفه‌ها غیرفعال هستند \*(Aq\&.\*(Aq \- وقفه‌ها فعال هستند \*(AqX\*(Aq \- دارای پرچم‌هایی است که هنوز برای trace\-cmd شناخته‌شده نیستند .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf نویسهٔ سوم پرچم «نیاز به زمان‌بندی مجدد» (need rescheduling) است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \*(AqN\*(Aq \- یک زمان‌بندی برای اجرا تنظیم شده است \*(Aq\&.\*(Aq \- هیچ زمان‌بندی‌ای تنظیم نشده است .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf نویسهٔ چهارم نشان‌دهندهٔ بافتی است که رویداد هنگام رخ دادن در آن قرار داشته است .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \*(Aqh\*(Aq \- بافت وقفه سخت‌افزاری \*(Aqs\*(Aq \- بافت وقفه نرم‌افزاری \*(AqH\*(Aq \- بافت وقفه سخت‌افزاری که یک وقفه نرم‌افزاری را قطع کرده است \*(Aq\&.\*(Aq \- بافت عادی .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf مورد بعدی یک عدد است (باید کمتر از ۱۰ باشد) که عمق پیش‌دستی (preemption depth) را نشان می‌دهد (تعداد دفعاتی که preempt_disable() بدون preempt_enable() فراخوانی شده است)\&. \*(Aq\&.\*(Aq به معنای فعال بودن پیش‌دستی است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\}.nf در برخی سامانه‌ها، ممکن است «migrate disable» وجود داشته باشد، که در این حالت عددی برای آن نمایش داده می‌شود، یا \*(Aq\&.\*(Aq به معنای فعال بودن مهاجرت (migration) است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf اگر lockdep روی سامانه فعال باشد، عدد نشان‌دهنده عمق قفل‌هایی است که هنگام تحریک رویداد نگه‌داشته شده‌اند\&. \*(Aq\&.\*(Aq به معنای عدم نگهداری هیچ قفلی است\&. .fi .if n \{\ .RE .\} .PP \fB\-w\fR .RS 4 اگر هر دو رویداد \fIsched_switch\fR و \fIsched_wakeup\fR فعال باشند، این گزینه تأخیر زمانی بین نخستین بیداری تسک و زمان زمان‌بندی شدن آن را گزارش می‌دهد\&. .RE .PP \fB\-q\fR .RS 4 بی‌صدا کردن هشدارهای غیربحرانی\&. .RE .PP \fB\-O\fR .RS 4 ارسال گزینه‌ها به افزونه‌های بارگذاری‌شده trace\-cmd\&. .sp .if n \{\ .RS 4 .\} .nf \-O plugin:var=value .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf عبارت‌های \*(Aqplugin:\*(Aq و \*(Aq=value\*(Aq اختیاری هستند\&. برای گزینه‌های بولی (boolean) می‌توان مقدار را نادیده گرفت\&. اگر \*(Aqplugin:\*(Aq حذف شود، هر متغیری که در تمام افزونه‌ها مطابقت داشته باشد تنظیم خواهد شد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf مثال: \-O fgraph:tailprint .fi .if n \{\ .RE .\} .RE .PP \fB\-\-cpu\fR .RS 4 فهرستی از پردازنده‌ها، جدا شده با «,» یا «:»، که برای فیلتر کردن رویدادها به کار می‌رود\&. بازه‌ای از پردازنده‌ها را می‌توان با استفاده از نمادگذاری «cpuX\-cpuY» مشخص کرد، که در آن تمام پردازنده‌های موجود در بازه میان cpuX و cpuY در فهرست گنجانده می‌شوند\&. ترتیب پردازنده‌ها در این فهرست باید از کوچک‌تر به بزرگ‌تر باشد\&. .sp .if n \{\ .RS 4 .\} .nf مثال: "\-\-cpu 0,3" \- نمایش رویدادها از پردازنده‌های 0 و 3 "\-\-cpu 2\-4" \- نمایش رویدادها از پردازنده‌های 2، 3 و 4 .fi .if n \{\ .RE .\} .RE .PP \fB\-\-cpus\fR .RS 4 فهرست کردن پردازنده‌هایی که در فایل ردگیری داده دارند و سپس خروج\&. .RE .PP \fB\-\-first\-event\fR .RS 4 نمایش برچسب زمانی نخستین رویداد از تمامی پردازنده‌هایی که داده دارند\&. .RE .PP \fB\-\-last\-event\fR .RS 4 نمایش برچسب زمانی آخرین رویداد از تمامی پردازنده‌هایی که داده دارند\&. .RE .PP \fB\-\-stat\fR .RS 4 اگر فایل trace\&.dat آمار نهایی (که در پایان ضبط خروجی داده شده) را ذخیره کرده باشد، می‌توان از گزینه \fB\-\-stat\fR برای بازیابی آن‌ها استفاده کرد\&. .RE .PP \fB\-\-uname\fR .RS 4 اگر فایل trace\&.dat اطلاعات uname را در حین اجرا ضبط کرده باشد، این گزینه آن اطلاعات را بازیابی می‌کند\&. .RE .PP \fB\-\-version\fR .RS 4 اگر فایل trace\&.dat نگارش فایل اجرایی استفاده‌شده برای ایجاد آن را ضبط کرده باشد، آن نگارش را گزارش می‌دهد\&. .RE .PP \fB\-\-ts\-offset\fR offset .RS 4 افزودن (یا در صورت منفی بودن، کسر کردن) یک آفست (انحراف) به تمامی برچسب‌های زمانی فایل داده قبلی مشخص‌شده با \fB\-i\fR\&. این قابلیت برای مرتب‌سازی ادغامی چندین فایل trace\&.dat که اختلاف برچسب‌های زمانی آن‌ها مشخص است سودمند است\&. برای نمونه، اگر ردگیری روی یک مهمان مجازی انجام شده باشد و ردگیری دیگری روی میزبان صورت گیرد؛ چنانچه برچسب زمانی میزبان 1000 واحد جلوتر از مهمان باشد، می‌توان دستور زیر را به کار برد: .sp .if n \{\ .RS 4 .\} .nf trace\-cmd report \-i host\&.dat \-\-ts\-offset \-1000 \-i guest\&.dat .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf این دستور هنگام ادغام با رویدادهای guest\&.dat، مقدار 1000 واحد زمانی را از تمامی رویدادهای میزبان کسر می‌کند\&. توجه داشته باشید که این واحدها، واحدهای خام ثبت‌شده در ردگیری هستند\&. اگر واحدها نانوثانیه باشند، عمل جمع (یا تفریق) آفست برحسب نانوثانیه خواهد بود، حتی اگر واحدهای نمایش‌داده‌شده میکروثانیه باشند\&. .fi .if n \{\ .RE .\} .RE .PP \fB\-\-ts2secs\fR HZ .RS 4 تبدیل منبع ساعت جاری به یک خروجی برحسب ثانیه (با تفکیک‌پذیری نانوثانیه)\&. هنگام استفاده از ساعت‌هایی چون x86\-tsc، در صورتی که بسامد (فرکانس) مشخص باشد، با مشخص کردن فرکانس ساعت، این گزینه زمان را به ثانیه تبدیل می‌کند\&. .sp .if n \{\ .RS 4 .\} .nf این گزینه بر روی هر فایل trace\&.dat که پس از آن با *\-i* مشخص شود تأثیر می‌گذارد\&. اگر این گزینه پیش از هر گزینه *\-i* قرار گیرد، آن مقدار به ضریب تبدیل پیش‌فرض برای تمام فایل‌های دیگر trace\&.dat بدل خواهد شد\&. اگر گزینه \-\-ts2secs دیگری پس از یک فایل trace\&.dat همراه با *\-i* ظاهر شود، آن گزینه مقدار پیش‌فرض را بازنویسی می‌کند\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf مثال: روی یک رایانه 3\&.4 گیگاهرتزی .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf trace\-cmd record \-p function \-C x86\-tsc .fi .if n \{\ .RE .\}.sp .if n \{\ .RS 4 .\} .nf trace\-cmd report \-\-ts2ns 3400000000 .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf گزارش، برچسب‌های زمانی چرخه‌ها (cycles) را به یک نمایش ثانیه‌ای خوانا تبدیل خواهد کرد\&. تفکیک‌پذیری پیش‌فرض نمایش، میکروثانیه است، مگر اینکه از *\-t* استفاده شود\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf مقدار \-\-ts\-offset حتی با این گزینه نیز همچنان باید در واحدهای برچسب زمانی خام باشد\&. این آفست نیز تبدیل خواهد شد\&. .fi .if n \{\ .RE .\} .RE .PP \fB\-\-ts\-diff\fR .RS 4 اختلاف زمانی میان رویدادها را نشان می‌دهد\&. این اختلاف درون پرانتز درست پس از برچسب زمانی نمایش داده خواهد شد\&. .RE .PP \fB\-\-ts\-check\fR .RS 4 اطمینان حاصل می‌کند که هیچ برچسب زمانی به عقب بازنگردد، و در صورت رخ دادن، یک پیام هشدار مبنی بر این موضوع چاپ می‌کند\&. .RE .PP \fB\-\-nodate\fR .RS 4 از تبدیل برچسب‌های زمانی به تاریخ تعیین‌شده توسط گزینه \-\-date در \fBtrace\-cmd record\fR(3) صرف‌نظر می‌کند\&. .RE .PP \fB\-\-raw\-ts\fR .RS 4 نمایش برچسب‌های زمانی خام، بدون اعمال هرگونه تصحیح\&. .RE .PP \fB\-\-align\-ts\fR .RS 4 نمایش برچسب‌های زمانی تراز‌شده با نخستین رویداد\&. .RE .PP \fB\-\-verbose\fR[=\fIlevel\fR] .RS 4 سطح گزارش‌گیری را تنظیم می‌کند\&. سطوح گزارش‌گیری پشتیبانی‌شده عبارتند از "none"، "crit"، "err"، "warn"، "info"، "debug"، "all" یا شناسه‌های آن‌ها "0"، "1"، "2"، "3"، "4"، "5"، "6"\&. تنظیم سطح گزارش‌گیری روی یک مقدار خاص، تمامی گزارش‌های آن سطح و تمام سطوح پیشین را فعال می‌کند\&. در صورتی که سطحی مشخص نشود، مقدار پیش‌فرض "info" خواهد بود\&. .sp .if n \{\ .RS 4 .\} .nf مثال: فعال‌سازی تمام لاگ‌های بحرانی، خطا و هشدار .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf trace\-cmd report \-\-verbose=warning .fi .if n \{\ .RE .\} .RE.SH "مثال‌ها (EXAMPLES)" .sp با استفاده از یک فایل trace\&.dat که با دستور زیر ایجاد شده است: .sp .if n \{\ .RS 4 .\} .nf # trace\-cmd record \-p function \-e all sleep 5 .fi .if n \{\ .RE .\} .sp گزارش پیش‌فرض نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf # 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 [\&.\&.\&.] .fi .if n \{\ .RE .\} .sp نکته در مورد ستون سوم: .sp .if n \{\ .RS 4 .\} .nf sleep\-89998 [002] \&.\&.\&.1\&. 223087\&.004011: lock_acquire: 0xffff892b7cf32c20 lock sleep\-89998 [002] \&.\&.\&.1\&. 223087\&.004011: lock_acquire: 0xffffffff85517f00 read rcu_read_lock \-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 .fi .if n \{\ .RE .\} .sp این ستون از همان ساختاری پیروی می‌کند که در فایل /sys/kernel/tracing/trace در هسته لینوکس نشان داده شده است\&. .sp .if n \{\ .RS 4 .\} .nf # 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 # | | | ||||| | | .fi .if n \{\ .RE .\} .sp مشابه توضیحات داده‌شده در گزینه \fB\-l\fR است\&. به‌طوری که موقعیت نخست: .sp .if n \{\ .RS 4 .\} .nf \*(Aq\&.\*(Aq \- به معنی فعال بودن وقفه‌ها و bottom halfها است \*(Aqd\*(Aq \- به معنی غیرفعال بودن وقفه‌ها و bottom halfها است .fi .if n \{\ .RE .\} .sp موقعیت دوم: .sp .if n \{\ .RS 4 .\} .nf \*(AqN\*(Aq \- به این معنی است که پرچم "NEED_RESCHED" تنظیم شده و هسته باید در سریع‌ترین زمان ممکن زمان‌بندی را انجام دهد\&. .fi .if n \{\ .RE .\} .sp موقعیت سوم: .sp .if n \{\ .RS 4 .\} .nf \*(Aq\&.\*(Aq \- در زمینه عادی/قابل زمان‌بندی \*(Aqs\*(Aq \- در زمینه وقفه نرم‌افزاری (soft interrupt) \*(Aqh\*(Aq \- در زمینه وقفه سخت‌افزاری (hard interrupt) \*(AqH\*(Aq \- در زمینه وقفه سخت‌افزاری که یک وقفه نرم‌افزاری را قطع کرده است .fi .if n \{\ .RE .\} .sp جایگاه چهارم عمق preempt count است: .sp .if n \{\ .RS 4 .\} .nf \*(Aqpass:[\&.]\*(Aq \- قابلیت preemption فعال است \*(Aq#\*(Aq \- عمق غیرفعال بودن preemption (تودرتو) .fi .if n \{\ .RE .\} .sp ستون پنجم شمارنده غیرفعال بودن مهاجرت (migration disabled counter) است: .sp .if n \{\ .RS 4 .\} .nf \*(Aq\&.\*(Aq \- مهاجرت (migration) فعال است \*(Aq#\*(Aq \- عمق غیرفعال بودن مهاجرت (تودرتو) .fi .if n \{\ .RE .\} .sp برای دیدن همه‌چیز به‌جز ردگیری‌های تابع (function): .sp .if n \{\ .RS 4 .\} .nf # trace\-cmd report \-v \-F \*(Aqfunction\*(Aq 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 [\&.\&.\&.] .fi .if n \{\ .RE .\} .sp برای مشاهده تنها فراخوانی‌های kmalloc که بزرگ‌تر از ۱۰۰۰ بایت بوده‌اند: .sp .if n \{\ .RS 4 .\} .nf # trace\-cmd report \-F \*(Aqkmalloc: bytes_req > 1000\*(Aq 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 [\&.\&.\&.] .fi .if n \{\ .RE .\}.sp برای مشاهده بیدارباش‌ها (wakeups) و تعویض‌های sched که تسک قبلی را در وضعیت running باقی گذاشته‌اند: .sp .if n \{\ .RS 4 .\} .nf # trace\-cmd report \-F \*(Aqsched: prev_state == 0\*(Aq \-F \*(Aqsched_waking\*(Aq cpus=8 sleep\-89142 [001] d\&.h6\&. 162573\&.215941: sched_waking: comm=trace\-cmd pid=89135 prio=120 target_cpu=000 \-0 [000] dNh7\&. 162573\&.216219: sched_waking: comm=trace\-cmd pid=89134 prio=120 target_cpu=007 \-0 [000] d\&.\&.2\&. 162573\&.216423: sched_switch: swapper/0:0 [120] R ==> trace\-cmd:89135 [120] \-0 [007] dNh7\&. 162573\&.216511: sched_waking: comm=trace\-cmd pid=89141 prio=120 target_cpu=002 \-0 [007] d\&.\&.2\&. 162573\&.216698: sched_switch: swapper/7:0 [120] R ==> trace\-cmd:89134 [120] \-0 [002] dNh7\&. 162573\&.216776: sched_waking: comm=trace\-cmd pid=89136 prio=120 target_cpu=001 \-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 \-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 \-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 .fi .if n \{\ .RE .\} .sp مورد بالا به کمی توضیح نیاز دارد\&. فیلتر، زیرسیستم «sched» را مشخص می‌کند که شامل تمام رویدادهای زمان‌بندی است\&. هر رویدادی که فیلد قالبی «prev_state» را نداشته باشد، آن عبارات را FALSE ارزیابی می‌کند و هیچ تطابقی تولید نخواهد کرد\&. تنها رویداد sched_switch با آن تطابق خواهد داشت\&. گزینه دوم «\-F» رویداد sched_waking را در بر خواهد گرفت\&. .sp .if n \{\ .RS 4 .\} .nf # trace\-cmd report \-w \-F \*(Aqsched_switch, sched_wakeup\&.*\*(Aq [\&.\&.\&.] 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] \-0 [001] dNh4\&. 162583\&.268747: sched_wakeup: sleep:89142 [120] CPU:001 \-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 .fi .if n \{\ .RE .\} .sp ردیابی بالا زمان‌های تأخیر بیدارباش (wakeup latencies) تسک‌ها را تولید می‌کند\&. رویداد «sched_switch» هر تأخیر مجزا را پس از نوشتن اطلاعات رویداد گزارش می‌دهد\&. در انتهای گزارش، میانگین تأخیر بیدارباش، و همچنین بیشترین و کمترین تأخیر همراه با برچسب زمانیِ رخ دادن آن‌ها گزارش می‌شود\&. این کار هم برای تسک‌های عادی و هم برای تسک‌های بلادرنگ (real\-time) انجام می‌گیرد\&. .sp .if n \{\ .RS 4 .\} .nf # trace\-cmd report \-w \-F \*(Aqsched_switch, sched_wakeup\&.*: prio < 100 || next_prio < 100\*(Aq cpus=8 \-0 [001] dNh5\&. 162573\&.291142: sched_wakeup: migration/1:23 [0] CPU:001 \-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 \-0 [004] dNh5\&. 162573\&.490944: sched_wakeup: migration/4:38 [0] CPU:004 \-0 [004] d\&.\&.2\&. 162573\&.491098: sched_switch: swapper/4:0 [120] R ==> migration/4:38 [0] Latency: 153\&.913 usecs \-0 [005] dNh5\&. 162573\&.574955: sched_wakeup: migration/5:43 [0] CPU:005 \-0 [005] d\&.\&.2\&. 162573\&.575107: sched_switch: swapper/5:0 [120] R ==> migration/5:43 [0] Latency: 152\&.875 usecs \-0 [006] dNh5\&. 162573\&.646878: sched_wakeup: migration/6:48 [0] CPU:006 \-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 .fi .if n \{\ .RE .\} .sp نسخه بالا فقط بیدارباش‌ها و تعویض‌های زمینه (context switches) تسک‌های Real Time را نشان خواهد داد\&. مقدار \fIprio\fR استفاده‌شده در داخل هسته، از 0 برای بالاترین اولویت آغاز می‌شود\&. بدین معنا که \fIprio\fR معادل 0 برابر با اولویت بلادرنگ ۹۹ در فضای کاربری (user space)، و اولویت ۹۸ معادل با اولویت بلادرنگ ۱ در فضای کاربری است\&. مقادیر prio کمتر از 100 نمایانگر تسک‌های Real Time هستند\&. توجه داشته باشید که زمان‌های کلی بیدارباش با زمان‌های تسک‌های RT یکسان هستند\&. .sp نمونه‌ای از profile: .sp .if n \{\ .RS 4 .\} .nf # 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 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 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 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) .fi .if n \{\ .RE .\}.SH "همچنین ببینید (SEE ALSO)" .sp 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) .SH "نویسنده (AUTHOR)" .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) 2010 متعلق به Red Hat, Inc\&. استفاده آزاد از این نرم‌افزار تحت شرایط مجوز عمومی همگانی گنو (GPL) مجاز است\&. .SH "نکات (NOTES)" .IP " 1." 4 rostedt@goodmis.org .RS 4 \%mailto:rostedt@goodmis.org .RE