Boinc issue
#1
Hello everybody,

I just purchased one ROCKPRO64 2GB. I installed Android 7.1 (20180809) and the board run well.
In order to test the performance of the board, I run some benchmark without issue and finally I tried to run BOINC. On this board BOINC is running very badly. In this software you can select the number of CPU core you would like to use and also the CPU time of computation. I tried to select 2, 4 or 6 CPU core and I saw that the 2 big core are never used. Only the LITTLE core are used.

I already run BOINC on other SBC and I never saw this issue. Do you think the issue came from BOINC or on this version of Android? What could I do to try to solve this issue?

Thanks for your help
Best regards
#2
Per the spec for the big.LITTLE CPU cluster architecture, only one "side" (big, or little) is allowed to be active at one time.

The "sides" share one memory space and can easily toggle tasks between the two sides, which is what it was designed for.
But the tasks either toggle all the way to "big", or all the way to "LITTLE", and cannot straddle the two.

It allows a developer to swap tasks between lower power consumption and higher power consumption, on purpose, when needed, to achieve more granular power management, than say forcefully frequency-cycling the individual cores within the 2 clusters.

So anyway, always having either: "4 out of 6", or "2 out of 6", CPUs active at any given time, is 100% correct.
You will never, ever see even 5 out of 6.

The "big" cores are Cortex A57 and "LITTLE" cores are Cortex A53, and that probably has something to do with it.

The "S" in "SMP" ("symmetric" multiprocessing) is the reason for this - this SoC is asymmetrical.
This big.LITTLE architecture is more like forced "AMP", and is wholly incompatible with the concept of "SMP".
#3
Thanks a lot for your reply.

I totally forgot this important point. I worked previously on SBC with only one cluster or with 2 cluster but with HMP features (Heterogeneous Multi-Processing) that allow different clusters to work in the same time.

For ROCKPro64, there are 1 cluster of dual core A72 and 1 cluster of quad core A53.

I changed Boinc to run only on 1 CPU and I was expected that one A72 core is going to be used, but It seems that this is still the cluster of quad core A53 that is active. One A53 core load is 100%.

I don't understand why Boinc doesn't run on big core. I will make more tests and comeback here.
#4
(12-12-2018, 12:28 PM)fosf0r Wrote: Per the spec for the big.LITTLE CPU cluster architecture, only one "side" (big, or little) is allowed to be active at one time.

The "sides" share one memory space and can easily toggle tasks between the two sides, which is what it was designed for.
But the tasks either toggle all the way to "big", or all the way to "LITTLE", and cannot straddle the two.

It allows a developer to swap tasks between lower power consumption and higher power consumption, on purpose, when needed, to achieve more granular power management, than say forcefully frequency-cycling the individual cores within the 2 clusters.

So anyway, always having either: "4 out of 6", or "2 out of 6", CPUs active at any given time, is 100% correct.
You will never, ever see even 5 out of 6.

The "big" cores are Cortex A57 and "LITTLE" cores are Cortex A53, and that probably has something to do with it.

The "S" in "SMP" ("symmetric" multiprocessing) is the reason for this - this SoC is asymmetrical.
This big.LITTLE architecture is more like forced "AMP", and is wholly incompatible with the concept of "SMP".

Sorry, that's incorrect as a general statement. Only the very first big.LITTLE implementations couldn't run all big and little cores at the same time, that was Exynos 5410 and Tegra 3 with its low-power companion core, some chips from Apple and maybe something else. Nowadays the kernel decides what cores to power at what frequency and it may be even all big and all cores if the need arises.

RK3399 should very well be able to run all 6 cores at the same time.

I suspect that the original poster did not have any heatsink attached which caused throttling and shutdown of some cores.
#5
You may want to learn more deeply about the architecture from Rockchip.
Perhaps there will be some fortune, and you might find the missing piece.
http://opensource.rock-chips.com/wiki_Main_Page

In the SDK,
http://opensource.rock-chips.com/wiki_Linux_SDK
there are schematics and TRMs and such.



