Loading Documentation/admin-guide/kernel-parameters.txt +5 −0 Original line number Diff line number Diff line Loading @@ -374,6 +374,11 @@ selects a performance level in this range and appropriate to the current workload. amd_prefcore= [X86] disable Disable amd-pstate preferred core. amijoy.map= [HW,JOY] Amiga joystick support Map of devices attached to JOY0DAT and JOY1DAT Format: <a>,<b> Loading Documentation/admin-guide/pm/amd-pstate.rst +57 −2 Original line number Diff line number Diff line Loading @@ -300,8 +300,8 @@ platforms. The AMD P-States mechanism is the more performance and energy efficiency frequency management method on AMD processors. AMD Pstate Driver Operation Modes ================================= ``amd-pstate`` Driver Operation Modes ====================================== ``amd_pstate`` CPPC has 3 operation modes: autonomous (active) mode, non-autonomous (passive) mode and guided autonomous (guided) mode. Loading Loading @@ -353,6 +353,48 @@ is activated. In this mode, driver requests minimum and maximum performance level and the platform autonomously selects a performance level in this range and appropriate to the current workload. ``amd-pstate`` Preferred Core ================================= The core frequency is subjected to the process variation in semiconductors. Not all cores are able to reach the maximum frequency respecting the infrastructure limits. Consequently, AMD has redefined the concept of maximum frequency of a part. This means that a fraction of cores can reach maximum frequency. To find the best process scheduling policy for a given scenario, OS needs to know the core ordering informed by the platform through highest performance capability register of the CPPC interface. ``amd-pstate`` preferred core enables the scheduler to prefer scheduling on cores that can achieve a higher frequency with lower voltage. The preferred core rankings can dynamically change based on the workload, platform conditions, thermals and ageing. The priority metric will be initialized by the ``amd-pstate`` driver. The ``amd-pstate`` driver will also determine whether or not ``amd-pstate`` preferred core is supported by the platform. ``amd-pstate`` driver will provide an initial core ordering when the system boots. The platform uses the CPPC interfaces to communicate the core ranking to the operating system and scheduler to make sure that OS is choosing the cores with highest performance firstly for scheduling the process. When ``amd-pstate`` driver receives a message with the highest performance change, it will update the core ranking and set the cpu's priority. ``amd-pstate`` Preferred Core Switch ===================================== Kernel Parameters ----------------- ``amd-pstate`` peferred core`` has two states: enable and disable. Enable/disable states can be chosen by different kernel parameters. Default enable ``amd-pstate`` preferred core. ``amd_prefcore=disable`` For systems that support ``amd-pstate`` preferred core, the core rankings will always be advertised by the platform. But OS can choose to ignore that via the kernel parameter ``amd_prefcore=disable``. User Space Interface in ``sysfs`` - General =========================================== Loading Loading @@ -385,6 +427,19 @@ control its functionality at the system level. They are located in the to the operation mode represented by that string - or to be unregistered in the "disable" case. ``prefcore`` Preferred core state of the driver: "enabled" or "disabled". "enabled" Enable the ``amd-pstate`` preferred core. "disabled" Disable the ``amd-pstate`` preferred core This attribute is read-only to check the state of preferred core set by the kernel parameter. ``cpupower`` tool support for ``amd-pstate`` =============================================== Loading arch/x86/Kconfig +3 −2 Original line number Diff line number Diff line Loading @@ -1054,8 +1054,9 @@ config SCHED_MC config SCHED_MC_PRIO bool "CPU core priorities scheduler support" depends on SCHED_MC && CPU_SUP_INTEL select X86_INTEL_PSTATE depends on SCHED_MC select X86_INTEL_PSTATE if CPU_SUP_INTEL select X86_AMD_PSTATE if CPU_SUP_AMD && ACPI select CPU_FREQ default y help Loading drivers/acpi/cppc_acpi.c +13 −0 Original line number Diff line number Diff line Loading @@ -1157,6 +1157,19 @@ int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf) return cppc_get_perf(cpunum, NOMINAL_PERF, nominal_perf); } /** * cppc_get_highest_perf - Get the highest performance register value. * @cpunum: CPU from which to get highest performance. * @highest_perf: Return address. * * Return: 0 for success, -EIO otherwise. */ int cppc_get_highest_perf(int cpunum, u64 *highest_perf) { return cppc_get_perf(cpunum, HIGHEST_PERF, highest_perf); } EXPORT_SYMBOL_GPL(cppc_get_highest_perf); /** * cppc_get_epp_perf - Get the epp register value. * @cpunum: CPU from which to get epp preference value. Loading drivers/acpi/processor_driver.c +6 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #define ACPI_PROCESSOR_NOTIFY_PERFORMANCE 0x80 #define ACPI_PROCESSOR_NOTIFY_POWER 0x81 #define ACPI_PROCESSOR_NOTIFY_THROTTLING 0x82 #define ACPI_PROCESSOR_NOTIFY_HIGEST_PERF_CHANGED 0x85 MODULE_AUTHOR("Paul Diefenbaugh"); MODULE_DESCRIPTION("ACPI Processor Driver"); Loading Loading @@ -83,6 +84,11 @@ static void acpi_processor_notify(acpi_handle handle, u32 event, void *data) acpi_bus_generate_netlink_event(device->pnp.device_class, dev_name(&device->dev), event, 0); break; case ACPI_PROCESSOR_NOTIFY_HIGEST_PERF_CHANGED: cpufreq_update_limits(pr->id); acpi_bus_generate_netlink_event(device->pnp.device_class, dev_name(&device->dev), event, 0); break; default: acpi_handle_debug(handle, "Unsupported event [0x%x]\n", event); break; Loading Loading
Documentation/admin-guide/kernel-parameters.txt +5 −0 Original line number Diff line number Diff line Loading @@ -374,6 +374,11 @@ selects a performance level in this range and appropriate to the current workload. amd_prefcore= [X86] disable Disable amd-pstate preferred core. amijoy.map= [HW,JOY] Amiga joystick support Map of devices attached to JOY0DAT and JOY1DAT Format: <a>,<b> Loading
Documentation/admin-guide/pm/amd-pstate.rst +57 −2 Original line number Diff line number Diff line Loading @@ -300,8 +300,8 @@ platforms. The AMD P-States mechanism is the more performance and energy efficiency frequency management method on AMD processors. AMD Pstate Driver Operation Modes ================================= ``amd-pstate`` Driver Operation Modes ====================================== ``amd_pstate`` CPPC has 3 operation modes: autonomous (active) mode, non-autonomous (passive) mode and guided autonomous (guided) mode. Loading Loading @@ -353,6 +353,48 @@ is activated. In this mode, driver requests minimum and maximum performance level and the platform autonomously selects a performance level in this range and appropriate to the current workload. ``amd-pstate`` Preferred Core ================================= The core frequency is subjected to the process variation in semiconductors. Not all cores are able to reach the maximum frequency respecting the infrastructure limits. Consequently, AMD has redefined the concept of maximum frequency of a part. This means that a fraction of cores can reach maximum frequency. To find the best process scheduling policy for a given scenario, OS needs to know the core ordering informed by the platform through highest performance capability register of the CPPC interface. ``amd-pstate`` preferred core enables the scheduler to prefer scheduling on cores that can achieve a higher frequency with lower voltage. The preferred core rankings can dynamically change based on the workload, platform conditions, thermals and ageing. The priority metric will be initialized by the ``amd-pstate`` driver. The ``amd-pstate`` driver will also determine whether or not ``amd-pstate`` preferred core is supported by the platform. ``amd-pstate`` driver will provide an initial core ordering when the system boots. The platform uses the CPPC interfaces to communicate the core ranking to the operating system and scheduler to make sure that OS is choosing the cores with highest performance firstly for scheduling the process. When ``amd-pstate`` driver receives a message with the highest performance change, it will update the core ranking and set the cpu's priority. ``amd-pstate`` Preferred Core Switch ===================================== Kernel Parameters ----------------- ``amd-pstate`` peferred core`` has two states: enable and disable. Enable/disable states can be chosen by different kernel parameters. Default enable ``amd-pstate`` preferred core. ``amd_prefcore=disable`` For systems that support ``amd-pstate`` preferred core, the core rankings will always be advertised by the platform. But OS can choose to ignore that via the kernel parameter ``amd_prefcore=disable``. User Space Interface in ``sysfs`` - General =========================================== Loading Loading @@ -385,6 +427,19 @@ control its functionality at the system level. They are located in the to the operation mode represented by that string - or to be unregistered in the "disable" case. ``prefcore`` Preferred core state of the driver: "enabled" or "disabled". "enabled" Enable the ``amd-pstate`` preferred core. "disabled" Disable the ``amd-pstate`` preferred core This attribute is read-only to check the state of preferred core set by the kernel parameter. ``cpupower`` tool support for ``amd-pstate`` =============================================== Loading
arch/x86/Kconfig +3 −2 Original line number Diff line number Diff line Loading @@ -1054,8 +1054,9 @@ config SCHED_MC config SCHED_MC_PRIO bool "CPU core priorities scheduler support" depends on SCHED_MC && CPU_SUP_INTEL select X86_INTEL_PSTATE depends on SCHED_MC select X86_INTEL_PSTATE if CPU_SUP_INTEL select X86_AMD_PSTATE if CPU_SUP_AMD && ACPI select CPU_FREQ default y help Loading
drivers/acpi/cppc_acpi.c +13 −0 Original line number Diff line number Diff line Loading @@ -1157,6 +1157,19 @@ int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf) return cppc_get_perf(cpunum, NOMINAL_PERF, nominal_perf); } /** * cppc_get_highest_perf - Get the highest performance register value. * @cpunum: CPU from which to get highest performance. * @highest_perf: Return address. * * Return: 0 for success, -EIO otherwise. */ int cppc_get_highest_perf(int cpunum, u64 *highest_perf) { return cppc_get_perf(cpunum, HIGHEST_PERF, highest_perf); } EXPORT_SYMBOL_GPL(cppc_get_highest_perf); /** * cppc_get_epp_perf - Get the epp register value. * @cpunum: CPU from which to get epp preference value. Loading
drivers/acpi/processor_driver.c +6 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #define ACPI_PROCESSOR_NOTIFY_PERFORMANCE 0x80 #define ACPI_PROCESSOR_NOTIFY_POWER 0x81 #define ACPI_PROCESSOR_NOTIFY_THROTTLING 0x82 #define ACPI_PROCESSOR_NOTIFY_HIGEST_PERF_CHANGED 0x85 MODULE_AUTHOR("Paul Diefenbaugh"); MODULE_DESCRIPTION("ACPI Processor Driver"); Loading Loading @@ -83,6 +84,11 @@ static void acpi_processor_notify(acpi_handle handle, u32 event, void *data) acpi_bus_generate_netlink_event(device->pnp.device_class, dev_name(&device->dev), event, 0); break; case ACPI_PROCESSOR_NOTIFY_HIGEST_PERF_CHANGED: cpufreq_update_limits(pr->id); acpi_bus_generate_netlink_event(device->pnp.device_class, dev_name(&device->dev), event, 0); break; default: acpi_handle_debug(handle, "Unsupported event [0x%x]\n", event); break; Loading