이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 Trace-cmd-record 명령입니다.
프로그램:
이름
Trace-cmd-record - Ftrace Linux 내부 추적기의 추적을 기록합니다.
개요
추적 cmd 기록 [옵션] [명령]
기술
The 추적 cmd(1) 기록 명령은 Ftrace Linux 커널 추적기를 설정하여
특정 플러그인이나 이벤트가 발생하는 동안 발생 명령 실행합니다. 명령이 없으면
주어지면 사용자가 Ctrl-C를 누를 때까지 녹음됩니다.
Trace-cmd의 기록 명령은 Ftrace 추적 프로그램을 설정하여 다양한 추적을 시작합니다.
명령줄에 제공되는 이벤트 또는 플러그인. 그러면 여러 개가 생성됩니다.
커널 링 버퍼에서 기록을 시작하는 추적 프로세스(CPU당 하나)
바로 임시 파일로 들어갑니다. 명령이 완료되면(또는 Ctrl-C를 누르면) 모든
파일은 나중에 읽을 수 있는 Trace.dat 파일로 결합됩니다(참조:
추적 cmd 보고서(삼)).
옵션
-p 플러그인
추적 플러그인을 지정합니다. 플러그인은 일반적으로 다음 이상의 기능을 수행하는 특수 Ftrace 추적 프로그램입니다.
그냥 이벤트를 추적해 보세요. 일반적인 플러그인은 기능, 함수_그래프, 선점,
이르크소프, 선점및 기상. 플러그인은 실행 중인 커널에서 지원되어야 합니다. 에게
사용 가능한 플러그인 목록을 확인하세요. 추적 cmd 목록(1).
-e event
추적할 이벤트를 지정합니다. 다양한 정적 추적 지점이 Linux에 추가되었습니다.
핵심. 특정 이벤트의 모든 이벤트를 활성화할 수 있는 하위 시스템별로 그룹화되어 있습니다.
하위 시스템을 사용하거나 활성화할 특정 이벤트를 지정합니다. 그만큼 event 형식이다
"하위 시스템:이벤트 이름". 또한
:이벤트 이름 또는 "하위 시스템:"이 없는 이벤트 이름입니다. "-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: 커널_스택:
=> 일정 (ffffffff814b260e)
=> CPU_idle (ffffffff8100a38c)
=> start_secondary (ffffffff814ab828)
--func-스택
모든 함수에서 스택 추적을 활성화합니다. 이는 "기능"에만 적용 가능합니다.
플러그인 추적 프로그램이며 -l 옵션이 사용되고 성공한 경우에만 적용됩니다.
기능을 제한합니다. 함수 추적 프로그램이 필터링되지 않고 스택 추적이 다음과 같은 경우
활성화하면 기기를 실시간으로 잠글 수 있습니다.
-f 필터링
이전 이벤트에 대한 필터를 지정합니다. 이 작업은 a 후에 와야 합니다. -e. 이렇게 하면 필터링됩니다.
이벤트 내용에 따라 어떤 이벤트가 기록되는지. 필터링은 다음으로 전달됩니다.
커널에 직접 연결되므로 허용되는 필터링은 커널 버전에 따라 달라질 수 있습니다.
당신은 가지고 있습니다. 기본적으로 C 표기법을 사용하여 이벤트가 표시되어야 하는지 확인할 수 있습니다.
처리 여부.
==, >=, <=, >, <, &, |, && 및 ||
위의 내용은 일반적으로 필드를 비교하는 데 사용하는 것이 안전합니다.
-R 트리거
이전 이벤트에 대한 트리거를 지정합니다. 이 작업은 a 후에 와야 합니다. -e. 그러면
주어진 이벤트에 대한 트리거를 제공합니다. 이벤트 자체는 활성화하지 않고 트리거만 활성화하려면
그런 다음 이벤트를 -v 옵션을 선택합니다.
자세한 내용은 Linux 커널 소스의 Documentation/trace/events.txt를 참조하세요.
트리거에 대한 정보.
-v
이로 인해 명령줄에서 그 뒤에 지정된 모든 이벤트가 추적되지 않습니다.
이는 추적할 하위 시스템을 선택하지만 다양한 이벤트를 제외하는 데 유용합니다.
예: "-e sched -v -e "*stat\*""는 sched 하위 시스템의 모든 이벤트를 활성화합니다.
이름에 "stat"이 있는 경우는 제외됩니다.
참고: *-v* 옵션은 다음에서 가져왔습니다. GREP(1)은 다음을 뒤집는다
성냥.
-F
그러면 명령줄에 제공된 실행 파일만 필터링됩니다. 명령이 없으면
주어지면 자체적으로 필터링됩니다(상당히 무의미합니다). 사용 -F 추적하게 해줄게
주어진 명령으로 인해 발생하는 이벤트만 해당됩니다.
-P PID
유사하게 -F 하지만 추적할 프로세스 ID를 지정할 수 있습니다.
-c
다음 중 하나와 함께 사용됨 -F 프로세스의 자식도 추적합니다.
-C 시계
추적 시계를 "시계"로 설정합니다.
추적 cmd(1) list -C를 사용하여 어떤 시계를 사용할 수 있는지 확인합니다.
-o 결과물 파일
기본적으로 Trace-cmd 보고서는 추적.dat 파일. 다른 것을 지정할 수 있습니다
와 함께 쓸 파일 -o 옵션을 선택합니다.
-l 함수 이름
이렇게 하면 기능 그리고 함수_그래프 주어진 것만 추적하는 추적기
함수 이름. 하나 이상 -l 더 많은 것을 추적하기 위해 명령줄에 지정할 수 있습니다.
하나의 기능보다. glob 표현식의 제한된 사용도 허용됩니다. 이것들은
성냥* 다음으로 시작하는 함수만 필터링하려면 일치. *성냥 필터링만 하기
다음으로 끝나는 함수 일치. *성냥\* 다음을 포함하는 함수만 필터링하려면
일치.
-g 함수 이름
이 옵션은 function_graph 플러그인용입니다. 주어진 함수를 그래프로 표시합니다. 저것
즉, 호출하는 함수와 모든 함수만 추적합니다. 당신은 더 가질 수 있습니다
하나보다 -g 명령 행에서.
-n 함수 이름
이는 다음과 반대의 효과를 갖습니다. -l. 와 함께 제공되는 기능 -n 옵션은 되지 않습니다
추적. 즉, 두 가지 모두에 동일한 기능을 포함하는 경우 이것이 우선합니다. -n
그리고 -l, 추적되지 않습니다.
-d
일부 추적기 플러그인은 기본적으로 함수 추적기를 활성화합니다. 대기 시간 추적기와 같습니다.
이 옵션은 시작 시 함수 추적기가 활성화되는 것을 방지합니다.
-D
옵션 -d function-trace 옵션을 사용하여 함수 추적기를 비활성화하려고 합니다.
(사용 가능한 경우), 그렇지 않으면 기본값은 proc 파일입니다.
/proc/sys/kernel/ftrace_enabled, 그러나 function-trace 옵션이 다음과 같은 경우에는 건드리지 않습니다.
유효한. 그만큼 -D 옵션은 ftrace_enabled proc 파일과
함수 추적 옵션이 있는 경우.
참고로 이 기능은 사용자를 포함한 모든 사용자에 대한 추적을 비활성화합니다.
ftrace 추적 프로그램 외부(stack_tracer, perf 등)
-O option
Ftrace에는 활성화 또는 비활성화할 수 있는 다양한 옵션이 있습니다. 이를 통해 다음을 설정할 수 있습니다.
그들을. 텍스트 추가 아니 옵션을 사용하면 비활성화됩니다. 예: "-O nograph-time"
"graph-time" Ftrace 옵션이 비활성화됩니다.
-s 간격
링 버퍼에서 기록하기 위해 Trace-cmd가 생성하는 프로세스는 다음을 깨워야 합니다.
녹음을 하세요. 설정 간격 XNUMX으로 설정하면 프로세스가 깨어납니다.
새로운 데이터가 버퍼에 기록될 때마다. 하지만 Ftrace가 커널을 기록하고 있기 때문에
활동, 이 프로세스가 다시 절전 모드로 돌아가는 행위로 인해 새로운 이벤트가 발생할 수 있습니다.
프로세스를 다시 깨울 링 버퍼입니다. 이렇게 하면 불필요하게 추가 데이터가 추가됩니다.
링 버퍼에 넣습니다.
'간격' 측정항목은 마이크로초입니다. 기본값은 1000(1ms)으로 설정되어 있습니다.
각 녹음 프로세스가 깨어나기 전에 잠자기 상태가 되는 시간입니다.
링 버퍼에 기록된 새 데이터를 기록합니다.
-r 우선
캡처 스레드를 실행할 우선순위입니다. 바쁜 시스템에서 추적 캡처
스레드가 저장되고 이벤트가 손실될 수 있습니다. 이렇게 하면 해당 항목의 우선순위가 높아집니다.
실시간(FIFO) 우선순위로 스레드됩니다. 하지만 이 옵션을 주의해서 사용하세요.
추적 중인 시스템의 동작을 변경합니다.
-b 크기
링 버퍼 크기를 다음과 같이 설정합니다. 크기 킬로바이트. Ftrace 링 버퍼는
CPU당 이 크기는 커널 내부의 각 CPU당 링 버퍼 크기입니다. 사용
10000개의 CPU가 있는 머신에서 "-b 4"을 입력하면 Ftrace의 총 버퍼 크기는 40이 됩니다.
멕스.
-B 버퍼 이름
커널이 여러 버퍼를 지원하는 경우 지정된 이름의 버퍼가 추가됩니다.
버퍼 이름이 이미 존재하는 경우 해당 버퍼는 재설정되고 삭제되지 않습니다.
기록 실행이 끝나면. 버퍼가 생성되면 다음 단계에서 제거됩니다.
실행 종료( -k 설정되거나 스타트 명령이 사용되었습니다).
버퍼 이름을 지정한 후 그 이후에 추가되는 모든 이벤트는
해당 버퍼와 연결됩니다. 버퍼가 지정되지 않았거나 이벤트가 발생한 경우
버퍼 이름 앞에 지정되면
기본(최상위) 버퍼.
추적-cmd 기록 -e sched -B 블록 -e 블록 -B 시간 -e 타이머 절전 1
위의 내용은 메인 버퍼의 모든 sched 이벤트를 활성화합니다. 그럴 것이다
그런 다음 '블록' 버퍼 인스턴스를 생성하고 내부의 모든 블록 이벤트를 활성화합니다.
그 버퍼. '시간' 버퍼 인스턴스가 생성되고 모든 타이머 이벤트가 생성됩니다.
해당 이벤트에 대해 활성화됩니다.
-m 크기
CPU당 버퍼의 최대 크기(KB)입니다. 참고로 반올림으로 인해
페이지 크기에 따라 숫자가 완전히 정확하지 않을 수 있습니다. 또한 이는 전환을 통해 수행됩니다.
주어진 크기의 절반인 두 버퍼 사이에 있으므로 출력은 다음과 같지 않을 수 있습니다.
훨씬 더 많이 쓰여지더라도 주어진 크기입니다.
장기간 실행 시 디스크 공간이 부족해지는 것을 방지하려면 이를 사용하십시오.
-M CPU 마스크
추적할 CPUmask를 설정합니다. 주어진 마지막 버퍼 인스턴스에만 영향을 미칩니다. 만약에
버퍼 인스턴스 이전에 제공되면 기본 버퍼에 영향을 미칩니다. 가치
제공되는 숫자는 XNUMX진수여야 합니다.
추적-cmd 기록 -p 기능 -M c -B events13 -e 모두 -M 5
-M을 생략하면 마스크는 동일하게 유지됩니다. 모두 활성화하려면
CPU는 '-1' 값을 전달합니다.
-k
기본적으로 Trace-cmd가 추적을 마치면 버퍼를 재설정하고 비활성화합니다.
활성화된 모든 추적. 이 옵션은 Trace-cmd가 추적 프로그램을 비활성화하는 것을 방지합니다.
그리고 버퍼를 재설정합니다. 이 옵션은 Trace-cmd를 디버깅하는 데 유용합니다.
참고: 일반적으로 Trace-cmd는 "tracing_on" 파일을 원래 위치로 다시 설정합니다.
부르기 전이었습니다. 이 옵션을 사용하면 해당 파일이 XNUMX으로 설정된 상태로 유지됩니다.
-i
기본적으로 Trace-cmd가 찾지 못하는 이벤트가 나열되면 다음과 함께 종료됩니다.
오류. 이 옵션은 명령줄에 나열되어 있지만 다음과 같은 이벤트를 무시합니다.
시스템에서 찾을 수 없습니다.
-N 호스트:포트
다른 머신이 "trace-cmd listening"을 실행 중인 경우 이 옵션은 데이터를 가져오는 데 사용됩니다.
UDP 패킷과 함께 해당 머신으로 전송됩니다. 출력 파일에 쓰는 대신 데이터
원격 상자로 전송됩니다. 이는 저장 공간이 거의 없는 임베디드 기계에 이상적입니다.
또는 모든 데이터를 단일 저장소에 보관하는 단일 시스템을 보유하는 것입니다.
참고: 이 옵션은 대기 시간 추적기 플러그인에서는 지원되지 않습니다.
wakeup, wakeup_rt, irqsoff, preemptoff 및 preemptirqsoff
-t
이 옵션은 다음과 함께 사용됩니다. -N, TCP를 사용하여 실시간 데이터를 전송해야 하는 경우
UDP 대신 패킷. TCP는 UDP 패킷을 보내는 것만큼 빠르지는 않지만,
하지만 네트워크가 그다지 안정적이지 않거나 데이터 양이 충분하지 않은 경우 필요할 수 있습니다.
이는 매우 집중적이며 추적된 모든 정보가 전송된다는 보장이 필요합니다.
성공적으로.
--데이트
와 더불어 --데이트 옵션을 사용하면 "trace-cmd"는 이후 추적 버퍼에 타임스탬프를 기록합니다.
녹음이 끝났어요. 그런 다음 타임스탬프를 gettimeofday에 매핑합니다.
생성된 타임스탬프를 읽는 타임스탬프에서 실제 시간 출력을 허용합니다. 추적.dat 파일.
--프로필
와 더불어 --프로필 옵션 "trace-cmd"를 사용하면 다음과 함께 사용할 수 있는 추적이 활성화됩니다.
추적 cmd 보고서(1) --profile 옵션. 추적자라면 -p 설정되지 않았으며 함수 그래프
깊이가 커널에서 지원되면 function_graph 추적 프로그램이 다음과 같이 활성화됩니다.
깊이 XNUMX(사용자 공간이 커널에 들어가는 위치만 표시) 또한 활성화됩니다.
보고서에 작업이 있는 위치를 표시할 수 있는 스택 추적 기능이 있는 다양한 추적점
가장 오랫동안 차단되었습니다.
추적-cmd-프로필(1) 자세한 내용과 예는 다음과 같습니다.
-H 이벤트 후크
두 이벤트를 함께 연결하려면 맞춤 이벤트 일치를 추가하세요. 함께 사용하지 않을 때
--프로필, 매개변수를 저장하고 이는 Trace-cmd 보고서에서 사용됩니다.
--프로필도 마찬가지입니다. 그건:
추적-cmd 레코드 -H hrtimer_expire_entry,hrtimer/hrtimer_expire_exit,hrtimer,sp
추적 cmd 보고서 --프로필
hrtimer_expire_entry 및 hrtimer_expire_ext 시간을 프로파일링합니다.
추적-cmd-프로필(1) 형식.
--stderr
출력이 stdout 대신 stderr로 이동하지만 실행된 명령의 출력은
변경되지 않습니다. 이는 명령의 출력을 모니터링하려는 경우 유용합니다.
실행 중이지만 Trace-cmd의 출력이 표시되지 않습니다.
사용 예
모든 이벤트를 추적하는 기본 방법:
# 추적-cmd 기록 -e 모든 ls > /dev/null
# 추적-cmd 보고서
추적-cmd-13541 [003] 106260.693809: filemap_fault: 주소=0x128122 오프셋=0xce
추적-cmd-13543 [001] 106260.693809: kmalloc: call_site=81128dd4 ptr=0xffff88003dd83800 bytes_req=768 bytes_alloc=1024 gfp_flags=GFP_KERNEL|GFP_ZERO
ls-13545 [002] 106260.693809: kfree: call_site=810a7abb ptr=0x0
ls-13545 [002] 106260.693818: sys_exit_write: 0x1
sched 스위치 추적과 함께 함수 추적기를 사용하려면 다음을 수행하십시오.
# 추적-cmd 레코드 -p 기능 -e sched_switch ls > /dev/null
# 추적-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_pid=13583 next_prio=120
추적-cmd-13585 [001] 106467.860314: 함수: Native_set_pte_at <-- __do_fault
추적-cmd-13586 [003] 106467.860314: 함수: up_read <-- do_page_fault
ls-13587 [002] 106467.860317: 함수: __phys_addr <-- 일정
추적-cmd-13585 [001] 106467.860318: 함수: _raw_spin_unlock <-- __do_fault
ls-13587 [002] 106467.860320: 함수: Native_load_sp0 <-- __switch_to
추적-cmd-13586 [003] 106467.860322: 함수: down_read_trylock <-- do_page_fault
대기 시간이 가장 높은 인터럽트를 찾는 좋은 방법은 다음과 같습니다.
# 추적-cmd 기록 -p function_graph -e irq_handler_entry -l do_IRQ sleep 10
# 추적-cmd 보고서
-0 [000] 157412.933969: funcgraph_entry: | do_IRQ() {
-0 [000] 157412.933974: irq_handler_entry: irq=48 이름=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 이름=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 이름=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 이름=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 이름=eth0
-0 [000] 157417.888398: funcgraph_exit: + 25.943 us | }
프로필의 예:
# 추적-cmd 기록 --profile sleep 1
# 추적-cmd 보고서 --profile --comm sleep
작업: 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)
onworks.net 서비스를 사용하여 온라인으로 Trace-cmd-record를 사용하세요.