Linux 시스템에서 50msec의 대기 시간이 정상이라고 생각하십니까?Excessive Linux Latency
많은 스레드가있는 프로그램이 있는데, 하나의 스레드는 모터와 광전지가있는 개체의 움직임을 제어합니다.
나는 minimun 대기 시간을 얻기 위해 많은 것을 만들었지 만, 항상 개체에서 위치 오류를 일으키는 50msec를 얻습니다.
것들 내가 그랬어 : - photeocell 제어 스레드의 스레드 우선 순위 - 좋은 기능 -20 에 : SCHED FIFO, 99 - 커널 구성 : CONFING_PREEMPT = Y - mlockall (MCL_CURRENT | MCL_FUTURE);
여러 번, 나는 광전지를 기다리는 데 50 밀리 초가 걸린다. 나는 problema가 내 스레드 인 이 아니라 커널에서 프로세스라고 생각한다.
이 지연 시간을 줄일 수 있습니까? 50 밀리 초의 추가 시간을 누가 알 수 있습니까?
포토 셀을 제어하는 스레드는 많은 "읽기"기능을 수행합니다. 이로 인해 문제가 발생할 수 있습니까?
/* ** * ** * ** */
지금에 상황은 다음과 같습니다 은 하나의 스레드 만 찾고, 무한 빈 루프를 실행하고 있습니다 시작시 루프의 끝에서 루프를 시작합니다. 디스크에 액세스 할 수 없으며 GPIO에 액세스하지 않고 직렬 포트없이 액세스 할 수 있습니다. 루프는 많은 경우 50 밀리 초를 소비합니다.
cpuaffinity를 설정하지 않았으므로 프로세서에 핵이 하나만 있습니다.
빠른 질문 - 당신은 cpuaffinity를 설정 했습니까? 어디서 읽었습니까 (디스크? I/O 컨트롤러? tmpfs?)? –
광전지 신호가 프로그램에 어떻게 도달합니까? GPIO, 시리얼 포트, 전용 하드웨어가 있습니까? – rodrigo
아마도보고있는 것은 실제로 대기 시간이 아니라 클럭 소스의 _ 입도입니다. – rodrigo