x86-8 / linux-3.2

iamroot.org linux study x86 8th
Other
4 stars 1 forks source link

Multiprocessor Specification은 왜 Hyperthreading이 지원안되는가? #4

Open hwiorn opened 11 years ago

hwiorn commented 11 years ago

get_smp_config()->default_get_smp_config()

함수를 보면, 소스 첫 부분 쯤에 아래와 같은 주석이 있습니다.

    /*
     * MPS doesn't support hyperthreading, aka only have
     * thread 0 apic id in MPS table
     */

저번 주 스터디 때, 인터럽트를 받아들이는 4가지 모드에 대해서 @Minq 님이 스펙을 보여주셨는데요. 이 부분이 원래는 아래 패치를 통해 변경된, 같은 주석이었습니다. PATCH - x86: cleanup get_smp_config

    /*
-    * ACPI supports both logical (e.g. Hyper-Threading) and physical
-    * processors, where MPS only supports physical.
+    * MPS doesn't support hyperthreading, aka only have
+    * thread 0 apic id in MPS table
     */

ACPI에서는 logical, physical processor를 둘 다 지원하는데, MPS는 physical만을 지원한다고 합니다. intel 문서는 아니지만, 아래 문서의 1번째 페이지 ACPI tables for discovering processors 문단에 그 이유가 있습니다(novell문서기 때문에 intel쪽이 더 자세히 나와 있지 않을까 싶네요) incoporating_hyperthreading_technology_into_a_netware_based_platform.pdf

Because some operating systems are not enabled for HyperThreading,
Intel prevents those operating systems from encountering the virtual processors
by excluding the processors from the BIOS Multi-Processor Specification (MPS)
tables.
Instead, Intel lists only one processor per package, rather than two, in the MPS
tables. It lists all processors in the BIOS ACPI tables.

몇몇 OS 에서 _하이퍼스레딩을 제대로 지원(활성화)하지 못해서, MPS tables를 통해 가상 프로세서 정보를 물리 프로세서 정보와 같이 취급하는 것을 방지하기 위해서_ 라는 것으로 보입니다.

tty1538 commented 11 years ago

그렇군용