mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Fenghua Yu <fenghua.yu@intel.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Fenghua Yu <fenghua.yu@intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@elte.hu>,
	"H. Peter Anvin" <hpa@linux.intel.com>,
	Ashok Raj <ashok.raj@intel.com>,
	Dave Hansen <dave.hansen@intel.com>,
	Rafael Wysocki <rafael.j.wysocki@intel.com>,
	Tony Luck <tony.luck@intel.com>, Alan Cox <alan@linux.intel.com>,
	Ravi V Shankar <ravi.v.shankar@intel.com>,
	Arjan van de Ven <arjan@infradead.org>,
	linux-kernel <linux-kernel@vger.kernel.org>, x86 <x86@kernel.org>
Subject: Re: [RFC PATCH 00/16] x86/split_lock: Enable #AC exception for split locked accesses
Date: Thu, 21 Jun 2018 15:00:03 -0700	[thread overview]
Message-ID: <20180621220003.GD114883@romley-ivt3.sc.intel.com> (raw)
In-Reply-To: <alpine.DEB.2.21.1806212223480.1591@nanos.tec.linutronix.de>

On Thu, Jun 21, 2018 at 10:32:57PM +0200, Thomas Gleixner wrote:
> On Thu, 21 Jun 2018, Fenghua Yu wrote:
> > On Thu, Jun 21, 2018 at 09:37:38PM +0200, Peter Zijlstra wrote:
> > > On Sun, May 27, 2018 at 08:45:49AM -0700, Fenghua Yu wrote:
> > > > Currently we can trace split lock event counter for debug purpose. But
> > > 
> > > How? A while ago I actually tried that, but I could not find a suitable
> > > perf event.
> > 
> > The event name is called sq_misc.split_lock. It's been supported in perf
> > already.
> 
> So the obvious question is why not simply use that counter and capture the
> IP which triggers the event?
> 

The sq_misc.split_lock event is AFTER the fact and insufficient to
capture split lock before the instruction is executed for system deployed
in the field. #AC for split lock is triggered BEFORE the instruction is
executed.

For example, on a consolidated real-time machine, some cores are running
hard real time workloads while the rest of cores are running "untrusted"
user processes. One untrusted user process may execute an instruction that
accesses split locked data and causes bus locking on the whole machine to
block real time workloads to access memory. In this case, capturing split
lock perf event won't immediately help the real time workloads. With #AC
for split lock, the split lock is detected before the instruction hurts
hard real time workloads and the untrusted process can be killed or system
admin gets warning depending on policy. Without #AC for split lock feature,
such consolidated real-time design is impossible.

Another example, in a public cloud deployed in the field, a user process
in a guest can execute an instruction with split lock to slow down overall
performance of other guests and host. This process could be a misdesigned
process or a malware. #AC for split lock can kill the process or provide
warning before harm. On the other hand, the perf event needs perf to run
to monitor the event on the public cloud and doesn't really prevent the
split lock from hurting system performance.

And perf cannot count split lock events in firmware. In real time, even
split lock in firmware (reboot, run time services, etc) may not be tolerant
and need to be detected and prevented.

Do the examples make sense?

> I can see that this wont cover the early boot process, but there it's
> enough to catch #AC once, yell loudly and then disable the thing. I'm not
> seing the value of adding 1000 lines of code with lots of control knobs.
> 
> I might be missing something though and am happy to be educated.
>

Right. Code won't cover the early boot process. It only covers boot process
after the feature is enabled.

After disabling #AC split lock after catching #AC once, any future split
lock will not generate #AC any more.

The control knobs allow sysadmin to handle #AC for split lock in different
scenarios and usages.

The control knob for kernel is to choose re-executing the faulting
instruction (default) or kernel panic. Kernel panic may be useful in hard
real time which has less tolerant to bad performance.

The control knob for user is to choose killing the process (default) or
re-executing the faulting instruction without blocking the process.
Re-executing the instruction maybe be useful in platforms that run
well controlled apps with less split locks.

The control knob for firmware is to choose continuing firmware execution
by disabling #AC split lock (default) or stopping firmware execution
by enabling #AC for split lock. Stopping firmware execution may be useful
in hard real time system to identify any split lock issue on the platform.

So the control knobs may be useful for different scenarios, right?

Thanks.

-Fenghua



  reply	other threads:[~2018-06-21 22:00 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-27 15:45 Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 01/16] x86/split_lock: Add CONFIG and enumerate #AC exception for split locked access feature Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 02/16] x86/split_lock: Handle #AC exception for split lock in kernel mode Fenghua Yu
