Get Kernel Scheduling Latency using cyclictest
$ git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git
$ cd rt-tests
$ git checkout stable/v1.0
$ make all
$ make install
(https://kernelshark.org : KernelShark 1.0 선택)
$ sudo apt-get install build-essential git cmake libjson-c-dev -y
$ sudo apt-get install freeglut3-dev libxmu-dev libxi-dev -y
$ sudo apt-get install qtbase5-dev -y
$ sudo apt-get install graphviz doxygen-gui -y
$ make install
$ make install_gui
원하는 이벤트 선택
원하는 이벤트 선택
Marker A와 Marker B의 Delta 값을 볼 수 있다. (0.106 microsecond)
왼쪽 상단의 Filter > Advance Filtering
sched_wakeup 의 comm==’cyclictest’만을 통과하도록 필터 옵션 추가 > Apply
sched_switch 의 next_comm==’cyclictest’만을 통과하도록 필터 옵션 추가 > Apply
sys_enter_clock_nanosleep와 sys_exit_clock_nanosleep은 다른 조건 없이 추가 > Apply
sched_switch와 sched_wakeup 이벤트가 필터링되지 않은 상태에서
-w 옵션을 주어 report 를 진행하면 latency를 측정해준다.
report_100_cycle.txt를 살펴보면 각 cycle에서의 Latency가 기록되어 있다.
위의 Latency는 KernelShark에서도 확인 가능하다.
(cyclictest:17348 프로세스가 wakeup한 이후부터 sched_switch되기까지의 시간을 측정했다.)
trace-cmd report
의 -w옵션을 사용하면 아래와 같이 평균과 최대, 최소값도 확인할 수 있다.
cyclictest 이외에, Scheduling Latency를 리스트업 하기 위해 parsing.py
코드를 작성하였으며 trace-cmd report
결과를 텍스트 파일로 받아 진행했다.
latency_report
폴더는 report 결과를 텍스트 파일로 저장한 것이며,
parsing_result
폴더는 report 결과를 파싱하여 cyclictest의 Scheduling Latency 를 측정하여 리스트업한 결과이다.
trace_report
폴더는 report에 w옵션을 부여한 결과로, parsing_result
내 결과와 동일함을 알 수 있다.