- Today
- Total
Byeo
ftrace 사용법 본문
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를 걸어봅니다. 그리 저희가 원하는 결과만 나오는지 확인합니다.
잘 동작하네요~
'프로그래밍 (Programming) > 네트워크 스택' 카테고리의 다른 글
Listen socket의 TCP SYN 처리 2 (0) | 2024.05.31 |
---|---|
Listen socket의 TCP SYN 처리 1 (0) | 2024.05.25 |
accept system call 3 (inet_accept) (0) | 2024.05.19 |
[Linux Kernel] Blocking I/O (0) | 2024.05.17 |
accept system call 2 (inet_csk_accept) (0) | 2024.05.15 |