Open dirspb opened 1 year ago
@CharlieFenton, do you think it is something valuable (and not technically complex) to implement on MacOS?
This would be a medium-sized change to the CPU scheduling logic, which currently has no notion of high/low performance cores. Which CPUs besides Apple have this? I think some phone chips do.
Which CPUs besides Apple have this? I think some phone chips do.
Notably, Intel 12th gen chips (Alder Lake). https://en.wikipedia.org/wiki/Alder_Lake
Interesting. My feeling is that OSs (like Win) are developing schemes for scheduling performance/efficiency cores, and that BOINC shouldn't try to override these schemes (e.g. by CPU pinning). But if the OS has a way to say "run this process on an efficiency core if possible" we should use that for task processes.
(though as always, some BOINC users may want the opposite policy.)
We should collect info on the relevant features of Win/Mac/Linux/Android. MacOS has these APIs: https://developer.apple.com/library/archive/documentation/Performance/Conceptual/power_efficiency_guidelines_osx/PrioritizeWorkAtTheTaskLevel.html
BTW, some OSs have ways to prioritize disk I/O. We should look into these too.
I was manually using it on M1 MBP for quite some time already. So have a few tips:
Another option I would use is ability to keep running tasks on E core only when working on battery. But not sure if it's enough useful for complicating config.
@dirspb How does running on the efficiency cores affect the performance? Does processing tasks take longer on efficiency cores? Please finish this incomplete critical sentence from your original post:
While performance of:
Please note that we receive many concerns from BOINC volunteers who want to speed up BOINC's processing of tasks, and almost none who are concerned about the power consumption, fan speed, etc. (for example, #5249.) So if this reduces throughput, it would generate many complaints.
Sounds like the Manager should run at user-interactive (or maybe user-initiated) priority, and apps should run at utility priority (I assume the OS will preferentially run them on efficiency cores).
@davidpanderson, utility priority will still use P cores if available.
For tasks running on P core it took ~29300s to complete (1531775775, 1531775777, 1531775778). For tasks running on E core it took ~34180s to complete (1531775776, 1531775780). While two P cores use ~4.5W and two E cores use ~0.5W (+ idle system uses 0.8W).
@CharlieFenton , if config is "100% of the CPUs" behavior should be kept as current. This request addresses only case when BOINC CPUs usage set lower then 100%. Main BOINC is concept is to be ran in background minimally affecting user experience. Having hot laptop and full throttled fans does affects user. Currently on 10 core M1 CPU and "100% of the CPUs" config it runs 8 P core tasks and 2 E core tasks. When change config to "60% of the CPUs" it runs 6 P core tasks. Means shutdowns 2 E core and 2 P core tasks. Suggested behavior for "60% of the CPUs" config to run 4 P core tasks and 2 E core tasks. Means shutdowns 4 P core tasks. OS default scheduling doesn't work best because of special nature of BOINC tasks. They should have lowest QoS (background), but still use as much CPU resources as possible.
What I'm curious is why E core tasks receive twice less credit than (P core tasks ). Even though it was completed in 11 hours and P core task was completed in 2.5 days.
What is more interesting: why CPU time is equal for both E and P tasks?
@AenBleidd , they just did different amount of attempts during the same time:
DONE :: 498 starting structures 28755.8 cpu seconds This process generated 498 decoys from 498 attempts
DONE :: 1115 starting structures 28784 cpu seconds This process generated 1115 decoys from 1115 attempts
So E core performance is 54% of P core. Power use is 11%.
So, maybe this is the reason E task received twice less points because for the same amount of CPU time two times less simulations were done? TBH, I don't know the way Rosetta calculates granted points.
@davidpanderson ,
change to the CPU scheduling logic
can you point me to the specific file so I'll try to make initial change myself?
Please propose a policy before changing code.
If you make this change, it needs to be user selectable, either as a separate option or associated with an existing option (such as percent of CPU time.) While laptop users will want it to reduce the temperature, many desktop users will complain if it slows down processing.
More or less similar to #4663 but for Windows. I may assume, linux has the same issues with such kind of hybrid CPUs. Don't really have the answer if BOINC should care about this instead of the OS kernel
Describe the problem When BOINC CPUs usage set lower then 100%, tasks threads executed on Performance(P) cores. Utilizing Efficiency(E) core in such case would lower power usage or increase performance (for the same power usage).
Describe the solution you'd like Assume CPU has x efficiency cores. Then x tasks should be assigned to E cores. E.g. M1 Pro CPU has 2 efficiency cores and 8 performance ones. If running 6 tasks and two of them assigned to E cores fan runs with 2500 rpm. If running 5 tasks without assignment the fan is 4200rpm. While performance of 2E+4P cores is higher then 5P cores. It will be most useful for Macbook Air since they have 4E + 4P cores and no fan. They start throttle CPU even if one BOINC task is running. For them best option is to run just 4E core tasks.
Additional context assigning to E core can be done during process start or using shell command:
sudo taskpolicy -b -p <PID>