2018-06-21 19:46   ` Peter Zijlstra
2018-06-22 10:49   ` Thomas Gleixner
2018-06-22 11:59     ` Thomas Gleixner
2018-06-22 22:41       ` Fenghua Yu
2018-06-22 22:57         ` Thomas Gleixner
2018-06-22 23:03           ` Thomas Gleixner
2018-06-22 23:18       ` Fenghua Yu
2018-06-23  9:08         ` Thomas Gleixner
2018-06-23  4:20     ` Fenghua Yu
2018-06-23  9:17       ` Thomas Gleixner
2018-06-23 15:05         ` Fenghua Yu
2018-06-24  0:55           ` Thomas Gleixner
2018-06-24  1:17             ` Fenghua Yu
2018-06-24  6:43               ` Thomas Gleixner
2018-05-27 15:45 ` [RFC PATCH 03/16] x86/split_lock: Set up #AC exception for split locked accesses on all CPUs Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 04/16] x86/split_lock: Use non locked bit set instruction in set_cpu_cap Fenghua Yu
2018-06-21 19:55   ` Peter Zijlstra
2018-06-21 20:37     ` Thomas Gleixner
2018-06-27 23:35     ` Fenghua Yu
2018-06-28  7:53       ` Thomas Gleixner
2018-06-28 14:23         ` Fenghua Yu
2018-06-28 14:54           ` Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 05/16] x86/split_lock: Use non atomic set and clear bit instructions in clear_cpufeature() Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 06/16] x86/split_lock: Save #AC setting for split lock in firmware in boot time and restore the setting in reboot Fenghua Yu
2018-06-21 19:58   ` Peter Zijlstra
2018-06-22 15:11     ` Alan Cox
2018-06-26  9:05       ` Peter Zijlstra
2018-06-26  9:40         ` Thomas Gleixner
2018-06-26 11:02         ` Alan Cox
2018-06-26 11:31           ` Peter Zijlstra
2018-05-27 15:45 ` [RFC PATCH 07/16] x86/split_lock: Handle suspend/hibernate and resume Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 08/16] x86/split_lock: Set split lock during EFI runtime service Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 09/16] x86/split_lock: Add CONFIG to control #AC for split lock at boot time Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 10/16] x86/split_lock: Add a debugfs interface to allow user to enable or disable #AC for split lock during run time Fenghua Yu
2018-05-29 18:43   ` Greg KH
2018-05-27 15:46 ` [RFC PATCH 11/16] x86/split_lock: Add CONFIG to control #AC for split lock from kernel at boot time Fenghua Yu
2018-05-27 15:46 ` [RFC PATCH 12/16] x86/split_lock: Add a debugfs interface to allow user to change how to handle split lock in kernel mode during run time Fenghua Yu
2018-05-27 15:46 ` [RFC PATCH 13/16] x86/split_lock: Add debugfs interface to control user mode behavior Fenghua Yu
2018-05-27 15:46 ` [RFC PATCH 14/16] x86/split_lock: Add debugfs interface to show and control firmware setting for split lock Fenghua Yu
2018-05-27 15:46 ` [RFC PATCH 15/16] x86/split_lock: Add CONFIG and debugfs interface for testing #AC for split lock in kernel mode Fenghua Yu
2018-05-27 15:46 ` [RFC PATCH 16/16] x86/split_lock: Add user space split lock test in selftest Fenghua Yu
2018-05-29 16:39 ` [RFC PATCH 00/16] x86/split_lock: Enable #AC exception for split locked accesses Dave Hansen
2018-05-29 17:25   ` Fenghua Yu
2018-05-29 17:28     ` Dave Hansen
2018-05-29 17:40       ` Fenghua Yu
2018-05-29 16:40 ` Dave Hansen
2018-05-29 17:38   ` Fenghua Yu
2018-06-21 20:06   ` Peter Zijlstra
2018-06-21 19:37 ` Peter Zijlstra
2018-06-21 20:18   ` Fenghua Yu
2018-06-21 20:32     ` Thomas Gleixner
2018-06-21 22:00       ` Fenghua Yu [this message]
2018-06-21 22:07         ` Peter Zijlstra
2018-06-21 22:08         ` Peter Zijlstra
2018-06-21 22:18           ` Dave Hansen
2018-06-21 22:42             ` Fenghua Yu
2018-06-22  8:11               ` Peter Zijlstra
2018-06-22  9:30               ` Thomas Gleixner
2018-06-21 22:10         ` Peter Zijlstra
2018-06-21 23:05           ` Fenghua Yu
2018-06-22  8:19             ` Peter Zijlstra
2018-06-21 22:11         ` Peter Zijlstra
2018-06-21 22:43           ` Fenghua Yu
2018-06-21 22:13         ` Peter Zijlstra
2018-06-23 18:47           ` Fenghua Yu
2018-06-22  9:18         ` Thomas Gleixner
2018-06-22  9:22         ` Thomas Gleixner
2018-06-22  9:25         ` Thomas Gleixner
2018-06-22  9:28         ` Thomas Gleixner
2018-06-21 20:36     ` Peter Zijlstra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180621220003.GD114883@romley-ivt3.sc.intel.com \
    --to=fenghua.yu@intel.com \
    --cc=alan@linux.intel.com \
    --cc=arjan@infradead.org \
    --cc=ashok.raj@intel.com \
    --cc=dave.hansen@intel.com \
    --cc=hpa@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=ravi.v.shankar@intel.com \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome