Fwd: question about scailing CPU frequency

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, Thomas
thanks for your reply!
Yes, I want an environment like: one 2GHz and three 1GHz.
in this function: acpi_cpufreq_cpu_init
my computer did not go through
if (policy->shared_type == CPUFREQ_SHARED_TYPE_ALL ||
           policy->shared_type == CPUFREQ_SHARED_TYPE_ANY) {
               cpumask_copy(policy->cpus, perf->shared_cpu_map);
}

the policy's shared_type has 4 possibility:
#define CPUFREQ_SHARED_TYPE_NONE (0) /* None */
#define CPUFREQ_SHARED_TYPE_HW (1) /* HW does needed coordination */
#define CPUFREQ_SHARED_TYPE_ALL (2) /* All dependent CPUs should set freq */
#define CPUFREQ_SHARED_TYPE_ANY (3) /* Freq can be set from any dependent CPU*/
I guess my environment's policy->shared_type may be CPUFREQ_SHARED_TYPE_HW ?
I set the government to userspace, and change the frequency.
this function, acpi_cpufreq_target, is use to change the frequency.
my environment will enter the if loop
if (policy->shared_type != CPUFREQ_SHARED_TYPE_ANY)
cmd.mask = policy->cpus;
else
cmd.mask = cpumask_of(policy->cpu);
so the mask is set to the CPUs requiring sw coordination
hence, when I setting the frequency of core 0, only core 0 will do
cpufreq_notify_transition
then, change the frequency.
I use printk to debug, the result is like what I think.
My problem is:
now, all cores' government are userspace
all cores' frequency is 1.6 GHz
when I set core 0 to 2 GHz, my debugging msg tell me only core 0 go
through acpi_cpufreq_target's cpufreq_notify_transition
But the others will become 2 GHz!
is this because my policy->shared_type is CPUFREQ_SHARED_TYPE_HW??
is this function acpi_processor_get_psd to set the shared_type?
you mention about BIOS (_PSD ACPI func)?
what is this? may I change the shared_type?
sry my expression is not good...
BR,
Sabrina
2011/10/20 Thomas Renninger <trenn@xxxxxxx>
>
> On Tuesday 18 October 2011 04:30:01 sabrina chang wrote:
> > hello,
> > I have some questions about scailing CPU frequency.
> > I want to create an environment with 1 higher CPU frequency and 3
> > lower CPU frequency on Fedora system(linux kernel 2.6.32) with
> > acpi-cpufreq driver (Intel Core i7-920 Processor).
> > ****************************************************************************************************
> > this is the cpufreq-info report:
> > cpufrequtils 007: cpufreq-info (C) Dominik Brodowski 2004-2009
> > Report errors and bugs to cpufreq@xxxxxxxxxxxxxxx, please.
> > analyzing CPU 0:
> >   driver: acpi-cpufreq
> >   CPUs which run at the same hardware frequency: 0 1 2 3
> >   CPUs which need to have their frequency coordinated by software: 0
> >   maximum transition latency: 10.0 us.
> >   hardware limits: 1.60 GHz - 2.67 GHz
> >   available frequency steps: 2.67 GHz, 2.53 GHz, 2.40 GHz, 2.27 GHz,
> > 2.13 GHz, 2.00 GHz, 1.87 GHz, 1.73 GHz, 1.60 GHz
> >   available cpufreq governors: ondemand, userspace, performance
> >   current policy: frequency should be within 1.60 GHz and 2.67 GHz.
> >                   The governor "userspace" may decide which speed to use
> >                   within this range.
> >   current CPU frequency is 2.67 GHz (asserted by call to hardware).
> ...
> > ****************************************************************************************************
> > When I want to create the environment I want, the lower freq. always
> > sync with the higher freq.
> So you want, if for example cpufreq subsystem currently would set:
>   1.2G
>   2.0G
> like to have both cores set to 2.0G?
> This is what would really happen on an AMD core where HW frequency dependencies
> exist and different freqs are applied and I expect it's same/similar on Intel.
>
> I do not think it's very useful, but you could hardcode to add all cores
> to the software cpumask (acpi-cpufreq.c):
>        if (policy->shared_type == CPUFREQ_SHARED_TYPE_ALL ||
>            policy->shared_type == CPUFREQ_SHARED_TYPE_ANY) {
>                cpumask_copy(policy->cpus, perf->shared_cpu_map);
>        }
> Instead of perf->shared_cpu_map you could use all online cpus (cpu_online_mask).
>
> Due to possible HW dependencies and to make sure they got correctly exported by
> BIOS (_PSD ACPI func) and due to the fact that latest CPUs can boost which you
> cannot control, which you even can only measure over a period of time (you don't
> know at which freq your currently are) you should use mperf (in cpufrequtils)
> or better latest cpupower monitor feature.
> They show you the frequency your cores were really in.
> Real HW frequency might behave rather different than you'd expect it.
>
>  Thomas
>
> > It means that as long as one CPU frequency is higher, the rest lower
> > freq will adjust to the higher freq. even I set them to the lower
> > freq.
> > From the cpufreq-info report, it seems they are using hardware
> > coordination, not software coordination.
> > I saw some other articles talking about we can choose which coordination to use.
> > Do you know how to setting to software coordination, even if the power
> > do not save any consumption is ok.
> > I want the different speed of CPU for experiment.
> > Thanks for your listening!
--
To unsubscribe from this list: send the line "unsubscribe cpufreq" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Devel]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Forum]     [Linux SCSI]

  Powered by Linux