코어 2 CPU 전원 상태 ( " C- 상태 ")를 조사하는 동안 실제로 대부분의 레거시 인텔 코어 / 코어 2 프로세서에 대한 지원을 구현할 수있었습니다. 모든 배경 정보가 포함 된 완전한 구현 (Linux 패치)이 여기에 문서화되어 있습니다.
이 프로세서에 대한 자세한 정보를 축적함에 따라 Core 2 모델에서 지원되는 C 상태가 이전 및 이후 프로세서의 C 상태보다 훨씬 더 복잡하다는 것이 분명해졌습니다. 이를 패키지, 개별 코어 및 칩셋의 다른 구성 요소 (예 : 메모리)와 관련된 Enhanced C- 상태 (또는 " CxE ")라고합니다. intel_idle
드라이버가 출시 될 당시 코드는 특별히 성숙하지 않았으며 C- 상태 지원과 충돌하는 여러 Core 2 프로세서가 출시되었습니다.
Core 2 Solo / Duo C-state 지원에 관한 강력한 정보는 이 기사에서 2006 년부터 발견되었습니다 . 이것은 Windows 지원과 관련이 있지만 이러한 프로세서에서 강력한 하드웨어 C 상태 지원을 나타냅니다. Kentsfield에 관한 정보는 실제 모델 번호와 충돌하므로 아래의 Yorkfield를 실제로 참조한다고 생각합니다.
... 쿼드 코어 Intel Core 2 Extreme (Kentsfield) 프로세서는 5 개의 성능 및 절전 기술인 EIST (Enhanced Intel SpeedStep), Thermal Monitor 1 (TM1) 및 Thermal Monitor 2 (TM2), 구형 On-Demand Clock을 모두 지원합니다. 변조 (ODCM) 및 향상된 C 상태 (CxE) C1 (향상된 정지) 상태 만 특징으로하는 Intel Pentium 4 및 Pentium D 600, 800 및 900 프로세서와 비교하여이 기능은 Intel Core 2 프로세서 (Intel Core Solo / Duo 프로세서)에서 확장되었습니다. Grant Grant (C2), Deep Sleep (C3) 및 Deeper Sleep (C4)을 포함하여 프로세서의 모든 유휴 상태.
2008 년이 기사는 Core 2 Duo 및 Core 2 Quad를 포함한 멀티 코어 Intel 프로세서의 코어 별 C 상태에 대한 지원을 간략하게 설명합니다 ( Dell의이 백서에서 추가로 유용한 배경 정보를 찾았습니다 ).
핵심 C- 상태는 하드웨어 C- 상태입니다. CC1 및 CC3과 같은 몇 가지 핵심 유휴 상태가 있습니다. 아시다시피, 최신 프로세서는 일부 서클에서 Penryn으로 알려진 최근 출시 된 Core Duo T5000 / T7000 모바일 프로세서와 같은 다중 코어를 가지고 있습니다. 우리가 CPU / 프로세서라고 생각했던 것은 실제로 여러 범용 CPU가 있습니다. 인텔 코어 듀오에는 프로세서 칩에 2 개의 코어가 있습니다. 인텔 코어 -2 쿼드에는 프로세서 칩당 4 개의 코어가 있습니다. 이러한 각 코어에는 자체 유휴 상태가 있습니다. 하나의 코어가 유휴 상태이고 다른 코어는 스레드에서 작업하기가 어려우므로 의미가 있습니다. 따라서 코어 C 상태는 이러한 코어 중 하나의 유휴 상태입니다.
드라이버 에 대한 추가 배경을 제공하는 인텔 의 2010 프레젠테이션을 발견 intel_idle
했지만 불행히도 코어 2에 대한 지원 부족을 설명하지는 않습니다.
이 EXPERIMENTAL 드라이버는 Intel Atom 프로세서, Intel Core i3 / i5 / i7 프로세서 및 관련 Intel Xeon 프로세서에서 acpi_idle을 대체합니다. 인텔 코어 2 프로세서 또는 이전 버전은 지원하지 않습니다.
위의 프레젠테이션은 intel_idle
드라이버가 "메뉴"CPU 조정기의 구현이며 Linux 커널 구성에 영향을 미친다 는 것을 나타냅니다 (예 : CONFIG_CPU_IDLE_GOV_LADDER
vs. CONFIG_CPU_IDLE_GOV_MENU
). 래더와 메뉴 관리자의 차이점은 이 답변 에서 간결하게 설명되어 있습니다.
Dell은 C- 상태 C0-C6 호환성을 나열 하는 유용한 기사 를 제공합니다.
C1 ~ C3 모드는 기본적으로 CPU 내부에서 사용되는 클럭 신호를 차단하여 작동하는 반면 C4 ~ C6 모드는 CPU 전압을 낮추면 작동합니다. "향상된"모드는 동시에 두 가지를 모두 수행 할 수 있습니다.
Mode Name CPUs
C0 Operating State All CPUs
C1 Halt 486DX4 and above
C1E Enhanced Halt All socket LGA775 CPUs
C1E — Turion 64, 65-nm Athlon X2 and Phenom CPUs
C2 Stop Grant 486DX4 and above
C2 Stop Clock Only 486DX4, Pentium, Pentium MMX, K5, K6, K6-2, K6-III
C2E Extended Stop Grant Core 2 Duo and above (Intel only)
C3 Sleep Pentium II, Athlon and above, but not on Core 2 Duo E4000 and E6000
C3 Deep Sleep Pentium II and above, but not on Core 2 Duo E4000 and E6000; Turion 64
C3 AltVID AMD Turion 64
C4 Deeper Sleep Pentium M and above, but not on Core 2 Duo E4000 and E6000 series; AMD Turion 64
C4E/C5 Enhanced Deeper Sleep Core Solo, Core Duo and 45-nm mobile Core 2 Duo only
C6 Deep Power Down 45-nm mobile Core 2 Duo only
이 표 (나중에 어떤 경우에는 틀린 것으로 판명 됨)에서 Core 2 프로세서에 대한 C- 상태 지원에는 다양한 차이점이있는 것으로 보입니다 (Core를 제외한 거의 모든 Core 2 프로세서는 소켓 LGA775 임에 유의하십시오) 2 소켓 BGA956 및 Merom / Penryn 프로세서 인 Solo SU3500 ( "Intel Core"Solo / Duo 프로세서는 소켓 PBGA479 또는 PPGA478 중 하나).
이 기사 에서 테이블에 대한 추가 예외가 발견되었습니다 .
인텔의 코어 2 듀오 E8500은 C 상태 C2 및 C4를 지원하지만 코어 2 익스트림 QX9650은 지원하지 않습니다.
흥미롭게도 QX9650은 Yorkfield 프로세서 (Intel 제품군 6, 모델 23, 스테핑 6)입니다. 참고로, Q9550S는 Intel 제품군 6, 모델 23 (0x17), 스테핑 10으로, C- 상태 C4 (실험을 통해 확인 됨)를 지원합니다. 또한 Core 2 Solo U3500은 Q9550S와 동일한 CPUID (패밀리, 모델, 스테핑)를 갖지만 LGA775가 아닌 소켓에서 사용할 수 있으며 위 표의 해석을 혼란스럽게합니다.
분명히이 프로세서 모델에 대한 C- 상태 지원을 식별하고 불충분 한 (이 시점에서 결정되지 않은) 경우 CPUID를 최소한 스테핑까지 사용해야합니다.
CPU 유휴 정보를 할당하기위한 메소드 서명은 다음과 같습니다.
#define ICPU(model, cpu) \
{ X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long)&cpu }
어디 model
에서 열거 ASM / 인텔-family.h . 이 헤더 파일을 살펴보면 인텔 CPU에 인텔 제품군 6 모델 번호와 일치하는 것으로 보이는 8 비트 식별자가 할당되어 있습니다.
#define INTEL_FAM6_CORE2_PENRYN 0x17
위에서 Intel Family 6, Model 23 (0x17)을로 정의했습니다 INTEL_FAM6_CORE2_PENRYN
. 이는 대부분의 모델 23 프로세서에 대해 유휴 상태를 정의하기에 충분하지만 위에서 언급 한대로 QX9650에 문제를 일으킬 수 있습니다.
따라서 최소한 C- 상태가 다른 각 프로세서 그룹을이 목록에서 정의해야합니다.
2008 년 Intel Technology Journal 12 (3) : 219-227, Zagacki 및 Ponnala 는 Yorkfield 프로세서가 실제로 C2 및 C4를 지원함을 나타냅니다. 또한 ACPI 3.0a 사양이 C- 상태 C0, C1, C2 및 C3 사이의 전환 만 지원하는 것으로 보이며, Linux acpi_idle
드라이버가 제한된 C- 상태 세트 간의 전환으로 제한 될 수도 있습니다 . 그러나이 기사에서는 항상 그런 것은 아닙니다.
프로세서 상태가 아니라 ACPI C 상태이므로 ACPI C3은 HW C6 등일 수 있습니다.
참고 사항 :
프로세서 자체 이외에도 C4는 플랫폼의 주요 실리콘 구성 요소 간 동기화 된 노력이므로 인텔 Q45 익스프레스 칩셋은 28 %의 전력 향상을 달성합니다.
내가 사용하는 칩셋은 실제로 인텔 Q45 익스프레스 칩셋입니다.
MWAIT 상태에 대한 인텔 설명서 는 간결하지만 BIOS 관련 ACPI 동작을 확인합니다.
MWAIT 확장에 정의 된 프로세서 별 C 상태는 ACPI 정의 C 상태 유형 (C0, C1, C2, C3)에 매핑 될 수 있습니다. 매핑 관계는 프로세서 구현에 의한 C 상태 정의에 따라 달라지며 ACPI 정의 _CST 테이블을 사용하여 BIOS에 의해 OSPM에 노출됩니다.
위 표에 대한 나의 해석은 Wikipedia , asm / intel-family.h 및 위 기사 의 표 와 결합되어 있습니다 .
모델 9 0x09 ( 펜티엄 M 및 셀러론 M ) :
- 바니 아스 : C0, C1, C2, C3, C4
모델 13 0x0D ( 펜티엄 M 및 셀러론 M ) :
- Dothan, Stealey : C0, C1, C2, C3, C4
모델 14 0x0E INTEL_FAM6_CORE_YONAH ( 향상된 펜티엄 M , 강화 된 셀러론 M 또는 인텔 코어 ) :
- 요나 ( 코어 솔로 , 코어 듀오 ) : C0, C1, C2, C3, C4, C4E / C5
모델 15 0x0F INTEL_FAM6_CORE2_MEROM (일부 코어 2 및 펜티엄 듀얼 코어 ) :
- Kentsfield, Merom, Conroe, Allendale ( E2xxx / E4xxx 및 Core 2 Duo E6xxx, T7xxxx / T8xxxx , Core 2 Extreme QX6xxx , Core 2 Quad Q6xxx ) : C0, C1, C1E, C2, C2E
모델 23 0x17 INTEL_FAM6_CORE2_PENRYN ( 코어 2 ) :
- Merom-L / 펜린 -L :?
- Penryn ( Core 2 Duo 45nm 모바일 ) : C0, C1, C1E, C2, C2E, C3, C4, C4E / C5, C6
- Yorkfield ( Core 2 Extreme QX9650 ) : C0, C1, C1E, C2E ?, C3
- Wolfdale / Yorkfield ( 코어 2 쿼드 , C2Q 제온 , 코어 2 듀오 E5xxx / E7xxx / E8xxx , 펜티엄 듀얼 코어 E6xxx , 셀러론 듀얼 코어 ) : C0, C1, C1E, C2, C2E, C3, C4
코어 2 프로세서 라인 내에서 C- 상태 지원의 다양성의 양에서, C- 상태에 대한 일관된 지원의 부족은 intel_idle
드라이버 를 통해 완전히 지원하지 않는 이유 일 수 있습니다 . 전체 코어 2 라인에 대해 위의 목록을 완전히 작성하고 싶습니다.
이 프로세서 에서 강력한 절전 MWAIT C 상태 를 완전히 활용하지 않아 불필요한 전력이 얼마나 사용되고 과도한 열이 발생했는지 (그리고 여전히) 궁금해하기 때문에 실제로 만족스러운 답변은 아닙니다 .
Chattopadhyay et al. 2018 년, 에너지 효율적인 고성능 프로세서 : 친환경 고성능 컴퓨팅 설계를위한 최근의 접근 방식 은 Q45 Express 칩셋에서 찾고있는 특정 동작에 주목할 가치가 있습니다.
패키지 C 상태 (PC0-PC10)-컴퓨팅 도메인, 코어 및 그래픽 (GPU)이 유휴 상태 인 경우 프로세서는 언 코어 및 플랫폼 레벨에서 추가 전력 절약 기회를 갖게됩니다 (예 : LLC 플러시 및 전원 게이팅). 메모리 컨트롤러 및 DRAM IO, 일부 상태에서는 항상 켜져있는 전원 도메인에서 상태를 유지하면서 전체 프로세서를 끌 수 있습니다.
테스트로 linux / drivers / idle / intel_idle.c line 127에 다음을 삽입했습니다 .
static struct cpuidle_state conroe_cstates[] = {
{
.name = "C1",
.desc = "MWAIT 0x00",
.flags = MWAIT2flg(0x00),
.exit_latency = 3,
.target_residency = 6,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C1E",
.desc = "MWAIT 0x01",
.flags = MWAIT2flg(0x01),
.exit_latency = 10,
.target_residency = 20,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
// {
// .name = "C2",
// .desc = "MWAIT 0x10",
// .flags = MWAIT2flg(0x10),
// .exit_latency = 20,
// .target_residency = 40,
// .enter = &intel_idle,
// .enter_s2idle = intel_idle_s2idle, },
{
.name = "C2E",
.desc = "MWAIT 0x11",
.flags = MWAIT2flg(0x11),
.exit_latency = 40,
.target_residency = 100,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.enter = NULL }
};
static struct cpuidle_state core2_cstates[] = {
{
.name = "C1",
.desc = "MWAIT 0x00",
.flags = MWAIT2flg(0x00),
.exit_latency = 3,
.target_residency = 6,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C1E",
.desc = "MWAIT 0x01",
.flags = MWAIT2flg(0x01),
.exit_latency = 10,
.target_residency = 20,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C2",
.desc = "MWAIT 0x10",
.flags = MWAIT2flg(0x10),
.exit_latency = 20,
.target_residency = 40,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C2E",
.desc = "MWAIT 0x11",
.flags = MWAIT2flg(0x11),
.exit_latency = 40,
.target_residency = 100,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C3",
.desc = "MWAIT 0x20",
.flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
.exit_latency = 85,
.target_residency = 200,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C4",
.desc = "MWAIT 0x30",
.flags = MWAIT2flg(0x30) | CPUIDLE_FLAG_TLB_FLUSHED,
.exit_latency = 100,
.target_residency = 400,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C4E",
.desc = "MWAIT 0x31",
.flags = MWAIT2flg(0x31) | CPUIDLE_FLAG_TLB_FLUSHED,
.exit_latency = 100,
.target_residency = 400,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C6",
.desc = "MWAIT 0x40",
.flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED,
.exit_latency = 200,
.target_residency = 800,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.enter = NULL }
};
에서 intel_idle.c
라인 983 :
static const struct idle_cpu idle_cpu_conroe = {
.state_table = conroe_cstates,
.disable_promotion_to_c1e = false,
};
static const struct idle_cpu idle_cpu_core2 = {
.state_table = core2_cstates,
.disable_promotion_to_c1e = false,
};
에서 intel_idle.c
라인 1073 :
ICPU(INTEL_FAM6_CORE2_MEROM, idle_cpu_conroe),
ICPU(INTEL_FAM6_CORE2_PENRYN, idle_cpu_core2),
내 PXE 노드의 빠른 컴파일 및 재부팅 후 다음이 dmesg
표시됩니다.
[ 0.019845] cpuidle: using governor menu
[ 0.515785] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns
[ 0.543404] intel_idle: MWAIT substates: 0x22220
[ 0.543405] intel_idle: v0.4.1 model 0x17
[ 0.543413] tsc: Marking TSC unstable due to TSC halts in idle states deeper than C2
[ 0.543680] intel_idle: lapic_timer_reliable_states 0x2
그리고 지금 PowerTOP은 다음을 보여줍니다 :
Package | CPU 0
POLL 2.5% | POLL 0.0% 0.0 ms
C1E 2.9% | C1E 5.0% 22.4 ms
C2 0.4% | C2 0.2% 0.2 ms
C3 2.1% | C3 1.9% 0.5 ms
C4E 89.9% | C4E 92.6% 66.5 ms
| CPU 1
| POLL 10.0% 400.8 ms
| C1E 5.1% 6.4 ms
| C2 0.3% 0.1 ms
| C3 1.4% 0.6 ms
| C4E 76.8% 73.6 ms
| CPU 2
| POLL 0.0% 0.2 ms
| C1E 1.1% 3.7 ms
| C2 0.2% 0.2 ms
| C3 3.9% 1.3 ms
| C4E 93.1% 26.4 ms
| CPU 3
| POLL 0.0% 0.7 ms
| C1E 0.3% 0.3 ms
| C2 1.1% 0.4 ms
| C3 1.1% 0.5 ms
| C4E 97.0% 45.2 ms
마지막으로 Enhanced Core 2 C 상태에 액세스했으며 전력 소비가 크게 감소한 것으로 보입니다 .8 개 노드의 미터는 평균 5 % 이상 낮아진 것으로 보입니다 (한 노드는 여전히 이전 커널을 실행 함) ,하지만 테스트로 커널을 다시 교체하려고합니다.
C4E 지원에 관한 흥미로운 참고 사항 – My Yorktown Q9550S 프로세서는 위에서 입증 된 바와 같이 프로세서 (또는 C4의 다른 하위 상태)를 지원하는 것으로 보입니다! 코어 2 Q9000 프로세서 (섹션 6.2) 의 인텔 데이터 시트에 C- 상태 보통 (C0), HALT (C1 = 0x00), 확장 HALT (C1E = 0x01), 보조금 중지 (C2 = 0x10) 만 언급 되어 있기 때문에 혼동 됩니다. , 확장 정지 허가 (C2E = 0x11), 슬립 / 딥 슬립 (C3 = 0x20) 및 딥 슬립 (C4 = 0x30). 이 추가 0x31 상태는 무엇입니까? 상태 C2를 활성화하면 C4 대신 C4E가 사용됩니다. 상태 C2 (강제 상태 C2E)를 비활성화하면 C4E 대신 C4가 사용됩니다. 이것이 MWAIT 플래그와 관련이 있다고 생각되지만 아직이 동작에 대한 설명서를 찾지 못했습니다.
무엇을 만들어야할지 모르겠습니다 .C1E 상태는 C1 대신 사용되는 것으로 보이며 C2는 C2E 대신 사용되며 C4E는 C4 대신 사용됩니다. C1 / C1E, C2 / C2E 및 C4 / C4E를 함께 사용할 수 intel_idle
있는지 또는 중복되어 있는지 확실하지 않습니다 . 인텔 랩스 피츠버그의이 2010 프레젠테이션 에서 전환이 C0-C1-C0-C1E-C0이며 추가 상태는 다음과 같은 메모를 발견했습니다 .
C1E는 모든 코어가 C1E에있는 경우에만 사용됩니다.
모든 코어가 C1E 상태에있을 때만 C1E 상태가 다른 구성 요소 (예 : 메모리)에 입력 된 것으로 해석됩니다. 또한 C2 / C2E 및 C4 / C4E 상태에 동일하게 적용하기 위해 이것을 사용합니다 (C4E가 "C4E / C5"라고하더라도 C4E가 C4의 하위 상태인지 또는 C5가 하위 상태인지 확실하지 않습니다. 테스트 결과 C4 / C4E가 올바른 것으로 보입니다. C2 상태를 주석 처리하여 C2E를 사용하도록 강제 할 수 있습니다. 그러나 C4E 대신 C4 상태가 사용됩니다 (여기에 더 많은 작업이 필요할 수 있음). 상태 C2E가없는 모델 15 또는 모델 23 프로세서는 없을 것입니다. 이러한 프로세서는 위 코드를 사용하여 C1 / C1E로 제한되기 때문입니다.
또한 플래그, 대기 시간 및 상주 값은 미세 조정될 수 있지만 Nehalem 유휴 값을 기반으로 교육받은 추측을 취하는 것만으로도 잘 작동하는 것 같습니다. 개선하려면 더 많은 정보가 필요합니다.
나는 이것을 Core 2 Duo E2220 ( Allendale ), Dual Core Pentium E5300 ( Wolfdale ), Core 2 Duo E7400 , Core 2 Duo E8400 ( Wolfdale ), Core 2 Quad Q9550S ( Yorkfield ) 및 Core 2 Extreme QX9650 에서 테스트했습니다. 앞서 언급 한 C2 / C2E 및 C4 / C4E 선호도 외에는 문제가 없습니다.
이 드라이버 수정에 포함되지 않습니다 :
- 원래 Core Solo / Core Duo ( Yonah , 비 Core 2)는 패밀리 6, 모델 14입니다. 이는 C4E / C5 (Enhanced Deep Sleep) C 상태를 지원하지만 C1E / C2E 상태는 지원하지 않기 때문에 좋습니다. 자체 유휴 정의.
내가 생각할 수있는 유일한 문제는 다음과 같습니다.
- 코어 2 솔로 SU3300 / SU3500 (Penryn-L)은 제품군 6, 모델 23 이며이 드라이버에 의해 감지됩니다. 그러나 소켓 LGA775가 아니므로 C1E Enhanced Halt C 상태를 지원하지 않을 수 있습니다. Core 2 Solo ULV U2100 / U2200 ( Merom-L )도 마찬가지 입니다. 그러나
intel_idle
드라이버는 하위 상태의 하드웨어 지원에 따라 적절한 C1 / C1E를 선택하는 것으로 보입니다.
- 보도에 따르면 코어 2 익스트림 QX9650 (요크 필드)은 C- 상태 C2 또는 C4를 지원하지 않습니다. eBay에서 중고 Optiplex 780 및 QX9650 Extreme 프로세서를 구입하여이를 확인했습니다. 프로세서는 C 상태 C1 및 C1E를 지원합니다. 이 드라이버 수정으로 CPU는 C1 대신 C1E 상태에서 유휴 상태가되어 전력이 약간 절약됩니다. 나는 C-state C3을 볼 것으로 예상했지만,이 드라이버를 사용할 때는 존재하지 않으므로 더 자세히 살펴볼 필요가 있습니다.
C- 상태 (예 : 딥 파워 다운) 간 전환에 대한 2009 인텔 프레젠테이션에서 슬라이드를 찾을 수있었습니다.
결론적으로, intel_idle
드라이버 에서 코어 2 지원이 부족한 실질적인 이유는 없었습니다 . "Core 2 Duo"에 대한 원래 스텁 코드는 C 상태 C1 및 C2 만 처리했으며 C acpi_idle
상태 C3도 처리 하는 함수 보다 훨씬 덜 효율적 이었습니다. 어디를보아야하는지 알면 쉽게 지원을 구현할 수있었습니다. 유용한 의견과 다른 답변에 감사 드리며 아마존이 듣고 있다면 수표를 보낼 곳을 알 수 있습니다.
이 업데이트는 github 에 커밋 되었습니다 . 곧 LKML에 패치를 이메일로 보내겠습니다.
업데이트 : 나는 또한 소켓 T / LGA775 Allendale ( Conroe ) Core 2 Duo E2220 (패밀리 6, 모델 15) 을 파낼 수 있었으므로 지원도 추가했습니다. 이 모델은 C- 상태 C4에 대한 지원은 없지만 C1 / C1E 및 C2 / C2E는 지원합니다. 이것은 다른 Conroe 기반 칩 ( E4xxx / E6xxx ) 및 가능하면 모든 Kentsfield 및 Merom (non-Merom-L) 프로세서에서도 작동합니다.
업데이트 : 마침내 MWAIT 튜닝 리소스를 찾았습니다. 이 Power vs. Performance 쓰기 및이 Deeper C 상태 및 대기 시간 증가 블로그 게시물에는 CPU 유휴 대기 시간을 식별하는 데 유용한 정보가 포함되어 있습니다. 불행히도, 이것은 커널로 코딩 된 종료 대기 시간 만보고하지만 흥미롭게도 프로세서가 지원하는 하드웨어 상태 만보고합니다.
# cd /sys/devices/system/cpu/cpu0/cpuidle
# for state in `ls -d state*` ; do echo c-$state `cat $state/name` `cat $state/latency` ; done
c-state0/ POLL 0
c-state1/ C1 3
c-state2/ C1E 10
c-state3/ C2 20
c-state4/ C2E 40
c-state5/ C3 20
c-state6/ C4 60
c-state7/ C4E 100
acpi_idle
하고 다양한 성능 총재.powertop
시스템에 어떤 상태가 표시됩니까?