본문 바로가기

programming/Linux

ftrace 커널 성능 측정도구 사용법[How to ues ftrace]

 

/sys/kernel/debug/tracing 이라는 폴더에 ftrace가 있다.

tracing 폴더에 있는 파일들

 

ftrace는 성능에서 실질적으로 오버헤드가 없는 상태에서 추적이 가능하다

...더보기

라고 문서에 나와있지만 netperf 측정시, ftrace를 키고하니 성능이 30%정도 내려갔다. 

일반 프로그램에선 오버헤드가 별로 없지만 커널 컴파일등의 상황에서는 오버헤드를 확인할 필요가 있다.

 

기본사용법으로 

 

1. 필터할 커널 함수 설정

2. trace되는 결과 설정

3. trace 결과

4. 추가적인 옵션

 

1. trace filter 함수 설정

set_ftrace_filter 파일에 어떤 함수를 trace하고 싶은지 설정한다.

$echo vhost* > set_ftrace_filter
$echo handle_rx* >> set_ftrace_filter
$echo handle_tx* >> set_ftrace_filter
$cat set_ftrace_filter

방법은 위와같이 필터하고 싶은 함수이름을 set_ftrace_filter 파일에 넣으면 된다.

 

default 옵션으로는 모든 함수를 trace한다.
커널함수가 아니거나 inline으로 선언된 함수거나 등을 설정하면 에러가 뜨면서 default옵션으로 초기화된다.

 

2. trace되는 결과 설정

current_tracer파일을 설정하면된다.

hwlat blk mmiotrace function_graph wakeup_dl wakeup_rt wakeup function nop

등의 여러가지 옵션이 있다.

자주사용하는 3가지옵션은

nop : trace하지않는다.

function : trace결과를 함수형으로 저장한다.

function_graph : trace결과를 함수형 그래프로 저장한다.

 

$echo function_graph > current_tracer

예를들어 함수형 그래프로 trace결과를 설정한다.

 

 

3. trace 결과

trace결과는 trace이라는 파일에 저장되어있다.

cat trace

cpu, duration, function, calls 등이 기본 옵션이다.

 

 

4. 추가적인 옵션

 

 

available_filter_functions에는 추적 가능한 함수 목록이 있다.

cat available_filter_functions | grep vhost

만약 vhost 관련 함수들을 모두 추적하고 싶다면 위의 명령어로 목록을 확인하면 된다.

함수이름 [함수소속]으로 출력된다.

 

echo funcgraph-abstime > trace_options

등과 같은 옵션을 통해서 세부 trace 옵션을 지정할수 있다.

위의 옵션은 function_graph에서 absolute time을 표시하는 옵션이다.

제거 할때는 echo nofuncgraph-abstime > trace_options 옵션을 추가하면 된다.

상황에 맞는 옵션을 선택하여 좀더 효율적인 커널 성능측정을 할수있다.

 

자세한 사항은 문서 참고

https://lwn.net/Articles/548894/