Opened 17 years ago

Last modified 12 years ago

#203 new Enhancement

Seperate cpu options for active/idle

Reported by: wwhite81 Owned by: davea
Priority: Minor Milestone:
Component: Client - Daemon Version:
Keywords: cpu throttling Cc:

Description

Idea: Being able to set the max cpu load separately for active and idle running the same way you can for memory usage settings. Would allow the user to change from idle to cpu intensive tasks where max load causes issues without having to change the max load manually each time, with the chance to forget to ramp it back up once done and waste cpu time.

Change History (5)

comment:1 Changed 17 years ago by Nicolas

Component: Client - ManagerClient - Daemon
Owner: changed from romw to davea

This is actually a core client issue; adding a visual way to change this from the manager is very simple stuff, but making the core client do something with the setting is the actual work.

comment:2 Changed 17 years ago by Nicolas

Keywords: usage removed

Keyword update

comment:3 Changed 17 years ago by KSMarksPsych

Summary: Seperate cpu throttling options for active/idleSeperate cpu options for active/idle

More fine-grained control over CPU usage (throttling and number in use) based on active/idle status has been suggested here.

comment:4 Changed 17 years ago by evandro

This option would come in handy when BOINC is run on production servers, typically SMP systems.

It's not a problem with Windows, which runs BOINC threads only when there's no other thread to run, but it is in Linux, and possibly in OSX too, which gives BOINC threads a fair amount of CPU in spite of their low priority (typically 5% in a loaded system), when running BOINC always costs something.

But this option would probably make more sense if how BOINC understands idle is changed. IIRC, BOINC considers only user interactivity to determine if a system is idle. This is probably fine with Windows because of the reason state above, but in Linux it would probably be a better option if in addition to user activity the system load were also considered to determine if other processes are running too.

Nevertheless, such a change would also make sense on SMP desktops, always becoming more and more common with the launch of multi-core processors.

I understand that there might be difficulties on implementing this depending on how many WU queues there are. If it's a single queue with the number of allowed CPUs determining how many can be active, it shouldn't be too hard. But if there are as many queues as allowed CPUs, it would be significantly harder.

One might say that it would suffice to limit the number of CPUs that BOINC can use in a production system, but then when the system is idling BOINC performance could be greater.

comment:5 Changed 17 years ago by evandro

Say, adding code to HOST_INFO::users_idle to detect the load-average according to the number of configured CPUs for BOINC:

# define LOADAVG_WIGGLE 0.5 // There are always some house-keeping background processes running in addition to BOINC applications.

inline bool light_load (time_t t) {
  double loadavg; // 1min system load average. 

  if (getloadavg (&loadavg, 1) == 1)
    return (loadavg < #configured BOINC CPUs + LOADAVG_WIGGLE);
  else
    return (true);
}

All Unix variations provide soemthing equivalent. Unfortunately, Windows doesn't; the closest thing being querying the run-queue length or using the expensive system performance counters.

Note: See TracTickets for help on using tickets.