Windows power plan settings explorer utility

Discussion in 'Operating Systems' started by mbk1969, Aug 3, 2017.

  1. chros

    chros Guest

    Messages:
    14
    Likes Received:
    6
    GPU:
    MSI GTX 1060 6GB
    First of all, thanks for thinking with me!

    Yes, thanks I know that. Ryzen 5 2600 has 3 P-States: with max set at 100% it uses the max available state (<=3.4GHz), and by setting it to 99% it's forced to use the state below (<=2.8GHz, and it's enough for me); the next (and last) percentage value is 81% (~ <=1.6GHz).

    Thanks, I didn't know that. Although I noticed that Ryzen-balanced plan turns off core parking.

    Hmm, I'll play with it then. :)


    OK, but only for "performance increase policy" not "performance decrease policy" (the latter works the other way around).

    That's what I thought, thanks for the confirmation.

    Hmm, although I don't think this works this way.
    Increase threshold: "Specify the upper busy threshold that must be met before increasing the processor's performance state (in percentage)."
    Decrease threshold: "Specify the lower busy threshold that must be met before decreasing the processor's performance state (in percentage)."

    The defaults for these 2 in % are (e.g. diff between HighPerf plan is only 20):
    - increase: Saver: 90, Balanced: 60, High: 30, Ryzen: 25, mine: 80
    - decrease: Saver: 60, Balanced: 20, High+Ryzen: 10, mine: 40

    This is how it works (at least how I understand it):
    - increase: a given state has to reach the specified utilisation to be allowed to enter a higher state
    - decrease: a given state has to drop down to the specified utilisation to be allowed to enter a lower state

    Thanks for mentioning, I left out this one for whatever reason.

    That is I wanted to achieve with my settings (apart from the idle check), I used:
    - 30ms for "performance time check interval"
    - 2 perf checks for "performance increase time": meaning 2*30 = 60ms
    - 1 perf checks for "performance decrease time": meaning 1*30 = 30ms

    At least this is how I understand how it works (I can be wrong with this one).
     
    duttyend likes this.
  2. mbk1969

    mbk1969 Ancient Guru

    Messages:
    15,649
    Likes Received:
    13,657
    GPU:
    GF RTX 4070
    You can test that yourself. Download this archive
    http://www.mediafire.com/file/drkkxqeiyiafafq/pwrtest.zip/file
    It contains two versions of PwrTest - test utility from Windows Driver Kit - for Win7 and for Win10 (17134).
    Execute in elevated command prompt:

    Code:
    pwrtest.exe /info:ppm /p:1 > ppm.txt
    - that will create report file "ppm.txt" with both P-states and C-states supported by CPU.
    Here is the report for CPU in one of my work rigs:
    Code:
    InstanceName: ACPI\GenuineIntel_-_Intel64_Family_6_Model_76_-_______Intel(R)_Celeron(R)_CPU__J3160__@_1.60GHz\_2_0
    
    Processor Performance States
    
      PerfStates:
        Max Transition Latency:  10 us
        Number of States:        24
    
        State  Speed (Mhz)    Type
        -----  ------------   ----
          0     1601 (100%)   Performance
          1     1600 ( 99%)   Performance
          2     1520 ( 94%)   Performance
          3     1440 ( 89%)   Performance
          4     1360 ( 84%)   Performance
          5     1280 ( 79%)   Performance
          6     1200 ( 74%)   Performance
          7     1120 ( 69%)   Performance
          8     1040 ( 64%)   Performance
          9      960 ( 59%)   Performance
          10     880 ( 54%)   Performance
          11     800 ( 49%)   Performance
          12     720 ( 44%)   Performance
          13     640 ( 39%)   Performance
          14     560 ( 34%)   Performance
          15     480 ( 29%)   Performance
          16     480 ( 29%)   Throttle
          17     422 ( 26%)   Throttle
          18     360 ( 22%)   Throttle
          19     302 ( 18%)   Throttle
          20     240 ( 14%)   Throttle
          21     182 ( 11%)   Throttle
          22     120 (  7%)   Throttle
          23      62 (  3%)   Throttle
    
    InstanceName: PPM_Processor_1
    
    Kernel Idle States: (3 states)
    
      TargetState:       0
      Type:              0
      TargetProcessors:  0x2
      State 0:
        Latency:          1 us
        Power:            1000 mWatts
        TimeCheck:        500000 QPC ticks (50 ms)
        PromotePercent:   95%
        DemotePercent:    95%
        StateType:        C1
        IdleHandler:      Present
        Context:          NOTPresent
      State 1:
        Latency:          500 us
        Power:            10 mWatts
        TimeCheck:        500000 QPC ticks (50 ms)
        PromotePercent:   95%
        DemotePercent:    95%
        StateType:        C2
        IdleHandler:      Present
        Context:          NOTPresent
      State 2:
        Latency:          1000 us
        Power:            10 mWatts
        TimeCheck:        500000 QPC ticks (50 ms)
        PromotePercent:   95%
        DemotePercent:    95%
        StateType:        C3
        IdleHandler:      Present
        Context:          NOTPresent
    

    Here is the command line syntax for PwrTest

    And if you want your CPU to be a bit more lazy you raise the decrease treshold to switch to lower P-states more quickly.
     
    Last edited: Dec 20, 2018
    duttyend likes this.
  3. mbk1969

    mbk1969 Ancient Guru

    Messages:
    15,649
    Likes Received:
    13,657
    GPU:
    GF RTX 4070
  4. chros

    chros Guest

    Messages:
    14
    Likes Received:
    6
    GPU:
    MSI GTX 1060 6GB

    Thanks, I'll play with it and read the article.

    That's correct and that's what I did as well.
     

  5. chros

    chros Guest

    Messages:
    14
    Likes Received:
    6
    GPU:
    MSI GTX 1060 6GB
  6. mbk1969

    mbk1969 Ancient Guru

    Messages:
    15,649
    Likes Received:
    13,657
    GPU:
    GF RTX 4070
    Mediafire acts strange lately, not the first time it gives me the link which results in "Upload is still in progress..."
    http://www.mediafire.com/file/drkkxqeiyiafafq/pwrtest.zip/file
     
    duttyend likes this.
  7. chros

    chros Guest

    Messages:
    14
    Likes Received:
    6
    GPU:
    MSI GTX 1060 6GB
  8. chros

    chros Guest

    Messages:
    14
    Likes Received:
    6
    GPU:
    MSI GTX 1060 6GB
    Thanks for the article, it was interesting. Ryzen 5 2600 has only C1 and C2 states (Promote/Demote Percent are with Ryzen Balanced plan), I knew the rest:

    ;; pwrtest.exe /info:ppm /p:1 > ppm.txt

    InstanceName: ACPI\AuthenticAMD_-_AMD64_Family_23_Model_8_-_AMD_Ryzen_5_2600_Six-Core_Processor____________\_2_0
    Processor Performance States
    PerfStates:
    Max Transition Latency: 0 us
    Number of States: 3
    State Speed (Mhz) Type
    ----- ------------ ----
    0 3400 (100%) Performance
    1 2800 ( 82%) Performance
    2 1550 ( 45%) Performance

    InstanceName: PPM_Processor_1

    Kernel Idle States: (2 states)
    TargetState: 1
    Type: 0
    TargetProcessors: 0x2
    State 0:
    Latency: 1 us
    Power: 0 mWatts
    TimeCheck: 165704 QPC ticks (50 ms)
    PromotePercent: 40%
    DemotePercent: 26%
    StateType: C1
    IdleHandler: Present
    Context: NOTPresent
    State 1:
    Latency: 400 us
    Power: 0 mWatts
    TimeCheck: 165704 QPC ticks (50 ms)
    PromotePercent: 40%
    DemotePercent: 26%
    StateType: C2
    IdleHandler: Present
    Context: NOTPresent
     
  9. mbk1969

    mbk1969 Ancient Guru

    Messages:
    15,649
    Likes Received:
    13,657
    GPU:
    GF RTX 4070
    There is one confusion regarding two idle settings. Microsoft offers a document about processor power management and there we read:
    Now if you look to descriptions in power plan settings:
    See the difference? In document they talk about "The amount of processor idleness" while in actual settings about "Specify the busy threshold". And busy is related to idle:
    busy = 100% - idle.

    I tested these settings and if I set both demote and promote tresholds to 95% meaning "95% of idle" I see that CPU uses all C-states under the load, while if I set tresholds to 5% meaning "5% of busy" I see that CPU uses only one deepest C-state under the load. You can test it yourself with the help of perfmon.exe.

    I will demonstrate this with screenshots...
     
    Last edited: Dec 21, 2018
    duttyend likes this.
  10. mbk1969

    mbk1969 Ancient Guru

    Messages:
    15,649
    Likes Received:
    13,657
    GPU:
    GF RTX 4070
    Promote and demote tresholds = 95%:
    PC at idle
    [​IMG]
    PC at load
    [​IMG]

    Promote and demote tresholds = 5%:
    PC at Idle
    [​IMG]
    PC at load
    [​IMG]
    When tresholds are set tp 95% we see that all 3 C-states are used even under the load. But with tresholds set to 5% lightest C-states are not used even under the load.

    PS That makes me to believe that the description from the document is closer to truth, because 28% of idle equals to 72% of busy but we see core 0 in deepest C-state despite the treshold for demoting set to 5% of busy (supposedly).
     
    duttyend likes this.

  11. chros

    chros Guest

    Messages:
    14
    Likes Received:
    6
    GPU:
    MSI GTX 1060 6GB

    Pictures are not visible for me :)

    Edit: sorry, it's working, it was caused by Brave browser (ads are disabled).
     
    Last edited: Dec 21, 2018
  12. chros

    chros Guest

    Messages:
    14
    Likes Received:
    6
    GPU:
    MSI GTX 1060 6GB
    You're absolutely right, thanks for mentioning! I haven't noticed this, although my previously posted values are fine (see below).

    The whole logic is reversed compare to the "performance threshold" values:
    Code:
    - goes "up":   "performance increase threshold" and  "idle demote threshold"
    - goes "down": "performance decrease threshold" and  "idle promote threshold"
    Exactly! :) Good find! Here are the default % values used by the PowerSaver, Balanced and HighPerformance plans for comparison (we can clearly see the reversed logic used by "idle threshold"):
    Code:
    - Processor performance increase threshold: Saver: 90, Balanced: 60, High: 30
    - Processor performance decrease threshold: Saver: 60, Balanced: 20, High: 10
    - Processor idle demote threshold:          Saver: 20, Balanced: 40, High: 40
    - Processor idle promote threshold:         Saver: 40, Balanced: 60, High: 60
    
    So this translates to the "busy threshold" values like this (busy = 100% - idle, as you said), and now it makes more sense when we compare them to "performance threshold" values:
    Code:
    - Processor idle demote threshold:          Saver: 80, Balanced: 60, High: 60
    - Processor idle promote threshold:         Saver: 60, Balanced: 40, High: 40
    
    So these translate to the "busy threshold" values like this:
    Code:
    - Processor idle demote threshold:          "95%": 5, "5%": 95
    - Processor idle promote threshold:         "95%": 5, "5%": 95
    
    As we see, using "95% of idle" ("busy threshold": 5) the CPU can switch C-states even quicker than HighPerformance plan, while using "5% of idle" ("busy threshold": 95) the CPU becomes more lazier than PowerSaver plan: that's why it uses mainly the lowest Cx state (C3) for you.

    Btw, all the power plans use 50ms for time check interval for these settings (it seems that there's no number-of-perf-check values for these): "Processor idle time check".

    My settings for these are (between PowerSaver and Balanced (HighPerformance is the same as Balanced)):
    Code:
    - Processor idle demote threshold:          30 ("busy threshold": 70)
    - Processor idle promote threshold:         50 ("busy threshold": 50) 
    
    PS: I haven't played with core-parking yet, I'll try it out next.

    Oh, and a small "feature" request: can you make the app to remember the previous state of its window (position and size)? Now it always starts as maximized. Thanks!
     
    duttyend likes this.
  13. mbk1969

    mbk1969 Ancient Guru

    Messages:
    15,649
    Likes Received:
    13,657
    GPU:
    GF RTX 4070
    I can of course, but why? Do you have huge screen or something?
     
    duttyend likes this.
  14. chros

    chros Guest

    Messages:
    14
    Likes Received:
    6
    GPU:
    MSI GTX 1060 6GB
    Yep, that was correct, thanks for the above word document:
    I just tried out disabling core-parking as well: I don't see any difference (temperature is the same), thanks for mentioning! At least I don't have to deal with bunch of other options :)
    The doc says:
    So it doesn't matter for this CPU, since it only has 2 Cx states.

    And here are my modified settings for Ryzen 5 2600 (after copying the Balanced plan) using only passive cooling (undervolted CPU and turbo is off in UEFI):
    Code:
    fea3413a-7e05-4911-9a71-700331f1c294
    - Require a password on wakeup: No
    Hard disk:
    - AHCI Link power Management - HIPM/DIPM: HIPM+DIPM
    - Turn off hard disk after: 0
    Sleep:
    - Sleep after: 0
    - System unattended sleep timeout: 0  (Defaults: All: 120; returns back to sleep after 120 seconds after waking unattended: e.g. after wakeup alarms, WOL, etc.)
    - Allow hybrid sleep: Off
    - Hibernate after: 0
    - Allow standby states: On
    - Allow wake timers: Enable
    Power buttons and lid:
    - Power Button action: Sleep
    Display:
    - Dim display after: 0
    - Turn off display after: 3600
    - Adaptive backlight: None
    - Enable adaptive brightness: Off
    Multimedia settings:
    - When playing video: Optimize video quality
    PCI Express:
    - Link State Power Management: Max power savings
    Processor power management:
    - System cooling policy: Passive                            (Defaults: All: Active)
    - Minimum processor state: 5                                (Defaults (%): Saver+Balanced:5, Ryzen: 90, High: 100)
    - Maximum processor state: 99                               (Defaults (%): Saver:75, Balanced+Ryzen+High: 100)
    - Processor performance increase policy: Ideal              (Defaults: Saver: Single, Balanced+Ryzen: Ideal, High: Rocket)
    - Processor performance decrease policy: Ideal              (Defaults: Saver: Rocket, Balanced+Ryzen: Ideal, High: Single)
    - Processor performance time check interval: 30             (Defaults (ms): Saver: 200, Balanced: 30, High+Ryzen: 15)
    - Processor performance increase time: 2 (=60ms)            (Defaults (perf check): Saver: 3 (=600ms), Rest: 1(B=30ms, R=15ms))
    - Processor performance decrease time: 1 (=30ms)            (Defaults (perf check): All: 1 (S=200ms, B=30ms, R=15ms))
    - Processor performance increase threshold: 80              (Defaults (%): Saver: 90, Balanced: 60, High: 30, Ryzen: 25)
    - Processor performance decrease threshold: 40              (Defaults (%): Saver: 60, Balanced: 20, High+Ryzen: 10)
    - Processor idle demote threshold:  30                      (Defaults (%): Saver: 20(=80), Rest: 40(=60), Ryzen: 26?)    (goes "up" to lighter idle; reversed logic: this is the amount of idleness!!!: busy = 100% - idle)
    - Processor idle promote threshold: 50                      (Defaults (%): Saver: 40(=60), Rest: 60(=40), Ryzen: 40?)    (goes "down" to deeper idle; reversed logic: this is the amount of idleness!!!: busy = 100% - idle)
    - Processor performance core parking min cores: 100         (Defaults (%): High+Ryzen: 100, Rest: 10)    (value 100 disables core parking functionality)
    
    The last part relates to CPU settings and with these I managed to gain ~3C compared to Balanced plan and ~6C compared to Ryzen plan (that was set by default after installing the driver) during light usage. Adding another ~6C to the above due to undervolting, the total gain is at least ~12C.
    I also copied this plan and just modified the "Maximum processor state" to 100, if I want to encode/compile something quickly.

    A small hint for others how to list/copy/rename/delete plans:
    powercfg /L
    powercfg /DUPLICATESCHEME 4ae4e159-1a2e-4510-881f-9ddf11f596df
    powercfg /CHANGENAME 4ae4e159-1a2e-4510-881f-9ddf11f596df chros099
    powercfg /DELETE 4ae4e159-1a2e-4510-881f-9ddf11f596df

    So, thank You one more time for this amazing utility!
    For example the "Require a password on wakeup" setting was also hidden in Enterprise version, and I already tried to set it in 3 other different ways and it still didn't work! :)

    :) No, I have an 1080p screen. The "problem" is that it starts maximized, then I want to see my notes in notepad++, so I "restore" the window and it has a default size that I don't like, so I have to resize it again. But it's not really important if it gives you lot of work.
     
    Last edited: Dec 21, 2018
    duttyend likes this.
  15. mbk1969

    mbk1969 Ancient Guru

    Messages:
    15,649
    Likes Received:
    13,657
    GPU:
    GF RTX 4070
    Are you aware of <Win>+<Left Arrow> or <Win>+<Right Arrow> to align two apps in left and right sides of the screen?

    No lot of work, but most of programmers are lazy. If you insist I can do that, but if you have never tried the above method to split a screen between two apps it can be the solution.
     
    duttyend likes this.

  16. chros

    chros Guest

    Messages:
    14
    Likes Received:
    6
    GPU:
    MSI GTX 1060 6GB
    I noticed 1 more thing by accident that we missed before: the 2 "idle threshold" % values are dependent on the set max "Maximum processor state" % value by default! It's not an issue, but can be confusing when looking at the Cx values in the output of:
    Code:
    pwrtest.exe /info:ppm /p:1
    There's a setting that responsible for this: "Processor Idle Threshold Scaling" (from the linked doc and there's no such setting for "performance threshold" values). If it's enabled (it is by default) then it recalculates the % values based on the "Maximum processor state" value, e.g. if we set in the plan:
    Code:
    - Processor idle promote threshold: 50
    - Processor idle demote threshold:  30
    
    then the final values look like this:
    Code:
    - Maximum processor state: 100
        - Processor idle promote threshold: 50
        - Processor idle demote threshold:  30
    - Maximum processor state: 99
        - Processor idle promote threshold: 33
        - Processor idle demote threshold:  20
    - Maximum processor state: 80
        - Processor idle promote threshold: 10
        - Processor idle demote threshold:   6
    
    So I added 2 more settings to my notes:
    Code:
    - Processor performance boost mode: Disabled                (Defaults: All: Agressive)
    - Processor idle threshold scaling: Enable                  (Defaults: All: Enable)        (If it's enabled then the 2 "idle threshold" % values are dependent on the set max "Maximum processor state" % value!)
    
    Btw, there was 1 more setting the was useful for me (I already set ti via registry, but it's easier to set with your tool): "Hard disk - AHCI Link power Management - HIPM/DIPM" (default is "HIPM"):
    - the new Crucial mx500 500GB m.2 sata3 sdd got really hot during usage (~80C) and it turned out that setting this to "HIPM+DIPM" lowers its temp with ~20C! :)

    I know about it but never used it :)
    Of course I don't insist :) It's fine as it is, maybe if you modify something in the future and still remember this request then you can include it.
    Thanks!
     
    duttyend likes this.
  17. mbk1969

    mbk1969 Ancient Guru

    Messages:
    15,649
    Likes Received:
    13,657
    GPU:
    GF RTX 4070
    I will tease dear gurus - I started to work on new tool related to power plans, power events. ETA is April.
     
    duttyend and Watcher like this.
  18. theoneofgod

    theoneofgod Ancient Guru

    Messages:
    4,677
    Likes Received:
    287
    GPU:
    RX 580 8GB
    I like a good tease.
     
  19. BuildeR2

    BuildeR2 Ancient Guru

    Messages:
    3,220
    Likes Received:
    446
    GPU:
    ASUS 4090 TUF OG OC
    I accept your tease, Ancient Guru. I still use several of your tools to this day, on multiple computers. :)
     
  20. mbk1969

    mbk1969 Ancient Guru

    Messages:
    15,649
    Likes Received:
    13,657
    GPU:
    GF RTX 4070
    You made me notice the amount of messages and I am in shock - 6700 messages! Even if each message took 1 minute to compose, I spent 111 hours only writing messages - that`s 4 and a half days non-stop.
     
    Last edited: Mar 20, 2019
    duttyend likes this.

Share This Page