none
장시간 반복 수행시, USB device를 위한 I/O access API 들의 응답이 점점 느려집니다. RRS feed

  • 질문

  • Visual Studio로 만든, 공장 양산용 자동화 툴이 장시간 반복 수행하면 점점 느려집니다.
    이 툴은 USB device 와 빈번하게 Comport Serial 통신을 수행합니다.

    참고로 정해진 flow 를 처음 수행했을때에는 약 200초 정도 시간이 걸리다가 점점 느려지기 시작해서
    12시간 후에는 약 250초가 걸리고, 24시간 후에는 약350초가 걸립니다.

    저의 분석에서, I/O access 에 대한 응답 속도가 점점 느려지는것으로 확인되었습니다.

    USB device와의 특정 packet 기준으로 측정하였을때,
    처음에는 ReadFile/WriteFile 호출 후 해당 함수로 부터 return하기 까지 30 ms가 걸리던 것이
    12시간 반복 후에는 540 ms 가 걸리게 됩니다.
    그러나 USB Analyzer 장비를 통해 USB device와 USB Host의 PHY 단에서 소모시간을 측정한 결과,
    처음이나 느려졌을때나 동일하게 225μs의 시간이 소비되었습니다. 따라서 device의 의한 delay는 아닙니다.
    참고로 정해진 Flow들이 반복 수행되는 동안 해당 자동화 툴이 사용하는 memory(Private working set)는 일정 수준을 유지하였고
    생성되는 쓰레드들도 정상적으로 소멸 되었습니다.

    이상한 점은,
    1. 툴이 반복 수행으로 느려졌을때, 종료하지 않고 반복 수행만을 두시간 정도 멈췄다가 다시 동작시켰을때,
    다시 처음의 속도로 회복이 되었습니다.
    2. 툴이 처음이나 느려졌을때나 "Process Explorer"를 같이 실행시켜 놓으면, 10% 속도가 빨라지는 현상이 발견되었습니다.
    다시말해 처음 200초 정도 걸릴때 "Process Explorer"를 실행해두면 180초가 걸리고
    느려져 250초가 걸리는 시점에 "Process Explorer"를 실행하면 220초 정도가 걸립니다. 

    [질문]
    1. 장시간 반복 수행시에, device와 Host의 PHY단에서는 전혀 느러지지 않는데, 왜 I/O 관련 API들의 응답(return)이 느려질까요?
    2. Windows 7 OS 가 빈번한 I/O access에 대해 어떠한 간섭 또는 관리를 하는건가요?
    3. "Process Explorer" 실행 시, 왜 툴 속도가 빨라지는 걸까요?


    2016년 9월 7일 수요일 오전 8:12