2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-15 17:14:00 +08:00
linux-next/arch/x86/kernel/cpu
Matt Fleming bff671dba7 perf/x86/intel: Perform rotation on Intel CQM RMIDs
There are many use cases where people will want to monitor more tasks
than there exist RMIDs in the hardware, meaning that we have to perform
some kind of multiplexing.

We do this by "rotating" the RMIDs in a workqueue, and assigning an RMID
to a waiting event when the RMID becomes unused.

This scheme reserves one RMID at all times for rotation. When we need to
schedule a new event we give it the reserved RMID, pick a victim event
from the front of the global CQM list and wait for the victim's RMID to
drop to zero occupancy, before it becomes the new reserved RMID.

We put the victim's RMID onto the limbo list, where it resides for a
"minimum queue time", which is intended to save ourselves an expensive
smp IPI when the RMID is unlikely to have a occupancy value below
__intel_cqm_threshold.

If we fail to recycle an RMID, even after waiting the minimum queue time
then we need to increment __intel_cqm_threshold. There is an upper bound
on this threshold, __intel_cqm_max_threshold, which is programmable from
userland as /sys/devices/intel_cqm/max_recycling_threshold.

The comments above __intel_cqm_rmid_rotate() have more details.

Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Kanaka Juvva <kanaka.d.juvva@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Vikas Shivappa <vikas.shivappa@linux.intel.com>
Link: http://lkml.kernel.org/r/1422038748-21397-9-git-send-email-matt@codeblueprint.co.uk
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2015-02-25 13:53:35 +01:00
..
mcheck x86: Clean up cr4 manipulation 2015-02-04 12:10:41 +01:00
microcode x86/microcode/intel: Fish out the stashed microcode for the BSP 2014-12-10 11:36:28 +01:00
mtrr x86: Store a per-cpu shadow copy of CR4 2015-02-04 12:10:42 +01:00
.gitignore
amd.c Merge branch 'perf/hw_breakpoints' into perf/core 2015-01-28 15:48:59 +01:00
bugs_64.c x86/cpu: Clean up various files a bit 2009-07-11 11:24:09 +02:00
bugs.c x86: Get rid of ->hard_math and all the FPU asm fu 2013-06-06 14:32:04 -07:00
centaur.c x86: Remove CONFIG_X86_OOSTORE 2014-03-11 10:16:18 -07:00
common.c x86: Add support for Intel Cache QoS Monitoring (CQM) detection 2015-02-25 13:53:31 +01:00
cpu.h x86/cpu: Track legacy CPU model data only on 32-bit kernels 2013-10-26 13:34:39 +02:00
cyrix.c x86: Delete non-required instances of include <linux/init.h> 2014-01-06 21:25:18 -08:00
hypervisor.c x86: Correctly detect hypervisor 2013-08-05 06:35:33 -07:00
intel_cacheinfo.c arch/x86: replace strict_strto calls 2014-08-08 15:57:28 -07:00
intel.c x86: Don't enable F00F workaround on Intel Quark processors 2014-10-29 08:52:09 +01:00
Makefile x86/build: Clean auto-generated processor feature files 2014-12-23 15:37:06 +01:00
match.c x86: align x86 arch with generic CPU modalias handling 2014-02-18 12:45:38 -08:00
mkcapflags.sh x86: Fix mkcapflags.sh bash-ism 2014-12-23 15:34:57 +01:00
mshyperv.c x86, hyperv: Mark the Hyper-V clocksource as being continuous 2015-01-20 14:36:25 +01:00
perf_event_amd_ibs.c perf/x86/amd/ibs: Convert force_ibs_eilvt_setup() to void 2015-02-18 17:01:46 +01:00
perf_event_amd_iommu.c cpumask: factor out show_cpumap into separate helper function 2014-11-07 11:45:00 -08:00
perf_event_amd_iommu.h perf/x86/amd: AMD IOMMU Performance Counter PERF uncore PMU implementation 2013-06-19 13:04:53 +02:00
perf_event_amd_uncore.c cpumask: factor out show_cpumap into separate helper function 2014-11-07 11:45:00 -08:00
perf_event_amd.c x86: Replace __get_cpu_var uses 2014-08-26 13:45:49 -04:00
perf_event_intel_cqm.c perf/x86/intel: Perform rotation on Intel CQM RMIDs 2015-02-25 13:53:35 +01:00
perf_event_intel_ds.c perf/x86/intel: Fix bug for "cycles:p" and "cycles:pp" on SLM 2015-01-16 09:06:59 +01:00
perf_event_intel_lbr.c perf/x86/intel: Expose LBR callstack to user space tooling 2015-02-18 17:16:15 +01:00
perf_event_intel_rapl.c perf/rapl: Fix crash in rapl_scale() 2015-01-28 13:04:35 +01:00
perf_event_intel_uncore_nhmex.c perf/x86/uncore: Fix coccinelle warnings 2014-08-13 07:51:09 +02:00
perf_event_intel_uncore_snb.c perf/x86/intel/uncore: Update support for client uncore IMC PMU 2014-09-24 14:48:25 +02:00
perf_event_intel_uncore_snbep.c perf/x86/intel/uncore: Delete an unnecessary check before pci_dev_put() call 2015-02-18 17:01:42 +01:00
perf_event_intel_uncore.c perf/x86/intel/uncore: Move uncore_box_init() out of driver initialization 2015-01-28 13:04:34 +01:00
perf_event_intel_uncore.h perf/x86/intel/uncore: Move uncore_box_init() out of driver initialization 2015-01-28 13:04:34 +01:00
perf_event_intel.c perf: Simplify the branch stack check 2015-02-18 17:16:11 +01:00
perf_event_knc.c x86: Replace __get_cpu_var uses 2014-08-26 13:45:49 -04:00
perf_event_p4.c x86: Replace __get_cpu_var uses 2014-08-26 13:45:49 -04:00
perf_event_p6.c perf/x86/intel/p6: Add userspace RDPMC quirk for PPro 2014-02-09 13:08:24 +01:00
perf_event.c perf/x86/intel: Re-organize code that implicitly enables LBR/PEBS 2015-02-18 17:16:12 +01:00
perf_event.h perf/x86/intel: Expose LBR callstack to user space tooling 2015-02-18 17:16:15 +01:00
perfctr-watchdog.c perf/x86: Add support for Intel Xeon-Phi Knights Corner PMU 2012-10-04 13:32:37 +02:00
powerflags.c update AMD powerflags comments 2013-05-28 12:02:10 +02:00
proc.c x86: Replace seq_printf() with seq_puts() 2014-12-08 11:48:15 +01:00
rdrand.c x86, rdrand: When nordrand is specified, disable RDSEED as well 2014-05-11 20:25:20 -07:00
scattered.c x86: Add support for Intel HWP feature detection. 2014-11-12 00:04:37 +01:00
topology.c x86: delete __cpuinit usage from all x86 files 2013-07-14 19:36:56 -04:00
transmeta.c x86: Delete non-required instances of include <linux/init.h> 2014-01-06 21:25:18 -08:00
umc.c x86: Delete non-required instances of include <linux/init.h> 2014-01-06 21:25:18 -08:00
vmware.c x86: Correctly detect hypervisor 2013-08-05 06:35:33 -07:00