Message boards : Number crunching : Limit CPU time during night
Author | Message |
---|---|
TauFive Send message Joined: 24 May 16 Posts: 3 Credit: 52,852 RAC: 0 |
Is there any way to limit CPU time down to say 25% during a set period of time? For example 1800 to 0700 CPU is reduced to 25% and between 0700 to 1800 CPU is back to 100% usage. |
Timo Send message Joined: 9 Jan 12 Posts: 185 Credit: 45,649,459 RAC: 0 |
Is there any way to limit CPU time down to say 25% during a set period of time? For example 1800 to 0700 CPU is reduced to 25% and between 0700 to 1800 CPU is back to 100% usage. This functionality is not built into BOINC as far as I know, but which operating system are you running? On Windows 7/8/10 I have set up some scheduled tasks to change the system power plan at set times of the day. I set the power plan's settings to limit the CPU clock to 100% or 70% or 40%, etc. In my case I was aiming for the opposite (run 100% over night, run at 50% during the day when people are home, etc.) If you're using Windows, I can provide more details of how to do this. |
TauFive Send message Joined: 24 May 16 Posts: 3 Credit: 52,852 RAC: 0 |
Is there any way to limit CPU time down to say 25% during a set period of time? For example 1800 to 0700 CPU is reduced to 25% and between 0700 to 1800 CPU is back to 100% usage. Thanks, that's an interesting way of doing it. Now to determine which would be more power efficient - limiting CPU time to 25% or having Windows run the processor at the lowest p-state on 100%. |
Chilean Send message Joined: 16 Oct 05 Posts: 711 Credit: 26,694,507 RAC: 0 |
|
Timo Send message Joined: 9 Jan 12 Posts: 185 Credit: 45,649,459 RAC: 0 |
Here's the steps to change the target multiplier of a given power plan. Not sure if its the exact same as p states, but if you have CPU-Z open you will see the multiplier decrease/increase quite granulary (so it will go from say, 16 to 15 with a 6% change in the percentage) The result for me is that I can run my 2.8Ghz i7 CPU at 1.6Ghz and cut the fan noise down to almost nothing. Below the quoted instructions I also added some instructions for using a VBscript to change the power plans as part of a scheduled task.
Here's a modified version of someone else's VBS script that can switch between power plans, and thus be used to create scheduled power states -- note that I added some functionality to accept command line arguments, and also to write to a log file Instructions: - Save the below code (at bottom of this post) to a file, for example 'changePowerPlan.vbs' - Double click the file to run it without any command line arguments, this will trigger it to display a list of Power Plans currently on the system like this: (Take note of the number beside a given plan above, for example if I want to set the plan to my 'Power Saver' plan, that is plan #8) - To run change this command via a command line, you can simply run the C:SomeFolderchangePowerPlan.vbs 8 - change the number 8 to a different number. If an argument is provided like this, no prompts will appear but - NOTE that the script will write a log to C:ProgramDatachangePowerPlan.log - Then, you can set up scheduled tasks in windows to change the power plans around however you want, on a schedule.. You can just setup scheduled tasks in Task Scheduler to run at whatever time you want the plans to change. Here's what the 'Action to perform' screen is filled out to show on my setup: [color=green]' ------------------------------- START OF CODE -------------- ' Change the Power plan settings options using Pure VBScript [/color] [color=green]' [/color] [color=green]' Based on script by Phil Thomas[/color] [color=green]' Define our variables [/color] [color=blue]Dim[/color] arrPlans[color=blue]([/color][color=blue])[/color] [color=blue]Dim[/color] strState [color=blue]Dim[/color] colPlan [color=blue]Dim[/color] intCounter [color=blue]Dim[/color] strPlanName [color=blue]Dim[/color] strPlanDescription [color=blue]Dim[/color] strPlanStatus [color=blue]Dim[/color] objFSO[color=blue]:[/color] [color=blue]Set[/color] objFSO [color=blue]=[/color] [color=blue]CreateObject[/color][color=blue]([/color][color=red]"Scripting.FileSystemObject"[/color][color=blue])[/color] [color=blue]Dim[/color] myLog[color=blue]:[/color] [color=blue]Set[/color] myLog [color=blue]=[/color] objFSO[color=purple].[/color]OpenTextFile[color=blue]([/color][color=red]"C:ProgramDatachangePowerPlan.log"[/color][color=blue],[/color] [color=purple]8[/color][color=blue],[/color] [color=purple]True[/color][color=blue])[/color] [color=green]' Get the winmanagment system power [/color] [color=blue]Set[/color] objWMI [color=blue]=[/color] [color=blue]GetObject[/color][color=blue]([/color][color=red]"winmgmts:\.rootcimv2power"[/color][color=blue])[/color] [color=green]' Do a search on win32_PowerPlan [/color] [color=blue]Set[/color] colPlans [color=blue]=[/color] objWMI[color=purple].[/color]ExecQuery[color=blue]([/color][color=red]"Select * From Win32_PowerPlan"[/color][color=blue])[/color] [color=green]' Resize the array that will hold the plans [/color] [color=blue]ReDim[/color] arrPlans[color=blue]([/color]colPlans[color=purple].[/color]count[color=blue])[/color] [color=green]' Start a counter (Real programmers start from 0) [/color] intCounter[color=blue]=[/color][color=purple]0[/color] [color=green]' Create the first part of our message to the user [/color] strOutput[color=blue]=[/color][color=red]"Available power plans:"[/color][color=blue]+[/color]vbcrlf [color=green]' Go through each of the returned plans objPlan contains the current plan [/color] [color=blue]For[/color] [color=blue]Each[/color] objPlan in colPlans [color=green]' Get the details into some variables [/color] [color=green]' - The name of the plan eg Balanced [/color] strPlanName [color=blue]=[/color] objPlan[color=purple].[/color]ElementName [color=green]' - The description of the plan (Not used in this example.) [/color] strPlanDescription [color=blue]=[/color] objPlan[color=purple].[/color]Description [color=green]' - The current Status (Active=true Inactive=false) [/color] strPlanStatus [color=blue]=[/color] objPlan[color=purple].[/color]isActive[color=blue]=[/color][color=purple]True[/color] [color=green]' Convert the status to some text for our inputbox [/color] [color=blue]If[/color] strPlanStatus[color=blue]=[/color][color=purple]True[/color] [color=blue]Then[/color] strState[color=blue]=[/color][color=red]"Active"[/color] [color=blue]Else[/color] strState[color=blue]=[/color][color=red]"Inactive"[/color] [color=blue]End[/color] [color=blue]If[/color] [color=green]' Add a new line to our inputbox question string "<Serial number> - <Plan name> : <active/inactive> [/color] strOutput[color=blue]=[/color]strOutput[color=blue]&[/color][color=red]" "[/color][color=blue]&[/color]intCounter[color=blue]+[/color][color=purple]1[/color][color=blue]&[/color][color=red]" - "[/color][color=blue]&[/color]strPlanName [color=blue]&[/color][color=red]" : "[/color][color=blue]&[/color] strState [color=blue]&[/color]vbcrlf [color=green]' Put the current plan into the array under its serial number. This is so we can access it by that number later. [/color] [color=green]' Note: it is an object so we have to use the Set command. [/color] [color=blue]Set[/color] arrPlans[color=blue]([/color]intCounter[color=blue])[/color][color=blue]=[/color]objPlan [color=green]' Increment the serial number counter [/color] intCounter[color=blue]=[/color]intCounter[color=blue]+[/color][color=purple]1[/color] [color=blue]Next[/color] [color=blue]if[/color] WScript[color=purple].[/color]Arguments[color=purple].[/color]Count [color=blue]>[/color] [color=purple]0[/color] [color=blue]then[/color] intResponse [color=blue]=[/color] [color=blue]CInt[/color][color=blue]([/color]WScript[color=purple].[/color]Arguments[color=purple].[/color]Item[color=blue]([/color][color=purple]0[/color][color=blue])[/color][color=blue])[/color] [color=blue]else[/color] intResponse[color=blue]=[/color][color=blue]CInt[/color][color=blue]([/color]InputBox[color=blue]([/color]strOutput[color=blue],[/color][color=red]"Select Power Plan"[/color][color=blue])[/color][color=blue])[/color] [color=blue]end[/color] [color=blue]if[/color] [color=green]' Display our list of options to the user and get response (Convert response to a number) [/color] [color=green]' Check if the number corresponds to any of our power options [/color] [color=blue]If[/color] intResponse[color=blue]>[/color][color=purple]0[/color] And intResponse[color=blue]<[/color][color=blue]=[/color]intCounter [color=blue]Then[/color] [color=green]' Check if the plan was already active - Note our options started at 1 so we need to correct [/color] [color=blue]If[/color] arrPlans[color=blue]([/color]intResponse[color=blue]-[/color][color=purple]1[/color][color=blue])[/color][color=blue].[/color]isActive[color=blue]=[/color][color=purple]True[/color] [color=blue]Then[/color] [color=blue]if[/color] WScript[color=purple].[/color]Arguments[color=purple].[/color]Count [color=blue]>[/color] [color=purple]0[/color] [color=blue]then[/color] myLog[color=purple].[/color]WriteLine [color=blue]Now[/color] [color=blue]&[/color] [color=red]": Plan is already set to "[/color][color=blue]&[/color]arrPlans[color=blue]([/color]intResponse[color=blue]-[/color][color=purple]1[/color][color=blue])[/color][color=blue].[/color]elementName [color=blue]else[/color] [color=blue]MsgBox[/color] [color=blue]Now[/color] [color=blue]&[/color] [color=red]": Plan is already set to "[/color][color=blue]&[/color]arrPlans[color=blue]([/color]intResponse[color=blue]-[/color][color=purple]1[/color][color=blue])[/color][color=blue].[/color]elementName [color=blue]end[/color] [color=blue]if[/color] [color=blue]Else[/color] [color=green]' Set the plan to the chosen plan - The Activate() function is part of the Win32_PowerPlan class [/color] arrPlans[color=blue]([/color]intResponse[color=blue]-[/color][color=purple]1[/color][color=blue])[/color][color=blue].[/color]Activate[color=blue]([/color][color=blue])[/color] [color=blue]if[/color] WScript[color=purple].[/color]Arguments[color=purple].[/color]Count [color=blue]>[/color] [color=purple]0[/color] [color=blue]then[/color] myLog[color=purple].[/color]WriteLine [color=blue]Now[/color] [color=blue]&[/color] [color=red]": Plan set to "[/color][color=blue]&[/color]arrPlans[color=blue]([/color]intResponse[color=blue]-[/color][color=purple]1[/color][color=blue])[/color][color=blue].[/color]elementName [color=blue]else[/color] [color=blue]MsgBox[/color] [color=blue]Now[/color] [color=blue]&[/color] [color=red]": Plan set to "[/color][color=blue]&[/color]arrPlans[color=blue]([/color]intResponse[color=blue]-[/color][color=purple]1[/color][color=blue])[/color][color=blue].[/color]elementName [color=blue]end[/color] [color=blue]if[/color] [color=blue]End[/color] [color=blue]If[/color] [color=blue]Else[/color] [color=blue]if[/color] WScript[color=purple].[/color]Arguments[color=purple].[/color]Count [color=blue]>[/color] [color=purple]0[/color] [color=blue]then[/color] myLog[color=purple].[/color]WriteLine [color=blue]Now[/color] [color=blue]&[/color] [color=red]": No Changes Made"[/color] [color=blue]else[/color] [color=blue]MsgBox[/color] [color=red]"No Changes Made"[/color] [color=blue]end[/color] [color=blue]if[/color] [color=blue]End[/color] [color=blue]If[/color] myLog[color=purple].[/color][color=blue]Close[/color] [color=blue]set[/color] myLog [color=blue]=[/color] [color=blue]Nothing[/color] [color=blue]set[/color] objFSO [color=blue]=[/color] [color=blue]Nothing[/color] WScript[color=purple].[/color]Quit [color=green]' ------------------------------- END OF CODE --------------[/color] |
TauFive Send message Joined: 24 May 16 Posts: 3 Credit: 52,852 RAC: 0 |
Here's the steps to change the target multiplier of a given power plan. Not sure if its the exact same as p states, but if you have CPU-Z open you will see the multiplier decrease/increase quite granulary (so it will go from say, 16 to 15 with a 6% change in the percentage) Thank you for that in-depth explanation, Timo. I appreciate it. |
Message boards :
Number crunching :
Limit CPU time during night
©2024 University of Washington
https://www.bakerlab.org