Це команда trace-cmd-record, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS.
ПРОГРАМА:
ІМ'Я
trace-cmd-record - запис трасування з внутрішнього трассера Ftrace Linux
СИНТАКСИС
trace-cmd запис [ВАРІАНТИ] [команда]
ОПИС
Команда trace-cmd(1) команда запису налаштує трассер ядра Ftrace Linux для запису
зазначені плагіни або події, які відбуваються під час команда виконує. Якщо команди немає
якщо вказано, то записуватиме, доки користувач не натисне Ctrl-C.
Команда запису trace-cmd налаштує засіб трасування Ftrace, щоб почати трасування різних
події або плагіни, які вказуються в командному рядку. Потім він створить ряд
трасування процесів (по одному на центральний процесор), які почнуть запис з кільцевого буфера ядра
прямо в тимчасові файли. Коли команда виконана (або натиснуто Ctrl-C), усі
файли будуть об’єднані у файл trace.dat, який пізніше можна буде прочитати (див
trace-cmd-звіт(1)).
ВАРІАНТИ
-p підключати
Вкажіть плагін трасування. Плагіни — це спеціальні засоби трасування Ftrace, які зазвичай роблять більше ніж
просто простежте подію. Поширені плагіни функція, функція_граф, preemptirqsoff,
irqsoff, випередження та Прокидайся. Плагін повинен підтримуватися запущеним ядром. До
див. список доступних плагінів, див trace-cmd-list(1).
-e подія
Вкажіть подію для відстеження. До Linux додано різні статичні точки трасування
ядро. Вони згруповані за підсистемою, де ви можете ввімкнути всі події даного
підсистеми або вкажіть конкретні події, які потрібно активувати. The подія має формат
"підсистема: ім'я-події". Ви також можете просто вказати підсистему без
:назва події або ім'я події без "підсистеми:". Використання "-e sched_switch" дозволить
увімкніть подію "sched_switch", де як, "-e sched" дозволить усі події під
підсистема «sched».
«Подія» також може містити вирази glob. Тобто "*stat*" буде
виберіть усі події (або підсистеми), у яких є символи "stat".
імена.
Ключове слово «all» можна використовувати для ввімкнення всіх подій.
-a
Кожна подія, що записується, має вихідний файл, збережений у вихідному файлі
щоб мати можливість відобразити його пізніше. Але якщо інші події включені в трасування без
Знання trace-cmd, формати цих подій не будуть записані, а trace-cmd
звіт не зможе їх відобразити. Якщо це так, то вкажіть -a
і формат для всіх подій у системі буде збережено.
-T
Увімкніть стектрейсинг для кожної події. Наприклад:
-0 [003] 58549.289091: sched_switch: kworker/0:1:0 [120] R ==> trace-cmd:2603 [120]
-0 [003] 58549.289092: kernel_stack:
=> розклад (ffffffff814b260e)
=> cpu_idle (ffffffff8100a38c)
=> початкова_вторинна (ffffffff814ab828)
--func-стек
Увімкнути трасування стека для всіх функцій. Зауважте, що це стосується лише "функції"
плагін трассера, і набуде чинності лише в тому випадку, якщо буде використано параметр -l і він буде успішним
обмежувальні функції. Якщо трасування функції не відфільтровано, а трасування стека є
увімкнено, ви можете заблокувати машину в реальному часі.
-f фільтрувати
Вкажіть фільтр для попередньої події. Це повинно статися після а -e. Це відфільтрує
які події записуються на основі змісту події. Фільтрування передається до
ядро безпосередньо, тому яка фільтрація дозволена може залежати від версії ядра
ти маєш. По суті, це дозволить вам використовувати нотацію C, щоб перевірити, чи має бути подія
оброблено чи ні.
==, >=, <=, >, <, &, |, && та ||
Наведене вище зазвичай безпечно використовувати для порівняння полів.
-R викликати
Вкажіть тригер для попередньої події. Це повинно статися після а -e. Це додасть a
даний тригер даної події. Щоб увімкнути лише тригер, а не саму подію,
потім розмістіть подію після -v варіант.
Додаткову інформацію див. у документі Documentation/trace/events.txt у джерелі ядра Linux
інформація про тригери.
-v
Це призведе до того, що всі події, зазначені після нього в командному рядку, не відстежуються.
Це корисно для вибору підсистеми для відстеження, але для того, щоб виключити різні події.
Наприклад: "-e sched -v -e "*stat\*"" дозволить усі події в підсистемі розкладу
за винятком тих, у назві яких є "stat".
Примітка: опція *-v* була взята з способу GREP(1) інвертує наступне
сірники.
-F
Це відфільтрує лише виконуваний файл, який вказано в командному рядку. Якщо немає команди
дано, то він сам відфільтрує (досить безглуздо). Використання -F дозволить вам простежити
лише події, викликані даною командою.
-P ПІД
Як і в -F але дозволяє вказати ідентифікатор процесу для відстеження.
-c
Використовується з будь-яким -F також відстежувати дітей процесу.
-C годинник
Встановіть годинник трасування на «годинник».
Скористайтеся кнопкою trace-cmd(1) список -C, щоб побачити, які годинники доступні.
-o вихідний файл
За замовчуванням звіт trace-cmd створить a trace.dat файл. Ви можете вказати інше
файл для запису за допомогою -o варіант.
-l ім'я функції
Це обмежить функція та функція_граф трасувальники, щоб відстежувати лише дане
ім'я функції. Більше одного -l можна вказати в командному рядку, щоб відстежити більше
ніж одна функція. Також дозволено обмежене використання виразів glob. Це такі
матч* фільтрувати лише функції, які починаються з матч. * матч тільки фільтрувати
функції, які закінчуються на матч. *матч\* фільтрувати лише функції, які містять
матч.
-g ім'я функції
Цей параметр призначений для плагіна function_graph. Він побудує графік заданої функції. Це
тобто відстежуватиме лише функцію та всі функції, які вона викликає. Ви можете мати більше
ніж один -g у командному рядку.
-n ім'я функції
Це має протилежний ефект -l. Функція, задана за допомогою -n варіанту не буде
простежено. Це має пріоритет, тобто якщо ви включаєте ту саму функцію для обох -n
та -l, це не буде простежено.
-d
Деякі плагіни трасування включають функцію трасування за замовчуванням. Як і трасери затримки.
Цей параметр запобігає вмиканню трасування функцій під час запуску.
-D
Опція -d спробує використати параметр функції трасування, щоб вимкнути функцію трасування
(якщо доступно), інакше за замовчуванням буде файл proc:
/proc/sys/kernel/ftrace_enabled, але не торкнеться його, якщо є параметр функції трасування
доступні. -D Параметр вимкне як файл процедури ftrace_enabled, так і файл
Опція функції трасування, якщо вона існує.
Зауважте, що ця функція вимикає відстеження для всіх користувачів, включаючи користувачів
поза межами ftrace (stack_tracer, perf тощо).
-O варіант
Ftrace має різні параметри, які можна ввімкнути або вимкнути. Це дозволяє встановити
їх. Додавання тексту немає до параметра вимикає його. Наприклад: "-O nograph-time"
вимкне опцію Ftrace "час графіка".
-s інтервал
Процеси, які trace-cmd створює для запису з кільцевого буфера, потрібно пробудити
зробити запис. Налаштування інтервал до нуля призведе до пробудження процесів
щоразу, коли нові дані записуються в буфер. Але оскільки Ftrace записує ядро
активності, акт цього процесу повернення до сну може викликати нові події в
кільцевий буфер, який активує процес. Це непотрібно додасть додаткові дані
в кільцевий буфер.
Показник "інтервалу" - мікросекунди. За замовчуванням встановлено значення 1000 (1 мс).
Це час, протягом якого кожен процес запису буде спати перед тим, як прокинеться
записувати будь-які нові дані, які були записані в кільцевий буфер.
-r пріоритет
Пріоритет для запуску потоків захоплення. У напруженій системі фіксація сліду
потоки можуть бути заблоковані, а події можуть бути втрачені. Це підвищує пріоритет тих
потоків з пріоритетом реального часу (FIFO). Але використовуйте цей варіант обережно, він також може
змінити поведінку системи, що відстежується.
-b розмір
Це встановлює розмір кільцевого буфера розмір кілобайт. Оскільки кільцевий буфер Ftrace є
на ЦП, цей розмір є розміром кожного кільцевого буфера ЦП всередині ядра. Використання
"-b 10000" на машині з 4 ЦП дозволить Ftrace мати загальний розмір буфера 40
Мегз
-B ім'я буфера
Якщо ядро підтримує кілька буферів, це додасть буфер із заданою назвою.
Якщо ім’я буфера вже існує, цей буфер просто скидається і не буде видалено
в кінці виконання запису. Якщо буфер створено, він буде видалений на
закінчення виконання (крім випадків -k встановлено, або старт була використана команда).
Після вказівки назви буфера всі події, додані після цього, будуть
пов'язаний з цим буфером. Якщо буфер не вказано, або подія
вказано перед ім'ям буфера, воно буде пов'язано з
основний (верхній) буфер.
trace-cmd record -e sched -B block -e block -B time -e таймер сну 1
Наведене вище дозволить увімкнути всі заплановані події в головному буфері. Це буде
потім створіть екземпляр буфера «блок» і ввімкніть усі події блокування всередині
той буфер. Створюється екземпляр буфера "час" і всі події таймера
буде ввімкнено для цієї події.
-m розмір
Максимальний розмір буфера на процесор у кілобайтах. Зауважте, через округлення до
розмір сторінки, номер може бути не зовсім правильний. Також це виконується перемиканням
між двома буферами, які вдвічі менші від заданого розміру, тому вихід може бути не таким
заданий розмір, навіть якщо було написано набагато більше.
Використовуйте це, щоб запобігти вичерпанню дискового простору для тривалої роботи.
-M cpumask
Встановіть cpumask для відстеження. Це впливає лише на останній наданий екземпляр буфера. Якщо
надається перед будь-яким екземпляром буфера, то він впливає на основний буфер. Значення
має бути шістнадцятковий номер.
trace-cmd record -p функція -M c -B події13 -e все -M 5
Якщо -M не вказано, маска залишиться незмінною. Щоб увімкнути всі
ЦП, введіть значення '-1'.
-k
За замовчуванням, коли trace-cmd закінчить трасування, він скине буфери та вимкне їх
всі можливості трасування. Ця опція не дозволяє trace-cmd вимикати трасування
і скидання буфера. Цей параметр корисний для налагодження trace-cmd.
Примітка: зазвичай trace-cmd повертає файл "tracing_on" на те, що він
було до того, як його назвали. Ця опція залишить цей файл рівним нулю.
-i
За замовчуванням, якщо в списку вказана подія, яку trace-cmd не знаходить, вона вийде з командою
помилка. Ця опція просто ігнорує події, які перераховані в командному рядку, але є
не знайдено в системі.
-N хост: порт
Якщо на іншій машині запущено "trace-cmd listen", цей параметр використовується для отримання даних
надіслано на цю машину з пакетами UDP. Замість запису у вихідний файл дані
відправляється на віддалену скриньку. Це ідеально підходить для вбудованих машин з невеликим сховищем,
або мати єдину машину, яка зберігатиме всі дані в одному сховищі.
Примітка. Цей параметр не підтримується плагінами для відстеження затримок:
wakeup, wakeup_rt, irqsoff, preemptoff і preemptirqsoff
-t
Цей параметр використовується з -N, коли є потреба надіслати оперативні дані за допомогою TCP
пакети замість UDP. Хоча TCP не так швидкий, як надсилання пакетів UDP,
але це може знадобитися, якщо мережа не настільки надійна, а кількість даних — ні
це інтенсивно, і потрібна гарантія, що вся відстежена інформація буде передана
успішно.
--дата
З --дата Параметр "trace-cmd" запише часові позначки в буфер трасування після
він закінчив запис. Потім він зіставляє позначку часу з gettimeofday, що буде
дозволити виведення часу стіни з часових позначок, які читають створені trace.dat файлу.
--профіль
З --профіль Параметр "trace-cmd" дозволить відстежувати, яке можна використовувати з
trace-cmd-звіт(1) --опція профілю. Якщо трассер -p не задається, а функція графіка
глибина підтримується ядром, тоді буде ввімкнено функцію трасування function_graph
глибина одиниця (показує лише те місце, де простір користувача входить у ядро). Це також дозволить
різні точки відстеження з стеком, щоб звіт міг показувати, де є завдання
було заблоковано найдовше.
Читати trace-cmd-профіль(1) для більш детальної інформації та прикладів.
-H події-гачки
Додайте спеціальні відповідності подій, щоб з’єднати будь-які дві події разом. Коли не використовується з
--профіль, він збереже параметр, і це буде використано звітом trace-cmd
--профіль теж. Тобто:
запис trace-cmd -H hrtimer_expire_entry,hrtimer/hrtimer_expire_exit,hrtimer,sp
звіт trace-cmd --профіль
Буде профіль hrtimer_expire_entry та hrtimer_expire_ext times.
Читати trace-cmd-профіль(1) для формату.
--stderr
Вихід має бути stderr замість stdout, але вихід команди виконується
не буде змінено. Це корисно, якщо ви хочете контролювати вихід команди
виконується, але не бачить результат від trace-cmd.
ПРИКЛАДИ
Основний спосіб відстеження всіх подій:
# trace-cmd record -e all ls > /dev/null
# звіт trace-cmd
trace-cmd-13541 [003] 106260.693809: filemap_fault: адреса=0x128122 зміщення=0xce
trace-cmd-13543 [001] 106260.693809: kmalloc: call_site=81128dd4 ptr=0xffff88003dd83800 bytes_req=768 bytes_alloc=1024 gfp_flags=GFP_ZEROKRNEL|GFP_ZERO
ls-13545 [002] 106260.693809: kfree: call_site=810a7abb ptr=0x0
ls-13545 [002] 106260.693818: sys_exit_write: 0x1
Щоб використовувати трасування функцій із трасуванням перемикання за розкладом:
# trace-cmd record -p function -e sched_switch ls > /dev/null
# звіт trace-cmd
ls-13587 [002] 106467.860310: функція: hrtick_start_fair <-- pick_next_task_fair
ls-13587 [002] 106467.860313: sched_switch: prev_comm=trace-cmd prev_pid=13587 prev_prio=120 prev_state=R ==> next_comm=trace-cmd next_13583 next_prio120
trace-cmd-13585 [001] 106467.860314: функція: native_set_pte_at <-- __do_fault
trace-cmd-13586 [003] 106467.860314: функція: up_read <-- do_page_fault
ls-13587 [002] 106467.860317: функція: __phys_addr <-- графік
trace-cmd-13585 [001] 106467.860318: функція: _raw_spin_unlock <-- __do_fault
ls-13587 [002] 106467.860320: функція: native_load_sp0 <-- __switch_to
trace-cmd-13586 [003] 106467.860322: функція: down_read_trylock <-- do_page_fault
Ось чудовий спосіб знайти, які переривання мають найбільшу затримку:
# trace-cmd record -p function_graph -e irq_handler_entry -l do_IRQ sleep 10
# звіт trace-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 us | }
-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 us | }
-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 us | }
-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 us | }
-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 us | }
Приклад профілю:
# trace-cmd record --profile sleep 1
# звіт trace-cmd --profile --comm sleep
завдання: сон-21611
Подія: sched_switch:R (1) Усього: 99442 Сер.: 99442 Макс.: 99442 Мін.: 99442
1 всього:99442 хв:99442 макс.:99442 сер.=99442
=> ftrace_raw_event_sched_switch (0xffffffff8105f812)
=> __розклад (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)
Подія: sched_switch:S (1) Усього: 1000506680 Сер.: 1000506680 Макс.: 1000506680 Мін.: 1000506680
1 всього:1000506680 хв:1000506680 макс.:1000506680 сер.=1000506680
=> ftrace_raw_event_sched_switch (0xffffffff8105f812)
=> __розклад (0xffffffff8150810a)
=> розклад (0xffffffff815084b8)
=> do_nanosleep (0xffffffff8150b22c)
=> hrtimer_nanosleep (0xffffffff8108d647)
=> SyS_nanosleep (0xffffffff8108d72c)
=> return_to_handler (0xffffffff8150e3c8)
=> tracesys_phase2 (0xffffffff8150c304)
Подія: sched_wakeup:21611 (1) Усього: 30326 Середнє: 30326 Макс.: 30326 Мін: 30326
1 всього:30326 хв:30326 макс.:30326 сер.=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-record онлайн за допомогою служб onworks.net