Skip to content

aqaqsubin/Get-Kernel-Scheduling-Latency

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Get-Kernel-Scheduling-Latency

Get Kernel Scheduling Latency using cyclictest

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

KernelShark 1.0 설치

(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

KernelShark 1.0의 화면

Delta 계산

- Graph follow 체크

- Marker A 선택

원하는 이벤트 선택

- Marker B 선택

원하는 이벤트 선택

Marker A와 Marker B의 Delta 값을 볼 수 있다. (0.106 microsecond)

Event Filtering

왼쪽 상단의 Filter > Advance Filtering

sched_wakeup 의 comm==’cyclictest’만을 통과하도록 필터 옵션 추가 > Apply

sched_switch 의 next_comm==’cyclictest’만을 통과하도록 필터 옵션 추가 > Apply

sys_enter_clock_nanosleep와 sys_exit_clock_nanosleep은 다른 조건 없이 추가 > Apply

Trace report

sched_switch와 sched_wakeup 이벤트가 필터링되지 않은 상태에서

-w 옵션을 주어 report 를 진행하면 latency를 측정해준다.

report_100_cycle.txt를 살펴보면 각 cycle에서의 Latency가 기록되어 있다.

위의 Latency는 KernelShark에서도 확인 가능하다.

(cyclictest:17348 프로세스가 wakeup한 이후부터 sched_switch되기까지의 시간을 측정했다.)

trace-cmd report

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 내 결과와 동일함을 알 수 있다.

About

Get Kernel Scheduling Latency in cyclictest⏰ : Kernelshark, trace-cmd

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages