IT & Security/리눅스 :: 정보

LMDE 2 / 데비안 8 32비트에서 멀티코어(쓰레드)가 작동하지 않을 때

la Nube 2017. 7. 2. 20:53
반응형

2006년에 생산되어 2007년에 구입한 노트북에 LMDE 2를 깔다가 삽질(?)한 경험을 토대로 작성해봅니다.
해당 노트북은 인텔 Core 2 Duo T5500 1.66Ghz CPU를 사용합니다. 2코어 2쓰레드입니다.

--

LMDE 2와 데비안 8 32비트에서 멀티코어/멀티쓰레드를 인식하지 못하는 경우가 있습니다.
그 이유는 32비트 설치시에 커널이 686-PAE 커널이 아닌 다음과 같은 586 커널이 설치되었기 때문입니다.
linux-image-586, linux-image-3.16.0-4-586, linux-headers-586, linux-headers-3.16.0-4-586

흔히 32비트라고 부르는 i386(i686)은 586과 686-PAE로 구분된다고 보면 됩니다.
586 커널은 멀티코어/멀티쓰레드 시절로 넘어오기 이전의 싱글코어/싱글쓰레드 시절에 사용되었습니다.
인텔 펜티엄3, 펜티엄4 등과 같이 2000년대 초반이나 그 이전에 나온 오래된 CPU에서 사용되었죠.
패키지를 매우 보수적으로(?) 관리하는 배포판인 데비안에서는 이런 오래된 커널이 깔리는 경우가 있습니다.

32비트에 586 커널이 깔리게 되면, 여러 개의 코어/쓰레드가 존재하더라도 그 중에 하나만 작동하게 됩니다.
듀얼코어나 쿼드코어 등의 최신 CPU인데, 15~20년 전 PC처럼 돌아가게 되는 것입니다.
32비트에 586이 아닌 686-PAE 커널이 깔리거나, 64비트라서 AMD64 커널이 깔리면 이런 문제가 없습니다.

따라서 멀티코어/멀티쓰레드가 제대로 작동하기 위해서는 커널 교체 작업이 필요합니다.
먼저, 다음과 같이 터미널에서 686-PAE 커널을 설치합니다. 설치가 완료되면 PC를 재부팅하여야 합니다.
$ sudo apt install linux-image-686-pae linux-image-3.16.0-4-686-pae linux-headers-686-pae linux-headers-3.16.0-4-686-pae
$ sudo reboot

재부팅을 하게 되면, 이제 Grub에서는 586보다 최신의 커널인 686-PAE 커널을 사용하게 됩니다.
터미널에서 586 커널을 모두 삭제합니다.
$ sudo apt remove --purge linux-image-586 linux-image-3.16.0-4-586 linux-headers-586 linux-headers-3.16.0-4-586
인텔 CPU인 경우에는 다음과 같이 인텔 독점 드라이버도 설치합니다.
$ sudo apt install intel-microcode
AMD CPU인 경우에는 다음과 같이 AMD 독점 드라이버를 설치합니다.
$ sudo apt install amd64-microcode

한편, 우분투는 12.04부터 32비트 커널을 686-PAE 커널만으로 쓰기 때문에 위와 같은 문제가 발생하지 않습니다.
그러나, 다르게 말하면 우분투는 586 커널을 지원하지 않기 때문에, 아주 오래된 CPU로는 우분투를 돌릴 수 없게 됩니다.

터미널에서 다음과 같이 입력하면 전체 쓰레드의 수를 알 수 있습니다.
$ grep -c processor /proc/cpuinfo
2코어 4쓰레드인 i3 CPU에서는 4라고 나오며, 4코어 8쓰레드인 i7 CPU에서는 8이라고 나오게 됩니다.
586 커널인 상태에서는 전부 1이라고 나옵니다. 하나만 인식해서 작동하는 거죠 ㅠㅠ

<커널 버전 확인하는 방법>
터미널에서 uname -a 입력

참고로 LMDE 2와 데비안 8에서 커널 관련 패키지는 다음과 같습니다.
linux-image-amd64 / linux-image-686-pae (데비안 9에서는 linux-image-686) / linux-image-586
linux-headers-amd64 / linux-headers-686-pae / linux-headers-586
linux-image-3.16.0-4-amd64 / linux-image-3.16.0-4-686-pae / linux-image-3.16.0-4-586
linux-headers-3.16.0-4-amd64 / linux-headers-3.16.0-4-686-pae / linux-headers-3.16.0-4-586
linux-headers-3.16.0-4-common
linux-libc-dev
linux-compiler-gcc-4.8-x86 (64비트에서도 x86으로 설치됨)

반응형