lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Fri, 20 Apr 2018 13:04:38 +0000
From:   "Liang, Kan" <kan.liang@...el.com>
To:     "peterz@...radead.org" <peterz@...radead.org>,
        "tglx@...utronix.de" <tglx@...utronix.de>,
        "mingo@...hat.com" <mingo@...hat.com>,
        "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
CC:     "acme@...nel.org" <acme@...nel.org>,
        "eranian@...gle.com" <eranian@...gle.com>,
        "ak@...ux.intel.com" <ak@...ux.intel.com>
Subject: RE: [PATCH V7 6/8] perf/x86/intel/uncore: Support IIO free running
 counters on SKX

> 
> From: Kan Liang <kan.liang@...el.com>
> 
> As of Skylake Server, there are a number of free-running counters in
> each IIO Box that collect counts for per box IO clocks and per Port
> Input/Output x BW/Utilization.
> Add a new PMU for these free-running counters. Don't let them share with
> the GP counters of IIO box. Otherwise, it will result in some (probably)
> unexpected scheduling artifacts.
> 
> The free running counter is read-only and always active. Counting will
> be suspended only when the IIO Box is powered down.
> 
> There are three types of IIO free running counters on Skylake server, IO
> CLOCKS counter, BANDWIDTH counters and UTILIZATION counters.
> IO CLOCKS counter is to count IO clocks.
> BANDWIDTH counters are to count inbound(PCIe->CPU)/outbound(CPU-
> >PCIe)
> bandwidth.
> UTILIZATION counters are to count input/output utilization.
> 
> The bit width of the free running counters is 36-bits.
> 
> Signed-off-by: Kan Liang <kan.liang@...el.com>
> ---
> 
> Changes since V6:
>  - Add a new PMU for IIO free-running counters.
> 

Hi Peter,

Could you please review the patch?
If it's OK for you, could you please merge the patch set?

Thanks,
Kan

