2010-11-27 1 views
16

약간 OT 일지 모르지만 IO가 많이 사용되는 프로세스 (동일한 디스크의 한 위치에서 다른 위치로 cp 큰 파일이라고 말하면서)가 대부분 CPU를 처리하는 모든 프로세스의 속도를 늦추는 이유는 무엇입니까? 나는 두 OS 모두에서 많이 사용한다고 주목했다 (mac os x and linux).높은 IO 속도 작업으로 인해 Linux에서 모든 작업이 느려지는 이유는 무엇입니까?

특히 멀티 코어가 실제로 여기에서 도움이되지 않는 이유는 다음과 같습니다. 하드웨어 (디스크 컨트롤러 등)의 하드웨어 제한 사항입니까, OS 제한 사항입니까? 아니면 본질적으로 올바른 자원 (스케줄링)?

+2

Windows의 모든 기능이 느려집니다. CPU가 BUS 작업과 CPU 작업을 동시에 관리 할 수 ​​없기 때문에 그럴 것이라고 믿습니다. 그러나 여기있는 사람이 더 나은 응답을 보냈을 것입니다. –

+1

Windows에서는 상황이 훨씬 나쁩니다. Windows는 IO 처리량을 줄여서 사용할 수 있도록 노력합니다. 이것이 많은 벤치 마크에서 그렇게 열악한 이유입니다. –

+0

"대부분 CPU에 바인딩 된 프로세스조차도"- 이러한 프로세스는 "I/O 바인딩"될 수도 있습니다 : 즉 * RAM * I/O. 나는 온보드 캐시에서 주로 데이터를 실행하는 CPU 바운드 프로세스를 찾거나 (또는 ​​만들 수 있다면) 스토리가 다를 것이라고 추측 할 수 있습니다. – ChrisW

답변

2

, 때문에 (사용 가능한 버퍼 캐시보다 큰) 큰 파일 보통 일반적으로 다음에 다시 가져와야합니다 밖으로 던져 질 덜 최근에 사용 된 페이지를 일으키는 원인이되는 버퍼 캐시를 통해 데려 포함 복사.

가끔 IO의 작은 소량을하고

