Discussion:
Heads-up: big.LITTLE and cache flushing
Riku Voipio
2016-09-13 07:14:20 UTC
Permalink
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).
Mark Rutland
2016-09-13 08:14:25 UTC
Permalink
Post by Riku Voipio
Hi,
Hi,
Post by Riku Voipio
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.html
Loading...