![각 프로세스 또는 스레드 컨텍스트 전환 시간을 기록합니다.](https://linux55.com/image/95537/%EA%B0%81%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EB%98%90%EB%8A%94%20%EC%8A%A4%EB%A0%88%EB%93%9C%20%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EC%A0%84%ED%99%98%20%EC%8B%9C%EA%B0%84%EC%9D%84%20%EA%B8%B0%EB%A1%9D%ED%95%A9%EB%8B%88%EB%8B%A4..png)
GPIO 핀을 조작하기 위해 Raspberry Pi의 Raspbian 배포판을 사용하여 가장 가까운 실시간 처리를 달성하려고 합니다. 나는 내가 기대할 수 있는 공연에 대해 "느낌"을 얻고 싶었습니다.
가능한 한 빨리 핀을 반복적으로 토글하고 로직 분석기를 사용하여 모니터링하는 간단한 C 프로그램을 작성하여 이 작업을 수행하겠습니다.
하지만 다른 방법도 있을 수 있습니다. 위의 프로그램을 작성하고 간단히 컨텍스트 전환을 기록하여 해당 스레드/프로세스가 몇 초 동안 샘플링 기간을 제어할 수 있는 시기를 정확히 확인하는 것입니다.
이전 질문답변 특정 프로세스가 일정 기간 동안 수행한 컨텍스트 전환 수를 확인하는 방법은 있지만 전환의 정확한 시간을 기록할 수 있는 방법이 있습니까? 어쩌면 하나가 아닌 각 프로세스에 대해도 가능합니까? 분명히 이로 인해 오버헤드가 발생하지만 여전히 유용합니다. 분명히 데이터는 오버헤드를 최소화하기 위해 RAM에 저장되어야 합니다.
참고 사항: 가능한 해결 방법:
- 프로세스의 모든 작업을 실시간으로 나열하는 명령
- Hacky: 프로그램이 반복적으로 현재 시간을 획득하고 저장하도록 합니다(그리고 로그가 특정 한계에 도달하면 파일에 저장합니다). 또는 큰 로그를 피하기 위해 약간의 개선을 하십시오. 다른 프로세스에 의해 선점되지 않았다고 추론할 수 있을 만큼 충분히 가까운 경우 연속 시간을 제거하는 알고리즘을 사용하십시오.
답변1
답은 없지만 다음에서 찾을 수 있습니다.도구, 예제 및 리소스perf
명령과 Linux 커널 ftrace 및 debugfs에 대해 Brendan Gregg가 작성하거나 나열했습니다.
내 Raspberry Pi에서 이러한 도구는 패키지에 있습니다 perf-tools-unstable
. 이 perf
명령은 실제로 /usr/bin/perf_3.16
.
당신은 이것에 관심이 있을 수 있습니다논의하다그리고 컨텍스트 스위칭기준저자 : 베누아 시고르위도 ctx상당히 오래된 테스트에서벤치모음곡.
tsuna/contextswitch
내가 편집 timectxswws.c
get_iterations()
하고 while (iterations * ws_pages * 4096UL < 4294967295UL) {
제거한 것과 같이 Pi에서 실행하려면 몇 가지 작업이 필요할 수 있습니다 .-march=native -mno-avx
Makefile
다른 SSH에서 다음을 수행하는 동안 SSH를 통해 Pi에서 perf record
10초를 사용하세요.while sleep .1;do echo hi;done
sudo timeout -10 perf_3.16 record -e context-switches -a
sudo perf_3.16 script -f time,pid,comm | less
다음과 같은 출력을 제공합니다
sleep 29341 2703976.560357:
swapper 0 2703976.562160:
kworker/u8:2 29163 2703976.564901:
swapper 0 2703976.565737:
echo 29342 2703976.565768:
migration/3 19 2703976.567549:
sleep 29343 2703976.570212:
kworker/0:0 28906 2703976.588613:
rcu_preempt 7 2703976.609261:
sleep 29343 2703976.670674:
bash 29066 2703976.671654:
echo 29344 2703976.675065:
sshd 29065 2703976.675454:
swapper 0 2703976.677757:
컨텍스트 전환 이벤트가 발생한 시기와 프로세스에 의해 대략적으로 표시됩니다.