2017-10-09 4 views
0

멀티 코어 시스템에서 확장 성 문제가 있습니다. 내 응용 프로그램은 4 개의 핵심 코어 머신에서 하이퍼 스레딩이 활성화 된 8 개의 논리 코어에서 병렬로 과학 데이터를 처리합니다. 논리적 코어 당 하나의 8 개의 JVM을 시작합니다 (결국 JVM의 오버 헤드를 피하기 위해 하나의 JVM으로 전환 할 것입니다).멀티 코어 확장 성/충돌 문제를 감지하는 방법

문제는 확장 성이 최대 4 코어까지 거의 선형이지만 그 다음에는 거의 10-20 4 개의 "논리 코어"를 추가하여 성능을 향상시킬 수 있습니다.

나는 앱을 프로파일 링하여 스레드 동작을 분석했는데 너무 많이 기다리는 잠금이나 스레드를 발견하지 못했습니다. 나는 또한 pidstat를 검사했고, 예를 들어 과도한 문맥 전환 오버 헤드를 보지 못했다. 보다 정확하게는 자바 프로세스에서 컨텍스트 스위치가 거의 없다. CPU 사용량도 거의 100 %에 달하는 초고속이며 이는 괜찮은 것으로 보입니다.

제 질문은 물리적 코어의 수를 초과 한 후에이 잘못된 확장 성의 원인을 감지하고 분석하는 방법입니다. 어떤 도구와 메소드를 사용하여 경합이 어디에서 발생하는지 감지 할 수 있습니다. 어디에서 봐야합니까? 응용 프로그램의 아키텍처를 변경하지 않고 어떻게 든 고칠 수 있습니다 (예 : 머신 당 하나의 JVM으로 전환).

감사합니다.

답변

0

하이퍼 스레딩이 단일 코어의 용량을 두 배로 늘리지는 않습니다. 실제로 하이퍼 스레딩이 켜지면 성능이 저하되는 작업이 있습니다.

게인은 작업의 성격에 따라 크게 달라질 수 있습니다. 더 많은 파이프 라인 실속이 발생하면 실속 된 실사 대신 다른 프로세스를 예약 할 수있는 기회가 늘어납니다.

예를 들어, 메모리에 완전히 랜덤 액세스하면 동일한 캐시 라인 내에서 매우 빠른 CPU 집약 계산보다 하이퍼 스레딩 성능이 향상됩니다.

  • 캐시
  • 분기 예측 자원
  • 명령 (가져 오기 및 디코딩
  • 실행 단위 정수 : 여기

    는 두 개의 하드웨어 스레드가 공유하기 때문에 어떤 어떤 이익 제한 경쟁을 생산할 것이라는 것들 및 부동 소수점)

또 다른 관찰은 시스템은 SMT/HT를 지원해야합니다. 그렇지 않으면 추가 코어에 일정을 예약 할 수 없거나 잘못된 작업을 예약합니다.

OS에서 지원하는 경우 파일 핸들 또는 네트워크 소켓과 같은 항목에 OS 컨텐션 OS 기회가 여전히 있습니다. 'embarrassingly parallelizable'작업의 특성이 많을수록이 경쟁을 제한 할 수있는 기회가 커집니다. 그러나 작업에 동일한 시스템 자원에 대한 읽기 및/또는 쓰기가 포함 된 경우 적은 이익을 경험하게됩니다.

당신이 1 JVM으로 이러한 작업을 모두 가져왔다되면

는 병렬 처리의 수준이 될 것입니다 :

int cores = Runtime.getRuntime().availableProcessors(); 
+0

감사합니다 당신의 대답은이 문제 공간을 명확히한다. 캐시 미스 (cache miss)에 대해 살펴보고 물리적 코어만으로 실행되도록 노력할 것입니다. – greg