یک ردیاب
(tracer) را مشخص
میکند.
ردیابها
معمولاً
کارهایی
فراتر از
صرفاً
ردگیری یک
رویداد
انجام
میدهند.
ردیابهای
رایج
عبارتند از:
function، function_graph،
preemptirqsoff، irqsoff، preemptoff
و wakeup. یک
ردیاب باید
توسط هسته
در حال اجرا
پشتیبانی
شود. برای
مشاهده
فهرست
ردیابهای
موجود، trace-cmd-list(1)
را ببینید.
یک
رویداد را
برای
ردگیری
مشخص
میکند.
نقاط
ردگیری
ایستا (static trace points)
گوناگونی
به هسته
لینوکس
افزوده
شدهاند.
آنها بر
اساس
زیرسیستم
گروهبندی
شدهاند تا
بتوانید
تمام
رویدادهای
یک
زیرسیستم
دادهشده
را فعال
کنید یا
رویدادهای
خاصی را
برای
فعالسازی
تعیین
نمایید.
event
در قالب
"
subsystem:event-name" است.
همچنین
میتوانید
فقط
زیرسیستم
را بدون
:event-name
یا نام
رویداد را
بدون ":subsystem"
مشخص کنید.
استفاده از
"
-e sched_switch" رویداد
"sched_switch" را فعال
میکند، در
حالی که "
-e sched"
تمام
رویدادهای
ذیل
زیرسیستم
"sched" را فعال
خواهد کرد.
مقدار 'event' میتواند حاوی عبارات glob نیز باشد. بدین ترتیب که "*stat*" تمام
رویدادها (یا زیرسیستمهایی) را که نویسههای "stat" در نامشان وجود دارد انتخاب
میکند.
کلیدواژه 'all' میتواند برای فعال کردن همه رویدادها استفاده شود.
یک stack trace را
روی تمام
توابع فعال
میکند.
توجه داشته
باشید که
این گزینه
فقط برای
ردیاب
افزونه "function"
کاربرد
دارد و تنها
زمانی
اثرگذار
خواهد بود
که گزینه -l
استفاده
شده و در
محدود کردن
توابع موفق
عمل کند. اگر
ردیاب function
فیلتر نشود
و stack trace فعال
باشد،
میتواند
سیستم را
دچار
قفلشدگی
زنده (live lock) کند.
مشخص
کردن یک
فیلتر برای
رویداد
پیشین. این
گزینه باید
بعد از یک -e
بیاید. این
کار
رویدادهایی
را که ثبت
میشوند بر
اساس
محتوای
رویداد
فیلتر
میکند.
فیلترگذاری
مستقیماً
به هسته
منتقل
میشود،
بنابراین
فیلترهای
مجاز ممکن
است به نسخه
هسته شما
بستگی
داشته باشد.
اساساً، به
شما امکان
میدهد از
نشانهگذاری
زبان C
استفاده
کنید تا
بررسی شود
آیا یک
رویداد
باید
پردازش شود
یا خیر.
این
گزینه اثر
گزینههای
مشخصشده
پس از خود در
خط فرمان را
معکوس
میکند. این
گزینه بر
موارد زیر
تأثیر
میگذارد:
فقط
شناسههای
فرایند (PID)
مشخصشده
را فیلتر
میکند.
استفاده از
-P به شما
امکان
میدهد
تنها
رویدادهایی
را که توسط
فرایند
مربوطه
ایجاد
شدهاند
ردگیری
کنید.
-c
همراه با
-P برای
ردگیری
فرزندان
فرآیند نیز
استفاده
میشود (اگر
هسته از آن
پشتیبانی
کند).
--user
اجرای command
مشخصشده
با کاربر
دادهشده.
-C clock
تنظیم
ساعت
ردگیری روی
"clock".
برای دیدن ساعتهای موجود از دستور trace-cmd(1) list -C استفاده کنید.
-l function-name
این
گزینه
ردگیرهای
function و function_graph را
تنها به
ردگیری نام
تابع
دادهشده
محدود
میکند.
برای
ردگیری بیش
از یک تابع،
میتوان
بیش از یک -l
را در خط
فرمان مشخص
کرد.
استفادهٔ
محدود از
عبارات
عمومی (glob expressions)
نیز مجاز
است. این
موارد
عبارتند از:
match* تنها
برای
پالایش
توابعی که
با match آغاز
میشوند. *match
تنها برای
پالایش
توابعی که
با match پایان
مییابند.
*match\* تنها
برای
پالایش
توابعی که
حاوی match
هستند.
-g function-name
این
گزینه برای
افزونهٔ function_graph
است. این
گزینه تابع
دادهشده
را رسم (graph)
میکند؛ به
این معنی که
تنها آن
تابع و
تمامی
توابعی را
که
فراخوانی
میکند
ردگیری
خواهد کرد.
میتوانید
بیش از یک -g
در خط فرمان
داشته
باشید.
-n function-name
این
گزینه اثری
معکوس -l
دارد. تابعی
که با
گزینهٔ -n
داده شود
ردگیری
نخواهد شد.
این گزینه
اولویت
دارد؛ بدین
معنی که اگر
یک تابع
یکسان را
برای هر دو
گزینهٔ -n و -l
مشخص کنید،
ردگیری
نخواهد شد.
-d
برخی
افزونههای
ردگیر،
ردگیر function را
به طور
پیشفرض
فعال
میکنند؛
مانند
ردگیرهای latency.
این گزینه
از فعال شدن
ردگیر function در
زمان
راهاندازی
جلوگیری
میکند.
-D
گزینهٔ
-d تلاش
میکند با
استفاده از
گزینهٔ function-trace
ردگیر تابع
را غیرفعال
کند (در صورت
در دسترس
بودن)، در
غیر این
صورت به
فایل proc
پیشفرض
مراجعه
میکند:
/proc/sys/kernel/ftrace_enabled، اما
در صورت در
دسترس بودن
گزینهٔ function-trace
تغییری در
آن ایجاد
نمیکند.
گزینهٔ
-D هم
فایل proc مربوط
به ftrace_enabled و هم
گزینهٔ function-trace
را در صورت
وجود
غیرفعال
خواهد کرد.
توجه داشته باشید، این کار ردگیری تابع را برای همهٔ کاربران غیرفعال میکند، که شامل
کاربران خارج از ردگیرهای ftrace (مانند stack_tracer، perf و غیره) نیز میشود.
-O option
ابزار Ftrace
گزینههای
گوناگونی
دارد که
میتوانند
فعال یا
غیرفعال
شوند. این
گزینه به
شما امکان
میدهد
آنها را
تنظیم کنید.
الصاق متن no
به یک
گزینه، آن
را غیرفعال
میکند.
برای نمونه:
"-O nograph-time" گزینهٔ
"graph-time" در Ftrace را
غیرفعال
خواهد کرد.
-b size
این
گزینه
اندازهٔ
بافر
حلقهای (ring buffer)
را روی size
کیلوبایت
تنظیم
میکند. از
آنجا که
بافر
حلقهای Ftrace
به ازای هر CPU
است، این
اندازه،
اندازهٔ
بافر
حلقهای هر CPU
درون هسته
است.
استفاده از
"-b 10000" روی
ماشینی با ۴
پردازنده،
اندازهٔ کل
بافر Ftrace را به
۴۰ مگابایت
میرساند.
-B buffer-name
اگر هسته
از چندین
بافر
پشتیبانی
کند، این
گزینه
بافری با
نام
دادهشده
اضافه
میکند. اگر
نام بافر از
قبل وجود
داشته
باشد، آن
بافر تنها
بازنشانی
میشود.
پس از اعلام نام یک بافر، تمام رویدادهایی که بعد از آن اضافه شوند با آن
بافر مرتبط خواهند شد. اگر بافری مشخص نشود، یا رویدادی قبل از نام بافر
مشخص شود، با بافر اصلی (سطح بالا) مرتبط خواهد شد.
trace-cmd set -e sched -B block -e block -B time -e timer sleep 1
دستور بالا تمام رویدادهای sched را در بافر اصلی فعال میکند. سپس یک نمونه بافر
'block' ایجاد کرده و تمام رویدادهای block را درون آن بافر فعال میکند.
یک نمونه بافر 'time' نیز ایجاد شده و تمام رویدادهای timer برای آن رویداد فعال
خواهند شد.
-m size
حداکثر
اندازه بر
حسب
کیلوبایت
که یک بافر
به ازای هر CPU
باید داشته
باشد. توجه
کنید به
دلیل گرد
کردن بر
اساس
اندازهٔ
صفحه (page size)، این
عدد ممکن
است کاملاً
دقیق نباشد.
همچنین،
این کار با
جابهجایی
میان دو
بافر که نصف
اندازهٔ
دادهشده
هستند
انجام
میشود؛
بنابراین
حتی اگر
مقدار
بسیار
بیشتری
نوشته شده
باشد، ممکن
است خروجی
به اندازهٔ
دادهشده
نباشد.
از این گزینه برای جلوگیری از اتمام فضای دیسک در اجراهای طولانی استفاده کنید.
-M cpumask
تنظیم cpumask
برای
ردگیری. این
گزینه تنها
بر آخرین
نمونه بافر
دادهشده
اثر
میگذارد.
اگر قبل از
هر نمونه
بافری
ارائه شود،
بر بافر
اصلی تأثیر
میگذارد.
مقدار
ارائهشده
باید یک عدد
در مبنای ۱۶
(hex) باشد.
trace-cmd set -p function -M c -B events13 -e all -M 5
اگر -M
مشخص نشود،
ماسک بدون
تغییر باقی
میماند.
برای
فعالسازی
همهٔ
پردازندهها
(CPUs)، مقدار '-1' را
ارسال کنید.
-i
بهطور
پیشفرض،
اگر
رویدادی
فهرست شود
که trace-cmd آن را
پیدا نکند،
با یک خطا
خارج
میشود. این
گزینه
صرفاً از
رویدادهایی
که در خط
فرمان ذکر
شدهاند
اما در
سیستم یافت
نمیشوند،
صرفنظر
میکند.
-q | --quiet
از نمایش
خروجی
عادی،
بهجز در
صورت بروز
خطا،
جلوگیری
میکند.
--max-graph-depth depth
حداکثر
عمقی را که
ردیاب function_graph در
یک تابع به
ردیابی
میپردازد،
تعیین
میکند.
مقدار یک
فقط نشان
میدهد که
فضای
کاربری در
کجا وارد
هسته
میشود،
اما هیچیک
از توابع
فراخوانیشده
در هسته را
نشان
نمیدهد.
مقدار
پیشفرض
صفر است که
به معنای
عدم وجود
محدودیت
است.
--cmdlines-size size
تعداد
ورودیهایی
را که فایل
ردگیری
هسته "saved_cmdlines"
میتواند
در بر داشته
باشد،
تعیین
میکند. این
فایل یک
بافر
حلقهای (circular buffer)
است که
نگاشت بین
cmdlineها و PIDها را
ذخیره
میکند. در
صورت پر
شدن، منجر
به cmdlineهای
حلنشده
("<...>") در
ردگیری
میشود.
مقدار
پیشفرض
هسته 128 است.
--module module
نام یک
ماژول را در
ردگیری
تابع فیلتر
میکند. این
معادل
افزودن
:mod:module
پس از سایر
توابعی است
که فیلتر
میشوند.
اگر هیچ
فیلتر تابع
دیگری مشخص
نشده باشد،
تمام توابع
ماژول
فیلتر
خواهند شد.
'--module snd' معادل است با '-l :mod:snd'
'--module snd -l "*jack*"' معادل است با '-l "*jack*:mod:snd"'
'--module snd -n "*"' معادل است با '-n :mod:snd'
--stderr
باعث
میشود
خروجی به
جای stdout به stderr
هدایت شود،
اما خروجی
دستوری که
اجرا شده
تغییر
نخواهد کرد.
این گزینه
زمانی مفید
است که
میخواهید
خروجی
دستور در
حال اجرا را
مشاهده و
پایش کنید،
اما
خروجیهای
خود trace-cmd را
نبینید.
--fork
اگر
دستوری
مشخص شده
باشد، trace-cmd
منتظر
پایان
یافتن آن
دستور
میماند،
مگر اینکه
گزینهٔ --fork
مشخص شده
باشد. در این
حالت،
دستور را
منشعب (fork)
کرده و
فوراً
بازمیگردد.
--verbose[=level]
سطح ثبت
گزارش (log level) را
تعیین
میکند.
سطوح
پشتیبانیشده
عبارتند از
"none"، "critical"،
"error"، "warning"، "info"،
"debug"، "all" یا
شناسههای
آنها "0"،
"1"، "2"، "3"،
"4"، "5"، "6".
تنظیم سطح
گزارش روی
یک مقدار
خاص، تمامی
لاگهای آن
سطح و تمام
سطوح پیش از
آن را فعال
میکند. در
صورت عدم
تعیین، سطح
بهطور
پیشفرض
روی "info" قرار
میگیرد.
مثال: فعالسازی تمام لاگهای critical، error و warning
trace-cmd set --verbose=warning
فعالسازی
همه
رویدادها
برای
ردیابی:
تنظیم
ردیاب
تابع:
# trace-cmd set -p function