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

Re: [Xen-devel] [xen 3.4.2][2.6.31.6-pvops] Problems with cpufreq=xen power management on amd k8 cpu



Hello Ke,

Unfortunately no answer yet :-(

Regards,

Sander

Saturday, January 9, 2010, 3:53:55 AM, you wrote:

> Ok, then we can narrow down the issue to Powernow driver. CC Mark who is the 
> author of Powernow.

> Regards
> Ke

> -----Original Message-----
> From: Sander Eikelenboom [mailto:linux@xxxxxxxxxxxxxx] 
> Sent: Saturday, January 09, 2010 1:24 AM
> To: Yu, Ke
> Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
> Subject: Re: [Xen-devel] [xen 3.4.2][2.6.31.6-pvops] Problems with 
> cpufreq=xen power management on amd k8 cpu

> Hello Ke,

> With xen-3.4.2 with your patch and 2.6.31.6-pvops it returns

> But when i look at the current linux kernels powernow-k8.c your check isn't 
> valid for family 15 (CPUID_XFAM_K8) but only for CPUID_XFAM_10H cpu's.
> I have a family 15 cpu.
> I don't know what this means for the rest of the code in de powernow-k8 
> version in xen. Should it support the family 15 cpu's ?

> Regards,

> Sander


> static void check_supported_cpu(void *_rc)
> 512 {
> 513         u32 eax, ebx, ecx, edx;
> 514         int *rc = _rc;
> 515
> 516         *rc = -ENODEV;
> 517
> 518         if (current_cpu_data.x86_vendor != X86_VENDOR_AMD)
> 519                 return;
> 520
> 521         eax = cpuid_eax(CPUID_PROCESSOR_SIGNATURE);
> 522         if (((eax & CPUID_XFAM) != CPUID_XFAM_K8) &&
> 523             ((eax & CPUID_XFAM) < CPUID_XFAM_10H))
> 524                 return;
> 525
> 526         if ((eax & CPUID_XFAM) == CPUID_XFAM_K8) {
> 527                 if (((eax & CPUID_USE_XFAM_XMOD) != CPUID_USE_XFAM_XMOD) 
> ||
> 528                     ((eax & CPUID_XMOD) > CPUID_XMOD_REV_MASK)) {
> 529                         printk(KERN_INFO PFX
> 530                                 "Processor cpuid %x not supported\n", 
> eax);
> 531                         return;
> 532                 }
> 533
> 534                 eax = cpuid_eax(CPUID_GET_MAX_CAPABILITIES);
> 535                 if (eax < CPUID_FREQ_VOLT_CAPABILITIES) {
> 536                         printk(KERN_INFO PFX
> 537                                "No frequency change capabilities 
> detected\n");
> 538                         return;
> 539                 }
> 540
> 541                 cpuid(CPUID_FREQ_VOLT_CAPABILITIES, &eax, &ebx, &ecx, 
> &edx);
> 542                 if ((edx & P_STATE_TRANSITION_CAPABLE)
> 543                         != P_STATE_TRANSITION_CAPABLE) {
> 544                         printk(KERN_INFO PFX
> 545                                 "Power state transitions not 
> supported\n");
> 546                         return;
> 547                 }
> 548         } else { /* must be a HW Pstate capable processor */
> 549                 cpuid(CPUID_FREQ_VOLT_CAPABILITIES, &eax, &ebx, &ecx, 
> &edx);
> 550                 if ((edx & USE_HW_PSTATE) == USE_HW_PSTATE)
> 551                         cpu_family = CPU_HW_PSTATE;
> 552                 else
> 553                         return;
> 554         }
> 555
> 556         *rc = 0;
> 557 }


> Friday, January 8, 2010, 3:32:18 PM, you wrote:

>> Hi Sander,

>> For option1 "cpufreq=dom0-kernel", it is not working currently, the reason 
>> is a bit complex, and let me explain. For every processor, there is 
>> corresponding acpi processor object in ACPI DSDT table. Kernel use struct 
>> acpi_processor to represent the acpi processor object. There is a field "id" 
>> in acpi_processor representing the cpu id (the same id as 
>> smp_processor_id()). Kernel cpufreq use acpi_processor->id to do the 
>> frequency scaling. Unfortunately, in pv_ops domain0, the acpi_processor->id 
>> value is not correct, because it is get by acpi_id->apic_id->id mapping, and 
>> in pv_ops dom0, the apic_id of vcpu is not correctly initialized. Please see 
>> drivers/acpi/processor_core.c:get_cpu_id() for detail code, where 
>> cpu_physical_id() is not initialized in pv_ops dom0 case. I am still 
>> thinking if there is better approach to do the acpi_id->apic_id->id mapping 
>> in pv_ops dom0 case. 

>> BTW, "cpufreq=dom0-kernel" is not recommend, due to that it require 
>> #pCPU=#vCPU, and all vCPU in dom0 must be pined.

>> For option2 "cpufreq=xen", from the log, Xen can get all the P states info, 
>> but it failed to do cpufreq cpu initialization 
>> (xen/arch/x86/acpi/cpufreq/cpufreq.c: cpufreq_cpu_init()), so the cpufreq is 
>> not started finally, and xenpm cannot set cpufreq parameter. To get more 
>> debug info, I write a simple patch as attached, could you please have a try 
>> and send the debug info?

>> Another thing is, does "cpufreq=xen" work with linux-2.6.18-xen dom0? 

>> Best Regards
>> Ke

>> -----Original Message-----
>> From: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx 
>> [mailto:xen-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of Sander 
>> Eikelenboom
>> Sent: Thursday, January 07, 2010 11:08 PM
>> To: xen-devel@xxxxxxxxxxxxxxxxxxx
>> Subject: [Xen-devel] [xen 3.4.2][2.6.31.6-pvops] Problems with cpufreq=xen 
>> power management on amd k8 cpu

>> Hi All,

>> I'm trying to get powermanagement working with xen and a 2.6.31.6-pvops 
>> kernel on xen 3.4.2
>> From what I have read, I have 2 options:
>> 1) Let the xen hypervisor do the powermanagement (cpufreq=xen)
>> 2) Let the dom0 kernel do the powermanagement    (cpufreq=dom0-kernel)

>> When booting the 2.6.31.6-pvops kernel on bare metal without hypervisor the 
>> powernow-k8 module works.
>> When booting the 2.6.31.6-pvops kernel as dom0 on the xen 3.4.2 hypervisor 
>> the powernow-k8 module doesn't load and complains:
>>      Jan  7 15:25:37 localhost kernel: [   12.797914] powernow-k8: Found 1 
>> AMD Athlon(tm) Dual Core Processor 4850e processors (2 cpu cores) (version 
>> 2.20.00)
>>      Jan  7 15:25:37 localhost kernel: [   12.797926] powernow-k8: register 
>> performance failed: bad ACPI data
>>      Jan  7 15:25:37 localhost kernel: [   12.797929] [Firmware Bug]: 
>> powernow-k8: No compatible ACPI _PSS objects found.
>>      Jan  7 15:25:37 localhost kernel: [   12.797931] [Firmware Bug]: 
>> powernow-k8: Try again with latest BIOS.
>>      Jan  7 15:25:37 localhost kernel: [   12.797941] powernow-k8: register 
>> performance failed: bad ACPI data
>>      Jan  7 15:25:37 localhost kernel: [   12.822315] acpi-cpufreq: 
>> acpi_cpufreq_init
>>      Jan  7 15:25:37 localhost kernel: [   12.822319] acpi-cpufreq: 
>> acpi_cpufreq_early_init
>>      Jan  7 15:25:37 localhost kernel: [   12.822333] acpi-cpufreq: 
>> acpi_cpufreq_cpu_init
>>      Jan  7 15:25:37 localhost kernel: [   12.822338] acpi-cpufreq: 
>> acpi_cpufreq_cpu_init

>> It could be that additional changes are needed to the pvops kernel that have 
>> been made to the xen 2.6.18.8 kernel ?

>> When trying the first option, and let the hypervisor do the powermanagement 
>> (booting with cpufreq=xen cpufreq.debug=2 loglvl=all)
>> it shows the following in xm dmesg (complete xm dmesg attachted):

>> (XEN) Set CPU acpi_id(0) cpuid(0) Px State info:
>> (XEN)   _PPC: 0
>> (XEN) Set CPU acpi_id(0) cpuid(0) Px State info:
>> (XEN)   _PCT: descriptor=130, length=12, space_id=127, bit_width=0, 
>> bit_offset=0, reserved=0, address=0
>> (XEN)   _PCT: descriptor=130, length=12, space_id=127, bit_width=0, 
>> bit_offset=0, reserved=0, address=0
>> (XEN)   _PSS: state_count=6
>> (XEN)   State0: 2500MHz 50000mW 100us 9us 0xe8201391 0x391
>> (XEN)   State1: 2400MHz 46020mW 100us 9us 0xe82013d0 0x3d0
>> (XEN)   State2: 2200MHz 38671mW 100us 9us 0xe820144e 0x44e
>> (XEN)   State3: 2000MHz 32100mW 100us 9us 0xe82014cc 0x4cc
>> (XEN)   State4: 1800MHz 26265mW 100us 9us 0xe820154a 0x54a
>> (XEN)   State5: 1000MHz 13888mW 100us 9us 0xe8201582 0x582
>> (XEN)   _PSD: num_entries=5 rev=0 domain=0 coord_type=253 num_processors=2
>> (XEN)   _PPC: 0
>> (XEN) Set CPU acpi_id(1) cpuid(1) Px State info:
>> (XEN)   _PPC: 0
>> (XEN) Set CPU acpi_id(1) cpuid(1) Px State info:
>> (XEN)   _PCT: descriptor=130, length=12, space_id=127, bit_width=0, 
>> bit_offset=0, reserved=0, address=0
>> (XEN)   _PCT: descriptor=130, length=12, space_id=127, bit_width=0, 
>> bit_offset=0, reserved=0, address=0
>> (XEN)   _PSS: state_count=6
>> (XEN)   State0: 2500MHz 50000mW 100us 9us 0xe8201391 0x391
>> (XEN)   State1: 2400MHz 46020mW 100us 9us 0xe82013d0 0x3d0
>> (XEN)   State2: 2200MHz 38671mW 100us 9us 0xe820144e 0x44e
>> (XEN)   State3: 2000MHz 32100mW 100us 9us 0xe82014cc 0x4cc
>> (XEN)   State4: 1800MHz 26265mW 100us 9us 0xe820154a 0x54a
>> (XEN)   State5: 1000MHz 13888mW 100us 9us 0xe8201582 0x582
>> (XEN)   _PSD: num_entries=5 rev=0 domain=0 coord_type=253 num_processors=2
>> (XEN)   _PPC: 0

>> So it seems to find all available powerstates, but using xenpm doesn't seem 
>> to work:

>> serveerstertje:~# xenpm  get-cpu-topology
>> CPU     core    socket
>> CPU0     0       0
>> CPU1     1       0
>> serveerstertje:~# xenpm  set-scaling-governor userspace
>> [CPU0] failed to set governor name
>> [CPU1] failed to set governor name
>> serveerstertje:~# xenpm  set-scaling-governor ondemand
>> [CPU0] failed to set governor name
>> [CPU1] failed to set governor name
>> serveerstertje:~# xenpm  set-scaling-governor performance
>> [CPU0] failed to set governor name
>> [CPU1] failed to set governor name
>> serveerstertje:~# xenpm  set-scaling-governor powersave
>> [CPU0] failed to set governor name
>> [CPU1] failed to set governor name
>> serveerstertje:~# xenpm  get-cpufreq-para
>> [CPU0] failed to get cpufreq parameter
>> [CPU1] failed to get cpufreq parameter








-- 
Best regards,
 Sander                            mailto:linux@xxxxxxxxxxxxxx


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.