Shared caches in multi-core CPU architectures represent a problem for
predictability of memory access latency. This jeopardizes applicability
of many Arm platform in real-time critical and mixed-criticality
scenarios. We introduce support for cache partitioning with page
coloring, a transparent software technique that enables isolation
between domains and Xen, and thus avoids cache interference.
When creating a domain, a simple syntax (e.g. `0-3` or `4-11`) allows
the user to define assignments of cache partitions ids, called colors,
where assigning different colors guarantees no mutual eviction on cache
will ever happen. This instructs the Xen memory allocator to provide
the i-th color assignee only with pages that maps to color i, i.e. that
are indexed in the i-th cache partition.
The proposed implementation supports the dom0less experimental feature.
The solution has been tested in several scenarios, including Xilinx Zynq
MPSoCs.
Overview of implementation and commits structure
------------------------------------------------
- Coloring support is added for dom0 and domU by defining the core
logic, as well as the hardware inspection functionalities used for
getting needed coloring information [4-17].
- A new memory page allocator that implement the cache coloring
mechanism is introduced. The allocation algorithm follows the given
coloring scheme specified for each domain, and maximizes contiguity in
the page selection [18-21].
- Coloring support is added to Xen .text region [22-29], as well as to
dom0less domains [30].
- Extensive documentation details the technique and gently explains
usage [33-36].
Known limitations
-----------------
- We need to bring back [1-3] the relocation feature in order to move
Xen memory to a colored space where the hypervisor could be isolated
from VMs interference.
- When cache coloring is used, static memory assignment is disabled to
avoid incompatibility. [31]
- Due to assert failure [32], the number of supported colors is
currently limited at 64, which should be satisfactory for most chips.
In particular, the problem lies in the cache coloring configuration
data structure that belongs to each domain. We are aware that this is
not a clean solution but we hope that this could be discussed and
solved within this pull request.
Acknowledgements
----------------
This work is sponsored by Xilinx Inc., and supported by University of
Modena and Reggio Emilia and Minerva Systems.
***
Luca Miccio (36):
Revert "xen/arm: setup: Add Xen as boot module before printing all
boot modules"
Revert "xen/arm: mm: Initialize page-tables earlier"
xen/arm: restore xen_paddr argument in setup_pagetables
xen/arm: add parsing function for cache coloring configuration
xen/arm: compute LLC way size by hardware inspection
xen/arm: add coloring basic initialization
xen/arm: add coloring data to domains
xen/arm: add colored flag to page struct
xen/arch: add default colors selection function
xen/arch: check color selection function
xen/include: define hypercall parameter for coloring
xen/arm: initialize cache coloring data for Dom0/U
xen/arm: A domain is not direct mapped when coloring is enabled
xen/arch: add dump coloring info for domains
tools: add support for cache coloring configuration
xen/color alloc: implement color_from_page for ARM64
xen/arm: add get_max_color function
Alloc: introduce page_list_for_each_reverse
xen/arch: introduce cache-coloring allocator
xen/common: introduce buddy required reservation
xen/common: add colored allocator initialization
xen/arch: init cache coloring conf for Xen
xen/arch: coloring: manually calculate Xen physical addresses
xen/arm: enable consider_modules for coloring
xen/arm: bring back get_xen_paddr
xen/arm: add argument to remove_early_mappings
xen/arch: add coloring support for Xen
xen/arm: introduce xen_map_text_rw
xen/arm: add dump function for coloring info
xen/arm: add coloring support to dom0less
Disable coloring if static memory support is selected
xen/arm: reduce the number of supported colors
doc, xen-command-line: introduce coloring options
doc, xl.cfg: introduce coloring configuration option
doc, device-tree: introduce 'colors' property
doc, arm: add usage documentation for cache coloring support
docs/man/xl.cfg.5.pod.in | 14 +
docs/misc/arm/cache_coloring.rst | 191 +++++++++++
docs/misc/arm/device-tree/booting.txt | 3 +
docs/misc/xen-command-line.pandoc | 51 ++-
tools/libs/light/libxl_arm.c | 11 +
tools/libs/light/libxl_types.idl | 1 +
tools/xl/xl_parse.c | 59 +++-
xen/arch/arm/Kconfig | 6 +
xen/arch/arm/Makefile | 2 +-
xen/arch/arm/alternative.c | 8 +-
xen/arch/arm/coloring.c | 469 ++++++++++++++++++++++++++
xen/arch/arm/domain.c | 56 +++
xen/arch/arm/domain_build.c | 42 ++-
xen/arch/arm/include/asm/coloring.h | 98 ++++++
xen/arch/arm/include/asm/mm.h | 18 +-
xen/arch/arm/mm.c | 245 +++++++++++++-
xen/arch/arm/psci.c | 4 +-
xen/arch/arm/setup.c | 94 +++++-
xen/arch/arm/smpboot.c | 19 +-
xen/common/page_alloc.c | 321 +++++++++++++++++-
xen/common/vmap.c | 4 +-
xen/include/public/arch-arm.h | 8 +
xen/include/xen/mm.h | 7 +
xen/include/xen/sched.h | 4 +
xen/include/xen/vmap.h | 2 +
25 files changed, 1689 insertions(+), 48 deletions(-)
create mode 100644 docs/misc/arm/cache_coloring.rst
create mode 100644 xen/arch/arm/coloring.c
create mode 100644 xen/arch/arm/include/asm/coloring.h
--
2.30.2