2014-02-20 1 views
8

여러 개의 readfile 작업을 수행하는 응용 프로그램 (C# .Net 3.5 및 .Net 2.0)이 있습니다. 그러나 시스템은 언제나 hickup (지터)을 보여줍니다. VTune 프로파일 러에 연결하여 잠금을 수행했습니다. & 대기 분석을 수행합니다 (아래 첫 번째 이미지 참조).(읽기) 파일 I/O 지터

잠금 및 대기 분석 결과 "동기화 개체 : 스트림 파일 경로"가 응용 프로그램을 모든 스레드에서 잠글 (대기)하게합니다. 이 기간 동안 CPU 사용률은 0 %로 떨어집니다.

다음으로, hickup이 발생할 때 수행 된 작업을 기록하기 위해 SysInternals Process Monitor를 사용했습니다. 그것은 대략 걸리는 fileread 작업을 보여줍니다. 1 초이지만 때로는 (지터). 두 번째 이미지를 참조하십시오.

enter image description here 이미지의 큰 버전을 한 번 클릭 : here

나는 의아해입니다 :

File I/O jitter here 이미지의 큰 버전을 단일 클릭합니다. 파일 I/O에서이 지터가 발생할 수있는 원인은 무엇입니까? 그것은 동시 읽기입니다. 나는 32,768b에서 4096b로 읽기 버퍼를 줄이려고했지만, 이것은 아무 것도 할 수 없습니다. 참고해야 할 중요한 점은이 번호를 수집하는 데 사용되는 시스템에는 SSD가 있습니다. 그러나 우리는 SSD가없는 컴퓨터에서 비슷한 결과를 봅니다.

어디서 볼 수있는 모든 리드가 환영받을 것입니다.

+3

입출력 프로세스입니까? GC 수집이 패턴에 적합합니다. VTune이 표시 할 수 있는지 확실하지 않지만 [WPA] (http://msdn.microsoft.com/en-us/library/windows/hardware/hh448170.aspx)는 응용 프로그램 차단 시간과 달리 IO 실제 완료 시간을 표시 할 수 있습니다. –

+0

나는 똑같은 것으로 생각했다. 나는 사내에서 garbarge 프로파일 러를 사용했다. GC2 콜렉션은 비용이 많이 드는 리드가 아니었다. 그러나 GC2가 다른 프로파일 러 로그와 교차 링크하기가 어렵 기 때문에 GC를 완전히 삭제할 수 있는지 확실하지 않습니다. WPA에 감사 드리며, 내가 VTune과 비슷한 것을 재현 할 수 있는지 알아 보도록하겠습니다. – bastijn

+1

CPU 사용률이 보드 전체에서 0으로 떨어지거나 모니터링되는 스레드에서 0으로 떨어 집니까? 실제로 0 일 경우 GC가 아닐 수 있습니다 (관리되는 모든 스레드를 차단하지만 그 시간 동안 100 % CPU 사용이 이상적입니다). 만약 하나의 쓰레드를 제외하고 그것이 0이라면, GC를 향한 포인터가 범인이다. GC0은 메모리 사용 패턴에 따라 GC2만큼 느려질 수 있습니다. – Luaan

답변

2

이 질문은 업데이트가 필요합니다. 나는이 문제를 해결하면서 대답의 형태로 이것을 게시 할 것이다. 그러나 나는 원래의 문제가 무엇인지 확실히 말할 수있는 방법이 아니다.

IO 읽기 (파일) 지속 시간에서 가끔씩 스파이크가 발생하는 원인을 찾아내는 데 많은 노력을 기울였습니다. 우선, 바이러스 스캐너가 중요합니다. 특히 McAfee는 약간의 문제를 야기했습니다. 이 질문에 대한 의견은 이미 여기에 암시되었으며 WPA/WPR 콤보를 사용하는 @remus rusanu의 팁도이 사실을 보여주었습니다. WPA/WPR 콤보가 저를 놀랬습니다. VTune과 ProcMon 옆에있는 귀중한 도구입니다. 첫 번째 이미지는 일부 장기간 플러시 및 읽기 시작 (> 1 초) 직전에 McAfee taskmanager에서 스파이크를 보여줍니다. 두 번째는 WPA의 모든 정보가 모든 그래프에 걸쳐 잘 연결되어 있음을 보여줍니다. 멋지고 강한 도구, 건초 더미에서 그 바늘을 찾고 있다면.

enter image description here 빠른 링크 대형 버전 : here.

enter image description here 빠른 버전 : here.

아직 바이러스 스캔 소프트웨어를 제거한 후에도 스파이크가 발생했습니다. 그 빈도는 짧았지 만 지속 시간은 짧았지 만 여전히 응용 프로그램에서 볼 수 있습니다. 나는 그것이 무엇인지 알아 내기 위해 수많은 것을 시도했다. VMWare 설정을 사용하여 시스템을 완전히 제거하고 다른 프로세스가 문제가되는지 확인할 수 있습니다. 결국, 나는 포기했다. 나는이 문제를 해결하기위한 시스템을 구현했으며, 지금은 충분하다. 내가 취한 모든 행동을 알면 또 다른 상반되는 과정이 있었다고 말할 수 있습니다. 또 다른 옵션은 뮤텍스 (Mutexes)를 사용하는 링크되지 않은 비 관리 프로그램입니다. 뮤텍스를 CriticalSections로 변경했지만 직접적인 결과는 보이지 않으므로 그 경로를 포기했습니다.

결론적으로, 불행히도 나는 직접적인 대답이 없습니다. 시간 제약 때문에 나는 그 문제를 해결해야만했고, 문제의 근본 원인이 무엇인지 절대 알지 못할 것입니다. 나는 그것이 실제 삶이라고 생각한다. ..

모든 팁을 주셔서 감사 드리며, 앞으로 내가 확실히 사용할 몇 가지 사실을 배웠습니다.