여러 개의 readfile 작업을 수행하는 응용 프로그램 (C# .Net 3.5 및 .Net 2.0)이 있습니다. 그러나 시스템은 언제나 hickup (지터)을 보여줍니다. VTune 프로파일 러에 연결하여 잠금을 수행했습니다. & 대기 분석을 수행합니다 (아래 첫 번째 이미지 참조).(읽기) 파일 I/O 지터
잠금 및 대기 분석 결과 "동기화 개체 : 스트림 파일 경로"가 응용 프로그램을 모든 스레드에서 잠글 (대기)하게합니다. 이 기간 동안 CPU 사용률은 0 %로 떨어집니다.
다음으로, hickup이 발생할 때 수행 된 작업을 기록하기 위해 SysInternals Process Monitor를 사용했습니다. 그것은 대략 걸리는 fileread 작업을 보여줍니다. 1 초이지만 때로는 (지터). 두 번째 이미지를 참조하십시오.
이미지의 큰 버전을 한 번 클릭 : here
나는 의아해입니다 :
here 이미지의 큰 버전을 단일 클릭합니다. 파일 I/O에서이 지터가 발생할 수있는 원인은 무엇입니까? 그것은 동시 읽기입니다. 나는 32,768b에서 4096b로 읽기 버퍼를 줄이려고했지만, 이것은 아무 것도 할 수 없습니다. 참고해야 할 중요한 점은이 번호를 수집하는 데 사용되는 시스템에는 SSD가 있습니다. 그러나 우리는 SSD가없는 컴퓨터에서 비슷한 결과를 봅니다.
어디서 볼 수있는 모든 리드가 환영받을 것입니다.
입출력 프로세스입니까? GC 수집이 패턴에 적합합니다. VTune이 표시 할 수 있는지 확실하지 않지만 [WPA] (http://msdn.microsoft.com/en-us/library/windows/hardware/hh448170.aspx)는 응용 프로그램 차단 시간과 달리 IO 실제 완료 시간을 표시 할 수 있습니다. –
나는 똑같은 것으로 생각했다. 나는 사내에서 garbarge 프로파일 러를 사용했다. GC2 콜렉션은 비용이 많이 드는 리드가 아니었다. 그러나 GC2가 다른 프로파일 러 로그와 교차 링크하기가 어렵 기 때문에 GC를 완전히 삭제할 수 있는지 확실하지 않습니다. WPA에 감사 드리며, 내가 VTune과 비슷한 것을 재현 할 수 있는지 알아 보도록하겠습니다. – bastijn
CPU 사용률이 보드 전체에서 0으로 떨어지거나 모니터링되는 스레드에서 0으로 떨어 집니까? 실제로 0 일 경우 GC가 아닐 수 있습니다 (관리되는 모든 스레드를 차단하지만 그 시간 동안 100 % CPU 사용이 이상적입니다). 만약 하나의 쓰레드를 제외하고 그것이 0이라면, GC를 향한 포인터가 범인이다. GC0은 메모리 사용 패턴에 따라 GC2만큼 느려질 수 있습니다. – Luaan