2014-04-09 1 views
4

저는 멀티 코어 아키텍처에 대한 연구를 시작했고 마음에 질문이 있습니다. 나는 스레드를 인수로 취하고, 그 스레드를 만들고, sched_setaffinity를 사용하여 선호도를 설정 한 다음 모든 스레드 작업에서 busy 루프 (while (1))를 갖는 테스트 응용 프로그램을 가지고있다. 4 개의 프로세서가있는 Fedora 19 VM (3.11.9-200.fc19.x86_64)을 사용하고 있습니다. 이제 4 개의 스레드를 생성하고 4 개의 서로 다른 프로세서에 대한 선호도를 설정하면 CPU 사용률이 균일하지 않습니다. 이 같은이며,다중 프로세서에서 모든 CPU가 균등하게 활용되지 않는 이유는 무엇입니까?

PID의 USER PR NI VIRT RES SHR S %의 CPU %의 MEM 시간 + COMMAND

2113 루트 20 0 0 0 0 R 92.90 0.000 18 : 22.91 multicoretest

2114 루트 20 0 0 R 0 0 92.23 0.000 18 07.29 multicoretest

루트 2,112 20 0 0 0 0 R 49.28 0.000 9 41.48 multicoretest

루트 2,111 20 0 0 0 0 R 48.61 0.000 9 42.17 multicoretest

루트 20 0 0 0 0 Z 0.000 0.000 0 : 00.00 multicoretest

가 동일한 스레드 기능이 있지만

사람이 나에게 3, 4 코어가 처음 두만큼 바쁜하지 않은 이유에 대한 설명을 줄 수 있습니까?

정말 도움이 될 것입니다.

감사

+1

하이퍼 스레딩으로 인해 실제 코어 또는 가상 코어가 모두 있습니까? – thkala

+0

'lscpu' 명령의 출력을 보여줄 수 있습니까? –

답변

3
나는이 문제에 대한 가능한 이유 중 적어도 몇 생각할 수

:

  • 프로그램이 실행 만이 아니다. OS 자체뿐만 아니라 다른 프로그램도 프로세서를 사용하므로 프로그램에서 사용 가능한 CPU 성능을 완전히 활용하지 못할 수 있습니다. CPU 선호도를 설정하더라도 프로세스 스케줄러는 스레드에서 사용할 수있는 CPU 시간의 양에 영향을줍니다.

  • CPU 코어는 가상이므로 완전히 독립적이지 않습니다. 예를 들어 Intel 프로세서의 hyper-threaded cores은 대부분의 물리적 논리 네트워크를 공유합니다. 당신의 작업은 무식하게 단순하고 완전히 동일하기 때문에 동일한 물리적 코어에서 실행되는 쓰레드는 리소스를 놓고 경쟁하게됩니다.

+0

시나리오와 관련하여 매우 강력한 후보자와 같은 이러한 소리입니다. 코어 또는 하이퍼 스레드 코어와 같은 수의 스레드에서 실행되는 단순한 작업이 아닌보다 복잡한 시스템에서는 [지침 파이프 라이닝] (http://en.wikipedia.org/wiki/)을 이해해야합니다. Instruction_pipeline). 최신 시스템은 지침을 따라 가며 종속성을 찾아 해당 지침을 동일한 프로세서에 맞 춥니 다. 또한 일부 시스템은 지점이 예측대로되지 않으면 시간을 잃지 않도록 지점의 두 결과를 모두 처리합니다. 어느 쪽이든 thkala의 의견은 해당 상황에 적용될 가능성이 높습니다. – user3507600

관련 문제