Hi,
As painfully found out by mono team, if big/little cores have different cache line sizes, __clear_cache doesn't work as expected. This affects any home-grown cache flushing mechanism as well.
http://www.mono-project.com/news/2016/09/12/arm64-icache/
protip, if you suspect your application issues might related to big.LITTLE, use taskset(1) or hwloc-bind(1) to tie the process to either big or little cluster (or just a single core).
On Tue, Sep 13, 2016 at 10:14:20AM +0300, Riku Voipio wrote:
Hi,
Hi,
As painfully found out by mono team, if big/little cores have different cache line sizes, __clear_cache doesn't work as expected. This affects any home-grown cache flushing mechanism as well.
http://www.mono-project.com/news/2016/09/12/arm64-icache/
protip, if you suspect your application issues might related to big.LITTLE, use taskset(1) or hwloc-bind(1) to tie the process to either big or little cluster (or just a single core).
While this is a real bug, the conclusions in the article aren't quite right, so I'd like to clarify a few things before this spreads further:
* This only affects a single SoC, and is not a generic issue with big.LITTLE. Correctly-written software following the sequences in the ARM ARM will work on all other platforms.
* This mismatch is in violation of the architecture (i.e. it is a hardware bug), so hopefully more instances of this will not be seen in future.
* Upstream, there is a kernel patch [1] in discussion, which will work around this issue in the kernel, transparently to userspace.
* Setting affinity and/or caching the minimum value in userspace is racy with hotplug (as used on Android for power management). While useful for testing it does not solve the issue.
Thanks, Mark.
[1] http://lists.infradead.org/pipermail/linux-arm-kernel/2016-September/455679....
linaro-toolchain@lists.linaro.org