I have low programming skill, low engineering skill, no degrees, and I'm self-taught, but I'll dump out everything else that I can think of:
- I understand there is a big.LITTLE SMP scheduler module available in the kernel Kconfig, but I've never used it, because I can't personally use kernels beyond 4.4.138, and 138 doesn't have that scheduler yet. It DOES compile successfully though - maybe give that a shot once to see if it behaves differently. (But then other parts of the rk3399 won't be working right, such as HDMI audio.)
- I don't know if that scheduler will help what you're doing whatsoever.
- My assumption is that any code must know about, and actively choose to flip over to big cluster. Generally, since Linux tasks are small and numerous, 4 slower cores generally get more "done" than a faster set of 2 cores, so the 4 cores are the sensible default. Also, the big cluster requires more power to run, and being a SBC, you can see why they chose power savings by default, etc.
- There are several pieces that go along with big.LITTLE that are also not quite working yet in Linux kernels, and there's various levels of "working" depending on exactly which kernel version you have. For instance, there's a lot of Rockchip modules in ayufan's kernel tree that just won't even compile in 138, you are not supposed to enable them. But I can see from the TRM that this board needs them. So a lot of functionality is still missing, or intentionally disabled for stability.
- You might also have to locate TRMs for arm's A53, and A57, and maybe another TRM for big.LITTLE architecture in general.
- But if you're an engineer and are inclined, who knows, you might stumble across a breakthrough in unlocking more performance. You might figure out why it's not doing what you expect.
#6
(12-14-2018, 05:38 AM)p12 Wrote: Sorry, that's incorrect as a general statement. Only the very first big.LITTLE implementations couldn't run all big and little cores at the same time, that was Exynos 5410 and Tegra 3 with its low-power companion core, some chips from Apple and maybe something else. Nowadays the kernel decides what cores to power at what frequency and it may be even all big and all cores if the need arises.

RK3399 should very well be able to run all 6 cores at the same time.

I suspect that the original poster did not have any heatsink attached which caused throttling and shutdown of some cores.
This is a very good news. Thanks for the update.

The ROCKPRO64 I used is mounted with a fan on top of the heatsink (the ones from PINE64 shop). I tried to run the app "CPU Throttling Test" and the board ran very well without throttling.
#7
Just a little update.

Yesterday, I started a new fresh install of Android 7.1.2 on my ROCKPRO64 (with fan). I install BOINC and it was able to ran on all 6 cores at the same time. The performance was very good, temperature was not too high and all CPU ran at full speed.
Unfortunately, after a reboot (the reboot was done in the right way, using the power button and select restart on screen) the issue appeared again, only one A53 core was running. It seems that after a reboot, the issue appears. I tried to restart a lot of time, tried to change some parameters, but I was unable to came back to the first startup behavior (used 6 core at the same time)... I don't know if this come from BOINC app (I use the last one, 7.4.53) or from the image of Android 7.1.2 downloaded from PINE64 wiki.
#8
(12-14-2018, 05:38 AM)p12 Wrote:
(12-12-2018, 12:28 PM)fosf0r Wrote: Per the spec for the big.LITTLE CPU cluster architecture, only one "side" (big, or little) is allowed to be active at one time.

The "sides" share one memory space and can easily toggle tasks between the two sides, which is what it was designed for.
But the tasks either toggle all the way to "big", or all the way to "LITTLE", and cannot straddle the two.

It allows a developer to swap tasks between lower power consumption and higher power consumption, on purpose, when needed, to achieve more granular power management, than say forcefully frequency-cycling the individual cores within the 2 clusters.

So anyway, always having either: "4 out of 6", or "2 out of 6", CPUs active at any given time, is 100% correct.
You will never, ever see even 5 out of 6.

The "big" cores are Cortex A57 and "LITTLE" cores are Cortex A53, and that probably has something to do with it.

The "S" in "SMP" ("symmetric" multiprocessing) is the reason for this - this SoC is asymmetrical.
This big.LITTLE architecture is more like forced "AMP", and is wholly incompatible with the concept of "SMP".

Sorry, that's incorrect as a general statement. Only the very first big.LITTLE implementations couldn't run all big and little cores at the same time, that was Exynos 5410 and Tegra 3 with its low-power companion core, some chips from Apple and maybe something else. Nowadays the kernel decides what cores to power at what frequency and it may be even all big and all cores if the need arises.

RK3399 should very well be able to run all 6 cores at the same time.

I suspect that the original poster did not have any heatsink attached which caused throttling and shutdown of some cores.

Thanks for clarifying this.
I must have been reading outdated information.
(I don't remember where I got all that)


Forum Jump:


Users browsing this thread: 1 Guest(s)