다른 사용자 공간 프로세스로 인한 pselect 지연

다른 사용자 공간 프로세스로 인한 pselect 지연

나는 다음을 가지고 있습니다전제리눅스의 경우:

  • 직렬 장치에서 pselect를 사용하여 직렬 데이터를 읽는 프로세스를 사용하고 있습니다 /dev/ttySX.
  • 데이터는 400Hz의 안정적인 주파수로 입력됩니다.
  • 이 프로세스의 대기 시간을 최적화하기 위해 몇 가지 조치를 사용했습니다.
    • 읽기 스레드는 선호도를 사용하여 하나의 코어에 고정되어 있으며 해당 코어에서는 어떤 작업도 실행할 수 없습니다. 이는 cgroups/cpuset을 통해 수행됩니다.
    • 읽기 스레드의 RT prio는 SCHED_FIFO 정책을 사용하여 49(IRQ 프로세스 바로 아래)입니다.
    • 해당 IRQ는 /dev/ttyS4동일한 코어에 고정됩니다. IRQ 프로세스도 이 코어에서 실행됩니다. 이는 대기 시간을 더욱 줄이기 위해 수행됩니다.
  • 시스템은 stress --cpu XX --io XX판독값에 영향을 미치는 지연 없이 완전히 로드되었으며 판독값은 400Hz에서 잘 수행됩니다.

이것질문내 경험:

  • 많은 리소스를 사용하는 또 다른 문제가 있는 사용자 공간 프로세스가 있습니다. 이것이 실행되면 직렬 읽기 스레드에 엄청난 대기 시간 스파이크가 발생할 수 있습니다. 하드웨어에서 직렬 데이터 도착 시간이 2.5밀리초라고 해도 100밀리초 이상이 될 수 있습니다.
  • 나는 일반적인 "좋은" 스케줄러를 사용하고 많은 스레드를 생성한다는 점을 제외하면 문제의 다른 사용자 공간 프로세스에 대해 많이 알지 못합니다.

내 거질문:

  • 이것을 디버깅할 수 있는 아이디어나 방법이 있나요? ftrace를 사용할 수도 있지만 어디서부터 시작해야 할지 잘 모르겠습니다.
  • 이 동작의 원인이 무엇인지 아시나요?

이 시점에서 나는 어떤 팁/아이디어라도 기꺼이 받을 것입니다. 감사합니다!

관련 정보