Linux read() 시스템 호출 샘플링 속도, 작업 스케줄링 및 RT_PREEMPT

Linux read() 시스템 호출 샘플링 속도, 작업 스케줄링 및 RT_PREEMPT

저는 MeasurementComputing PCIe-DAS1602/16 DAQ를 사용하고 있습니다:

https://www.mccdaq.com/pci-data-acquisition/PCIe-DAS1602-16.aspx

Warren Jasper가 작성한 Linux 장치 드라이버 사용:

https://github.com/wjasper/Linux_Drivers/tree/master/PCI/pci-das1602-16

일부 미분 방정식을 풀기 위한 정보를 읽고 그 정보를 다시 쓰고 있습니다. 타이밍 통계를 실행해 보니 96%의 시간이 read()에 소비된 것으로 나타났습니다. 정확히 말하면 48마이크로초입니다. 보드의 대기 시간은 10마이크로초이지만, 추가로 38마이크로초가 발생하는 것은 나에게는 다소 큰 것 같습니다. 나는 작업 속도를 높이고 싶었고 (1) 우선 순위 예약이나 (2) RT PREEMPT Linux 커널 사용 모두 읽기() 시간에 영향을 미치지 않는다는 사실을 발견했습니다. 나는 이제 "버그"가 장치 드라이버 자체에 있다고 생각합니다. read()에 대한 더 빠른 대안이 있는지 또는 성능을 향상시키는 데 사용할 수 있는 옵션이 있는지 알고 싶습니다.

답변1

I/O는 이벤트 기반이기 때문에 매우 느립니다. 여기서 병목 현상은 커널보다는 실제 장치일 가능성이 더 높습니다.

관련 정보