1. You may have noticed things look a little different around here - we've switched to a new platform (XenForo) and have some new forum styles and features. This how-to guide will help you find your way around. If you find anything that looks strange, post it in this thread.

Undervolting the Thinkpad X120e

Discussion in 'ThinkPad Edge, X1, X100e/X120e, & SL/L' started by MidnightSun, May 22, 2011.

  1. MidnightSun

    MidnightSun Emodicon Super Moderator

    Reputations:
    6,641
    Messages:
    8,011
    Likes Received:
    174
    Trophy Points:
    231
    A few days ago, I undervolted my X120e's E-350, based on the experiences and trial/error of posters with the HP dm1z on SilentPCReview, documented in this thread.

    So, before I go on, I'd like to thank soybean84 for posting his experience in the X120e Owner's Lounge thread, as well as the contributers in the SPCR thread: StApostol, thierryg, porkchop, among others.

    Undervolting the X120e's E-350 yielded very successful results for me: temperatures are down, and therefore the fan stayed off entirely when idle. At maximum load (tested using Orthos), the highest temperatures achieved were 69C at an ambient temperature of 17-20C, and the fan spinning on the second-lowest speed. Idle temperatures hovered between 55-60C. All temperatures are measured through TPFanControl

    Here's a brief overview of what I did, again adapted from the SPCR thread:

    Required:
    - Computer with the E-350 APU (may not work the same for another CPU; instructions specific for X120e but any E-350 models should work)
    - RW-Everything (by Jeff Chan)
    - Orthos Prime (by Johnny Lee)
    - TPFanControl (by troubadix)
    - Windows 7 (if you are running Linux, see Metroid III's guide here)

    IMPORTANT: it is very possible to damage your computer if you mess around with RW-Everything if you don't understand fully what you are doing. See the SPCR thread for more information.

    1.- Okay, so assuming you don't know a whole lot about all the technical details of how to undervolt the CPU: just follow the next few steps to the dot, and you should be fine.

    2.- Download and install RW-Everything. In Windows Explorer, navigate to the folder where it is installed. That should be:
    Code:
    C:\Program Files (x86)\RW-Everything
    3.- Create a new text file (.txt) on your desktop and open it up in Notepad. Copy and paste the following text exactly into the Notepad window:
    Code:
    >cpu 1
    >wrmsr 0xc0010064 0x80000126 0x00003810
    >wrmsr 0xc0010065 0x8000011A 0x00003C12
    >wrmsr 0xc0010066 0x8000028C 0x00007430
    >cpu 2
    >wrmsr 0xc0010064 0x80000126 0x00003810
    >wrmsr 0xc0010065 0x8000011A 0x00003C12
    >wrmsr 0xc0010066 0x8000028C 0x00007430
    >RwExit
    NOTE: If you don't fully understand what you are doing, do NOT modify anything in the above text. You could get unexpected behavior or even worse, fry your CPU.

    4.- Save the file as whatever you like. I will call ZacateUndervolting.txt. Now, change the file extension to .rw, so the file name is ZacateUndervolting.rw.

    NOTE: If you do not see the file extension, you will have to go to a Windows Explorer window, press Organize > Folder and Search Options > View, and untick "Hide extensions for known file types."

    5.- Move the ZacateUndervolting.rw file to the directory where RW-Everything is installed. You may need to provide administrative privileges.

    6.- This step ensures that the custom voltages are applied at every startup. Open your Start Menu and click Run. Paste the following text and press Enter to open the Task Scheduler:
    Code:
    Taskschd.msc
    7.- Choose "Create New Task" in the bar at the right. Make the following changes in each of the following tabs:
    A) General:
    - Write a useful name, maybe "Zacate Undervolting"
    - Choose "Run whether user is logged on or not"
    - Check "Run with highest privileges"
    - Choose "Windows 7, Windows Server 2008 R2" in the dropdown box

    B) Triggers:
    - Press "New"
    - In the dropdown box, select "At startup"
    - Press "Okay"
    - Press "New"
    - In the dropdown box, select "On workstation unlock"
    - Press "Okay"

    NOTE: The second trigger is to ensure the voltages are applied after resume from standby--probably only works if you have a password set, though(?)

    C) Actions:
    - Press "New"
    - In the dropdown box, select "Start a program"
    - In the "Program/script" box, put the path to the RW-Everything executable, which is likely:
    Code:
    C:\Program Files (x86)\RW-Everything\rw.exe
    - In the "Add arguments" box, paste (replacing the file name if you have a different name):
    Code:
    /Command=ZacateUndervolting.rw /Logfile=log.txt
    - In the "Start in (optional)" box, paste:
    Code:
    C:\Program Files (x86)\RW-Everything
    - Press "Okay"

    D) Conditions:
    - Make sure all boxes are unchecked

    E) Settings:
    - Check "Allow task to be run on demand"
    - Check "Run task as soon as possible after a scheduled start is missed"
    - Check "If the task fails, restart every" and keep the default settings (1 minute, 3 times)
    - Uncheck the rest

    Press "Okay" when you are done, to create the scheduled task.

    8.- If you are using Lenovo's ThinkVantage Power Manager, open PM and make sure you are in "Advanced" mode. Make sure that the power plan you are currently using has, under the "System settings" section, "Adaptive" selected for the "Maximum CPU Speed" for both Battery and AC. If not, you can either change the settings of the power plan, or create a new custom plan (which I suggest) with the above settings.

    If you are using Windows 7's power management, make sure the setting is on "Balanced."

    NOTE: This setting has to be applied because your custom voltages will not be applied until the CPU cycles through a power state, so you have to be on a power plan that allows power state cycling (ie: not lowest/low/high performance power states).

    9.- Restart your X120e.

    10.- Install and open CPU-Z. Open Task Manager (Ctrl + Shift + Esc) to watch your CPU load. Wait for your computer to get to idle.

    If your CPU is properly undervolted by these settings, the "Core VID" value in the CPU tab of CPU-Z should be 0.825 at idle.

    11.- Stress testing to ensure stable undervolt: technically, these settings are still pretty conservative, and you shouldn't have any instability issues, but you should always check nevertheless.

    Open Orthos. In the "Test" dropdown box, select "Small FFTs - stress CPU," then press "Start" and let it run. The Orthos window should now say "GO."

    Watch your CPU usage (should stay at 100%), your temperatures in TPFanControl, and the CPU-Z window. At load, these settings should have your voltage at 1.200 peak. Your temperatures should stabilize after a while--mine usually stabilize at 65-69C, depending on ambient temperature.

    After about 5 minutes, you should probably be good, although I let it run for 15 minutes just for good measure. In the event that you do get "random" BSODs later, however, you should bump each of the voltages up one step, one at a time, to see what is causing the instability.

    And then, you're done!
     
  2. MidnightSun

    MidnightSun Emodicon Super Moderator

    Reputations:
    6,641
    Messages:
    8,011
    Likes Received:
    174
    Trophy Points:
    231
    Further Undervolting Customizations (More Advanced):

    The three values I provided in my above code work nicely, and should have no stability issues. It is possible, however, to undervolt further should you wish to. In that case, the following may be of interest to you.

    IMPORTANT NOTE: Again, messing with these values can potentially damage your computer if you do not know what you are doing. Obviously, I take no responsibility for that, so make sure you understand what you are doing, and do not underestimate the importance of reading directions!

    First, a bit of an explanation of what the "important" parts of the above code mean:
    Code:
    >cpu 1
    >wrmsr 0xc0010064 0x80000126 [U]0x0000[B]38[/B]10[/U] [COLOR="#8b0000"](P0)[/COLOR]
    >wrmsr 0xc0010065 0x8000011A [U]0x0000[B]3C[/B]12[/U] [COLOR="#8b0000"](P1)[/COLOR]
    >wrmsr 0xc0010066 0x8000028C [U]0x0000[B]74[/B]30[/U] [COLOR="#8b0000"](P2)[/COLOR]
    >cpu 2
    >wrmsr 0xc0010064 0x80000126 [U]0x0000[B]38[/B]10[/U] [COLOR="#8b0000"](P0)[/COLOR]
    >wrmsr 0xc0010065 0x8000011A [U]0x0000[B]3C[/B]12[/U] [COLOR="#8b0000"](P1)[/COLOR]
    >wrmsr 0xc0010066 0x8000028C [U]0x0000[B]74[/B]30[/U] [COLOR="#8b0000"](P2)[/COLOR]
    >RwExit
    The "random" numbers that make up each line refer to the MSR register, basically setting information for the hardware power states of the E-350 CPU. The last block (underlined) is what is most interesting to us. The final two values in each string control the frequency.

    The bolded values above are the different voltage values for each of the three power states of the E-350 CPU: P0, P1, and P2.
    P0 (1600MHz) is the maximum power state, and will be the voltage while at high CPU load.
    P1 (1280MHz) is the transition state, and will be the voltage when moving from P2 to P0, and at medium load.
    P2 (800MHz) is the minimum power state, and will be the voltage while idling.

    The E-350 is a dual-core processor, which is why there are two identical blocks of code, one for each CPU.

    The final line, predictably, commands RW-Everything to close after execution of the code.

    Basic Premise: To undervolt further, the objective would be to increase the hex values associated with each of the power states.

    There are, however, some complexities with this:
    - The values are hexidecimal values. For those unfamiliar with it, counting starting from a value of, say, 38, would go 38, 39, 3A, 3B, 3C, ... 3F, 40.
    - Each voltage increment corresponds to every other counting hex value. So, to lower P0 by one step would change it from 38 to 3A, not 39.
    - You must change the value for CPU1 and CPU2 to be the same undervolted value, otherwise, the lower VID (higher voltage) is taken, I believe.
    - You must execute the task again (in Task Scheduler, highlight the task and press "Run") after saving the .rw file every time you edit it to apply the new voltages.

    How Far To Go
    I would advise taking one step at a time starting from the values I have in my first post, increasing the hex values to decrease the voltage. I suggest using CPU-Z to confirm the voltage has been applied successfully. At each step, you may encounter three different behaviors.

    A) Everything seems fine. A few minutes of Orthos results in no abnormal behavior.
    B) Everything seems fine. A few minutes of Orthos, however, results in an unexpected BSOD or freezing.
    C) Immediate freezing/lockup after applying the new lower voltage.

    For A, you're good to go--this should tentatively be a stable step. You could try going lower.
    For B, you've likely found the threshold of instability. Bump the voltage up one notch and that will likely be the lowest stable undervolt for that power state.
    For C, you've reached an unstable power state. Hard-shutdown your computer.

    IMPORTANT NOTE: You may find it worthwhile to disable all the triggers for the scheduled task and run it only on demand, so you can simply reboot if you either BSOD or lock up, and then change the values in the .rw file. Otherwise, you may have to enter Safe Mode every time after you crash to change the values.

    Finally, make sure you report back here and share the lowest values you've gotten for each power state. Good luck! ;)
     
  3. Kalam

    Kalam Notebook Enthusiast

    Reputations:
    7
    Messages:
    19
    Likes Received:
    0
    Trophy Points:
    5
    I love you.
     
  4. jw8725

    jw8725 Notebook Geek

    Reputations:
    0
    Messages:
    85
    Likes Received:
    0
    Trophy Points:
    15
    Hi I'd like to hear from people who have done this already? Hows that nasty fan noise doing? I only really use mine for surfing the net and this really appeals to me. Thanks for posting MidnightSun.
     
  5. hellsy

    hellsy Notebook Enthusiast

    Reputations:
    5
    Messages:
    35
    Likes Received:
    0
    Trophy Points:
    15
    Personally, Fan does not bother me during normal operation.. I have been playing with this since last night, and i was able to get down to 1.150v for P2 state.. I personally like IntelBurnTest.. I ran 5 iterations at 1GB load. Each iteration takes about 300 seconds, and it's a decent way to test. I can't get P0 state to go lower then 0.8.. So, 0.825 is a good place to stop.. Once i found the minimum P2 state voltage, i am going to find the P1 state.. I will share my values once i am done with tweaking.
     
  6. jw8725

    jw8725 Notebook Geek

    Reputations:
    0
    Messages:
    85
    Likes Received:
    0
    Trophy Points:
    15
    I'm happy so far, im stable at 0.825v
     
  7. sugarkang

    sugarkang Notebook Evangelist

    Reputations:
    185
    Messages:
    602
    Likes Received:
    0
    Trophy Points:
    30
    Help?

    My Core VID is between 1.037 and 1.3v
    Followed all instructions and I don't think I missed anything.
    Task Scheduler says the task is running.

    Also, in the *.rw file, the prompts should be there, right?
    >cpu 1
    >wrmsr 0xc0010064 0x80000126 0x00003810
    >wrmsr 0xc0010065 0x8000011A 0x00003C12
    >wrmsr 0xc0010066 0x8000028C 0x00007430

    NOT LIKE THIS:

    cpu 1
    wrmsr 0xc0010064 0x80000126 0x00003810
    wrmsr 0xc0010065 0x8000011A 0x00003C12
    wrmsr 0xc0010066 0x8000028C 0x00007430


    EDIT: In the course of messing about, it worked. I don't know what I did, but it works. THANK YOU!!
    I'm not sure, but it might have been this part:

    In the "Start in (optional)" box, paste:
    C:\Program Files (x86)\RW-Everything\

    I took out the last backslash, so it looks like this:
    C:\Program Files (x86)\RW-Everything

    Something so inconsequential couldn't have been the culprit, but if anyone else has trouble, try it.
     
  8. MidnightSun

    MidnightSun Emodicon Super Moderator

    Reputations:
    6,641
    Messages:
    8,011
    Likes Received:
    174
    Trophy Points:
    231
    The fan definitely doesn't run as often, especially under idle/low loads.

    I got P2 down to 0.812V (76) with stable results, but 0.800V (78) (the next step lower) results in an instant lockup.

    I got P0 down to 1.188V (3A) with similar stable runs on Orthos. I didn't test any further, though, since it was getting late.

    Yes, the ">" marks should be there--copy the code exactly how I have it above. Technically, Task Scheduler should report that the task ran and finished, since the task ends with RW.exe exiting. So, it should say "Ready" and under "Last Run Result" it should say "The operation completed successfully."

    Sometimes it does take a little bit of time for it to apply the voltages after startup, but after 5 minutes of idling, it should definitely be applied if everything went correctly.

    Does running the task on demand (open Task Scheduler, select the task you created and press "Run") successfully undervolt?

    EDIT: Nevermind, I guess ;)
     
  9. hellsy

    hellsy Notebook Enthusiast

    Reputations:
    5
    Messages:
    35
    Likes Received:
    0
    Trophy Points:
    15
    I have been playing around with this, and i found the minimum voltage for P0 and P2 state.. For P0, i maxed out at 1.150v (40), and for P2 i maxed out at 0.812v (76).. This setup is IBT stable, and no did not encounter any lags. I didn't test the stability of P1, but i set it 1.063v (4E). I think I will set P1 to 1.0v and run stability test to see how that is. After this tweak, i would expect load temperatures and power consumption to differ a bit.
     
  10. Tsunade_Hime

    Tsunade_Hime such bacon. wow Super Moderator

    Reputations:
    5,392
    Messages:
    10,044
    Likes Received:
    913
    Trophy Points:
    531
    Nice work there MidnightSun, have you tried also running ThinkPad Fan Control along with the undervolting?
     
  11. MidnightSun

    MidnightSun Emodicon Super Moderator

    Reputations:
    6,641
    Messages:
    8,011
    Likes Received:
    174
    Trophy Points:
    231
    Just added some clarification and more details on further undervolting in my second post in this thread.

    A P0 VID of 40 and 3E resulted in a lockup and BSOD in Orthos, respectively, for me, so that's definitely nearly the upper limits. I'm currently stability-testing 3C (1.175V).

    Yeah, I wasn't able to get any lower for P2, so 76 (0.812V) seems to be bottoming out. A P1 of 4C is stable for me now, but we'll see as well.

    Yep, I'm using it to monitor temperatures, and I have a custom fan profile. With the current power states, I'm maxing out at 65C, at 18C ambient, fan on the lowest "on" speed.

    EDIT: Just BSODed at 3C after 10 minutes of Orthos :( Going to step back up to my stable value of 3A.
     
  12. sugarkang

    sugarkang Notebook Evangelist

    Reputations:
    185
    Messages:
    602
    Likes Received:
    0
    Trophy Points:
    30
    This is unbelievable. I'm watching a video podcast in iTunes and temp is between 60-64degrees. ZERO fan noise because fan is completely off.

    How awesome is LLano gonna be?
     
  13. hellsy

    hellsy Notebook Enthusiast

    Reputations:
    5
    Messages:
    35
    Likes Received:
    0
    Trophy Points:
    15
    The default configuration, which when the P0 state at 1.3v consumed nearly 18W's when I ran IBT for 5 Iterations.. The modified state of P0, which is set to 1.150v decreased the power consumption to 14.5W. These readings were acquired from Lenovo Power Utility... Pretty good savings, if you ask me..
     
  14. johan851

    johan851 Notebook Guru

    Reputations:
    5
    Messages:
    62
    Likes Received:
    0
    Trophy Points:
    15
    You might want to back off the settings you gave in the notepad file in the first post. They're not unstable for me, but they're pretty close to the edge...I would imagine someone with a APU that's not quite as well binned could run into instability with those, and it would be worse if they were already applied at startup...

    For reference, here's what I was able to get for p0 and p1:
    p0 = 1.188v (0x3A)
    p1 = 1.025v (0x54)

    Going below that locks things up either immediately or after a few minutes. At least there's no sketchy middle ground with this CPU. I'm testing with LinX, which I've found to be a pretty good stability indicator. The voltages above were stable for three hours of LinX.

    Also, thanks for the easy guide to scripting it! That'll save me some time. :)
     
  15. MidnightSun

    MidnightSun Emodicon Super Moderator

    Reputations:
    6,641
    Messages:
    8,011
    Likes Received:
    174
    Trophy Points:
    231
    I think the settings I gave are pretty stable, since I've generally be able to go about one or two steps further with no stability issues, and I definitely haven't been able to undervolt as far as some of you have reported in this thread. The P1 value I have is very stable, I think, although to be safer, one could back up one notch on the P2 and P0 states, since I've only been able to go one notch further with complete stability.

    Overall, though, as long as you're reducing the voltage, it's not too dangerous--the worst that will happen is a lockup, at which point if you have it set to startup (which I recommend against in my second post, when you're tweaking), you should boot to Safe Mode (F8) and change it there.

    Right now, my states are:
    Code:
    P0: 1.188V (3A)
    P1: 1.063V (4E)
    P2: 0.812V (76)
    These have been stable on idle and Orthos for a while, so I think they're good to go for me.
     
  16. Kalam

    Kalam Notebook Enthusiast

    Reputations:
    7
    Messages:
    19
    Likes Received:
    0
    Trophy Points:
    5
    I followed all the steps correctly, but on reboot CPU-Z version 1.57 shows my CORE VID at 1.300 V and never changes even after letting it sit for 30 minutes, running at full load, or idle.

    A log file does appear in RW-Everything with this:

    Code:
    Current CPU = CPU1
    Write MSR 0xC0010064 : High 32bit(EDX) = 0x80000126, Low 32bit(EAX) = 0x00003810
    63    56 55    48 47    40 39    32 31    24 23    16 15     8 7      0
    10000000-00000000-00000001-00100110-00000000-00000000-00111000-00010000
    Write MSR 0xC0010065 : High 32bit(EDX) = 0x8000011A, Low 32bit(EAX) = 0x00003C12
    63    56 55    48 47    40 39    32 31    24 23    16 15     8 7      0
    10000000-00000000-00000001-00011010-00000000-00000000-00111100-00010010
    Write MSR 0xC0010066 : High 32bit(EDX) = 0x8000028C, Low 32bit(EAX) = 0x00007430
    63    56 55    48 47    40 39    32 31    24 23    16 15     8 7      0
    10000000-00000000-00000010-10001100-00000000-00000000-01110100-00110000
    Current CPU = CPU2
    Write MSR 0xC0010064 : High 32bit(EDX) = 0x80000126, Low 32bit(EAX) = 0x00003810
    63    56 55    48 47    40 39    32 31    24 23    16 15     8 7      0
    10000000-00000000-00000001-00100110-00000000-00000000-00111000-00010000
    Write MSR 0xC0010065 : High 32bit(EDX) = 0x8000011A, Low 32bit(EAX) = 0x00003C12
    63    56 55    48 47    40 39    32 31    24 23    16 15     8 7      0
    10000000-00000000-00000001-00011010-00000000-00000000-00111100-00010010
    Write MSR 0xC0010066 : High 32bit(EDX) = 0x8000028C, Low 32bit(EAX) = 0x00007430
    63    56 55    48 47    40 39    32 31    24 23    16 15     8 7      0
    10000000-00000000-00000010-10001100-00000000-00000000-01110100-00110000
    
    Which I would assume means that the scheduled task ran, causing Rw.exe to make that log file, but CPU-Z still only shows 1.300 V.

    Running Windows 7 x64.
     
  17. MidnightSun

    MidnightSun Emodicon Super Moderator

    Reputations:
    6,641
    Messages:
    8,011
    Likes Received:
    174
    Trophy Points:
    231
    @Kalam: Perhaps it has something to do with sugarkang's problem + resolution earlier? I edited it out of my original post, since I realized I didn't have a slash in mine either.
    It does appear that RW.exe did run, though...
     
  18. Faideelah

    Faideelah Notebook Consultant

    Reputations:
    152
    Messages:
    106
    Likes Received:
    7
    Trophy Points:
    31
    Hmm, I've followed everything and even triple-checked to make sure I didn't miss anything, but my Core VID is still 1.300 V. What could I be missing? The task scheduler says that the operation was completed.

    EDIT: I seem to be having the same problem as Kalam.
     
  19. MidnightSun

    MidnightSun Emodicon Super Moderator

    Reputations:
    6,641
    Messages:
    8,011
    Likes Received:
    174
    Trophy Points:
    231
    Try sugarkang's solution as well--that may be the issue.
     
  20. Kalam

    Kalam Notebook Enthusiast

    Reputations:
    7
    Messages:
    19
    Likes Received:
    0
    Trophy Points:
    5
    @MidnightSun:

    Ya, I made sure that there wasn't a slash at the end of that line.
     
Similar Threads: Undervolting Thinkpad
Forum Title Date
ThinkPad Edge, X1, X100e/X120e, & SL/L Undervolting the Thinkpad x120e...in Linux! (rev 1) Aug 5, 2011
ThinkPad Edge, X1, X100e/X120e, & SL/L Thinkpad SL510 constantly freezing Jan 22, 2015
ThinkPad Edge, X1, X100e/X120e, & SL/L Lenovo ThinkPad X1 Carbon Gen 3 (2015) Review Jan 6, 2015
ThinkPad Edge, X1, X100e/X120e, & SL/L Thinkpad X140e memory Dec 1, 2014
ThinkPad Edge, X1, X100e/X120e, & SL/L Any one have the Thinkpad L530 with Celeron or Pentium processor ? Nov 13, 2014

Share This Page