다른 프로세스는 자신의 캐시가 모두 날아 얻을 실제 작업을 수행해야하는 것은 다시 그 페이지를 가져 읽고 (단지 디렉토리를 stat'ing 말).

을 희망이 고정 얻을 수 있습니다 이런 종류의 것을 탐지 할 수있는 복사 명령에 따라 (예 : posix_fadvise를 사용하여) 커널에 알릴 필요가없는 파일의 대량 일회용 대량 전송 후속으로 읽혀 버퍼 캐시에서 모든 클린 페이지를 완전히 버리지는 않습니다.

+0

그래서 파일 시스템의 캐시이고 CPU의 캐시는 아닙니다. – ChrisW

+0

네, 파일 시스템의 캐시라고 생각합니다. 복사 명령은 원칙적으로 대부분의 캐시를 제거하지 않고 매우 큰 파일을 복사 할 수 있습니다. 단순히 그들이 일반적으로하지 않는 것입니다. – MarkR

+0

당신의 대답이 caf의 답변보다 더 적합한지를 확인하는 간단한 방법이 있습니까? 둘 다 나에게 합리적인 것처럼 보입니다. 나는 posix_fadvise에 대해 몰랐다. POSIX_FADV_DONTNEED를 사용하여 간단한 cp를 구현하면 버퍼 캐시가 손상 될 수 있습니다. –

1

높은 IO 처리 속도는 보통 CPU가 처리해야하는 높은 인터럽트 속도를 의미하며 CPU 시간이 필요합니다.

cp의 경우 각 데이터 블록이 사용자 공간으로 복사되고 사용자 공간에서 복사되기 때문에 상당한 양의 가용 메모리 대역폭도 사용합니다. 또한 CPU 캐시와 TLB에서 다른 프로세스가 필요로하는 데이터를 추출하는 경향이있어 캐시 미스가 발생할 때 다른 프로세스의 속도가 느려집니다.

+0

인터럽트 수준에서 CPU 시간이 낭비되어 직접적으로 발생했다고 생각하지 않습니다. 총 CPU 사용량의 큰 부분이 아니라는 것을 알게 될 것입니다. – ChrisW

+0

각 CPU에는 자체 세미 (semi-indentent) 캐시가 없습니까? 그렇다면 CPU 바인딩 프로세스를 실행하는 CPU의 캐시에서 데이터가 추출되었는지 확인 하시겠습니까? – ChrisW

+0

@ChrisW : OP는 "멀티 코어"에 대해 언급합니다. 동일한 패키지에있는 두 개의 코어가 동일한 L2 캐시를 공유하는 경우가 많으며, CPU와 경쟁하는 작업의 수에 따라 'cp'가 실행중인 CPU에서 예약 될 수 있습니다 CPU 바운드 작업 – caf

4

현재 스케줄러의 한계 일 수 있습니다. Google "Galbraith 's sched : 자동 그룹 패치"또는 "Linux 기적 패치"(예, 정말로!). 이 정제되는 과정에서 200 라인 패치는 분명히이고, 그룹 일정을 추가에 대한 Linus says하는 합병 :

난 그냥 무엇 대화 형 성능을 함께 않습니다 또한 매우 행복 해요. 필자의 "testcase"는 웹 브라우저에서 전자 메일을 읽고, 조금씩 스크롤하며, 동시에 커널에서 "make -j64"를 수행하는 것은 사실이지만 테스트 케이스입니다. 나를 위해 매우 관련이있다 . 그리고 그것은 거대한 개선입니다.

전후 비디오 here.

+0

어쨌든 이것은 관련이 없다고 생각합니다. 그러나 언급하는 것이 좋습니다. 패치는 IO가 아닌 CPU 경쟁과 관련이 있습니다. –

+0

나는 관련이 없다고 확신하지 못합니다. Linux는 I/O 경계라고 가정 한 프로세스를 크게 도왔습니다. – Ken

+0

뒤늦은 지견에서 나는 네가 옳다고 생각한다. –

0

또한 Linux에서 가설을 검증하는 방법을 알고 계십니까? IO 집중적 인 작업을 수행하는 동안 인터럽트 수.

, 나는 카페의 가설이 있음을 추측하고있어 인터럽트 수행합니다 초당

  • 많은 인터럽트;
  • 인터럽트는 모든/모든 CPU에서 처리됩니다. 따라서
  • 은 인터럽트가 CPU 캐시를 플러시합니다.

테스트해야 할 통계는 CPU 당 초당 인터럽트 수입니다.

자세한 내용은 http://www.google.com/#q=cpu+affinity+interrupt을 참조하십시오. 인터럽트를 단일 CPU에 연결할 수 있는지 여부는 알 수 없습니다.

다음은 내가 이해할 수없는 것입니다. (이 질문을 처음 보았습니다.) 랩톱 컴퓨터의 perfmon (Windows Vista를 실행 중)이 거의 1 초마다 2000 인터럽트/초 (각 코어 당 1000 개) idle (perfmon을 표시하면서 아무것도하지 않음). 어느 장치가 초당 2000 회의 인터럽트를 생성하는지는 상상할 수 없습니다. CPU 캐시를 날려 버릴만큼 충분하다고 생각했습니다. (내 생각에 바쁜 스레드의 CPU 양은 50msec와 비슷합니다). 또한 평균 350 DPCs를 보여줍니다.

하이 엔드 하드웨어에 비슷한 문제가 있습니까?

한 가지 유형의 하드웨어 차이점은 디스크 하드웨어 및 디스크 장치 드라이버 일 수 있으며, 더 많거나 적은 인터럽트 및/또는 기타 경쟁을 생성 할 수 있습니다.

+0

실시간 클럭, 마우스 이동, 키보드 프레스는 모두 인터럽트를 통해 처리됩니다. –

관련 문제