  Multicore processors constitute the main architecture choice for modern
computing systems in different market segments. Despite their benefits, the
contention that naturally appears when multiple applications compete for the
use of shared resources among cores, such as the last-level cache (LLC), may
lead to substantial performance degradation. This may have a negative impact on
key system aspects such as throughput and fairness. Assigning the various
applications in the workload to separate LLC partitions with possibly different
sizes, has been proven effective to mitigate shared-resource contention
effects.
  In this article we propose LFOC, a clustering-based cache partitioning scheme
that strives to deliver fairness while providing acceptable system throughput.
LFOC leverages the Intel Cache Allocation Technology (CAT), which enables the
system software to divide the LLC into different partitions. To accomplish its
goals, LFOC tries to mimic the behavior of the optimal cache-clustering
solution, which we could approximate by means of a simulator in different
scenarios. To this end, LFOC effectively identifies streaming aggressor
programs and cache sensitive applications, which are then assigned to separate
cache partitions.
  We implemented LFOC in the Linux kernel and evaluated it on a real system
featuring an Intel Skylake processor, where we compare its effectiveness to
that of two state-of-the-art policies that optimize fairness and throughput,
respectively. Our experimental analysis reveals that LFOC is able to bring a
higher reduction in unfairness by leveraging a lightweight algorithm suitable
for adoption in a real OS.
