2012년 4월 16일 월요일

cpu core 갯수 확인


1. 리눅스에서 하드웨어 cpu 갯수를 확인 하다 보면 어떤게 물리적으로 cpu가 몇 개 꽂혀 있는지 잘 모르겠습니다. 
    cpuinfo에 대해 알아봐야 할 것 같습니다.
2. 기본 명령어 
# cat /proc/cpuinfo
3. 제가 보고 있는 서버는 Quad Core 2.4GHz 1개 짜리 서버입니다. 
   그런데 cpuinfo에는 다음과 같이 나옵니다. 
… 
processor       : 7 
vendor_id       : GenuineIntel 
cpu family      : 6 
model           : 44 
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz 
stepping        : 2 
cpu MHz         : 2400.212 
cache size      : 12288 KB 
physical id     : 1 
siblings        : 8 
core id         : 10 
cpu cores       : 4 
apicid          : 53 
fdiv_bug        : no 
hlt_bug         : no 
f00f_bug        : no 
coma_bug        : no 
fpu             : yes 
fpu_exception   : yes 
cpuid level     : 11 
wp              : yes
위와 같은 내용이 8번 나옵니다. processor 0~7까지. 
어떻게 된 것일까요?? 자세히 알아보겠습니다.
4. physical id 는 물리적인 cpu 당 1개씩 할당 됩니다. 
# cat /proc/cpuinfo | grep "physical id" 
physical id     : 1 
physical id     : 1 
physical id     : 1 
physical id     : 1 
physical id     : 1 
physical id     : 1 
physical id     : 1 
physical id     : 1
: id 값이 1종류 라는 것은 cpu 갯수는 1개라는 결론입니다. 
  정리해 보면 실제 물리적 cpu 갯수는 다음 명령으로 정확하게 나오겠습니다. 
# cat /proc/cpuinfo | grep "physical id" |  uniq –dc | wc –l
: 중복을 제거하고 카운팅 했으니 이 값이 물리적 CPU 갯수가 되겠죠.
5. 다음으로 “cpu cores : 4” 물리적 CPU 1개당 코어수 입니다.
6. 근데 왜 cpuinfo 에서는 총 8개에 processor 로 나오는 것일까요??
7. “siblings : 8” 에 그 해답이 있습니다. 
    core 수가 4개 인데 siblings가 8개 라는 건 HT ( HyperThread )가 되어 있는 것입니다. 
    만일, HT 가 아니라면 siblings은 4가 나왔을 것이고 processor 는 4개가 나왔겠죠.
8. 항상 궁금 하면서도 모르고 지나갔던 부분이었는데 속이 시원하네요. ^^