탭앤테크

Dual CPU

작성자 정보

  • 소다팝 작성
  • 작성일

컨텐츠 정보

본문

김형욱 [yurius] 님의 글입니다.

안녕하세요.

많은분들의 희망사항이기는 하나 총알때문에 엄두도 못내곤 했던,
듀얼(or 그 이상의) 시스템에대해 소개해보려 합니다.

 

막연히 대부분의 사람들이 알고있는 상식으로는.

1. 듀얼이니까 2배의 성능을 낸다.
2. 이론상 2배지만 실제 2배의 효과는 나오지 않는다.

 

번외로 3번,

3. 듀얼시 전체적으로 환경이 쾌적해진다.

 

이정도입니다만,
정답은 3번. 하나입니다.

 

그럼 이에대해 설명을 드리도록 하지요.

설명을 쉽게하기 위해, 윈도우머신의 작업관리자가 아닌,
솔라리스 8 머신을 사용하였습니다.
윈도우 작업관리자는 상세히 표현이 되지 않는 이유도 있습니다.

 

먼저 그림설명에 앞서,

그림1이 솔라리스(Unix계열) 의 작업관리자라 봐도 좋은 top 입니다.
참고해보셔야 할 그림이지요.

그림2는 시스템의 CPU정보로 psrinfo -v 명령을 사용한 화면입니다.
Ultra sparc v9 400Mhz 듀얼이고요. 각각 8M의 L2캐쉬를 가졌습니다.
CPU ID는 6번과 7번으로 할당되어 있네요.
그냥 이그림은 한번 지나치시기만 하시면 됩니다.

 

자.
그림1을 여시고,
PID 516과, 2828에 위치한 oracle 프로세스를 보겠습니다.
이름은 같지만 다른 데이터베이스로 별개의 프로세스입니다.
즉 같은 프로그램을 2개 띄운 상황이라 이해하시면 됩니다.

그리고 중요한것이 우측에서 두번째 있는 CPU 사용률입니다.
현재 516은 48.6%, 2828은 47.5% 가 사용중이네요.

이 시점에서 결론을 말씀드려야 할것같네요.
각각의 프로세스는 CPU사용률이 50%가 초과될수가 없습니다! (중요합니다!)


더 이해쉽게 설명해드리자면,
만약 이 시스템에 cpu가 4개였다면,
CPU사용률은 25%를 넘지 못합니다.
(주 : 총 CPU 갯수 사용률의 % 기준입니다.
      CPU 개별 단위로 샌다면 100% 이겠죠.)

아직도 혼란스러우신분들을 위해 정리를 하자면,
한개의 프로세스(작업) 에는 2개이상의 CPU가 동시에 붙지 못합니다.

그림1의 STATE 항목을 참조하시면 쉽습니다.
516프로세스에 6번 CPU가 붙어있지요.
본래 2828에 7번 CPU가 붙어있어야 하겠지만 제가 top 을 실행하면서,
잠시 뺏어온 상황입니다.
sleep은 말그대로 램상주 프로그램으로 필요시 cpu 를 뺏어다 씁니다.
sleep이 활성화될때는, 6번이나 7번 둘중에 아무 CPU나 뺏어다가 쓰겠죠.
아무래도 뺏어올 CPU가 1개일때보다는 2개일때가 스케쥴링에 용이하겠죠.
이때문에 '쾌적하다' 고 느기게 되는겁니다.
          
쉽게 윈도우 기준으로 설명할까요.
1G 시퓨가 4개로 구성된 시스템이라 가정합시다.
윈도우를 실행하면,
explorer.exe , svchost.exe, services.exe, csrss.exe... 등이 뜹니다.
일단은 위의 4개만 뜬다고 가정하지요.
그렇다면 위 4개의 프로세스당 각각 1개의 CPU가 붙겠죠.
즉 작업관리자에서 우선권 설정 부분에 보면 있는 Realtime의 상황입니다.
(추가설명 :
 Realtime이란 프로세서(CPU) 수 : 프로세스 수가  1:1 이 되는 상황입니다.
 윈도우 작업관리자에서 임의로 Realtime으로 변경할시 퍽퍽 쓰러지는 이유죠.)

 

자, 이상황에서 스타크래프트를 실행하자 합시다.
그렇다면 위 4 프로세스에 starcraft.exe란 프로세스가 추가되겠죠.
여기서 많은 분들이 궁금해했던 부분이죠.
CPU가 4개니 스타가 4배의 속도가 나느냐?
웃기는말씀.
4개의 CPU중 하나가 스타로 붙는거죠.
즉 4G의 속도가 아닌 1G의 속도입니다.
이렇게되면 스타를 제외한 4개의 프로세스는 한숨나옵니다.
각각의 CPU가 물린 상황에서 CPU 1개를 뺏겨버렸죠.
즉, 1:1 관계에서 3:4 관계가 되는거죠.
그러면서 Realtime의 관계는 깨지고, 남의 CPU를 필요할때마다 뺏어쓰는 상황이
시작되는겁니다.

 

결론적으로,
1G CPU 4개인 시스템에서 스타를 실행한다 했을때,
1개는 스타에 Realtime 으로 붙고,
나머지 3개는 그외의 프로세스를 수행하는 것이죠.

만약 CPU가 1개라면 위의 5개의 프로세스를 모두 혼자 스케쥴링하면서 뺏고,
뺏기는 관계가 지속될테니 아무래도 덜 쾌적할수밖에 없는것입니다.

 

물론 예외로 몇몇(주로 3D계통) 프로그램은 다중 프로세서의 성능을 극대화 합니다만,

이는 해당 프로그램의 프로세스 설계가 그렇게 된것이지,

1프로세스당 1CPU의 이론은 달라지지 않는다는 점을 기억하십시오.

 

쉽게설명하려했지만,
좀 지저분해졌네요.
어쨌든 이해가 되셨길 하는 바램입니다.
프로세스의 개념만 아신다면 이해하기 쉬운 부분이니까요.

 

'일반적으로 CPU가 100개이든 1000개이든 프로그램은 CPU 1개의 속도로 실행됩니다.'

 

이 한마디가 오늘의 교훈이라고 할수 있을까나요-_-

관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


  • 댓글이 없습니다.