Saturday, March 28, 2009

Eee PCs and Brute Force Overclocking

Today I decided to really dig into the output of i2cdump and see just what I could get my Eee PC 1000HD to do. For those that don't know what's in it, it contains a Celeron ULV processor at 900MHz, 1GB of memory, and a 120GB hard drive. I am testing with a nearly fresh restore of Windows XP from the Eee PC restore media, and Ubuntu 8.10 running Eee PC ACPI Utilities version 1.0.24, and the force-hpet kernel option.

Before trying this at home, be warned that it could damage your Eee and invalidate your warranty. By continuing to read, you agree that I'm not responsible (heh).

I began by dumping the contents of memory space 0x69 with i2cdump:

'i2cdump -y 0 0x69 s'

0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 45 f1 a8 f2 f4 00 00 11 1f 1e 00 0f 1e fe 2f 8f E????..???.???/?
10: 68 00 30 05 0a 01 1e 00 68 13 56 04 08 c8 0d h.0????.h?V????
(bolded since I can't get blogger to do 'code', 'fixed font' or 'pre'; if you get an error, load the i2c-dev kernel module)

If you look at registers 0x0B and 0x0C you will see that they are 15 30 in hex. My PLL registers as '30 15 1' when using the asus_eee kernel module.

Using i2cset I was able to brute force my FSB and PCIe multipliers in different directions, I stepped through each in both directions to see how far I could get them to go before hanging the computer. Before jumping into i2cset, I used i2cget to ensure I was going to write to the correct register.
'i2cget -y 0 0x69 0x0C w'
0x1e1f

'i2cget -y 0 0x69 0x0B w'
0x0f1f

Note the 1f at the end of the line, it is required that you add it when writing. No matter what register you read, it will always end with '1f'.
'i2cset -y 0 0x69 0x0C 0x1e1f w'
Value 0x1e1f written, readback matched

'i2cset -y 0 0x69 0x0B 0x0f1f w'
Value 0x0f1f written, readback matched

Once I had a good understanding of the boundries, I set out to find the ideal overclock combination, running geekbench after each test. Once I had completed testing I also ran each setting against powersave to see how much additional power would be consumed. I didn't record the watts, only battery time left. Just for kicks, I rebooted into my XP partition and executed the same test. In addition I tested XP in each mode for expected battery life. I did no additional tweaking to XP outside of the Eee PC Restore and setting "hybrid" modes. In even nearly every test, the Ubuntu Geekbench score was higher than XP. Notice though when the multiplier in Linux is set higher, the score dropped!

See the results below:
OS Clock Geekbench GlxGears Temp PF OD PS
Ubuntu 8.10 30/14 839 649 FPS 60 C



30/15 791 656 FPS 59 C 3.0 H 3.6 H 3.6 H

30/16 739 572 FPS 60 C



31/14 877 715 FPS 63 C 3.0 H 3.5 H 3.5 H

33/15 869 711 FPS 60 C


Windows XP Super HP 748 N/A N/A 2.5 H


HP 697 N/A N/A
2.43 H

PowerSave 488 N/A N/A

3.22 H


While stock is 30/15, the best bang for the buck is clearly 31/14.

Here is a link to the Spreadsheet - [ LINK ]

For those of you wishing to learn about how to overclock their Linux Eee, or those who are running on a PLL that is currently unsupported, maybe this can help you. In the future, I may release a force-clock tool as a part of Eee PC ACPI Utilities. Today for Eee PCs supported by asus_eee kernel module, and running EeePC ACPI Utilities; you can overclock your Eee by editing the OVERRIDE_FSB and OVERRIDE_MULTIPLIER options in /etc/default/eeepc-acpi and then disconnecting and reconnecting your power cable.

*UPDATE* When overclocked I discovered that the Eee PC wouldn't suspend. Version 1.0.25 (Available for testing: LINK ) re-works the CPU module, init script, and power management script to enable changing the FSB back to factory default before suspending so suspend now works when overclocked! No worries though, when you power back on it will restore your previous setting!

*UPDATE* I found more information on why I seem to be getting better performance from a PCIe underclock!

"At boot, both Asus and Abit manipulate the PCI Express frequency and set ratios that result in a lower PCIe frequency than would be expected at a given clock frequency. Since PCIe frequency and CPU clock frequency are derived from the same PLL, then a Clock frequency of 258 (FSB of 1032), for example, would result in a PCIe frequency of 129. In fact, the Abit PCIe clock at 258 is 118, below the maximum of 120 for most nVidia PCIe cards." [ LINK ]