>  arch/x86/events/intel/uncore_snbep.c | 82
> ++++++++++++++++++++++++++++++++++++
>  1 file changed, 82 insertions(+)
> 
> diff --git a/arch/x86/events/intel/uncore_snbep.c
> b/arch/x86/events/intel/uncore_snbep.c
> index 22ec65b..d6b302e 100644
> --- a/arch/x86/events/intel/uncore_snbep.c
> +++ b/arch/x86/events/intel/uncore_snbep.c
> @@ -3484,6 +3484,87 @@ static struct intel_uncore_type skx_uncore_iio = {
>  	.format_group		= &skx_uncore_iio_format_group,
>  };
> 
> +enum perf_uncore_iio_freerunning_type_id {
> +	SKX_IIO_MSR_IOCLK			= 0,
> +	SKX_IIO_MSR_BW				= 1,
> +	SKX_IIO_MSR_UTIL			= 2,
> +
> +	SKX_IIO_FREERUNNING_TYPE_MAX,
> +};
> +
> +
> +static struct freerunning_counters skx_iio_freerunning[] = {
> +	[SKX_IIO_MSR_IOCLK]	= { 0xa45, 0x1, 0x20, 1, 36 },
> +	[SKX_IIO_MSR_BW]	= { 0xb00, 0x1, 0x10, 8, 36 },
> +	[SKX_IIO_MSR_UTIL]	= { 0xb08, 0x1, 0x10, 8, 36 },
> +};
> +
> +static struct uncore_event_desc skx_uncore_iio_freerunning_events[] = {
> +	/* Free-Running IO CLOCKS Counter */
> +	INTEL_UNCORE_EVENT_DESC(ioclk,
> 	"event=0xff,umask=0x10"),
> +	/* Free-Running IIO BANDWIDTH Counters */
> +	INTEL_UNCORE_EVENT_DESC(bw_in_port0,
> 	"event=0xff,umask=0x20"),
> +	INTEL_UNCORE_EVENT_DESC(bw_in_port0.scale,
> 	"3.814697266e-6"),
> +	INTEL_UNCORE_EVENT_DESC(bw_in_port0.unit,	"MiB"),
> +	INTEL_UNCORE_EVENT_DESC(bw_in_port1,
> 	"event=0xff,umask=0x21"),
> +	INTEL_UNCORE_EVENT_DESC(bw_in_port1.scale,
> 	"3.814697266e-6"),
> +	INTEL_UNCORE_EVENT_DESC(bw_in_port1.unit,	"MiB"),
> +	INTEL_UNCORE_EVENT_DESC(bw_in_port2,
> 	"event=0xff,umask=0x22"),
> +	INTEL_UNCORE_EVENT_DESC(bw_in_port2.scale,
> 	"3.814697266e-6"),
> +	INTEL_UNCORE_EVENT_DESC(bw_in_port2.unit,	"MiB"),
> +	INTEL_UNCORE_EVENT_DESC(bw_in_port3,
> 	"event=0xff,umask=0x23"),
> +	INTEL_UNCORE_EVENT_DESC(bw_in_port3.scale,
> 	"3.814697266e-6"),
> +	INTEL_UNCORE_EVENT_DESC(bw_in_port3.unit,	"MiB"),
> +	INTEL_UNCORE_EVENT_DESC(bw_out_port0,
> 	"event=0xff,umask=0x24"),
> +	INTEL_UNCORE_EVENT_DESC(bw_out_port0.scale,
> 	"3.814697266e-6"),
> +	INTEL_UNCORE_EVENT_DESC(bw_out_port0.unit,	"MiB"),
> +	INTEL_UNCORE_EVENT_DESC(bw_out_port1,
> 	"event=0xff,umask=0x25"),
> +	INTEL_UNCORE_EVENT_DESC(bw_out_port1.scale,
> 	"3.814697266e-6"),
> +	INTEL_UNCORE_EVENT_DESC(bw_out_port1.unit,	"MiB"),
> +	INTEL_UNCORE_EVENT_DESC(bw_out_port2,
> 	"event=0xff,umask=0x26"),
> +	INTEL_UNCORE_EVENT_DESC(bw_out_port2.scale,
> 	"3.814697266e-6"),
> +	INTEL_UNCORE_EVENT_DESC(bw_out_port2.unit,	"MiB"),
> +	INTEL_UNCORE_EVENT_DESC(bw_out_port3,
> 	"event=0xff,umask=0x27"),
> +	INTEL_UNCORE_EVENT_DESC(bw_out_port3.scale,
> 	"3.814697266e-6"),
> +	INTEL_UNCORE_EVENT_DESC(bw_out_port3.unit,	"MiB"),
> +	/* Free-running IIO UTILIZATION Counters */
> +	INTEL_UNCORE_EVENT_DESC(util_in_port0,
> 	"event=0xff,umask=0x30"),
> +	INTEL_UNCORE_EVENT_DESC(util_out_port0,
> 	"event=0xff,umask=0x31"),
> +	INTEL_UNCORE_EVENT_DESC(util_in_port1,
> 	"event=0xff,umask=0x32"),
> +	INTEL_UNCORE_EVENT_DESC(util_out_port1,
> 	"event=0xff,umask=0x33"),
> +	INTEL_UNCORE_EVENT_DESC(util_in_port2,
> 	"event=0xff,umask=0x34"),
> +	INTEL_UNCORE_EVENT_DESC(util_out_port2,
> 	"event=0xff,umask=0x35"),
> +	INTEL_UNCORE_EVENT_DESC(util_in_port3,
> 	"event=0xff,umask=0x36"),
> +	INTEL_UNCORE_EVENT_DESC(util_out_port3,
> 	"event=0xff,umask=0x37"),
> +	{ /* end: all zeroes */ },
> +};
> +
> +static struct intel_uncore_ops skx_uncore_iio_freerunning_ops = {
> +	.read_counter		= uncore_msr_read_counter,
> +};
> +
> +static struct attribute *skx_uncore_iio_freerunning_formats_attr[] = {
> +	&format_attr_event.attr,
> +	&format_attr_umask.attr,
> +	NULL,
> +};
> +
> +static const struct attribute_group
> skx_uncore_iio_freerunning_format_group = {
> +	.name = "format",
> +	.attrs = skx_uncore_iio_freerunning_formats_attr,
> +};
> +
> +static struct intel_uncore_type skx_uncore_iio_free_running = {
> +	.name			= "iio_free_running",
> +	.num_counters		= 17,
> +	.num_boxes		= 6,
> +	.num_freerunning_types	= SKX_IIO_FREERUNNING_TYPE_MAX,
> +	.freerunning		= skx_iio_freerunning,
> +	.ops			= &skx_uncore_iio_freerunning_ops,
> +	.event_descs		= skx_uncore_iio_freerunning_events,
> +	.format_group		=
> &skx_uncore_iio_freerunning_format_group,
> +};
> +
>  static struct attribute *skx_uncore_formats_attr[] = {
>  	&format_attr_event.attr,
>  	&format_attr_umask.attr,
> @@ -3557,6 +3638,7 @@ static struct intel_uncore_type *skx_msr_uncores[]
> = {
>  	&skx_uncore_ubox,
>  	&skx_uncore_chabox,
>  	&skx_uncore_iio,
> +	&skx_uncore_iio_free_running,
>  	&skx_uncore_irp,
>  	&skx_uncore_pcu,
>  	NULL,
> --
> 2.7.4

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