29장. ftrace를 사용하여 대기 시간 추적
ftrace
유틸리티는 RHEL for Real Time 커널과 함께 제공되는 진단 기능 중 하나입니다. 개발자가 ftrace
를 사용하여 사용자 공간 외부에서 발생하는 대기 시간 및 성능 문제를 분석하고 디버깅할 수 있습니다. ftrace
유틸리티에는 다양한 방법으로 유틸리티를 사용할 수 있는 다양한 옵션이 있습니다. 컨텍스트 전환을 추적하거나 우선순위가 높은 작업이 발생하는 데 걸리는 시간을 측정하거나, 인터럽트 길이를 비활성화하거나, 지정된 기간 동안 실행되는 모든 커널 함수를 나열하는 데 사용할 수 있습니다.
함수 추적기와 같은 일부 ftrace
추적기에서는 과도하게 많은 양의 데이터를 생성할 수 있으므로 추적 로그 분석을 시간 소모적인 작업으로 전환할 수 있습니다. 그러나 애플리케이션이 중요한 코드 경로에 도달하면 추적자를 시작하고 종료하도록 지시할 수 있습니다.
사전 요구 사항
- 관리자 권한이 있습니다.
29.1. ftrace 유틸리티를 사용하여 대기 시간 추적
ftrace
유틸리티를 사용하여 대기 시간을 추적할 수 있습니다.
프로세스
시스템에서 사용 가능한 추적기를 확인합니다.
cat /sys/kernel/debug/tracing/available_tracers function_graph wakeup_rt wakeup preemptirqsoff preemptoff irqsoff function nop
# cat /sys/kernel/debug/tracing/available_tracers function_graph wakeup_rt wakeup preemptirqsoff preemptoff irqsoff function nop
Copy to Clipboard Copied! ftrace
의 사용자 인터페이스는debugfs
내의 일련의 파일입니다.ftrace
파일은/sys/kernel/debug/tracing/
디렉터리에도 있습니다./sys/kernel/debug/tracing/
디렉터리로 이동합니다.cd /sys/kernel/debug/tracing
# cd /sys/kernel/debug/tracing
Copy to Clipboard Copied! 추적을 활성화하면 시스템 성능에 영향을 줄 수 있으므로 이 디렉터리의 파일은 root 사용자만 수정할 수 있습니다.
추적 세션을 시작하려면 다음을 수행합니다.
-
/sys/kernel/debug/tracing/available_tracers
의 사용 가능한 추적기 목록에서 사용할 추적기를 선택합니다. 선택기 이름을
/sys/kernel/debug/tracing/current_tracer
에 삽입합니다.echo preemptoff > /sys/kernel/debug/tracing/current_tracer
# echo preemptoff > /sys/kernel/debug/tracing/current_tracer
Copy to Clipboard Copied! 참고echo 명령과 함께 단일 '>'를 사용하면 파일의 기존 값을 재정의합니다. 파일에 값을 추가하려면 대신 '>>'를 사용합니다.
-
function-trace 옵션은
wakeup_rt
,preemptirqsoff
와의 대기 시간을 추적하므로 자동으로함수 추적을
활성화하여 오버헤드를 과장할 수 있기 때문에 유용합니다.function
및function_graph
추적이 활성화되어 있는지 확인합니다.cat /sys/kernel/debug/tracing/options/function-trace 1
# cat /sys/kernel/debug/tracing/options/function-trace 1
Copy to Clipboard Copied! -
값
1
은function
및function_graph
추적이 활성화되었음을 나타냅니다. -
값이
0
이면function
및function_graph
추적이 비활성화됩니다.
-
값
기본적으로
function
및function_graph
추적이 활성화됩니다.function
및function_graph
추적을 켜거나 해제하려면 적절한 값을/sys/kernel/debug/tracing/options/function-trace
파일에 에코합니다.echo 0 > /sys/kernel/debug/tracing/options/function-trace echo 1 > /sys/kernel/debug/tracing/options/function-trace
# echo 0 > /sys/kernel/debug/tracing/options/function-trace # echo 1 > /sys/kernel/debug/tracing/options/function-trace
Copy to Clipboard Copied! 중요echo
명령을 사용할 때 값과 > 문자 사이에 공백 문자를배치해야
합니다. 쉘 프롬프트에서0
>,1
> , 1> 및2
>를 사용하는 것은 표준 입력, 표준 출력 및 표준 오류를 나타냅니다. 실수로 사용하면 예기치 않은 추적 출력이 발생할 수 있습니다./debugfs/tracing/
디렉터리에 있는 다양한 파일의 값을 변경하여 추적기의 세부 정보 및 매개 변수를 조정합니다.예를 들면 다음과 같습니다.
irqsoff
,preemptoff
,preempirqsoff
및wakeup
추적기에서는 대기 시간을 지속적으로 모니터링합니다.tracing_max_latency
에 기록된 대기 시간보다 큰 대기 시간을 기록하면 해당 대기 시간이 기록되고tracing_max_latency
가 새 최대 시간으로 업데이트됩니다. 이러한 방식으로tracing_max_latency
는 항상 마지막으로 재설정되었기 때문에 기록된 가장 높은 대기 시간을 표시합니다.최대 대기 시간을 재설정하려면
tracing_max_latency
파일에0
을 에코합니다.echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
# echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
Copy to Clipboard Copied! 설정된 양보다 큰 대기 시간만 보려면 마이크로초 단위로 값을 에코합니다.
echo 200 > /sys/kernel/debug/tracing/tracing_max_latency
# echo 200 > /sys/kernel/debug/tracing/tracing_max_latency
Copy to Clipboard Copied! 추적 임계값이 설정되면 최대 대기 시간 설정을 덮어씁니다. 대기 시간이 임계값보다 크면 최대 대기 시간에 관계없이 기록됩니다. 추적 파일을 검토할 때 마지막으로 기록된 대기 시간만 표시됩니다.
임계값을 설정하려면 기록해야 하는 microseconds 수를 에코합니다.
echo 200 > /sys/kernel/debug/tracing/tracing_thresh
# echo 200 > /sys/kernel/debug/tracing/tracing_thresh
Copy to Clipboard Copied!
추적 로그를 확인합니다.
cat /sys/kernel/debug/tracing/trace
# cat /sys/kernel/debug/tracing/trace
Copy to Clipboard Copied! 추적 로그를 저장하려면 다른 파일에 복사합니다.
cat /sys/kernel/debug/tracing/trace > /tmp/lat_trace_log
# cat /sys/kernel/debug/tracing/trace > /tmp/lat_trace_log
Copy to Clipboard Copied! 추적 중인 함수 보기:
cat /sys/kernel/debug/tracing/set_ftrace_filter
# cat /sys/kernel/debug/tracing/set_ftrace_filter
Copy to Clipboard Copied! -
/sys/kernel/debug/tracing/set_ftrace_filter
의 설정을 편집하여 추적되는 함수를 필터링합니다. 파일에 필터를 지정하지 않으면 모든 기능이 추적됩니다. 필터 설정을 변경하려면 추적할 함수의 이름을 에코합니다. 이 필터를 사용하면 검색어의 시작 또는 끝에 '*' 와일드카드를 사용할 수 있습니다.
예를 들어 ftrace 예제 를 참조하십시오.