글 수 162
155 #ifdef CONFIG_X86_32_SMP
156 /*
157 * This function is needed by all SMP systems. It must _always_ be valid
158 * from the initial startup. We map APIC_BASE very early in page_setup(),
159 * so this is correct in the x86 case.
160 */
161 #define raw_smp_processor_id() (percpu_read(cpu_number))
추적을 해보니 다음과 같았습니다.
#define percpu_read(var) percpu_from_op("mov", per_cpu__##var)
점점 더 미궁으로 빠져들어가고 있네요 ㅡ_ㅡ;;;
선언되어있는 것 조차 보이지 않는데, built-in으로 처리하는 건가요 ?
대충 코드 흐름으로 봐서는 CPU의 갯수라는 것은 알겠는데, 정의가 되어있는 부분이 궁금합니다.
VMware 에서 작업을 하는데, 제 머신이 SMP가 뭔지 잘 모르겠네요 ㅡ_ㅡ;;;
#uname -a 했을때 뜨는 정보는 아래와 같습니다.
Linux localhost.localdomain 2.6.30.1 #3 SMP Sat Dec 26 07:10:02 KST 2009 i686 i686 i386 GNU/Linux
int형으로 선언된 percpu 변수입니다.
cpu 개수가 아니라 해당 cpu에 할당된 ID라고 보시면 됩니다.
http://lxr.linux.no/#linux+v2.6.33/arch/x86/kernel/setup_percpu.c#L30
커널은 이미 SMP를 지원하도록 설정되어 있고
하드웨어 정보는 /proc/cpuinfo나
/sys/devices/system/cpu/present 파일 읽어보시면 될 것 같습니다.
(VMWare 설정에서 cpu 개수 조정가능하지 않을까요?)