제가 보고 있는 Intel i5 시스템의 코어는 동일한 클럭 속도로만 실행될 수 있습니다. /sys/devices/system/cpu/cpu1/cpufreq/related_cpus
모든 CPU가 나열되어 있습니다. 예상대로, CPU1의 클럭 속도를 설정하면 CPU0의 클럭 속도가 변경됩니다.
아마도 제가 실행 중인 AMD A6-4400M 시스템은 각 코어를 다른 클럭 속도로 실행할 수 있어야 합니다. /sys/devices/system/cpu/cpu1/cpufreq/related_cpu
CPU1만 나열되어 있습니다. Performance Tuner를 사용하여 cpu1의 클럭 속도를 설정하고 echo 1400000 back을 실행하면 scaling_max_freq
cpu0의 클럭 속도는 예상대로 2700000으로 유지됩니다. CPU1의 scale_cur_freq는 예상대로 1400000을 읽습니다.
그러나 CPU1은 cpuinfo_cur_freq
2700000을 읽습니다. 벤치마크를 보면 CPU1은 실제로 여전히 2.7GHz에서 실행되고 있습니다. 제가 뭔가 놓치고 있는 걸까요, 아니면 뭔가 깨진 걸까요?
저는 Linux 2.6.35를 실행 중이고 idle=mwait
커널 명령줄을 전달하고 있습니다.
답변1
아직 명확한 답변은 아닙니다. 대신 이것은 리뷰에 적합하기에는 너무 긴 제안 세트입니다.
sysfs cpufreq 매개변수의 의미를 약간 오해하실 수도 있습니다. 예를 들어, 내코어 듀얼 코어노트북에서는 related_cpu
두 코어의 매개변수가 읽혀집니다 0 1
. 설명에 따르면 이는 코어가 독립적으로 주파수를 전환할 수 없음을 의미합니다. 하지만 그렇지 않습니다. 각 주파수를 원하는 대로 설정할 수 있습니다. 대조적으로,affected_cpus
각 코어의 매개변수에는 해당 CPU 번호만 나열됩니다.
을 더 잘 이해하려면 CPU-freq affected_cpus
, related_cpus
및 scaling_*
매개변수 에 대한 커널 문서를 확인하는 것이 좋습니다 cpuinfo_*
. 이 문서는 일반적으로 커널 소스 코드 패키지와 함께 배포됩니다. 특히, 나는 읽기를 권장합니다<kernel-sources-dir>/Documentation/cpu-freq/user-guide.txt
, 이는 <kernel-sources-dir>
일반적으로 /usr/src/linux
또는 을 나타냅니다 /usr/src/linux-<kernel-version>
. (그러나 지금 문서를 직접 살펴보면 주파수 스케일링과 관련된 몇 가지 뉘앙스를 놓쳤다는 점을 인정합니다. 이를 완전히 이해하려면 먼저 CPU 아키텍처에 대한 확실한 이해가 필요할 수 있습니다.)
귀하의 질문으로 돌아갑니다. 또한 테스트 사례도 있습니다. 값 scaling_max_freq
(조절기 사용 userspace
또는 조정기 사용 performance
)을 변경하면 코어 클럭이 자동으로 새로운 최대값으로 전환됩니다. 관찰되는 다양한 행동은 다음 중 하나일 수 있습니다.
- CPU의 주파수 스케일링 메커니즘의 특정 하드웨어 구현,
cpufreq
표준 모듈과phc-intel
제가 사용하는 모듈 의 차이로 인해 ,- (현재 커널 버전은)
cpufreq
이후 어느 시점에 변경된 모듈의 정상적인 동작(원하는 경우 버그 또는 기능이라고 부르세요),2.6.35
3.6.2
cpufreq
CPU(또는 전체 제품군) 구현에서 잘못된 결과가 발생합니다.performance
CPU 거버너 구현에 특정합니다2.6.35
.
추가 조사를 위해 취할 수 있는 몇 가지 단계는 다음과 같습니다.
user-guide.txt
더 많은 다른 매개 변수를 읽고 조정하십시오cpufreq
.- 최신 커널을 실행하면서 테스트를 반복하세요. 가장 쉬운 방법은 liveCD/DVD/USB를 부팅하는 것입니다.
예상치 못한 동작이 계속 발생하고 버그로 인한 것이라고 믿을 만한 이유가 더 많은 경우(최신 마이너 커널 버전을 반드시 확인해야 함) 이 문제를 신고해 주세요.kernel.org 버그질라.