You are not logged in.

#1 2008-01-12 08:09:51

vilefridge
Member
Registered: 2006-11-02
Posts: 95

powernow_k8 + overclocking, not saving power!!

I have an Opteron 146 that I'm overclocking to 2.5GHz,  The BIOS is correctly configured to allow Cool 'n Quiet operation.  In Windows, the processor successfully scales from 2.5GHz down to 1GHz, however using ArchLinux and powernow-k8 it does not.

When I first boot, the CPU is running at 2.5GHz.  As soon as I load the powernow-k8 module, the CPU steps down to 1GHz.  If I increase the load, it will step up to 2Ghz, but it won't ever go back up to 2.5GHz.  I would be happy if the module would just respect my overclock!  I'd just like to conserve some watts/electricity/$ when I'm not doing anything resource intensive, while still having the overclocked speed available when I'm crunching away at something more demanding.

Here is my powernow table:
powernow-k8: Found 1 AMD Opteron(tm) Processor 146    processors (1 cpu cores) (version 2.00.00)
powernow-k8:    0 : fid 0xc (2000 MHz), vid 0x6
powernow-k8:    1 : fid 0xa (1800 MHz), vid 0x8
powernow-k8:    2 : fid 0x2 (1000 MHz), vid 0x12

Using powernow-k8, the CPU is getting 1.4V for 2000MHz and 1.35V for 1800MHz.  Considering that the CPU only needs 1.30V for 2500MHz, I see powernow-k8 as countering the power-saving feature it is supposed to implement.

Is there any way to override this table and include the 2.5GHz / 1.30V setting?  Hopefully someone with overclocking experience can toss me some advice smile

Last edited by vilefridge (2008-11-27 02:08:53)

Offline

#2 2008-11-26 03:02:05

vilefridge
Member
Registered: 2006-11-02
Posts: 95

Re: powernow_k8 + overclocking, not saving power!!

It's been awhile since I originally posted this.  I'm still unable to get this working.  Has anyone else had luck using powernow-k8 with an overclocked CPU?

Offline

#3 2008-11-26 03:35:32

iBertus
Member
From: Greenville, NC
Registered: 2004-11-04
Posts: 2,228

Re: powernow_k8 + overclocking, not saving power!!

I've noticed this problem with my Xeons and the acpi_cpufreq module. The CPUs run at 2.8Ghz overclocked but cpufreq wants to run it at stock speeds. I'm not sure how to fix it other than not using the frequency scaling.

Offline

#4 2008-11-27 02:03:28

vilefridge
Member
Registered: 2006-11-02
Posts: 95

Re: powernow_k8 + overclocking, not saving power!!

I decided to hardcode the frequencies I want in the powernow-k8.c driver.  I simply return 2500MHz when the fid is reported as 0xC to get my overclock.  However, I have no idea how to deal with the voltage (vid) aspect of the powernow-k8.c driver.  The CPU only needs 1.30V to do 2.5GHz, so there's no reason to give it the 1.4V that powernow-k8 is reading as the stock requirement. 

powernow-k8 driver source download:
http://www.amd.com/us-en/assets/content … .0.tar.bz2

The driver is quite complex and there's a lot going on when it comes to the vid.  Can anyone more experienced have a look and provide some suggestions? 


Here's a sniplet of my current edits that handle the fid.  TODO: handle vid (help!)

/* Return a frequency in MHz, given an input fid */
static u32 find_freq_from_fid(u32 fid)
{
    if (fid == 0xC)        // 0xC is 12 in decimal
        return 2500;    // 2500MHz
    else if (fid == 0xA)    // 0xA is 10 in decimal
        return 1800;    // 1800MHz
    else if (fid == 0x2)    // 0x2 is  2 in decimal
        return 1000;    // 1000MHz
    else
        return 800 + (fid * 100);
}

/* Return a frequency in KHz, given an input fid */
static u32 find_khz_freq_from_fid(u32 fid)
{
    return 1000 * find_freq_from_fid(fid);
}

/* Return a frequency in MHz, given an input fid and did */
static u32 find_freq_from_fiddid(u32 fid, u32 did)
{    if (did == 0){   
        if (fid == 0xC)        // 0xC is 12 in decimal
            return 2500;    // 2500MHz
        else if (fid == 0xA)    // 0xA is 10 in decimal
            return 1800;    // 1800MHz
        else if (fid == 0x2)    // 0x2 is  2 in decimal
            return 1000;    // 1000MHz
    }
    else
    return 100 * (fid + 0x10) >> did;
}

static u32 find_khz_freq_from_fiddid(u32 fid, u32 did)
{
    return 1000 * find_freq_from_fiddid(fid, did);
}

Last edited by vilefridge (2008-11-27 02:12:41)

Offline

Board footer

Powered by FluxBB