2017-03-20 14 views
0

내부 프로파일 러의 일부 형식을 구현 중입니다. 스레드가 컨텍스트 전환 시간 및 지속 시간을 알 수있는 방법이 있습니까? 나는 윈도우가 API를 추적하는 이벤트를 가지고 있고 얼마나 많은 컨텍스트 스위치가 발생하는지 perf 로그를 알고 있다는 것을 알고있다. 리눅스에서 할 수있는 방법이 있습니까? 루트 권한이 필요한 것은 내부 도구이기 때문에 문제가되지 않습니다.리눅스에서 콘텍스트 전환 타이밍 받기

+0

프로파일 링의 * 목적 *이 느린 이유를 찾거나 더 빠른 속도를 얻는 방법이라고 생각하는 경우, 이런 종류의 타이밍은 좋은 방법이 아닙니다. 오히려 [상태 샘플링] (http://stackoverflow.com/a/378024/23771)이 더 잘 작동합니다. 샘플의 분수 X에 나타나는 것은 아무리 당신이 그것을 묘사하더라도 그 시간에 대한 책임이 있습니다. 그렇게하는 것을 피할 수 있으면 해당 분수를 저장합니다. 타이밍 문제는 피할 수있는 것을 알려주는 것이 훨씬 간접적이라는 것입니다. –

+0

프레임 스톨이 코드에 의해 발생하지 않는다는 사실을 알 수 있기 때문에 유용합니다. 내 코드에서 문제가없는 경우 시간을 절약합니다. 그리고 프레임 단위의 데이터를 원하고 특정 인스턴스를 격리 할 수 ​​있기를 바랍니다. 샘플링이 그다지 좋지 않습니다. – Temp4890

답변

2

일종의.

getrusage() 기능에 대해서는 http://man7.org/linux/man-pages/man2/getrusage.2.html을 참조하십시오.

반환하는 구조는 자발적이고 비 의도적 인 컨텍스트 스위치 번호입니다. 또한 사용자 및 시스템 시간이 있습니다. 다른 API는 월 클럭 시간을 반환합니다.

사용자와 시스템 시간보다 큰 벽시계 시간은 실행하지 않은 시간입니다.

그 외의 경우에는 커널 ftrace 기능을 사용할 수 있습니다. 더 많은 옵션을 보려면 https://www.kernel.org/doc/Documentation/trace/ftrace.txt

을 읽으십시오. http://www.brendangregg.com/blog/2015-07-08/choosing-a-linux-tracer.html을 읽으십시오.

+0

감사합니다. 나는 이것을 잠시 동안 인터넷 검색을하고 있었다. 나는 그것을하는 어떤 방법이 있어야한다는 것을 알았다. – Temp4890