매 5ms마다 (정확하게) 웨이크 업하고 작업을 수행하는 데 필요한 스레드가 필요합니다.
나는 POSIX 타이머를 사용했다. 정확한 90 % 인 것처럼 보였고 CPU가 다소로드되었을 때 정확도는 더 떨어졌다.
나는 posix 타이머가 모든 만료마다 새로운 스레드를 포크해야하기 때문에 그것이라고 생각합니다.
리눅스에서 고해상도 타이머를 구현할 수있는 신뢰할 수있는 방법이 있습니까?
CentOS 5.6입니다.리눅스 사용자 공간의 고해상도 타이머
2
A
답변
5
POSIX 타이머 (timer_create()
으로 생성)는 이미 고해상도입니다. 귀하의 문제는 배송 방법에 있습니다. 정확한 타이밍을 원하면 SIGEV_THREAD
은 좋지 않습니다.
대신 SIGEV_SIGNAL
을 사용하여 신호를 통해 타이머 만료 사실을 알리고 sigwaitinfo()
을 사용하여 만료 될 때까지 기다릴 수 있습니다. 또는 POSIX 타이머 (timerfd_create()
으로 생성) 대신 timerfd를 사용할 수 있습니다.
또한 스레드가 타이머가 만료 될 때 다른 실행중인 스레드를 선점하게하려면 sched_setscheduler()
의 실시간 스케줄링 정책 (SCHED_FIFO
또는 SCHED_RR
)을 제공해야합니다.
또한 대부분의 커널 코드를 선점 할 수 있도록 CONFIG_PREEMPT
옵션으로 커널을 컴파일해야합니다. 하드웨어 인터럽트 및 softirq와 같은 선점되지 않는 커널 작업으로 인해 지터가 어느 정도 발생합니다. 이를 더 줄이려면 CONFIG_PREEMPT_RT
kernel patchset을 사용해보세요.
관련 문제
- 1. 사용자 공간의 C/C++ 타이머 신호 처리기
- 2. iPhone 용 고해상도 타이머?
- 3. 엔디안 : 사용자 공간의 le32_to_cpu
- 4. 리눅스 시스템에서 파이썬의 고해상도 시간
- 5. 리눅스 사용자 공간에서 비 차단 타이머
- 6. 글로벌 vars의 리눅스 타이머
- 7. 64 비트 Linux에서 고해상도 타이머 지원
- 8. 사용자 공간의 int 명령어
- 9. 리눅스 커널 타이머 서브 시스템 : 정밀도 vs. 해상도
- 10. netfilter에서 사용자 공간의 패킷 수락
- 11. 사용자 공간의 메모리 장벽? (Linux, x86-64)
- 12. 사용자 공간의 Intel Xeon 성능 카운터 읽기
- 13. 사용자 공간의 포인터에 물리적 장치 매핑
- 14. 고해상도 성능 카운터 란 무엇입니까?
- 15. 정상 우분투 리눅스 사용자
- 16. 리눅스 스크립트에서 사용자 변경
- 17. 이미지 - 고해상도
- 18. DMA 전송에 사용할 사용자 공간의 실제 메모리 만들기
- 19. 리눅스 ISR의 스택은 어디입니까
- 20. arm Linux의 경우 사용자 공간의 스레드가 커널 공간의 가상 주소에 액세스 할 수 있습니까?
- 21. 자바 타이머 객체가 외부 사용자 타이머 데이터를 사용합니다
- 22. 리눅스 커널 공간에서 사용자 공간 스택 추적을 인쇄하는 방법
- 23. 리눅스 사용자 액세스 및 마운트
- 24. 리눅스에서 리눅스 기반 사용자 인증
- 25. 리눅스 사용자 공간 ELF 로더
- 26. 리눅스 86 ASM 사용자 입력
- 27. 작업 공간의 관련 프로젝트
- 28. PermGen 공간의 중요성
- 29. 로컬 공간의 변형
- 30. JSON/JavaScript의 고해상도 날짜 및 시간 표현
리눅스는 실시간 커널이 아닙니다. 그리고 아니, 사용자 공간이 이것을 할 수 없습니다. –
이것을 위해서는 실시간 OS (RTOS)가 필요합니다. –
왜 필요한지 설명하면 대안을 제안 할 수 있습니다. – Thomas