On Thu, Jun 27, 2019 at 1:39 AM Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx> wrote: > > Intel® Speed Select Technology (Intel® SST) — A powerful new collection of > features giving more granular control over CPU performance for optimized total > cost of ownership and performance. With Intel® SST, one server can be configured > for power and performance for variety of diverse workload requirements. In the > Linux submission code. we are using ISST to specify Intel® SST to avoid confusion > with existing use of SST for "Smart Sound Technology". > > Refer to these links for overview of the technology released with some Intel® Xeon® > Scalable processor (5218N, 6230N, and 6252N): > https://www.intel.com/content/www/us/en/architecture-and-technology/speed-select-technology-article.html > https://builders.intel.com/docs/networkbuilders/intel-speed-select-technology-base-frequency-enhancing-performance.pdf > > The next generation of Intel® Xeon® processors are adding more features to the > Intel® Speed Select Technology and allow dynamic configuration of these features > from OS-software level instead from BIOS. This submission is adding new features > and dynamic configuration capabilities . > > > Intel SST Features: > > Intel® SST—Performance Profile (PP or perf-profile): > This feature allows one server to be configured for different workload requirements > instead of deploying different servers based on the workload requirement reducing total > cost of ownership. With a single server deployed, the same server can be reconfigured > dynamically to one of the supported profiles to suit the specific workload requirements. > This feature introduces a mechanism that allows multiple optimized performance profiles > per system via static and/or dynamic adjustment of TDP level and other performance > parameters. > > Intel® SST—Core power (CP or core-power): > An Interface that allows user to define per core priority. This defines a mechanism > to distribute power among cores when there is a power constrained scenario. This defines > a class of service configuration. Each CPU core can be tied to a class of service and hence > an associated priority. > > Intel® SST—Base Frequency (BF or base-freq): > The Intel® SST-BF feature lets user control and direct base frequency. If some critical > workload threads demand constant high guaranteed performance, then this feature can be > used to execute the thread at higher base frequency on specific set of CPUs. > > Intel® SST—Turbo frequency (TF or turbo-freq): > Enables the ability to set different all core turbo ratio limits to cores based on the priority. > Using this features some cores can be configured to get higher turbo frequency by designating > them as high priority at the cost of lower or no turbo frequency on the low priority cores. > > Implementation > > The Intel® SST features are implemented in the firmware executing in the the power > management unit (we are calling PUNIT here for short). The mechanism to control these > features are specific to firmware implementation for Intel® Xeon® CPUs and are not architectural > features. The interface mechanism and semantics of the messages can change in future Xeon > CPUs. Hence there is minimal kernel implementation by offering direct communication > to PUNIT via set of IOCTLs. The actual messages which can be sent to PUNIT are specified > in the following document link: > > https://github.com/intel/CommsPowerManagement/blob/master/intel_sst_os_interface/mailbox.md > > The idea here is that user space software like cloud orchestration software based on their workload > requirement configure the system. There is a full featured "Intel Speed Select" utility > submitted to kernel power tools, which can be used to validate and exercise the features. > > Types of PUNIT interfaces > There are two types of interfaces. One using Mail box communications, which is facilitated > by a PCI device or in some Xeon® CPUs using MSRs; and other using an MMIO interface, which is > used primarily for core prioritization. For hiding details a single character device is created > to handle IOCTLs. The following block diagram shows the implementation overview. > > > User User Space tool(intel-speed-select)/Cloud Orchestration software > IOCTLs > ---------------------------------------character device------------------------------ > kernel Common driver handling IOCTLs > Mail Box drivers(PCI & MSR) PCI MMIO driver > -------------------------------------------------------------------------- > Hardware PUNIT > > > Pushed to my review and testing queue, thanks! > Srinivas Pandruvada (10): > platform/x86: ISST: Update ioctl-number.txt for Intel Speed Select > interface > platform/x86: ISST: Add common API to register and handle ioctls > platform/x86: ISST: Store per CPU information > platform/x86: ISST: Add IOCTL to Translate Linux logical CPU to PUNIT > CPU number > platform/x86: ISST: Add Intel Speed Select mmio interface > platform/x86: ISST: Add Intel Speed Select mailbox interface via PCI > platform/x86: ISST: Add Intel Speed Select mailbox interface via MSRs > platform/x86: ISST: Add Intel Speed Select PUNIT MSR interface > platform/x86: ISST: Restore state on resume > tools/power/x86: A tool to validate Intel Speed Select commands > > Documentation/ioctl/ioctl-number.txt | 1 + > drivers/platform/x86/Kconfig | 2 + > drivers/platform/x86/Makefile | 1 + > .../x86/intel_speed_select_if/Kconfig | 17 + > .../x86/intel_speed_select_if/Makefile | 10 + > .../intel_speed_select_if/isst_if_common.c | 672 +++++++ > .../intel_speed_select_if/isst_if_common.h | 69 + > .../intel_speed_select_if/isst_if_mbox_msr.c | 216 +++ > .../intel_speed_select_if/isst_if_mbox_pci.c | 214 +++ > .../x86/intel_speed_select_if/isst_if_mmio.c | 180 ++ > include/uapi/linux/isst_if.h | 172 ++ > tools/power/x86/intel_speed_select/Makefile | 31 + > tools/power/x86/intel_speed_select/isst.h | 231 +++ > .../x86/intel_speed_select/isst_config.c | 1607 +++++++++++++++++ > .../power/x86/intel_speed_select/isst_core.c | 721 ++++++++ > .../x86/intel_speed_select/isst_display.c | 479 +++++ > 16 files changed, 4623 insertions(+) > create mode 100644 drivers/platform/x86/intel_speed_select_if/Kconfig > create mode 100644 drivers/platform/x86/intel_speed_select_if/Makefile > create mode 100644 drivers/platform/x86/intel_speed_select_if/isst_if_common.c > create mode 100644 drivers/platform/x86/intel_speed_select_if/isst_if_common.h > create mode 100644 drivers/platform/x86/intel_speed_select_if/isst_if_mbox_msr.c > create mode 100644 drivers/platform/x86/intel_speed_select_if/isst_if_mbox_pci.c > create mode 100644 drivers/platform/x86/intel_speed_select_if/isst_if_mmio.c > create mode 100644 include/uapi/linux/isst_if.h > create mode 100644 tools/power/x86/intel_speed_select/Makefile > create mode 100644 tools/power/x86/intel_speed_select/isst.h > create mode 100644 tools/power/x86/intel_speed_select/isst_config.c > create mode 100644 tools/power/x86/intel_speed_select/isst_core.c > create mode 100644 tools/power/x86/intel_speed_select/isst_display.c > > -- > 2.17.2 > -- With Best Regards, Andy Shevchenko