Byeo

ftrace 사용법 본문

프로그래밍 (Programming)/네트워크 스택

ftrace 사용법

BKlee 2024. 5. 23. 20:22
반응형

kernel function의 흐름이 모호할 때, ftrace가 도움을 줄 수 있습니다.

 

ftrace 사용법을 정리해봅니다. kernel source code를 호스트에서 갖고 있고, 이를 qemu로 부팅합니다. linux 5.15입니다.

 

1. kernel configuration

kernel configuration에서 FTRACE 관련 항목들의 설정을 확인합니다.

 

CONFIG_FTRACE=y
# CONFIG_BOOTTIME_TRACING is not set
CONFIG_FUNCTION_TRACER=y

 

available filter functions을 통해서 원하는 function만 tracing하도록 설정할 수 있습니다.

 

다른 설정들도 확인해서 필요한 값들도 있는지 확인합니다. (FTRACE 혹은 TRACER로 grep) 

 

make olddefconfig
make -j`nproc`

 

.config 파일을 재생성하고 kernel을 다시 컴파일합니다.

 

2. available_filter_functions 목록 확인 및 설정

컴파일을 완료한 linux kernel을 qemu로 실행하고, /sys/kernel/debug/tracing으로 이동합니다.

 

확인

해당 폴더 안에 available_filter_functions가 있는데요, 여기서 원하는 kernel 함수들이 있는지 한 번 확인합니다. tcp를 예시로 들면, 다음과 같이 검색해볼 수 있습니다.

 

 cat available_filter_functions  | grep tcp

 

 

그러면 위처럼 tcp와 관련된 함수들 목록을 확인할 수 있습니다.

 

설정

한 번 tcp와 관련된 함수들만 filter로 넣어봅니다.

 

echo tcp* > set_ftrace_filter

 

와일드카드가 적용됩니다. 어떤 함수들이 적용됐는지는 set_ftrace_filter를 출력해서 확인할 수 있습니다.

 

 

 

 

3. ftrace 활성화

이제 ftrace를 실제로 동작 시켜봅시다. 

 

echo 1 > tracing_on
echo function_graph > current_tracer


위는 tracing을 실제로 활성화, 아래는 trace 캡처 방식입니다. 지원하는 캡처 방식 및 출력 양식은 available_tracers에서 확인할 수 있습니다.

 

 

이렇게 되면 ftrace가 동작합니다. 결과는 trace를 통해서 확인할 수 있습니다. filter function을 general하게 주면 조금만 돌려도 trace 결과의 양이 상당합니다.

 

 

 

4. pid 필터

정확히 어느 process만을 확인하고 싶다면, pid 값을 set_ftrace_pid에 입력합니다.

echo 320 > set_ftrace_pid

 

5. trace 초기화

그 동안 기록되었던 trace 내용들을 초기화 합니다.

 

echo > trace

 

전부 지우면 다음과 같이 아무 내용도 나오지 않게 됩니다.

 

6. trace 결과 확인

자 이제 실행했던 코드 (listen상태)에 connect를 걸어봅니다. 그리 저희가 원하는 결과만 나오는지 확인합니다.

 

 

잘 동작하네요~

반응형
Comments