2013-01-24 3 views
1

Intel TBB를 사용하는 32 코어 시스템에서 실행되는 프로그램이 있습니다. 문제는 32 스레드를 사용하도록 프로그램을 설정할 때 성능이 16 스레드 (50 % 향상)에 비해 충분하지 않다는 것입니다. 그러나, 내가 사용하는 경우 :리눅스에서 taskset은 정확히 무엇을합니까?

taskset 0xFFFFFFFF ./foo 

이 프로세스가 32 코어로 고정되면 성능이 훨씬 향상됩니다.

  1. 이유 :

    나는 다음과 같은 두 가지 질문이? 기본적으로 OS는 32 스레드 프로그램을 위해 32 코어를 모두 사용합니다.
  2. taskset을 사용해도 OS가 가상 스레드와 물리적 스레드를 교환 할 수 있다고 가정합니다. 즉, 스레드는 고정되지 않습니다. 내가 맞습니까?

감사합니다.

+2

'OS는 32 스레드 프로그램을 위해 32 코어를 사용합니다 .' - 가정은 유효합니까? –

답변

3

운영 체제는 캐시 목적으로 더 적은 코어를 사용할 수 있습니다. 응용 프로그램이 동일한 메모리 세트를 사용하면 각 쓰기가 캐시를 무효화한다고 가정 해보십시오. 자물쇠를 강제하는 것은 본질적으로 OS에게 동시성에 대한 캐시 오버 헤드가 가치가 없다고 말하면서 모든 코어를 사용합니다.

커널에서 kthreads 및 백그라운드 프로세스와 같은 다른 프로세스가 있음을 기억하고 코어 간 스레드 마이그레이션은 비용이 많이 들고 스레드가 균등하게 작업하지 않는 경우 불균형을 야기 할 수 있습니다.

또한 OS가 자신의 프로세스뿐만 아니라 모든 프로세스에서 코어의 작업을 고르게 분배하려고합니다. 즉, 현재 실행중인 다른 프로세스가 있고 마이그레이션 비용이 높거나 프로세스를 균등하게 분산 시키면 CPU 코어간에로드 불균형이 발생할 수 있으므로로드 밸런서가 모든 32 코어에 프로세스를 배치하지 않도록 선택할 수 있습니다. OS는 최상의 시스템 성능을 위해 최선의 응용 프로그램 성능을 요구하지 않습니다.

+0

왜 OS가 더 적은 코어를 사용할 수 있는지 다시 설명 할 수 있습니까? – Yamcha

+0

@ user1316459 캐시 일관성이 비쌉니다. 더 적은 수의 코어에 프로세스를 배치하여 가끔씩 캐시 무효화 및 일관성 문제 (L1/L2 캐시를 공유 할 수 있음)가 적도록하는 것이 좋습니다. 그들은 모두 별도의 코어에 있다면 그들은 단지 서로 위에 스테핑 수 있습니다. 또 다른 이유는 CPU 사용률과 시스템에서 실행중인 다른 프로세스 때문입니다. –

+0

그래서 멀티 스레드 프로그램의 경우 기본적으로 OS가 성능 향상에 필요한 것보다 적은 코어를 사용한다고 말하고 있습니까? – Yamcha

관련 문제