msphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget-/translations/zh_CN/admin-guide/pm/amd-pstatemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/zh_TW/admin-guide/pm/amd-pstatemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/it_IT/admin-guide/pm/amd-pstatemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ja_JP/admin-guide/pm/amd-pstatemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ko_KR/admin-guide/pm/amd-pstatemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/pt_BR/admin-guide/pm/amd-pstatemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/sp_SP/admin-guide/pm/amd-pstatemodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhG/var/lib/git/docbuild/linux/Documentation/admin-guide/pm/amd-pstate.rsthKubh)}(h4This data file has been placed in the public domain.h]h4This data file has been placed in the public domain.}hhsbah}(h]h ]h"]h$]h&]hhuh1hhhhhho/srv/docbuild/lib/venvs/build-kernel-docs/lib64/python3.9/site-packages/docutils/parsers/rst/include/isonum.txthKubh)}(hDerived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .h]hDerived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .}hhsbah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhKubhsubstitution_definition)}(h*.. |amp| unicode:: U+00026 .. AMPERSANDh]h&}hhsbah}(h]h ]h"]ampah$]h&]uh1hhhhKhhhhubh)}(h+.. |apos| unicode:: U+00027 .. APOSTROPHEh]h'}hhsbah}(h]h ]h"]aposah$]h&]uh1hhhhKhhhhubh)}(h).. |ast| unicode:: U+0002A .. ASTERISKh]h*}hjsbah}(h]h ]h"]astah$]h&]uh1hhhhK hhhhubh)}(h+.. |brvbar| unicode:: U+000A6 .. BROKEN BARh]h¦}hjsbah}(h]h ]h"]brvbarah$]h&]uh1hhhhK hhhhubh)}(h0.. |bsol| unicode:: U+0005C .. REVERSE SOLIDUSh]h\}hj#sbah}(h]h ]h"]bsolah$]h&]uh1hhhhK hhhhubh)}(h*.. |cent| unicode:: U+000A2 .. CENT SIGNh]h¢}hj2sbah}(h]h ]h"]centah$]h&]uh1hhhhK hhhhubh)}(h&.. |colon| unicode:: U+0003A .. COLONh]h:}hjAsbah}(h]h ]h"]colonah$]h&]uh1hhhhK hhhhubh)}(h&.. |comma| unicode:: U+0002C .. COMMAh]h,}hjPsbah}(h]h ]h"]commaah$]h&]uh1hhhhKhhhhubh)}(h... |commat| unicode:: U+00040 .. COMMERCIAL ATh]h@}hj_sbah}(h]h ]h"]commatah$]h&]uh1hhhhKhhhhubh)}(h/.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGNh]h©}hjnsbah}(h]h ]h"]copyah$]h&]uh1hhhhKhhhhubh)}(h... |curren| unicode:: U+000A4 .. CURRENCY SIGNh]h¤}hj}sbah}(h]h ]h"]currenah$]h&]uh1hhhhKhhhhubh)}(h0.. |darr| unicode:: U+02193 .. DOWNWARDS ARROWh]h↓}hjsbah}(h]h ]h"]darrah$]h&]uh1hhhhKhhhhubh)}(h,.. |deg| unicode:: U+000B0 .. DEGREE SIGNh]h°}hjsbah}(h]h ]h"]degah$]h&]uh1hhhhKhhhhubh)}(h... |divide| unicode:: U+000F7 .. DIVISION SIGNh]h÷}hjsbah}(h]h ]h"]divideah$]h&]uh1hhhhKhhhhubh)}(h,.. |dollar| unicode:: U+00024 .. DOLLAR SIGNh]h$}hjsbah}(h]h ]h"]dollarah$]h&]uh1hhhhKhhhhubh)}(h,.. |equals| unicode:: U+0003D .. EQUALS SIGNh]h=}hjsbah}(h]h ]h"]equalsah$]h&]uh1hhhhKhhhhubh)}(h1.. |excl| unicode:: U+00021 .. EXCLAMATION MARKh]h!}hjsbah}(h]h ]h"]exclah$]h&]uh1hhhhKhhhhubh)}(h9.. |frac12| unicode:: U+000BD .. VULGAR FRACTION ONE HALFh]h½}hjsbah}(h]h ]h"]frac12ah$]h&]uh1hhhhKhhhhubh)}(h<.. |frac14| unicode:: U+000BC .. VULGAR FRACTION ONE QUARTERh]h¼}hjsbah}(h]h ]h"]frac14ah$]h&]uh1hhhhKhhhhubh)}(h;.. |frac18| unicode:: U+0215B .. VULGAR FRACTION ONE EIGHTHh]h⅛}hjsbah}(h]h ]h"]frac18ah$]h&]uh1hhhhKhhhhubh)}(h?.. |frac34| unicode:: U+000BE .. VULGAR FRACTION THREE QUARTERSh]h¾}hjsbah}(h]h ]h"]frac34ah$]h&]uh1hhhhKhhhhubh)}(h>.. |frac38| unicode:: U+0215C .. VULGAR FRACTION THREE EIGHTHSh]h⅜}hj"sbah}(h]h ]h"]frac38ah$]h&]uh1hhhhKhhhhubh)}(h=.. |frac58| unicode:: U+0215D .. VULGAR FRACTION FIVE EIGHTHSh]h⅝}hj1sbah}(h]h ]h"]frac58ah$]h&]uh1hhhhKhhhhubh)}(h>.. |frac78| unicode:: U+0215E .. VULGAR FRACTION SEVEN EIGHTHSh]h⅞}hj@sbah}(h]h ]h"]frac78ah$]h&]uh1hhhhKhhhhubh)}(h2.. |gt| unicode:: U+0003E .. GREATER-THAN SIGNh]h>}hjOsbah}(h]h ]h"]gtah$]h&]uh1hhhhKhhhhubh)}(h9.. |half| unicode:: U+000BD .. VULGAR FRACTION ONE HALFh]h½}hj^sbah}(h]h ]h"]halfah$]h&]uh1hhhhK hhhhubh)}(h/.. |horbar| unicode:: U+02015 .. HORIZONTAL BARh]h―}hjmsbah}(h]h ]h"]horbarah$]h&]uh1hhhhK!hhhhubh)}(h'.. |hyphen| unicode:: U+02010 .. HYPHENh]h‐}hj|sbah}(h]h ]h"]hyphenah$]h&]uh1hhhhK"hhhhubh)}(h:.. |iexcl| unicode:: U+000A1 .. INVERTED EXCLAMATION MARKh]h¡}hjsbah}(h]h ]h"]iexclah$]h&]uh1hhhhK#hhhhubh)}(h7.. |iquest| unicode:: U+000BF .. INVERTED QUESTION MARKh]h¿}hjsbah}(h]h ]h"]iquestah$]h&]uh1hhhhK$hhhhubh)}(hJ.. |laquo| unicode:: U+000AB .. LEFT-POINTING DOUBLE ANGLE QUOTATION MARKh]h«}hjsbah}(h]h ]h"]laquoah$]h&]uh1hhhhK%hhhhubh)}(h0.. |larr| unicode:: U+02190 .. LEFTWARDS ARROWh]h←}hjsbah}(h]h ]h"]larrah$]h&]uh1hhhhK&hhhhubh)}(h3.. |lcub| unicode:: U+0007B .. LEFT CURLY BRACKETh]h{}hjsbah}(h]h ]h"]lcubah$]h&]uh1hhhhK'hhhhubh)}(h;.. |ldquo| unicode:: U+0201C .. LEFT DOUBLE QUOTATION MARKh]h“}hjsbah}(h]h ]h"]ldquoah$]h&]uh1hhhhK(hhhhubh)}(h).. |lowbar| unicode:: U+0005F .. LOW LINEh]h_}hjsbah}(h]h ]h"]lowbarah$]h&]uh1hhhhK)hhhhubh)}(h1.. |lpar| unicode:: U+00028 .. LEFT PARENTHESISh]h(}hjsbah}(h]h ]h"]lparah$]h&]uh1hhhhK*hhhhubh)}(h4.. |lsqb| unicode:: U+0005B .. LEFT SQUARE BRACKETh]h[}hjsbah}(h]h ]h"]lsqbah$]h&]uh1hhhhK+hhhhubh)}(h;.. |lsquo| unicode:: U+02018 .. LEFT SINGLE QUOTATION MARKh]h‘}hjsbah}(h]h ]h"]lsquoah$]h&]uh1hhhhK,hhhhubh)}(h/.. |lt| unicode:: U+0003C .. LESS-THAN SIGNh]h<}hj!sbah}(h]h ]h"]ltah$]h&]uh1hhhhK-hhhhubh)}(h+.. |micro| unicode:: U+000B5 .. MICRO SIGNh]hµ}hj0sbah}(h]h ]h"]microah$]h&]uh1hhhhK.hhhhubh)}(h+.. |middot| unicode:: U+000B7 .. MIDDLE DOTh]h·}hj?sbah}(h]h ]h"]middotah$]h&]uh1hhhhK/hhhhubh)}(h/.. |nbsp| unicode:: U+000A0 .. NO-BREAK SPACEh]h }hjNsbah}(h]h ]h"]nbspah$]h&]uh1hhhhK0hhhhubh)}(h).. |not| unicode:: U+000AC .. NOT SIGNh]h¬}hj]sbah}(h]h ]h"]notah$]h&]uh1hhhhK1hhhhubh)}(h,.. |num| unicode:: U+00023 .. NUMBER SIGNh]h#}hjlsbah}(h]h ]h"]numah$]h&]uh1hhhhK2hhhhubh)}(h).. |ohm| unicode:: U+02126 .. OHM SIGNh]hΩ}hj{sbah}(h]h ]h"]ohmah$]h&]uh1hhhhK3hhhhubh)}(h;.. |ordf| unicode:: U+000AA .. FEMININE ORDINAL INDICATORh]hª}hjsbah}(h]h ]h"]ordfah$]h&]uh1hhhhK4hhhhubh)}(h<.. |ordm| unicode:: U+000BA .. MASCULINE ORDINAL INDICATORh]hº}hjsbah}(h]h ]h"]ordmah$]h&]uh1hhhhK5hhhhubh)}(h-.. |para| unicode:: U+000B6 .. PILCROW SIGNh]h¶}hjsbah}(h]h ]h"]paraah$]h&]uh1hhhhK6hhhhubh)}(h-.. |percnt| unicode:: U+00025 .. PERCENT SIGNh]h%}hjsbah}(h]h ]h"]percntah$]h&]uh1hhhhK7hhhhubh)}(h*.. |period| unicode:: U+0002E .. FULL STOPh]h.}hjsbah}(h]h ]h"]periodah$]h&]uh1hhhhK8hhhhubh)}(h*.. |plus| unicode:: U+0002B .. PLUS SIGNh]h+}hjsbah}(h]h ]h"]plusah$]h&]uh1hhhhK9hhhhubh)}(h0.. |plusmn| unicode:: U+000B1 .. PLUS-MINUS SIGNh]h±}hjsbah}(h]h ]h"]plusmnah$]h&]uh1hhhhK:hhhhubh)}(h+.. |pound| unicode:: U+000A3 .. POUND SIGNh]h£}hjsbah}(h]h ]h"]poundah$]h&]uh1hhhhK;hhhhubh)}(h... |quest| unicode:: U+0003F .. QUESTION MARKh]h?}hjsbah}(h]h ]h"]questah$]h&]uh1hhhhKhhhhubh)}(h1.. |rarr| unicode:: U+02192 .. RIGHTWARDS ARROWh]h→}hj/sbah}(h]h ]h"]rarrah$]h&]uh1hhhhK?hhhhubh)}(h4.. |rcub| unicode:: U+0007D .. RIGHT CURLY BRACKETh]h}}hj>sbah}(h]h ]h"]rcubah$]h&]uh1hhhhK@hhhhubh)}(h<.. |rdquo| unicode:: U+0201D .. RIGHT DOUBLE QUOTATION MARKh]h”}hjMsbah}(h]h ]h"]rdquoah$]h&]uh1hhhhKAhhhhubh)}(h0.. |reg| unicode:: U+000AE .. REGISTERED SIGNh]h®}hj\sbah}(h]h ]h"]regah$]h&]uh1hhhhKBhhhhubh)}(h2.. |rpar| unicode:: U+00029 .. RIGHT PARENTHESISh]h)}hjksbah}(h]h ]h"]rparah$]h&]uh1hhhhKChhhhubh)}(h5.. |rsqb| unicode:: U+0005D .. RIGHT SQUARE BRACKETh]h]}hjzsbah}(h]h ]h"]rsqbah$]h&]uh1hhhhKDhhhhubh)}(h<.. |rsquo| unicode:: U+02019 .. RIGHT SINGLE QUOTATION MARKh]h’}hjsbah}(h]h ]h"]rsquoah$]h&]uh1hhhhKEhhhhubh)}(h-.. |sect| unicode:: U+000A7 .. SECTION SIGNh]h§}hjsbah}(h]h ]h"]sectah$]h&]uh1hhhhKFhhhhubh)}(h*.. |semi| unicode:: U+0003B .. SEMICOLONh]h;}hjsbah}(h]h ]h"]semiah$]h&]uh1hhhhKGhhhhubh)}(h,.. |shy| unicode:: U+000AD .. SOFT HYPHENh]h­}hjsbah}(h]h ]h"]shyah$]h&]uh1hhhhKHhhhhubh)}(h(.. |sol| unicode:: U+0002F .. SOLIDUSh]h/}hjsbah}(h]h ]h"]solah$]h&]uh1hhhhKIhhhhubh)}(h,.. |sung| unicode:: U+0266A .. EIGHTH NOTEh]h♪}hjsbah}(h]h ]h"]sungah$]h&]uh1hhhhKJhhhhubh)}(h0.. |sup1| unicode:: U+000B9 .. SUPERSCRIPT ONEh]h¹}hjsbah}(h]h ]h"]sup1ah$]h&]uh1hhhhKKhhhhubh)}(h0.. |sup2| unicode:: U+000B2 .. SUPERSCRIPT TWOh]h²}hjsbah}(h]h ]h"]sup2ah$]h&]uh1hhhhKLhhhhubh)}(h2.. |sup3| unicode:: U+000B3 .. SUPERSCRIPT THREEh]h³}hjsbah}(h]h ]h"]sup3ah$]h&]uh1hhhhKMhhhhubh)}(h4.. |times| unicode:: U+000D7 .. MULTIPLICATION SIGNh]h×}hjsbah}(h]h ]h"]timesah$]h&]uh1hhhhKNhhhhubh)}(h0.. |trade| unicode:: U+02122 .. TRADE MARK SIGNh]h™}hjsbah}(h]h ]h"]tradeah$]h&]uh1hhhhKOhhhhubh)}(h... |uarr| unicode:: U+02191 .. UPWARDS ARROWh]h↑}hj.sbah}(h]h ]h"]uarrah$]h&]uh1hhhhKPhhhhubh)}(h... |verbar| unicode:: U+0007C .. VERTICAL LINEh]h|}hj=sbah}(h]h ]h"]verbarah$]h&]uh1hhhhKQhhhhubh)}(h*.. |yen| unicode:: U+000A5 .. YEN SIGN h]h¥}hjLsbah}(h]h ]h"]yenah$]h&]uh1hhhhKRhhhhubhsection)}(hhh](htitle)}(h-``amd-pstate`` CPU Performance Scaling Driverh](hliteral)}(h``amd-pstate``h]h amd-pstate}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjbubh CPU Performance Scaling Driver}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hj]hhhhhKubh field_list)}(hhh](hfield)}(hhh](h field_name)}(h Copyrighth]h Copyright}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhKubh field_body)}(h)|copy| 2021 Advanced Micro Devices, Inc. h]h paragraph)}(h(|copy| 2021 Advanced Micro Devices, Inc.h](h©}(hjhhhNhNubh" 2021 Advanced Micro Devices, Inc.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hhh](j)}(hAuthorh]hAuthor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhKubj)}(hHuang Rui h]j)}(hHuang Rui h](h Huang Rui <}(hjhhhNhNubh reference)}(hray.huang@amd.comh]hray.huang@amd.com}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:ray.huang@amd.comuh1jhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK hjhhubeh}(h]h ]h"]h$]h&]uh1jhj]hhhhhKubj\)}(hhh](ja)}(h Introductionh]h Introduction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj hhhhhKubj)}(hXr``amd-pstate`` is the AMD CPU performance scaling driver that introduces a new CPU frequency control mechanism on modern AMD APU and CPU series in Linux kernel. The new mechanism is based on Collaborative Processor Performance Control (CPPC) which provides finer grain frequency management than legacy ACPI hardware P-States. Current AMD CPU/APU platforms are using the ACPI P-states driver to manage CPU frequency and clocks with switching only in 3 P-states. CPPC replaces the ACPI P-states controls and allows a flexible, low-latency interface for the Linux kernel to directly communicate the performance hints to hardware.h](jg)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubhXd is the AMD CPU performance scaling driver that introduces a new CPU frequency control mechanism on modern AMD APU and CPU series in Linux kernel. The new mechanism is based on Collaborative Processor Performance Control (CPPC) which provides finer grain frequency management than legacy ACPI hardware P-States. Current AMD CPU/APU platforms are using the ACPI P-states driver to manage CPU frequency and clocks with switching only in 3 P-states. CPPC replaces the ACPI P-states controls and allows a flexible, low-latency interface for the Linux kernel to directly communicate the performance hints to hardware.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj hhubj)}(hX:``amd-pstate`` leverages the Linux kernel governors such as ``schedutil``, ``ondemand``, etc. to manage the performance hints which are provided by CPPC hardware functionality that internally follows the hardware specification (for details refer to AMD64 Architecture Programmer's Manual Volume 2: System Programming [1]_). Currently, ``amd-pstate`` supports basic frequency control function according to kernel governors on some of the Zen2 and Zen3 processors, and we will implement more AMD specific functions in future after we verify them on the hardware and SBIOS.h](jg)}(h``amd-pstate``h]h amd-pstate}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj8ubh. leverages the Linux kernel governors such as }(hj8hhhNhNubjg)}(h ``schedutil``h]h schedutil}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj8ubh, }(hj8hhhNhNubjg)}(h ``ondemand``h]hondemand}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj8ubh, etc. to manage the performance hints which are provided by CPPC hardware functionality that internally follows the hardware specification (for details refer to AMD64 Architecture Programmer’s Manual Volume 2: System Programming }(hj8hhhNhNubhfootnote_reference)}(h[1]_h]h1}(hjthhhNhNubah}(h]id1ah ]h"]h$]h&]refidid6docnameadmin-guide/pm/amd-pstateuh1jrhj8resolvedKubh). Currently, }(hj8hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj8ubh supports basic frequency control function according to kernel governors on some of the Zen2 and Zen3 processors, and we will implement more AMD specific functions in future after we verify them on the hardware and SBIOS.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj hhubeh}(h] introductionah ]h"] introductionah$]h&]uh1j[hj]hhhhhKubj\)}(hhh](ja)}(hAMD CPPC Overviewh]hAMD CPPC Overview}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhK%ubj)}(hXvCollaborative Processor Performance Control (CPPC) interface enumerates a continuous, abstract, and unit-less performance value in a scale that is not tied to a specific performance state / frequency. This is an ACPI standard [2]_ which software can specify application performance goals and hints as a relative target to the infrastructure limits. AMD processors provide the low latency register model (MSR) instead of an AML code interpreter for performance adjustments. ``amd-pstate`` will initialize a ``struct cpufreq_driver`` instance, ``amd_pstate_driver``, with the callbacks to manage each performance update behavior. ::h](hCollaborative Processor Performance Control (CPPC) interface enumerates a continuous, abstract, and unit-less performance value in a scale that is not tied to a specific performance state / frequency. This is an ACPI standard }(hjhhhNhNubjs)}(h[2]_h]h2}(hjhhhNhNubah}(h]id2ah ]h"]h$]h&]jid7jjuh1jrhjjKubh which software can specify application performance goals and hints as a relative target to the infrastructure limits. AMD processors provide the low latency register model (MSR) instead of an AML code interpreter for performance adjustments. }(hjhhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh will initialize a }(hjhhhNhNubjg)}(h``struct cpufreq_driver``h]hstruct cpufreq_driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh instance, }(hjhhhNhNubjg)}(h``amd_pstate_driver``h]hamd_pstate_driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh@, with the callbacks to manage each performance update behavior.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK'hjhhubh literal_block)}(hX Highest Perf ------>+-----------------------+ +-----------------------+ | | | | | | | | | | Max Perf ---->| | | | | | | | | | Nominal Perf ------>+-----------------------+ +-----------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | Desired Perf ---->| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Lowest non- | | | | linear perf ------>+-----------------------+ +-----------------------+ | | | | | | Min perf ---->| | | | | | Lowest perf ------>+-----------------------+ +-----------------------+ | | | | | | | | | | | | 0 ------>+-----------------------+ +-----------------------+ AMD P-States Performance Scaleh]hX Highest Perf ------>+-----------------------+ +-----------------------+ | | | | | | | | | | Max Perf ---->| | | | | | | | | | Nominal Perf ------>+-----------------------+ +-----------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | Desired Perf ---->| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Lowest non- | | | | linear perf ------>+-----------------------+ +-----------------------+ | | | | | | Min perf ---->| | | | | | Lowest perf ------>+-----------------------+ +-----------------------+ | | | | | | | | | | | | 0 ------>+-----------------------+ +-----------------------+ AMD P-States Performance Scale}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK1hjhhubhtarget)}(h .. _perf_cap:h]h}(h]h ]h"]h$]h&]jperf-capuh1j%hKhjhhhhnj referencedKubj\)}(hhh](ja)}(hAMD CPPC Performance Capabilityh]hAMD CPPC Performance Capability}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj3hhhhhKYubj\)}(hhh](ja)}(hHighest Performance (RO)h]hHighest Performance (RO)}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjDhhhhhK\ubj)}(hXThis is the absolute maximum performance an individual processor may reach, assuming ideal conditions. This performance level may not be sustainable for long durations and may only be achievable if other platform components are in a specific state; for example, it may require other processors to be in an idle state. This would be equivalent to the highest frequencies supported by the processor.h]hXThis is the absolute maximum performance an individual processor may reach, assuming ideal conditions. This performance level may not be sustainable for long durations and may only be achievable if other platform components are in a specific state; for example, it may require other processors to be in an idle state. This would be equivalent to the highest frequencies supported by the processor.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK^hjDhhubeh}(h]highest-performance-roah ]h"]highest performance (ro)ah$]h&]uh1j[hj3hhhhhK\ubj\)}(hhh](ja)}(h%Nominal (Guaranteed) Performance (RO)h]h%Nominal (Guaranteed) Performance (RO)}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjkhhhhhKfubj)}(hXlThis is the maximum sustained performance level of the processor, assuming ideal operating conditions. In the absence of an external constraint (power, thermal, etc.), this is the performance level the processor is expected to be able to maintain continuously. All cores/processors are expected to be able to sustain their nominal performance state simultaneously.h]hXlThis is the maximum sustained performance level of the processor, assuming ideal operating conditions. In the absence of an external constraint (power, thermal, etc.), this is the performance level the processor is expected to be able to maintain continuously. All cores/processors are expected to be able to sustain their nominal performance state simultaneously.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhhjkhhubeh}(h]!nominal-guaranteed-performance-roah ]h"]%nominal (guaranteed) performance (ro)ah$]h&]uh1j[hj3hhhhhKfubj\)}(hhh](ja)}(h"Lowest non-linear Performance (RO)h]h"Lowest non-linear Performance (RO)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhKoubj)}(hXqThis is the lowest performance level at which nonlinear power savings are achieved, for example, due to the combined effects of voltage and frequency scaling. Above this threshold, lower performance levels should be generally more energy efficient than higher performance levels. This register effectively conveys the most efficient performance level to ``amd-pstate``.h](hXbThis is the lowest performance level at which nonlinear power savings are achieved, for example, due to the combined effects of voltage and frequency scaling. Above this threshold, lower performance levels should be generally more energy efficient than higher performance levels. This register effectively conveys the most efficient performance level to }(hjhhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKqhjhhubeh}(h] lowest-non-linear-performance-roah ]h"]"lowest non-linear performance (ro)ah$]h&]uh1j[hj3hhhhhKoubj\)}(hhh](ja)}(hLowest Performance (RO)h]hLowest Performance (RO)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhKxubj)}(hThis is the absolute lowest performance level of the processor. Selecting a performance level lower than the lowest nonlinear performance level may cause an efficiency penalty but should reduce the instantaneous power consumption of the processor.h]hThis is the absolute lowest performance level of the processor. Selecting a performance level lower than the lowest nonlinear performance level may cause an efficiency penalty but should reduce the instantaneous power consumption of the processor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKzhjhhubeh}(h]lowest-performance-roah ]h"]lowest performance (ro)ah$]h&]uh1j[hj3hhhhhKxubeh}(h](amd-cppc-performance-capabilityj1eh ]h"](amd cppc performance capabilityperf_capeh$]h&]uh1j[hjhhhhhKYexpect_referenced_by_name}jj'sexpect_referenced_by_id}j1j'sj2Kubj\)}(hhh](ja)}(hAMD CPPC Performance Controlh]hAMD CPPC Performance Control}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhKubj)}(h``amd-pstate`` passes performance goals through these registers. The register drives the behavior of the desired performance target.h](jg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubhv passes performance goals through these registers. The register drives the behavior of the desired performance target.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj\)}(hhh](ja)}(h"Minimum requested performance (RW)h]h"Minimum requested performance (RW)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj,hhhhhKubj)}(h?``amd-pstate`` specifies the minimum allowed performance level.h](jg)}(h``amd-pstate``h]h amd-pstate}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj=ubh1 specifies the minimum allowed performance level.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj,hhubeh}(h] minimum-requested-performance-rwah ]h"]"minimum requested performance (rw)ah$]h&]uh1j[hjhhhhhKubj\)}(hhh](ja)}(h"Maximum requested performance (RW)h]h"Maximum requested performance (RW)}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjahhhhhKubj)}(hi``amd-pstate`` specifies a limit the maximum performance that is expected to be supplied by the hardware.h](jg)}(h``amd-pstate``h]h amd-pstate}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjrubh[ specifies a limit the maximum performance that is expected to be supplied by the hardware.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjahhubeh}(h] maximum-requested-performance-rwah ]h"]"maximum requested performance (rw)ah$]h&]uh1j[hjhhhhhKubj\)}(hhh](ja)}(hDesired performance target (RW)h]hDesired performance target (RW)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhKubj)}(hX``amd-pstate`` specifies a desired target in the CPPC performance scale as a relative number. This can be expressed as percentage of nominal performance (infrastructure max). Below the nominal sustained performance level, desired performance expresses the average performance level of the processor subject to hardware. Above the nominal performance level, the processor must provide at least nominal performance requested and go higher if current operating conditions allow.h](jg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubhX specifies a desired target in the CPPC performance scale as a relative number. This can be expressed as percentage of nominal performance (infrastructure max). Below the nominal sustained performance level, desired performance expresses the average performance level of the processor subject to hardware. Above the nominal performance level, the processor must provide at least nominal performance requested and go higher if current operating conditions allow.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]desired-performance-target-rwah ]h"]desired performance target (rw)ah$]h&]uh1j[hjhhhhhKubj\)}(hhh](ja)}(h(Energy Performance Preference (EPP) (RW)h]h(Energy Performance Preference (EPP) (RW)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhKubj)}(h~This attribute provides a hint to the hardware if software wants to bias toward performance (0x0) or energy efficiency (0xff).h]h~This attribute provides a hint to the hardware if software wants to bias toward performance (0x0) or energy efficiency (0xff).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]$energy-performance-preference-epp-rwah ]h"](energy performance preference (epp) (rw)ah$]h&]uh1j[hjhhhhhKubeh}(h]amd-cppc-performance-controlah ]h"]amd cppc performance controlah$]h&]uh1j[hjhhhhhKubeh}(h]amd-cppc-overviewah ]h"]amd cppc overviewah$]h&]uh1j[hj]hhhhhK%ubj\)}(hhh](ja)}(hKey Governors Supporth]hKey Governors Support}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj hhhhhKubj)}(hX``amd-pstate`` can be used with all the (generic) scaling governors listed by the ``scaling_available_governors`` policy attribute in ``sysfs``. Then, it is responsible for the configuration of policy objects corresponding to CPUs and provides the ``CPUFreq`` core (and the scaling governors attached to the policy objects) with accurate information on the maximum and minimum operating frequencies supported by the hardware. Users can check the ``scaling_cur_freq`` information comes from the ``CPUFreq`` core.h](jg)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubhD can be used with all the (generic) scaling governors listed by the }(hj hhhNhNubjg)}(h``scaling_available_governors``h]hscaling_available_governors}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh policy attribute in }(hj hhhNhNubjg)}(h ``sysfs``h]hsysfs}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubhi. Then, it is responsible for the configuration of policy objects corresponding to CPUs and provides the }(hj hhhNhNubjg)}(h ``CPUFreq``h]hCPUFreq}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh core (and the scaling governors attached to the policy objects) with accurate information on the maximum and minimum operating frequencies supported by the hardware. Users can check the }(hj hhhNhNubjg)}(h``scaling_cur_freq``h]hscaling_cur_freq}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh information comes from the }(hj hhhNhNubjg)}(h ``CPUFreq``h]hCPUFreq}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh core.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj hhubj)}(hX``amd-pstate`` mainly supports ``schedutil`` and ``ondemand`` for dynamic frequency control. It is to fine tune the processor configuration on ``amd-pstate`` to the ``schedutil`` with CPU CFS scheduler. ``amd-pstate`` registers the adjust_perf callback to implement performance update behavior similar to CPPC. It is initialized by ``sugov_start`` and then populates the CPU's update_util_data pointer to assign ``sugov_update_single_perf`` as the utilization update callback function in the CPU scheduler. The CPU scheduler will call ``cpufreq_update_util`` and assigns the target performance according to the ``struct sugov_cpu`` that the utilization update belongs to. Then, ``amd-pstate`` updates the desired performance according to the CPU scheduler assigned.h](jg)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh mainly supports }(hj hhhNhNubjg)}(h ``schedutil``h]h schedutil}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh and }(hj hhhNhNubjg)}(h ``ondemand``h]hondemand}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubhR for dynamic frequency control. It is to fine tune the processor configuration on }(hj hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh to the }(hj hhhNhNubjg)}(h ``schedutil``h]h schedutil}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh with CPU CFS scheduler. }(hj hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubhs registers the adjust_perf callback to implement performance update behavior similar to CPPC. It is initialized by }(hj hhhNhNubjg)}(h``sugov_start``h]h sugov_start}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubhC and then populates the CPU’s update_util_data pointer to assign }(hj hhhNhNubjg)}(h``sugov_update_single_perf``h]hsugov_update_single_perf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh_ as the utilization update callback function in the CPU scheduler. The CPU scheduler will call }(hj hhhNhNubjg)}(h``cpufreq_update_util``h]hcpufreq_update_util}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh5 and assigns the target performance according to the }(hj hhhNhNubjg)}(h``struct sugov_cpu``h]hstruct sugov_cpu}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh/ that the utilization update belongs to. Then, }(hj hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubhI updates the desired performance according to the CPU scheduler assigned.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj hhubj&)}(h.. _processor_support:h]h}(h]h ]h"]h$]h&]jprocessor-supportuh1j%hMhj hhhhj2Kubeh}(h]key-governors-supportah ]h"]key governors supportah$]h&]uh1j[hj]hhhhhKubj\)}(hhh](ja)}(hProcessor Supporth]hProcessor Support}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjl hhhhhKubj)}(hX{The ``amd-pstate`` initialization will fail if the ``_CPC`` entry in the ACPI SBIOS does not exist in the detected processor. It uses ``acpi_cpc_valid`` to check the existence of ``_CPC``. All Zen based processors support the legacy ACPI hardware P-States function, so when ``amd-pstate`` fails initialization, the kernel will fall back to initialize the ``acpi-cpufreq`` driver.h](hThe }(hj} hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj} ubh! initialization will fail if the }(hj} hhhNhNubjg)}(h``_CPC``h]h_CPC}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj} ubhK entry in the ACPI SBIOS does not exist in the detected processor. It uses }(hj} hhhNhNubjg)}(h``acpi_cpc_valid``h]hacpi_cpc_valid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj} ubh to check the existence of }(hj} hhhNhNubjg)}(h``_CPC``h]h_CPC}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj} ubhW. All Zen based processors support the legacy ACPI hardware P-States function, so when }(hj} hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj} ubhC fails initialization, the kernel will fall back to initialize the }(hj} hhhNhNubjg)}(h``acpi-cpufreq``h]h acpi-cpufreq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj} ubh driver.}(hj} hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjl hhubj)}(hXThere are two types of hardware implementations for ``amd-pstate``: one is `Full MSR Support `_ and another is `Shared Memory Support `_. It can use the :c:macro:`X86_FEATURE_CPPC` feature flag to indicate the different types. (For details, refer to the Processor Programming Reference (PPR) for AMD Family 19h Model 51h, Revision A1 Processors [3]_.) ``amd-pstate`` is to register different ``static_call`` instances for different hardware implementations.h](h4There are two types of hardware implementations for }(hj hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh : one is }(hj hhhNhNubj)}(h`Full MSR Support `_h]hFull MSR Support}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameFull MSR Supportjj1uh1jhj jKubj&)}(h h]h}(h]h ]h"]full msr supportah$]h&]jj1uh1j%indirect_reference_nameperf_caphj jKubh and another is }(hj hhhNhNubj)}(h$`Shared Memory Support `_h]hShared Memory Support}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]nameShared Memory Supportjj1uh1jhj jKubj&)}(h h]h}(h]h ]h"]shared memory supportah$]h&]jj1uh1j%j, perf_caphj jKubh. It can use the }(hj hhhNhNubh)}(h:c:macro:`X86_FEATURE_CPPC`h]jg)}(hjT h]hX86_FEATURE_CPPC}(hjV hhhNhNubah}(h]h ](xrefcc-macroeh"]h$]h&]uh1jfhjR ubah}(h]h ]h"]h$]h&]refdocj refdomainja reftypemacro refexplicitrefwarn reftargetX86_FEATURE_CPPCuh1hhhhKhj ubh feature flag to indicate the different types. (For details, refer to the Processor Programming Reference (PPR) for AMD Family 19h Model 51h, Revision A1 Processors }(hj hhhNhNubjs)}(h[3]_h]h3}(hjx hhhNhNubah}(h]id4ah ]h"]h$]h&]jid8jjuh1jrhj jKubh.) }(hj hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh is to register different }(hj hhhNhNubjg)}(h``static_call``h]h static_call}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh2 instances for different hardware implementations.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjl hhubj)}(hCurrently, some of the Zen2 and Zen3 processors support ``amd-pstate``. In the future, it will be supported on more and more AMD processors.h](h8Currently, some of the Zen2 and Zen3 processors support }(hj hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubhF. In the future, it will be supported on more and more AMD processors.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjl hhubj\)}(hhh](ja)}(hFull MSR Supporth]hFull MSR Support}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj hhhhhKubj)}(hXSome new Zen3 processors such as Cezanne provide the MSR registers directly while the :c:macro:`X86_FEATURE_CPPC` CPU feature flag is set. ``amd-pstate`` can handle the MSR register to implement the fast switch function in ``CPUFreq`` that can reduce the latency of frequency control in interrupt context. The functions with a ``pstate_xxx`` prefix represent the operations on MSR registers.h](hVSome new Zen3 processors such as Cezanne provide the MSR registers directly while the }(hj hhhNhNubh)}(h:c:macro:`X86_FEATURE_CPPC`h]jg)}(hj h]hX86_FEATURE_CPPC}(hj hhhNhNubah}(h]h ](j` ja c-macroeh"]h$]h&]uh1jfhj ubah}(h]h ]h"]h$]h&]refdocj refdomainja reftypemacro refexplicitrefwarnjr X86_FEATURE_CPPCuh1hhhhKhj ubh CPU feature flag is set. }(hj hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubhF can handle the MSR register to implement the fast switch function in }(hj hhhNhNubjg)}(h ``CPUFreq``h]hCPUFreq}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh] that can reduce the latency of frequency control in interrupt context. The functions with a }(hj hhhNhNubjg)}(h``pstate_xxx``h]h pstate_xxx}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh2 prefix represent the operations on MSR registers.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj hhubeh}(h]full-msr-supportah ]h"]full msr supportah$]h&]uh1j[hjl hhhhhKubj\)}(hhh](ja)}(hShared Memory Supporth]hShared Memory Support}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjV hhhhhKubj)}(hXwIf the :c:macro:`X86_FEATURE_CPPC` CPU feature flag is not set, the processor supports the shared memory solution. In this case, ``amd-pstate`` uses the ``cppc_acpi`` helper methods to implement the callback functions that are defined on ``static_call``. The functions with the ``cppc_xxx`` prefix represent the operations of ACPI CPPC helpers for the shared memory solution.h](hIf the }(hjg hhhNhNubh)}(h:c:macro:`X86_FEATURE_CPPC`h]jg)}(hjq h]hX86_FEATURE_CPPC}(hjs hhhNhNubah}(h]h ](j` ja c-macroeh"]h$]h&]uh1jfhjo ubah}(h]h ]h"]h$]h&]refdocj refdomainja reftypemacro refexplicitrefwarnjr X86_FEATURE_CPPCuh1hhhhKhjg ubh_ CPU feature flag is not set, the processor supports the shared memory solution. In this case, }(hjg hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjg ubh uses the }(hjg hhhNhNubjg)}(h ``cppc_acpi``h]h cppc_acpi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjg ubhH helper methods to implement the callback functions that are defined on }(hjg hhhNhNubjg)}(h``static_call``h]h static_call}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjg ubh. The functions with the }(hjg hhhNhNubjg)}(h ``cppc_xxx``h]hcppc_xxx}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjg ubhU prefix represent the operations of ACPI CPPC helpers for the shared memory solution.}(hjg hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjV hhubj)}(hAMD P-States and ACPI hardware P-States always can be supported in one processor. But AMD P-States has the higher priority and if it is enabled with :c:macro:`MSR_AMD_CPPC_ENABLE` or ``cppc_set_enable``, it will respond to the request from AMD P-States.h](hAMD P-States and ACPI hardware P-States always can be supported in one processor. But AMD P-States has the higher priority and if it is enabled with }(hj hhhNhNubh)}(h:c:macro:`MSR_AMD_CPPC_ENABLE`h]jg)}(hj h]hMSR_AMD_CPPC_ENABLE}(hj hhhNhNubah}(h]h ](j` ja c-macroeh"]h$]h&]uh1jfhj ubah}(h]h ]h"]h$]h&]refdocj refdomainja reftypemacro refexplicitrefwarnjr MSR_AMD_CPPC_ENABLEuh1hhhhKhj ubh or }(hj hhhNhNubjg)}(h``cppc_set_enable``h]hcppc_set_enable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh3, it will respond to the request from AMD P-States.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjV hhubeh}(h]shared-memory-supportah ]h"]shared memory supportah$]h&]uh1j[hjl hhhhhKubeh}(h](jc id3eh ]h"](processor supportprocessor_supporteh$]h&]uh1j[hj]hhhhhKj}j1 jY sj}jc jY sj2Kubj\)}(hhh](ja)}(h6User Space Interface in ``sysfs`` - Per-policy controlh](hUser Space Interface in }(hj9 hhhNhNubjg)}(h ``sysfs``h]hsysfs}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj9 ubh - Per-policy control}(hj9 hhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hj6 hhhhhKubj)}(h``amd-pstate`` exposes several global attributes (files) in ``sysfs`` to control its functionality at the system level. They are located in the ``/sys/devices/system/cpu/cpufreq/policyX/`` directory and affect all CPUs. ::h](jg)}(h``amd-pstate``h]h amd-pstate}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjY ubh. exposes several global attributes (files) in }(hjY hhhNhNubjg)}(h ``sysfs``h]hsysfs}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjY ubhK to control its functionality at the system level. They are located in the }(hjY hhhNhNubjg)}(h,``/sys/devices/system/cpu/cpufreq/policyX/``h]h(/sys/devices/system/cpu/cpufreq/policyX/}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjY ubh directory and affect all CPUs.}(hjY hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj6 hhubj)}(hXroot@hr-test1:/home/ray# ls /sys/devices/system/cpu/cpufreq/policy0/*amd* /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_highest_perf /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_hw_prefcore /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_lowest_nonlinear_freq /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_max_freq /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_floor_freq /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_floor_count /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_prefcore_rankingh]hXroot@hr-test1:/home/ray# ls /sys/devices/system/cpu/cpufreq/policy0/*amd* /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_highest_perf /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_hw_prefcore /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_lowest_nonlinear_freq /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_max_freq /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_floor_freq /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_floor_count /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_prefcore_ranking}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhj6 hhubj)}(h1``amd_pstate_highest_perf / amd_pstate_max_freq``h]jg)}(hj h]h-amd_pstate_highest_perf / amd_pstate_max_freq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubah}(h]h ]h"]h$]h&]uh1jhhhKhj6 hhubj)}(hXMaximum CPPC performance and CPU frequency that the driver is allowed to set, in percent of the maximum supported CPPC performance level (the highest performance supported in `AMD CPPC Performance Capability `_). In some ASICs, the highest CPPC performance is not the one in the ``_CPC`` table, so we need to expose it to sysfs. If boost is not active, but still supported, this maximum frequency will be larger than the one in ``cpuinfo``. This attribute is read-only.h](hMaximum CPPC performance and CPU frequency that the driver is allowed to set, in percent of the maximum supported CPPC performance level (the highest performance supported in }(hj hhhNhNubj)}(h.`AMD CPPC Performance Capability `_h]hAMD CPPC Performance Capability}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameAMD CPPC Performance Capabilityjj1uh1jhj jKubj&)}(h h]h}(h]h ]h"]amd cppc performance capabilityah$]h&]jj1uh1j%j, perf_caphj jKubhE). In some ASICs, the highest CPPC performance is not the one in the }(hj hhhNhNubjg)}(h``_CPC``h]h_CPC}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh table, so we need to expose it to sysfs. If boost is not active, but still supported, this maximum frequency will be larger than the one in }(hj hhhNhNubjg)}(h ``cpuinfo``h]hcpuinfo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh. This attribute is read-only.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj6 hhubj)}(h$``amd_pstate_lowest_nonlinear_freq``h]jg)}(hjh]h amd_pstate_lowest_nonlinear_freq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1jhhhMhj6 hhubj)}(hXThe lowest non-linear CPPC CPU frequency that the driver is allowed to set, in percent of the maximum supported CPPC performance level. (Please see the lowest non-linear performance in `AMD CPPC Performance Capability `_.) This attribute is read-only.h](hThe lowest non-linear CPPC CPU frequency that the driver is allowed to set, in percent of the maximum supported CPPC performance level. (Please see the lowest non-linear performance in }(hj'hhhNhNubj)}(h.`AMD CPPC Performance Capability `_h]hAMD CPPC Performance Capability}(hj/hhhNhNubah}(h]h ]h"]h$]h&]nameAMD CPPC Performance Capabilityjj1uh1jhj'jKubj&)}(h h]h}(h]h ]h"]amd cppc performance capabilityah$]h&]jj1uh1j%j, perf_caphj'jKubh.) This attribute is read-only.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj6 hhubj)}(h``amd_pstate_hw_prefcore``h]jg)}(hjWh]hamd_pstate_hw_prefcore}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjUubah}(h]h ]h"]h$]h&]uh1jhhhM hj6 hhubj)}(hWhether the platform supports the preferred core feature and it has been enabled. This attribute is read-only. This file is only visible on platforms which support the preferred core feature.h]hWhether the platform supports the preferred core feature and it has been enabled. This attribute is read-only. This file is only visible on platforms which support the preferred core feature.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj6 hhubj)}(h``amd_pstate_prefcore_ranking``h]jg)}(hj|h]hamd_pstate_prefcore_ranking}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjzubah}(h]h ]h"]h$]h&]uh1jhhhMhj6 hhubj)}(hX'The performance ranking of the core. This number doesn't have any unit, but larger numbers are preferred at the time of reading. This can change at runtime based on platform conditions. This attribute is read-only. This file is only visible on platforms which support the preferred core feature.h]hX)The performance ranking of the core. This number doesn’t have any unit, but larger numbers are preferred at the time of reading. This can change at runtime based on platform conditions. This attribute is read-only. This file is only visible on platforms which support the preferred core feature.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj6 hhubj)}(h``amd_pstate_floor_freq``h]jg)}(hjh]hamd_pstate_floor_freq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1jhhhMhj6 hhubj)}(hX`The floor frequency associated with each CPU. Userspace can write any value between ``cpuinfo_min_freq`` and ``scaling_max_freq`` into this file. When the system is under power or thermal constraints, the platform firmware will attempt to throttle the CPU frequency to the value specified in ``amd_pstate_floor_freq`` before throttling it further. This allows userspace to specify different floor frequencies to different CPUs. For optimal results, threads of the same core should have the same floor frequency value. This file is only visible on platforms that support the CPPC Performance Priority feature.h](hTThe floor frequency associated with each CPU. Userspace can write any value between }(hjhhhNhNubjg)}(h``cpuinfo_min_freq``h]hcpuinfo_min_freq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh and }(hjhhhNhNubjg)}(h``scaling_max_freq``h]hscaling_max_freq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh into this file. When the system is under power or thermal constraints, the platform firmware will attempt to throttle the CPU frequency to the value specified in }(hjhhhNhNubjg)}(h``amd_pstate_floor_freq``h]hamd_pstate_floor_freq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubhX# before throttling it further. This allows userspace to specify different floor frequencies to different CPUs. For optimal results, threads of the same core should have the same floor frequency value. This file is only visible on platforms that support the CPPC Performance Priority feature.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj6 hhubj)}(h``amd_pstate_floor_count``h]jg)}(hjh]hamd_pstate_floor_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1jhhhM'hj6 hhubj)}(hXThe number of distinct Floor Performance levels supported by the platform. For example, if this value is 2, then the number of unique values obtained from the command ``cat /sys/devices/system/cpu/cpufreq/policy*/amd_pstate_floor_freq | sort -n | uniq`` should be at most this number for the behavior described in ``amd_pstate_floor_freq`` to take effect. A zero value implies that the platform supports unlimited floor performance levels. This file is only visible on platforms that support the CPPC Performance Priority feature.h](hThe number of distinct Floor Performance levels supported by the platform. For example, if this value is 2, then the number of unique values obtained from the command }(hjhhhNhNubjg)}(hV``cat /sys/devices/system/cpu/cpufreq/policy*/amd_pstate_floor_freq | sort -n | uniq``h]hRcat /sys/devices/system/cpu/cpufreq/policy*/amd_pstate_floor_freq | sort -n | uniq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh= should be at most this number for the behavior described in }(hjhhhNhNubjg)}(h``amd_pstate_floor_freq``h]hamd_pstate_floor_freq}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh to take effect. A zero value implies that the platform supports unlimited floor performance levels. This file is only visible on platforms that support the CPPC Performance Priority feature.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM)hj6 hhubj)}(hX**Note**: When ``amd_pstate_floor_count`` is non-zero, the frequency to which the CPU is throttled under power or thermal constraints is undefined when the number of unique values of ``amd_pstate_floor_freq`` across all CPUs in the system exceeds ``amd_pstate_floor_count``.h](hstrong)}(h**Note**h]hNote}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjCubh: When }(hjChhhNhNubjg)}(h``amd_pstate_floor_count``h]hamd_pstate_floor_count}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjCubh is non-zero, the frequency to which the CPU is throttled under power or thermal constraints is undefined when the number of unique values of }(hjChhhNhNubjg)}(h``amd_pstate_floor_freq``h]hamd_pstate_floor_freq}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjCubh' across all CPUs in the system exceeds }(hjChhhNhNubjg)}(h``amd_pstate_floor_count``h]hamd_pstate_floor_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjCubh.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM3hj6 hhubj)}(h,``energy_performance_available_preferences``h]jg)}(hjh]h(energy_performance_available_preferences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1jhhhM8hj6 hhubj)}(hXA list of all the supported EPP preferences that could be used for ``energy_performance_preference`` on this system. These profiles represent different hints that are provided to the low-level firmware about the user's desired energy vs efficiency tradeoff. ``default`` represents the epp value is set by platform firmware. ``custom`` designates that integer values 0-255 may be written as well. This attribute is read-only.h](hCA list of all the supported EPP preferences that could be used for }(hjhhhNhNubjg)}(h!``energy_performance_preference``h]henergy_performance_preference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh on this system. These profiles represent different hints that are provided to the low-level firmware about the user’s desired energy vs efficiency tradeoff. }(hjhhhNhNubjg)}(h ``default``h]hdefault}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh7 represents the epp value is set by platform firmware. }(hjhhhNhNubjg)}(h ``custom``h]hcustom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh[ designates that integer values 0-255 may be written as well. This attribute is read-only.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM:hj6 hhubj)}(h!``energy_performance_preference``h]jg)}(hjh]henergy_performance_preference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1jhhhMBhj6 hhubj)}(hXEThe current energy performance preference can be read from this attribute. and user can change current preference according to energy or performance needs Coarse named profiles are available in the attribute ``energy_performance_available_preferences``. Users can also write individual integer values between 0 to 255. When dynamic EPP is enabled, writes to energy_performance_preference are blocked even when EPP feature is enabled by platform firmware. Lower epp values shift the bias towards improved performance while a higher epp value shifts the bias towards power-savings. The exact impact can change from one platform to the other. If a valid integer was last written, then a number will be returned on future reads. If a valid string was last written then a string will be returned on future reads. This attribute is read-write.h](hThe current energy performance preference can be read from this attribute. and user can change current preference according to energy or performance needs Coarse named profiles are available in the attribute }(hj hhhNhNubjg)}(h,``energy_performance_available_preferences``h]h(energy_performance_available_preferences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubhXI. Users can also write individual integer values between 0 to 255. When dynamic EPP is enabled, writes to energy_performance_preference are blocked even when EPP feature is enabled by platform firmware. Lower epp values shift the bias towards improved performance while a higher epp value shifts the bias towards power-savings. The exact impact can change from one platform to the other. If a valid integer was last written, then a number will be returned on future reads. If a valid string was last written then a string will be returned on future reads. This attribute is read-write.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMDhj6 hhubj)}(h``boost`` The `boost` sysfs attribute provides control over the CPU core performance boost, allowing users to manage the maximum frequency limitation of the CPU. This attribute can be used to enable or disable the boost feature on individual CPUs.h](jg)}(h ``boost``h]hboost}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj)ubh The }(hj)hhhNhNubhtitle_reference)}(h`boost`h]hboost}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj)ubh sysfs attribute provides control over the CPU core performance boost, allowing users to manage the maximum frequency limitation of the CPU. This attribute can be used to enable or disable the boost feature on individual CPUs.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMQhj6 hhubj)}(hXiWhen the boost feature is enabled, the CPU can dynamically increase its frequency beyond the base frequency, providing enhanced performance for demanding workloads. On the other hand, disabling the boost feature restricts the CPU to operate at the base frequency, which may be desirable in certain scenarios to prioritize power efficiency or manage temperature.h]hXiWhen the boost feature is enabled, the CPU can dynamically increase its frequency beyond the base frequency, providing enhanced performance for demanding workloads. On the other hand, disabling the boost feature restricts the CPU to operate at the base frequency, which may be desirable in certain scenarios to prioritize power efficiency or manage temperature.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMWhj6 hhubj)}(hTo manipulate the `boost` attribute, users can write a value of `0` to disable the boost or `1` to enable it, for the respective CPU using the sysfs path `/sys/devices/system/cpu/cpuX/cpufreq/boost`, where `X` represents the CPU number.h](hTo manipulate the }(hjghhhNhNubj@)}(h`boost`h]hboost}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjgubh' attribute, users can write a value of }(hjghhhNhNubj@)}(h`0`h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjgubh to disable the boost or }(hjghhhNhNubj@)}(h`1`h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjgubh; to enable it, for the respective CPU using the sysfs path }(hjghhhNhNubj@)}(h,`/sys/devices/system/cpu/cpuX/cpufreq/boost`h]h*/sys/devices/system/cpu/cpuX/cpufreq/boost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjgubh, where }(hjghhhNhNubj@)}(h`X`h]hX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjgubh represents the CPU number.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM]hj6 hhubj)}(hOther performance and frequency values can be read back from ``/sys/devices/system/cpu/cpuX/acpi_cppc/``, see :ref:`cppc_sysfs`.h](h=Other performance and frequency values can be read back from }(hjhhhNhNubjg)}(h+``/sys/devices/system/cpu/cpuX/acpi_cppc/``h]h'/sys/devices/system/cpu/cpuX/acpi_cppc/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh, see }(hjhhhNhNubh)}(h:ref:`cppc_sysfs`h]hinline)}(hjh]h cppc_sysfs}(hjhhhNhNubah}(h]h ](j` stdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjr cppc_sysfsuh1hhhhMahjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMahj6 hhubeh}(h]0user-space-interface-in-sysfs-per-policy-controlah ]h"]2user space interface in sysfs - per-policy controlah$]h&]uh1j[hj]hhhhhKubj\)}(hhh](ja)}(h"Dynamic energy performance profileh]h"Dynamic energy performance profile}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhMeubj)}(hThe amd-pstate driver supports dynamically selecting the energy performance profile based on whether the machine is running on AC or DC power.h]hThe amd-pstate driver supports dynamically selecting the energy performance profile based on whether the machine is running on AC or DC power.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMfhjhhubj)}(hWhether this behavior is enabled by default depends on the kernel config option `CONFIG_X86_AMD_PSTATE_DYNAMIC_EPP`. This behavior can also be overridden at runtime by the sysfs file ``/sys/devices/system/cpu/cpufreq/policyX/dynamic_epp``.h](hPWhether this behavior is enabled by default depends on the kernel config option }(hj<hhhNhNubj@)}(h#`CONFIG_X86_AMD_PSTATE_DYNAMIC_EPP`h]h!CONFIG_X86_AMD_PSTATE_DYNAMIC_EPP}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj<ubhD. This behavior can also be overridden at runtime by the sysfs file }(hj<hhhNhNubjg)}(h7``/sys/devices/system/cpu/cpufreq/policyX/dynamic_epp``h]h3/sys/devices/system/cpu/cpufreq/policyX/dynamic_epp}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj<ubh.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMihjhhubj)}(hXWhen set to enabled, the driver will select a different energy performance profile when the machine is running on battery or AC power. The driver will also register with the platform profile handler to receive notifications of user desired power state and react to those. When set to disabled, the driver will not change the energy performance profile based on the power source and will not react to user desired power state.h]hXWhen set to enabled, the driver will select a different energy performance profile when the machine is running on battery or AC power. The driver will also register with the platform profile handler to receive notifications of user desired power state and react to those. When set to disabled, the driver will not change the energy performance profile based on the power source and will not react to user desired power state.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMmhjhhubj)}(h{Attempting to manually write to the ``energy_performance_preference`` sysfs file will fail when ``dynamic_epp`` is enabled.h](h$Attempting to manually write to the }(hj|hhhNhNubjg)}(h!``energy_performance_preference``h]henergy_performance_preference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj|ubh sysfs file will fail when }(hj|hhhNhNubjg)}(h``dynamic_epp``h]h dynamic_epp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj|ubh is enabled.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMthjhhubeh}(h]"dynamic-energy-performance-profileah ]h"]"dynamic energy performance profileah$]h&]uh1j[hj]hhhhhMeubj\)}(hhh](ja)}(h"``amd-pstate`` vs ``acpi-cpufreq``h](jg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh vs }(hjhhhNhNubjg)}(h``acpi-cpufreq``h]h acpi-cpufreq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubeh}(h]h ]h"]h$]h&]uh1j`hjhhhhhMxubj)}(hXOn the majority of AMD platforms supported by ``acpi-cpufreq``, the ACPI tables provided by the platform firmware are used for CPU performance scaling, but only provide 3 P-states on AMD processors. However, on modern AMD APU and CPU series, hardware provides the Collaborative Processor Performance Control according to the ACPI protocol and customizes this for AMD platforms. That is, fine-grained and continuous frequency ranges instead of the legacy hardware P-states. ``amd-pstate`` is the kernel module which supports the new AMD P-States mechanism on most of the future AMD platforms. The AMD P-States mechanism is the more performance and energy efficiency frequency management method on AMD processors.h](h.On the majority of AMD platforms supported by }(hjhhhNhNubjg)}(h``acpi-cpufreq``h]h acpi-cpufreq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubhX, the ACPI tables provided by the platform firmware are used for CPU performance scaling, but only provide 3 P-states on AMD processors. However, on modern AMD APU and CPU series, hardware provides the Collaborative Processor Performance Control according to the ACPI protocol and customizes this for AMD platforms. That is, fine-grained and continuous frequency ranges instead of the legacy hardware P-states. }(hjhhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh is the kernel module which supports the new AMD P-States mechanism on most of the future AMD platforms. The AMD P-States mechanism is the more performance and energy efficiency frequency management method on AMD processors.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMzhjhhubeh}(h]amd-pstate-vs-acpi-cpufreqah ]h"]amd-pstate vs acpi-cpufreqah$]h&]uh1j[hj]hhhhhMxubj\)}(hhh](ja)}(h%``amd-pstate`` Driver Operation Modesh](jg)}(h``amd-pstate``h]h amd-pstate}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh Driver Operation Modes}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hjhhhhhMubj)}(h``amd_pstate`` CPPC has 3 operation modes: autonomous (active) mode, non-autonomous (passive) mode and guided autonomous (guided) mode. Active/passive/guided mode can be chosen by different kernel parameters.h](jg)}(h``amd_pstate``h]h amd_pstate}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj<ubh CPPC has 3 operation modes: autonomous (active) mode, non-autonomous (passive) mode and guided autonomous (guided) mode. Active/passive/guided mode can be chosen by different kernel parameters.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubh bullet_list)}(hhh](h list_item)}(hIn autonomous mode, platform ignores the desired performance level request and takes into account only the values set to the minimum, maximum and energy performance preference registers.h]j)}(hIn autonomous mode, platform ignores the desired performance level request and takes into account only the values set to the minimum, maximum and energy performance preference registers.h]hIn autonomous mode, platform ignores the desired performance level request and takes into account only the values set to the minimum, maximum and energy performance preference registers.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj_ubah}(h]h ]h"]h$]h&]uh1j]hjZhhhhhNubj^)}(hvIn non-autonomous mode, platform gets desired performance level from OS directly through Desired Performance Register.h]j)}(hvIn non-autonomous mode, platform gets desired performance level from OS directly through Desired Performance Register.h]hvIn non-autonomous mode, platform gets desired performance level from OS directly through Desired Performance Register.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjwubah}(h]h ]h"]h$]h&]uh1j]hjZhhhhhNubj^)}(hIn guided-autonomous mode, platform sets operating performance level autonomously according to the current workload and within the limits set by OS through min and max performance registers. h]j)}(hIn guided-autonomous mode, platform sets operating performance level autonomously according to the current workload and within the limits set by OS through min and max performance registers.h]hIn guided-autonomous mode, platform sets operating performance level autonomously according to the current workload and within the limits set by OS through min and max performance registers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j]hjZhhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1jXhhhMhjhhubj\)}(hhh](ja)}(h Active Modeh]h Active Mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhMubj)}(h``amd_pstate=active``h]jg)}(hjh]hamd_pstate=active}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(hXThis is the low-level firmware control mode which is implemented by ``amd_pstate_epp`` driver with ``amd_pstate=active`` passed to the kernel in the command line. In this mode, ``amd_pstate_epp`` driver provides a hint to the hardware if software wants to bias toward performance (0x0) or energy efficiency (0xff) to the CPPC firmware. then CPPC power algorithm will calculate the runtime workload and adjust the realtime cores frequency according to the power supply and thermal, core voltage and some other hardware conditions.h](hDThis is the low-level firmware control mode which is implemented by }(hjhhhNhNubjg)}(h``amd_pstate_epp``h]hamd_pstate_epp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh driver with }(hjhhhNhNubjg)}(h``amd_pstate=active``h]hamd_pstate=active}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh9 passed to the kernel in the command line. In this mode, }(hjhhhNhNubjg)}(h``amd_pstate_epp``h]hamd_pstate_epp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubhXN driver provides a hint to the hardware if software wants to bias toward performance (0x0) or energy efficiency (0xff) to the CPPC firmware. then CPPC power algorithm will calculate the runtime workload and adjust the realtime cores frequency according to the power supply and thermal, core voltage and some other hardware conditions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubeh}(h] active-modeah ]h"] active modeah$]h&]uh1j[hjhhhhhMubj\)}(hhh](ja)}(h Passive Modeh]h Passive Mode}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj#hhhhhMubj)}(h``amd_pstate=passive``h]jg)}(hj6h]hamd_pstate=passive}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj4ubah}(h]h ]h"]h$]h&]uh1jhhhMhj#hhubj)}(hX{It will be enabled if the ``amd_pstate=passive`` is passed to the kernel in the command line. In this mode, ``amd_pstate`` driver software specifies a desired QoS target in the CPPC performance scale as a relative number. This can be expressed as percentage of nominal performance (infrastructure max). Below the nominal sustained performance level, desired performance expresses the average performance level of the processor subject to the Performance Reduction Tolerance register. Above the nominal performance level, processor must provide at least nominal performance requested and go higher if current operating conditions allow.h](hIt will be enabled if the }(hjKhhhNhNubjg)}(h``amd_pstate=passive``h]hamd_pstate=passive}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjKubh< is passed to the kernel in the command line. In this mode, }(hjKhhhNhNubjg)}(h``amd_pstate``h]h amd_pstate}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjKubhX driver software specifies a desired QoS target in the CPPC performance scale as a relative number. This can be expressed as percentage of nominal performance (infrastructure max). Below the nominal sustained performance level, desired performance expresses the average performance level of the processor subject to the Performance Reduction Tolerance register. Above the nominal performance level, processor must provide at least nominal performance requested and go higher if current operating conditions allow.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj#hhubeh}(h] passive-modeah ]h"] passive modeah$]h&]uh1j[hjhhhhhMubj\)}(hhh](ja)}(h Guided Modeh]h Guided Mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhMubj)}(h``amd_pstate=guided``h]jg)}(hjh]hamd_pstate=guided}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(hXIf ``amd_pstate=guided`` is passed to kernel command line option then this mode 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.h](hIf }(hjhhhNhNubjg)}(h``amd_pstate=guided``h]hamd_pstate=guided}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh is passed to kernel command line option then this mode 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubeh}(h] guided-modeah ]h"] guided modeah$]h&]uh1j[hjhhhhhMubeh}(h]!amd-pstate-driver-operation-modesah ]h"]!amd-pstate driver operation modesah$]h&]uh1j[hj]hhhhhMubj\)}(hhh](ja)}(h``amd-pstate`` Preferred Coreh](jg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh Preferred Core}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hjhhhhhMubj)}(hXThe 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.h]hXThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(h``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.h](jg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh 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.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(hThe 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.h](h/The priority metric will be initialized by the }(hj&hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj&ubh driver. The }(hj&hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj&ubh+ driver will also determine whether or not }(hj&hhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj&ubh- preferred core is supported by the platform.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(hX``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.h](jg)}(h``amd-pstate``h]h amd-pstate}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjjubhX 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 }(hjjhhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjjubh} driver receives a message with the highest performance change, it will update the core ranking and set the cpu’s priority.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubeh}(h]amd-pstate-preferred-coreah ]h"]amd-pstate preferred coreah$]h&]uh1j[hj]hhhhhMubj\)}(hhh](ja)}(h$``amd-pstate`` Preferred Core Switchh](jg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh Preferred Core Switch}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hjhhhhhMubj\)}(hhh](ja)}(hKernel Parametersh]hKernel Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhMubj)}(h``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.h](jg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh peferred core`` has two states: enable and disable. Enable/disable states can be chosen by different kernel parameters. Default enable }(hjhhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh preferred core.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(h``amd_prefcore=disable``h]jg)}(hjh]hamd_prefcore=disable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(hFor 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``.h](hFor systems that support }(hjhhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh preferred core, the core rankings will always be advertised by the platform. But OS can choose to ignore that via the kernel parameter }(hjhhhNhNubjg)}(h``amd_prefcore=disable``h]hamd_prefcore=disable}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(h``amd_dynamic_epp``h]jg)}(hjIh]hamd_dynamic_epp}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjGubah}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(hXWhen AMD pstate is in auto mode, dynamic EPP will control whether the kernel autonomously changes the EPP mode. The default is configured by ``CONFIG_X86_AMD_PSTATE_DYNAMIC_EPP`` but can be explicitly enabled with ``amd_dynamic_epp=enable`` or disabled with ``amd_dynamic_epp=disable``.h](hWhen AMD pstate is in auto mode, dynamic EPP will control whether the kernel autonomously changes the EPP mode. The default is configured by }(hj^hhhNhNubjg)}(h%``CONFIG_X86_AMD_PSTATE_DYNAMIC_EPP``h]h!CONFIG_X86_AMD_PSTATE_DYNAMIC_EPP}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj^ubh$ but can be explicitly enabled with }(hj^hhhNhNubjg)}(h``amd_dynamic_epp=enable``h]hamd_dynamic_epp=enable}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj^ubh or disabled with }(hj^hhhNhNubjg)}(h``amd_dynamic_epp=disable``h]hamd_dynamic_epp=disable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj^ubh.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubeh}(h]kernel-parametersah ]h"]kernel parametersah$]h&]uh1j[hjhhhhhMubeh}(h] amd-pstate-preferred-core-switchah ]h"] amd-pstate preferred core switchah$]h&]uh1j[hj]hhhhhMubj\)}(hhh](ja)}(h+User Space Interface in ``sysfs`` - Generalh](hUser Space Interface in }(hjhhhNhNubjg)}(h ``sysfs``h]hsysfs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh - General}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hjhhhhhMubj\)}(hhh](ja)}(hGlobal Attributesh]hGlobal Attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhMubj)}(h``amd-pstate`` exposes several global attributes (files) in ``sysfs`` to control its functionality at the system level. They are located in the ``/sys/devices/system/cpu/amd_pstate/`` directory and affect all CPUs.h](jg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh. exposes several global attributes (files) in }(hjhhhNhNubjg)}(h ``sysfs``h]hsysfs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubhL to control its functionality at the system level. They are located in the }(hjhhhNhNubjg)}(h'``/sys/devices/system/cpu/amd_pstate/``h]h#/sys/devices/system/cpu/amd_pstate/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh directory and affect all CPUs.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubhdefinition_list)}(hhh](hdefinition_list_item)}(hX``status`` Operation mode of the driver: "active", "passive", "guided" or "disable". "active" The driver is functional and in the ``active mode`` "passive" The driver is functional and in the ``passive mode`` "guided" The driver is functional and in the ``guided mode`` "disable" The driver is unregistered and not functional now. This attribute can be written to in order to change the driver's operation mode or to unregister it. The string written to it must be one of the possible values of it and, if successful, writing one of these values to the sysfs file will cause the driver to switch over to the operation mode represented by that string - or to be unregistered in the "disable" case. h](hterm)}(h ``status``h]jg)}(hj5h]hstatus}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj3ubah}(h]h ]h"]h$]h&]uh1j1hhhM hj-ubh definition)}(hhh](j)}(hIOperation mode of the driver: "active", "passive", "guided" or "disable".h]hYOperation mode of the driver: “active”, “passive”, “guided” or “disable”.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjLubj')}(hhh](j,)}(h="active" The driver is functional and in the ``active mode`` h](j2)}(h"active"h]h “active”}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j1hhhMhj`ubjK)}(hhh]j)}(h3The driver is functional and in the ``active mode``h](h$The driver is functional and in the }(hjuhhhNhNubjg)}(h``active mode``h]h active mode}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjuubeh}(h]h ]h"]h$]h&]uh1jhhhMhjrubah}(h]h ]h"]h$]h&]uh1jJhj`ubeh}(h]h ]h"]h$]h&]uh1j+hhhMhj]ubj,)}(h?"passive" The driver is functional and in the ``passive mode`` h](j2)}(h "passive"h]h “passive”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j1hhhMhjubjK)}(hhh]j)}(h4The driver is functional and in the ``passive mode``h](h$The driver is functional and in the }(hjhhhNhNubjg)}(h``passive mode``h]h passive mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j+hhhMhj]ubj,)}(h="guided" The driver is functional and in the ``guided mode`` h](j2)}(h"guided"h]h “guided”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j1hhhMhjubjK)}(hhh]j)}(h3The driver is functional and in the ``guided mode``h](h$The driver is functional and in the }(hjhhhNhNubjg)}(h``guided mode``h]h guided mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j+hhhMhj]ubj,)}(h="disable" The driver is unregistered and not functional now. h](j2)}(h "disable"h]h “disable”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j1hhhMhjubjK)}(hhh]j)}(h2The driver is unregistered and not functional now.h]h2The driver is unregistered and not functional now.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj)ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j+hhhMhj]ubeh}(h]h ]h"]h$]h&]uh1j&hjLubj)}(hXnThis attribute can be written to in order to change the driver's operation mode or to unregister it. The string written to it must be one of the possible values of it and, if successful, writing one of these values to the sysfs file will cause the driver to switch over to the operation mode represented by that string - or to be unregistered in the "disable" case.h]hXtThis attribute can be written to in order to change the driver’s operation mode or to unregister it. The string written to it must be one of the possible values of it and, if successful, writing one of these values to the sysfs file will cause the driver to switch over to the operation mode represented by that string - or to be unregistered in the “disable” case.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjLubeh}(h]h ]h"]h$]h&]uh1jJhj-ubeh}(h]h ]h"]h$]h&]uh1j+hhhM hj(ubj,)}(hX%``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. h](j2)}(h ``prefcore``h]jg)}(hjlh]hprefcore}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjjubah}(h]h ]h"]h$]h&]uh1j1hhhMhjfubjK)}(hhh](j)}(h events/amd_cpu/enable root@hr-test1:/sys/kernel/tracing# cat trace # tracer: nop # # entries-in-buffer/entries-written: 47827/42233061 #P:2 # # _-----=> irqs-off # / _----=> need-resched # | / _---=> hardirq/softirq # || / _--=> preempt-depth # ||| / delay # TASK-PID CPU# |||| TIMESTAMP FUNCTION # | | | |||| | | -0 [015] dN... 4995.979886: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=15 changed=false fast_switch=true -0 [007] d.h.. 4995.979893: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=7 changed=false fast_switch=true cat-2161 [000] d.... 4995.980841: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=0 changed=false fast_switch=true sshd-2125 [004] d.s.. 4995.980968: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=4 changed=false fast_switch=true -0 [007] d.s.. 4995.980968: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=7 changed=false fast_switch=true -0 [003] d.s.. 4995.980971: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=3 changed=false fast_switch=true -0 [011] d.s.. 4995.980996: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=11 changed=false fast_switch=trueh]hXroot@hr-test1:/home/ray# cd /sys/kernel/tracing/ root@hr-test1:/sys/kernel/tracing# echo 1 > events/amd_cpu/enable root@hr-test1:/sys/kernel/tracing# cat trace # tracer: nop # # entries-in-buffer/entries-written: 47827/42233061 #P:2 # # _-----=> irqs-off # / _----=> need-resched # | / _---=> hardirq/softirq # || / _--=> preempt-depth # ||| / delay # TASK-PID CPU# |||| TIMESTAMP FUNCTION # | | | |||| | | -0 [015] dN... 4995.979886: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=15 changed=false fast_switch=true -0 [007] d.h.. 4995.979893: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=7 changed=false fast_switch=true cat-2161 [000] d.... 4995.980841: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=0 changed=false fast_switch=true sshd-2125 [004] d.s.. 4995.980968: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=4 changed=false fast_switch=true -0 [007] d.s.. 4995.980968: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=7 changed=false fast_switch=true -0 [003] d.s.. 4995.980971: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=3 changed=false fast_switch=true -0 [011] d.s.. 4995.980996: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=11 changed=false fast_switch=true}hjZsbah}(h]h ]h"]h$]h&]hhuh1jhhhMChjhhubj)}(hThe ``cpu_frequency`` trace event will be triggered either by the ``schedutil`` scaling governor (for the policies it is attached to), or by the ``CPUFreq`` core (for the policies with other scaling governors).h](hThe }(hjhhhhNhNubjg)}(h``cpu_frequency``h]h cpu_frequency}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjhubh- trace event will be triggered either by the }(hjhhhhNhNubjg)}(h ``schedutil``h]h schedutil}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjhubhB scaling governor (for the policies it is attached to), or by the }(hjhhhhNhNubjg)}(h ``CPUFreq``h]hCPUFreq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjhubh6 core (for the policies with other scaling governors).}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMYhjhhubeh}(h] trace-eventsah ]h"] trace eventsah$]h&]uh1j[hjhhhhhM:ubj\)}(hhh](ja)}(h Tracer Toolh]h Tracer Tool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhM_ubj)}(h``amd_pstate_tracer.py`` can record and parse ``amd-pstate`` trace log, then generate performance plots. This utility can be used to debug and tune the performance of ``amd-pstate`` driver. The tracer tool needs to import intel pstate tracer.h](jg)}(h``amd_pstate_tracer.py``h]hamd_pstate_tracer.py}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh can record and parse }(hjhhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubhk trace log, then generate performance plots. This utility can be used to debug and tune the performance of }(hjhhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh= driver. The tracer tool needs to import intel pstate tracer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMahjhhubj)}(hTracer tool located in ``linux/tools/power/x86/amd_pstate_tracer``. It can be used in two ways. If trace file is available, then directly parse the file with command ::h](hTracer tool located in }(hjhhhNhNubjg)}(h+``linux/tools/power/x86/amd_pstate_tracer``h]h'linux/tools/power/x86/amd_pstate_tracer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubhc. It can be used in two ways. If trace file is available, then directly parse the file with command}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMfhjhhubj)}(h>./amd_pstate_trace.py [-c cpus] -t -n h]h>./amd_pstate_trace.py [-c cpus] -t -n }hj%sbah}(h]h ]h"]h$]h&]hhuh1jhhhMjhjhhubj)}(hOOr generate trace file with root privilege, then parse and plot with command ::h]hLOr generate trace file with root privilege, then parse and plot with command}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMlhjhhubj)}(hMsudo ./amd_pstate_trace.py [-c cpus] -n -i [-m kbytes]h]hMsudo ./amd_pstate_trace.py [-c cpus] -n -i [-m kbytes]}hjAsbah}(h]h ]h"]h$]h&]hhuh1jhhhMnhjhhubj)}(hlThe test result can be found in ``results/test_name``. Following is the example about part of the output. ::h](h The test result can be found in }(hjOhhhNhNubjg)}(h``results/test_name``h]hresults/test_name}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjOubh4. Following is the example about part of the output.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMphjhhubj)}(hXcommon_cpu common_secs common_usecs min_perf des_perf max_perf freq mperf apef tsc load duration_ms sample_num elapsed_time common_comm CPU_005 712 116384 39 49 166 0.7565 9645075 2214891 38431470 25.1 11.646 469 2.496 kworker/5:0-40 CPU_006 712 116408 39 49 166 0.6769 8950227 1839034 37192089 24.06 11.272 470 2.496 kworker/6:0-1264h]hXcommon_cpu common_secs common_usecs min_perf des_perf max_perf freq mperf apef tsc load duration_ms sample_num elapsed_time common_comm CPU_005 712 116384 39 49 166 0.7565 9645075 2214891 38431470 25.1 11.646 469 2.496 kworker/5:0-40 CPU_006 712 116408 39 49 166 0.6769 8950227 1839034 37192089 24.06 11.272 470 2.496 kworker/6:0-1264}hjosbah}(h]h ]h"]h$]h&]hhuh1jhhhMshjhhubeh}(h] tracer-toolah ]h"] tracer toolah$]h&]uh1j[hjhhhhhM_ubj\)}(hhh](ja)}(hUnit Tests for amd-pstateh]hUnit Tests for amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhMxubj)}(hI``amd-pstate-ut`` is a test module for testing the ``amd-pstate`` driver.h](jg)}(h``amd-pstate-ut``h]h amd-pstate-ut}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh" is a test module for testing the }(hjhhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh driver.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMzhjhhubh block_quote)}(hXD* It can help all users to verify their processor support (SBIOS/Firmware or Hardware). * Kernel can have a basic function test to avoid the kernel regression during the update. * We can introduce more functional or performance tests to align the result together, it will benefit power and performance scale optimization. h]jY)}(hhh](j^)}(hVIt can help all users to verify their processor support (SBIOS/Firmware or Hardware). h]j)}(hUIt can help all users to verify their processor support (SBIOS/Firmware or Hardware).h]hUIt can help all users to verify their processor support (SBIOS/Firmware or Hardware).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM|hjubah}(h]h ]h"]h$]h&]uh1j]hjubj^)}(hXKernel can have a basic function test to avoid the kernel regression during the update. h]j)}(hWKernel can have a basic function test to avoid the kernel regression during the update.h]hWKernel can have a basic function test to avoid the kernel regression during the update.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM~hjubah}(h]h ]h"]h$]h&]uh1j]hjubj^)}(hWe can introduce more functional or performance tests to align the result together, it will benefit power and performance scale optimization. h]j)}(hWe can introduce more functional or performance tests to align the result together, it will benefit power and performance scale optimization.h]hWe can introduce more functional or performance tests to align the result together, it will benefit power and performance scale optimization.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j]hjubeh}(h]h ]h"]h$]h&]j*uh1jXhhhM|hjubah}(h]h ]h"]h$]h&]uh1jhhhM|hjhhubhenumerated_list)}(hhh](j^)}(hXJTest case descriptions 1). Basic tests Test prerequisite and basic functions for the ``amd-pstate`` driver. +---------+--------------------------------+------------------------------------------------------------------------------------+ | Index | Functions | Description | +=========+================================+====================================================================================+ | 1 | amd_pstate_ut_acpi_cpc_valid || Check whether the _CPC object is present in SBIOS. | | | || | | | || The detail refer to `Processor Support `_. | +---------+--------------------------------+------------------------------------------------------------------------------------+ | 2 | amd_pstate_ut_check_enabled || Check whether AMD P-State is enabled. | | | || | | | || AMD P-States and ACPI hardware P-States always can be supported in one processor. | | | | But AMD P-States has the higher priority and if it is enabled with | | | | :c:macro:`MSR_AMD_CPPC_ENABLE` or ``cppc_set_enable``, it will respond to the | | | | request from AMD P-States. | +---------+--------------------------------+------------------------------------------------------------------------------------+ | 3 | amd_pstate_ut_check_perf || Check if the each performance values are reasonable. | | | || highest_perf >= nominal_perf > lowest_nonlinear_perf > lowest_perf > 0. | +---------+--------------------------------+------------------------------------------------------------------------------------+ | 4 | amd_pstate_ut_check_freq || Check if the each frequency values and max freq when set support boost mode | | | | are reasonable. | | | || max_freq >= nominal_freq > lowest_nonlinear_freq > min_freq > 0 | | | || If boost is not active but supported, this maximum frequency will be larger than | | | | the one in ``cpuinfo``. | +---------+--------------------------------+------------------------------------------------------------------------------------+ 2). Tbench test Test and monitor the cpu changes when running tbench benchmark under the specified governor. These changes include desire performance, frequency, load, performance, energy etc. The specified governor is ondemand or schedutil. Tbench can also be tested on the ``acpi-cpufreq`` kernel driver for comparison. 3). Gitsource test Test and monitor the cpu changes when running gitsource benchmark under the specified governor. These changes include desire performance, frequency, load, time, energy etc. The specified governor is ondemand or schedutil. Gitsource can also be tested on the ``acpi-cpufreq`` kernel driver for comparison. h](j)}(hTest case descriptionsh]hTest case descriptions}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj'ubj)}(hX1). Basic tests Test prerequisite and basic functions for the ``amd-pstate`` driver. +---------+--------------------------------+------------------------------------------------------------------------------------+ | Index | Functions | Description | +=========+================================+====================================================================================+ | 1 | amd_pstate_ut_acpi_cpc_valid || Check whether the _CPC object is present in SBIOS. | | | || | | | || The detail refer to `Processor Support `_. | +---------+--------------------------------+------------------------------------------------------------------------------------+ | 2 | amd_pstate_ut_check_enabled || Check whether AMD P-State is enabled. | | | || | | | || AMD P-States and ACPI hardware P-States always can be supported in one processor. | | | | But AMD P-States has the higher priority and if it is enabled with | | | | :c:macro:`MSR_AMD_CPPC_ENABLE` or ``cppc_set_enable``, it will respond to the | | | | request from AMD P-States. | +---------+--------------------------------+------------------------------------------------------------------------------------+ | 3 | amd_pstate_ut_check_perf || Check if the each performance values are reasonable. | | | || highest_perf >= nominal_perf > lowest_nonlinear_perf > lowest_perf > 0. | +---------+--------------------------------+------------------------------------------------------------------------------------+ | 4 | amd_pstate_ut_check_freq || Check if the each frequency values and max freq when set support boost mode | | | | are reasonable. | | | || max_freq >= nominal_freq > lowest_nonlinear_freq > min_freq > 0 | | | || If boost is not active but supported, this maximum frequency will be larger than | | | | the one in ``cpuinfo``. | +---------+--------------------------------+------------------------------------------------------------------------------------+ 2). Tbench test Test and monitor the cpu changes when running tbench benchmark under the specified governor. These changes include desire performance, frequency, load, performance, energy etc. The specified governor is ondemand or schedutil. Tbench can also be tested on the ``acpi-cpufreq`` kernel driver for comparison. 3). Gitsource test Test and monitor the cpu changes when running gitsource benchmark under the specified governor. These changes include desire performance, frequency, load, time, energy etc. The specified governor is ondemand or schedutil. Gitsource can also be tested on the ``acpi-cpufreq`` kernel driver for comparison. h](j)}(h1). Basic testsh]h1). Basic tests}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj9ubj)}(hX Test prerequisite and basic functions for the ``amd-pstate`` driver. +---------+--------------------------------+------------------------------------------------------------------------------------+ | Index | Functions | Description | +=========+================================+====================================================================================+ | 1 | amd_pstate_ut_acpi_cpc_valid || Check whether the _CPC object is present in SBIOS. | | | || | | | || The detail refer to `Processor Support `_. | +---------+--------------------------------+------------------------------------------------------------------------------------+ | 2 | amd_pstate_ut_check_enabled || Check whether AMD P-State is enabled. | | | || | | | || AMD P-States and ACPI hardware P-States always can be supported in one processor. | | | | But AMD P-States has the higher priority and if it is enabled with | | | | :c:macro:`MSR_AMD_CPPC_ENABLE` or ``cppc_set_enable``, it will respond to the | | | | request from AMD P-States. | +---------+--------------------------------+------------------------------------------------------------------------------------+ | 3 | amd_pstate_ut_check_perf || Check if the each performance values are reasonable. | | | || highest_perf >= nominal_perf > lowest_nonlinear_perf > lowest_perf > 0. | +---------+--------------------------------+------------------------------------------------------------------------------------+ | 4 | amd_pstate_ut_check_freq || Check if the each frequency values and max freq when set support boost mode | | | | are reasonable. | | | || max_freq >= nominal_freq > lowest_nonlinear_freq > min_freq > 0 | | | || If boost is not active but supported, this maximum frequency will be larger than | | | | the one in ``cpuinfo``. | +---------+--------------------------------+------------------------------------------------------------------------------------+ h](j)}(hDTest prerequisite and basic functions for the ``amd-pstate`` driver.h](h.Test prerequisite and basic functions for the }(hjOhhhNhNubjg)}(h``amd-pstate``h]h amd-pstate}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjOubh driver.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjKubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jyhjvubjz)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jyhjvubjz)}(hhh]h}(h]h ]h"]h$]h&]colwidthKTuh1jyhjvubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]j)}(hIndexh]hIndex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(h Functionsh]h Functions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjvubhtbody)}(hhh](j)}(hhh](j)}(hhh]j)}(h1h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hamd_pstate_ut_acpi_cpc_validh]hamd_pstate_ut_acpi_cpc_valid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h line_block)}(hhh](hh)}(h2Check whether the _CPC object is present in SBIOS.h]h2Check whether the _CPC object is present in SBIOS.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hindentKhj1hhhKubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1hhj1jCKhhhKubj4)}(h>The detail refer to `Processor Support `_.h](hThe detail refer to }(hjMhhhNhNubj)}(h)`Processor Support `_h]hProcessor Support}(hjUhhhNhNubah}(h]h ]h"]h$]h&]nameProcessor Supportjjc uh1jhjMjKubj&)}(h h]h}(h]h ]h"]processor supportah$]h&]jjc uh1j%j, processor_supporthjMjKubh.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hjCKhj1hhhKubeh}(h]h ]h"]h$]h&]uh1j/hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(h2h]h2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hamd_pstate_ut_check_enabledh]hamd_pstate_ut_check_enabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j0)}(hhh](j4)}(h%Check whether AMD P-State is enabled.h]h%Check whether AMD P-State is enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hjCKhjhhhKubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1hhjjCKhhhKubj4)}(hAMD P-States and ACPI hardware P-States always can be supported in one processor. But AMD P-States has the higher priority and if it is enabled with :c:macro:`MSR_AMD_CPPC_ENABLE` or ``cppc_set_enable``, it will respond to the request from AMD P-States.h](hAMD P-States and ACPI hardware P-States always can be supported in one processor. But AMD P-States has the higher priority and if it is enabled with }(hjhhhNhNubh)}(h:c:macro:`MSR_AMD_CPPC_ENABLE`h]jg)}(hjh]hMSR_AMD_CPPC_ENABLE}(hjhhhNhNubah}(h]h ](j` ja c-macroeh"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]refdocj refdomainja reftypemacro refexplicitrefwarnjr MSR_AMD_CPPC_ENABLEuh1hhhhMhjubh or }(hjhhhNhNubjg)}(h``cppc_set_enable``h]hcppc_set_enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh3, it will respond to the request from AMD P-States.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hjCKhjhhhKubeh}(h]h ]h"]h$]h&]uh1j/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(h3h]h3}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj3ubah}(h]h ]h"]h$]h&]uh1jhj0ubj)}(hhh]j)}(hamd_pstate_ut_check_perfh]hamd_pstate_ut_check_perf}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjJubah}(h]h ]h"]h$]h&]uh1jhj0ubj)}(hhh]j0)}(hhh](j4)}(h4Check if the each performance values are reasonable.h]h4Check if the each performance values are reasonable.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hjCKhjdhhhKubj4)}(hGhighest_perf >= nominal_perf > lowest_nonlinear_perf > lowest_perf > 0.h]hGhighest_perf >= nominal_perf > lowest_nonlinear_perf > lowest_perf > 0.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hjCKhjdhhhKubeh}(h]h ]h"]h$]h&]uh1j/hjaubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(h4h]h4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hamd_pstate_ut_check_freqh]hamd_pstate_ut_check_freq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j0)}(hhh](j4)}(h[Check if the each frequency values and max freq when set support boost mode are reasonable.h]h[Check if the each frequency values and max freq when set support boost mode are reasonable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hjCKhjhhhKubj4)}(h?max_freq >= nominal_freq > lowest_nonlinear_freq > min_freq > 0h]h?max_freq >= nominal_freq > lowest_nonlinear_freq > min_freq > 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hjCKhjhhhKubj4)}(hhIf boost is not active but supported, this maximum frequency will be larger than the one in ``cpuinfo``.h](h\If boost is not active but supported, this maximum frequency will be larger than the one in }(hjhhhNhNubjg)}(h ``cpuinfo``h]hcpuinfo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hjCKhjhhhKubeh}(h]h ]h"]h$]h&]uh1j/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]colsKuh1jthjqubah}(h]h ]h"]h$]h&]uh1johjKubeh}(h]h ]h"]h$]h&]uh1jhhhMhj9ubj)}(h2). Tbench testh]h2). Tbench test}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj9ubj)}(hX2Test and monitor the cpu changes when running tbench benchmark under the specified governor. These changes include desire performance, frequency, load, performance, energy etc. The specified governor is ondemand or schedutil. Tbench can also be tested on the ``acpi-cpufreq`` kernel driver for comparison. h]j)}(hX1Test and monitor the cpu changes when running tbench benchmark under the specified governor. These changes include desire performance, frequency, load, performance, energy etc. The specified governor is ondemand or schedutil. Tbench can also be tested on the ``acpi-cpufreq`` kernel driver for comparison.h](hXTest and monitor the cpu changes when running tbench benchmark under the specified governor. These changes include desire performance, frequency, load, performance, energy etc. The specified governor is ondemand or schedutil. Tbench can also be tested on the }(hjEhhhNhNubjg)}(h``acpi-cpufreq``h]h acpi-cpufreq}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjEubh kernel driver for comparison.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjAubah}(h]h ]h"]h$]h&]uh1jhhhMhj9ubj)}(h3). Gitsource testh]h3). Gitsource test}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj9ubj)}(hX1Test and monitor the cpu changes when running gitsource benchmark under the specified governor. These changes include desire performance, frequency, load, time, energy etc. The specified governor is ondemand or schedutil. Gitsource can also be tested on the ``acpi-cpufreq`` kernel driver for comparison. h]j)}(hX0Test and monitor the cpu changes when running gitsource benchmark under the specified governor. These changes include desire performance, frequency, load, time, energy etc. The specified governor is ondemand or schedutil. Gitsource can also be tested on the ``acpi-cpufreq`` kernel driver for comparison.h](hXTest and monitor the cpu changes when running gitsource benchmark under the specified governor. These changes include desire performance, frequency, load, time, energy etc. The specified governor is ondemand or schedutil. Gitsource can also be tested on the }(hj}hhhNhNubjg)}(h``acpi-cpufreq``h]h acpi-cpufreq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj}ubh kernel driver for comparison.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjyubah}(h]h ]h"]h$]h&]uh1jhhhMhj9ubeh}(h]h ]h"]h$]h&]uh1jhhhMhj'ubeh}(h]h ]h"]h$]h&]uh1j]hj$hhhhhNubj^)}(hX?How to execute the tests We use test module in the kselftest frameworks to implement it. We create ``amd-pstate-ut`` module and tie it into kselftest.(for details refer to Linux Kernel Selftests [4]_). 1). Build + open the :c:macro:`CONFIG_X86_AMD_PSTATE` configuration option. + set the :c:macro:`CONFIG_X86_AMD_PSTATE_UT` configuration option to M. + make project + make selftest :: $ cd linux $ make -C tools/testing/selftests + make perf :: $ cd tools/perf/ $ make 2). Installation & Steps :: $ make -C tools/testing/selftests install INSTALL_PATH=~/kselftest $ cp tools/perf/perf /usr/bin/perf $ sudo ./kselftest/run_kselftest.sh -c amd-pstate 3). Specified test case :: $ cd ~/kselftest/amd-pstate $ sudo ./run.sh -t basic $ sudo ./run.sh -t tbench $ sudo ./run.sh -t tbench -m acpi-cpufreq $ sudo ./run.sh -t gitsource $ sudo ./run.sh -t gitsource -m acpi-cpufreq $ ./run.sh --help ./run.sh: illegal option -- - Usage: ./run.sh [OPTION...] [-h ] [-o ] [-c ] [-t ] [-p ] [-l ] [-i ] [-m ] 4). Results + basic When you finish test, you will get the following log info :: $ dmesg | grep "amd_pstate_ut" | tee log.txt [12977.570663] amd_pstate_ut: 1 amd_pstate_ut_acpi_cpc_valid success! [12977.570673] amd_pstate_ut: 2 amd_pstate_ut_check_enabled success! [12977.571207] amd_pstate_ut: 3 amd_pstate_ut_check_perf success! [12977.571212] amd_pstate_ut: 4 amd_pstate_ut_check_freq success! + tbench When you finish test, you will get selftest.tbench.csv and png images. The selftest.tbench.csv file contains the raw data and the drop of the comparative test. The png images shows the performance, energy and performan per watt of each test. Open selftest.tbench.csv : +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + Governor | Round | Des-perf | Freq | Load | Performance | Energy | Performance Per Watt | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + Unit | | | GHz | | MB/s | J | MB/J | +=================================================+==============+==========+=========+==========+=============+=========+======================+ + amd-pstate-ondemand | 1 | | | | 2504.05 | 1563.67 | 158.5378 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | 2 | | | | 2243.64 | 1430.32 | 155.2941 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | 3 | | | | 2183.88 | 1401.32 | 154.2860 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | Average | | | | 2310.52 | 1465.1 | 156.1268 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 1 | 165.329 | 1.62257 | 99.798 | 2136.54 | 1395.26 | 151.5971 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 2 | 166 | 1.49761 | 99.9993 | 2100.56 | 1380.5 | 150.6377 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 3 | 166 | 1.47806 | 99.9993 | 2084.12 | 1375.76 | 149.9737 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | Average | 165.776 | 1.53275 | 99.9322 | 2107.07 | 1383.84 | 150.7399 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 1 | | | | 2529.9 | 1564.4 | 160.0997 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 2 | | | | 2249.76 | 1432.97 | 155.4297 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 3 | | | | 2181.46 | 1406.88 | 153.5060 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | Average | | | | 2320.37 | 1468.08 | 156.4741 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 1 | | | | 2137.64 | 1385.24 | 152.7723 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 2 | | | | 2107.05 | 1372.23 | 152.0138 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 3 | | | | 2085.86 | 1365.35 | 151.2433 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | Average | | | | 2110.18 | 1374.27 | 152.0136 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand VS acpi-cpufreq-schedutil | Comprison(%) | | | | -9.0584 | -6.3899 | -2.8506 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand VS amd-pstate-schedutil | Comprison(%) | | | | 8.8053 | -5.5463 | -3.4503 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand VS amd-pstate-ondemand | Comprison(%) | | | | -0.4245 | -0.2029 | -0.2219 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil VS amd-pstate-schedutil | Comprison(%) | | | | -0.1473 | 0.6963 | -0.8378 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + gitsource When you finish test, you will get selftest.gitsource.csv and png images. The selftest.gitsource.csv file contains the raw data and the drop of the comparative test. The png images shows the performance, energy and performan per watt of each test. Open selftest.gitsource.csv : +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + Governor | Round | Des-perf | Freq | Load | Time | Energy | Performance Per Watt | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + Unit | | | GHz | | s | J | 1/J | +=================================================+==============+==========+==========+==========+=============+=========+======================+ + amd-pstate-ondemand | 1 | 50.119 | 2.10509 | 23.3076 | 475.69 | 865.78 | 0.001155027 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | 2 | 94.8006 | 1.98771 | 56.6533 | 467.1 | 839.67 | 0.001190944 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | 3 | 76.6091 | 2.53251 | 43.7791 | 467.69 | 855.85 | 0.001168429 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | Average | 73.8429 | 2.20844 | 41.2467 | 470.16 | 853.767 | 0.001171279 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 1 | 165.919 | 1.62319 | 98.3868 | 464.17 | 866.8 | 0.001153668 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 2 | 165.97 | 1.31309 | 99.5712 | 480.15 | 880.4 | 0.001135847 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 3 | 165.973 | 1.28448 | 99.9252 | 481.79 | 867.02 | 0.001153375 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | Average | 165.954 | 1.40692 | 99.2944 | 475.37 | 871.407 | 0.001147569 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 1 | | | | 2379.62 | 742.96 | 0.001345967 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 2 | | | | 441.74 | 817.49 | 0.001223256 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 3 | | | | 455.48 | 820.01 | 0.001219497 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | Average | | | | 425.613 | 793.487 | 0.001260260 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 1 | | | | 459.69 | 838.54 | 0.001192548 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 2 | | | | 466.55 | 830.89 | 0.001203528 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 3 | | | | 470.38 | 837.32 | 0.001194286 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | Average | | | | 465.54 | 835.583 | 0.001196769 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand VS acpi-cpufreq-schedutil | Comprison(%) | | | | 9.3810 | 5.3051 | -5.0379 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand VS amd-pstate-schedutil | Comprison(%) | 124.7392 | -36.2934 | 140.7329 | 1.1081 | 2.0661 | -2.0242 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand VS amd-pstate-ondemand | Comprison(%) | | | | 10.4665 | 7.5968 | -7.0605 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil VS amd-pstate-schedutil | Comprison(%) | | | | 2.1115 | 4.2873 | -4.1110 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ h](j)}(hHow to execute the testsh]hHow to execute the tests}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hWe use test module in the kselftest frameworks to implement it. We create ``amd-pstate-ut`` module and tie it into kselftest.(for details refer to Linux Kernel Selftests [4]_).h](hJWe use test module in the kselftest frameworks to implement it. We create }(hjhhhNhNubjg)}(h``amd-pstate-ut``h]h amd-pstate-ut}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubhO module and tie it into kselftest.(for details refer to Linux Kernel Selftests }(hjhhhNhNubjs)}(h[4]_h]h4}(hjhhhNhNubah}(h]id5ah ]h"]h$]h&]jid9jjuh1jrhjjKubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hX>1). Build + open the :c:macro:`CONFIG_X86_AMD_PSTATE` configuration option. + set the :c:macro:`CONFIG_X86_AMD_PSTATE_UT` configuration option to M. + make project + make selftest :: $ cd linux $ make -C tools/testing/selftests + make perf :: $ cd tools/perf/ $ make 2). Installation & Steps :: $ make -C tools/testing/selftests install INSTALL_PATH=~/kselftest $ cp tools/perf/perf /usr/bin/perf $ sudo ./kselftest/run_kselftest.sh -c amd-pstate 3). Specified test case :: $ cd ~/kselftest/amd-pstate $ sudo ./run.sh -t basic $ sudo ./run.sh -t tbench $ sudo ./run.sh -t tbench -m acpi-cpufreq $ sudo ./run.sh -t gitsource $ sudo ./run.sh -t gitsource -m acpi-cpufreq $ ./run.sh --help ./run.sh: illegal option -- - Usage: ./run.sh [OPTION...] [-h ] [-o ] [-c ] [-t ] [-p ] [-l ] [-i ] [-m ] 4). Results + basic When you finish test, you will get the following log info :: $ dmesg | grep "amd_pstate_ut" | tee log.txt [12977.570663] amd_pstate_ut: 1 amd_pstate_ut_acpi_cpc_valid success! [12977.570673] amd_pstate_ut: 2 amd_pstate_ut_check_enabled success! [12977.571207] amd_pstate_ut: 3 amd_pstate_ut_check_perf success! [12977.571212] amd_pstate_ut: 4 amd_pstate_ut_check_freq success! + tbench When you finish test, you will get selftest.tbench.csv and png images. The selftest.tbench.csv file contains the raw data and the drop of the comparative test. The png images shows the performance, energy and performan per watt of each test. Open selftest.tbench.csv : +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + Governor | Round | Des-perf | Freq | Load | Performance | Energy | Performance Per Watt | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + Unit | | | GHz | | MB/s | J | MB/J | +=================================================+==============+==========+=========+==========+=============+=========+======================+ + amd-pstate-ondemand | 1 | | | | 2504.05 | 1563.67 | 158.5378 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | 2 | | | | 2243.64 | 1430.32 | 155.2941 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | 3 | | | | 2183.88 | 1401.32 | 154.2860 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | Average | | | | 2310.52 | 1465.1 | 156.1268 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 1 | 165.329 | 1.62257 | 99.798 | 2136.54 | 1395.26 | 151.5971 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 2 | 166 | 1.49761 | 99.9993 | 2100.56 | 1380.5 | 150.6377 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 3 | 166 | 1.47806 | 99.9993 | 2084.12 | 1375.76 | 149.9737 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | Average | 165.776 | 1.53275 | 99.9322 | 2107.07 | 1383.84 | 150.7399 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 1 | | | | 2529.9 | 1564.4 | 160.0997 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 2 | | | | 2249.76 | 1432.97 | 155.4297 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 3 | | | | 2181.46 | 1406.88 | 153.5060 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | Average | | | | 2320.37 | 1468.08 | 156.4741 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 1 | | | | 2137.64 | 1385.24 | 152.7723 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 2 | | | | 2107.05 | 1372.23 | 152.0138 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 3 | | | | 2085.86 | 1365.35 | 151.2433 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | Average | | | | 2110.18 | 1374.27 | 152.0136 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand VS acpi-cpufreq-schedutil | Comprison(%) | | | | -9.0584 | -6.3899 | -2.8506 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand VS amd-pstate-schedutil | Comprison(%) | | | | 8.8053 | -5.5463 | -3.4503 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand VS amd-pstate-ondemand | Comprison(%) | | | | -0.4245 | -0.2029 | -0.2219 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil VS amd-pstate-schedutil | Comprison(%) | | | | -0.1473 | 0.6963 | -0.8378 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + gitsource When you finish test, you will get selftest.gitsource.csv and png images. The selftest.gitsource.csv file contains the raw data and the drop of the comparative test. The png images shows the performance, energy and performan per watt of each test. Open selftest.gitsource.csv : +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + Governor | Round | Des-perf | Freq | Load | Time | Energy | Performance Per Watt | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + Unit | | | GHz | | s | J | 1/J | +=================================================+==============+==========+==========+==========+=============+=========+======================+ + amd-pstate-ondemand | 1 | 50.119 | 2.10509 | 23.3076 | 475.69 | 865.78 | 0.001155027 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | 2 | 94.8006 | 1.98771 | 56.6533 | 467.1 | 839.67 | 0.001190944 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | 3 | 76.6091 | 2.53251 | 43.7791 | 467.69 | 855.85 | 0.001168429 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | Average | 73.8429 | 2.20844 | 41.2467 | 470.16 | 853.767 | 0.001171279 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 1 | 165.919 | 1.62319 | 98.3868 | 464.17 | 866.8 | 0.001153668 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 2 | 165.97 | 1.31309 | 99.5712 | 480.15 | 880.4 | 0.001135847 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 3 | 165.973 | 1.28448 | 99.9252 | 481.79 | 867.02 | 0.001153375 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | Average | 165.954 | 1.40692 | 99.2944 | 475.37 | 871.407 | 0.001147569 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 1 | | | | 2379.62 | 742.96 | 0.001345967 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 2 | | | | 441.74 | 817.49 | 0.001223256 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 3 | | | | 455.48 | 820.01 | 0.001219497 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | Average | | | | 425.613 | 793.487 | 0.001260260 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 1 | | | | 459.69 | 838.54 | 0.001192548 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 2 | | | | 466.55 | 830.89 | 0.001203528 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 3 | | | | 470.38 | 837.32 | 0.001194286 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | Average | | | | 465.54 | 835.583 | 0.001196769 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand VS acpi-cpufreq-schedutil | Comprison(%) | | | | 9.3810 | 5.3051 | -5.0379 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand VS amd-pstate-schedutil | Comprison(%) | 124.7392 | -36.2934 | 140.7329 | 1.1081 | 2.0661 | -2.0242 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand VS amd-pstate-ondemand | Comprison(%) | | | | 10.4665 | 7.5968 | -7.0605 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil VS amd-pstate-schedutil | Comprison(%) | | | | 2.1115 | 4.2873 | -4.1110 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ h](j)}(h 1). Buildh]h 1). Build}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hX+ open the :c:macro:`CONFIG_X86_AMD_PSTATE` configuration option. + set the :c:macro:`CONFIG_X86_AMD_PSTATE_UT` configuration option to M. + make project + make selftest :: $ cd linux $ make -C tools/testing/selftests + make perf :: $ cd tools/perf/ $ make h]jY)}(hhh](j^)}(h?open the :c:macro:`CONFIG_X86_AMD_PSTATE` configuration option.h]j)}(hjh](h open the }(hjhhhNhNubh)}(h :c:macro:`CONFIG_X86_AMD_PSTATE`h]jg)}(hjh]hCONFIG_X86_AMD_PSTATE}(hjhhhNhNubah}(h]h ](j` ja c-macroeh"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]refdocj refdomainja reftypemacro refexplicitrefwarnjr CONFIG_X86_AMD_PSTATEuh1hhhhMhjubh configuration option.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j]hj ubj^)}(hFset the :c:macro:`CONFIG_X86_AMD_PSTATE_UT` configuration option to M.h]j)}(hjJh](hset the }(hjLhhhNhNubh)}(h#:c:macro:`CONFIG_X86_AMD_PSTATE_UT`h]jg)}(hjUh]hCONFIG_X86_AMD_PSTATE_UT}(hjWhhhNhNubah}(h]h ](j` ja c-macroeh"]h$]h&]uh1jfhjSubah}(h]h ]h"]h$]h&]refdocj refdomainja reftypemacro refexplicitrefwarnjr CONFIG_X86_AMD_PSTATE_UTuh1hhhhMhjLubh configuration option to M.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjHubah}(h]h ]h"]h$]h&]uh1j]hj ubj^)}(h make projecth]j)}(hjh]h make project}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j]hj ubj^)}(hCmake selftest :: $ cd linux $ make -C tools/testing/selftests h](j)}(hmake selftest ::h]h make selftest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(h,$ cd linux $ make -C tools/testing/selftestsh]h,$ cd linux $ make -C tools/testing/selftests}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhMhjubeh}(h]h ]h"]h$]h&]uh1j]hj ubj^)}(h+make perf :: $ cd tools/perf/ $ make h](j)}(h make perf ::h]h make perf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(h$ cd tools/perf/ $ makeh]h$ cd tools/perf/ $ make}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhMhjubeh}(h]h ]h"]h$]h&]uh1j]hj ubeh}(h]h ]h"]h$]h&]j+uh1jXhhhMhjubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(h2). Installation & Steps ::h]h2). Installation & Steps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(h$ make -C tools/testing/selftests install INSTALL_PATH=~/kselftest $ cp tools/perf/perf /usr/bin/perf $ sudo ./kselftest/run_kselftest.sh -c amd-pstateh]h$ make -C tools/testing/selftests install INSTALL_PATH=~/kselftest $ cp tools/perf/perf /usr/bin/perf $ sudo ./kselftest/run_kselftest.sh -c amd-pstate}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhMhjubj)}(h3). Specified test case ::h]h3). Specified test case}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hX$ cd ~/kselftest/amd-pstate $ sudo ./run.sh -t basic $ sudo ./run.sh -t tbench $ sudo ./run.sh -t tbench -m acpi-cpufreq $ sudo ./run.sh -t gitsource $ sudo ./run.sh -t gitsource -m acpi-cpufreq $ ./run.sh --help ./run.sh: illegal option -- - Usage: ./run.sh [OPTION...] [-h ] [-o ] [-c ] [-t ] [-p ] [-l ] [-i ] [-m ]h]hX$ cd ~/kselftest/amd-pstate $ sudo ./run.sh -t basic $ sudo ./run.sh -t tbench $ sudo ./run.sh -t tbench -m acpi-cpufreq $ sudo ./run.sh -t gitsource $ sudo ./run.sh -t gitsource -m acpi-cpufreq $ ./run.sh --help ./run.sh: illegal option -- - Usage: ./run.sh [OPTION...] [-h ] [-o ] [-c ] [-t ] [-p ] [-l ] [-i ] [-m ]}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhMhjubj)}(h 4). Resultsh]h 4). Results}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hX7+ basic When you finish test, you will get the following log info :: $ dmesg | grep "amd_pstate_ut" | tee log.txt [12977.570663] amd_pstate_ut: 1 amd_pstate_ut_acpi_cpc_valid success! [12977.570673] amd_pstate_ut: 2 amd_pstate_ut_check_enabled success! [12977.571207] amd_pstate_ut: 3 amd_pstate_ut_check_perf success! [12977.571212] amd_pstate_ut: 4 amd_pstate_ut_check_freq success! + tbench When you finish test, you will get selftest.tbench.csv and png images. The selftest.tbench.csv file contains the raw data and the drop of the comparative test. The png images shows the performance, energy and performan per watt of each test. Open selftest.tbench.csv : +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + Governor | Round | Des-perf | Freq | Load | Performance | Energy | Performance Per Watt | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + Unit | | | GHz | | MB/s | J | MB/J | +=================================================+==============+==========+=========+==========+=============+=========+======================+ + amd-pstate-ondemand | 1 | | | | 2504.05 | 1563.67 | 158.5378 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | 2 | | | | 2243.64 | 1430.32 | 155.2941 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | 3 | | | | 2183.88 | 1401.32 | 154.2860 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | Average | | | | 2310.52 | 1465.1 | 156.1268 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 1 | 165.329 | 1.62257 | 99.798 | 2136.54 | 1395.26 | 151.5971 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 2 | 166 | 1.49761 | 99.9993 | 2100.56 | 1380.5 | 150.6377 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 3 | 166 | 1.47806 | 99.9993 | 2084.12 | 1375.76 | 149.9737 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | Average | 165.776 | 1.53275 | 99.9322 | 2107.07 | 1383.84 | 150.7399 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 1 | | | | 2529.9 | 1564.4 | 160.0997 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 2 | | | | 2249.76 | 1432.97 | 155.4297 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 3 | | | | 2181.46 | 1406.88 | 153.5060 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | Average | | | | 2320.37 | 1468.08 | 156.4741 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 1 | | | | 2137.64 | 1385.24 | 152.7723 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 2 | | | | 2107.05 | 1372.23 | 152.0138 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 3 | | | | 2085.86 | 1365.35 | 151.2433 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | Average | | | | 2110.18 | 1374.27 | 152.0136 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand VS acpi-cpufreq-schedutil | Comprison(%) | | | | -9.0584 | -6.3899 | -2.8506 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand VS amd-pstate-schedutil | Comprison(%) | | | | 8.8053 | -5.5463 | -3.4503 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand VS amd-pstate-ondemand | Comprison(%) | | | | -0.4245 | -0.2029 | -0.2219 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil VS amd-pstate-schedutil | Comprison(%) | | | | -0.1473 | 0.6963 | -0.8378 | +-------------------------------------------------+--------------+----------+---------+----------+-------------+---------+----------------------+ + gitsource When you finish test, you will get selftest.gitsource.csv and png images. The selftest.gitsource.csv file contains the raw data and the drop of the comparative test. The png images shows the performance, energy and performan per watt of each test. Open selftest.gitsource.csv : +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + Governor | Round | Des-perf | Freq | Load | Time | Energy | Performance Per Watt | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + Unit | | | GHz | | s | J | 1/J | +=================================================+==============+==========+==========+==========+=============+=========+======================+ + amd-pstate-ondemand | 1 | 50.119 | 2.10509 | 23.3076 | 475.69 | 865.78 | 0.001155027 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | 2 | 94.8006 | 1.98771 | 56.6533 | 467.1 | 839.67 | 0.001190944 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | 3 | 76.6091 | 2.53251 | 43.7791 | 467.69 | 855.85 | 0.001168429 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand | Average | 73.8429 | 2.20844 | 41.2467 | 470.16 | 853.767 | 0.001171279 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 1 | 165.919 | 1.62319 | 98.3868 | 464.17 | 866.8 | 0.001153668 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 2 | 165.97 | 1.31309 | 99.5712 | 480.15 | 880.4 | 0.001135847 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | 3 | 165.973 | 1.28448 | 99.9252 | 481.79 | 867.02 | 0.001153375 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-schedutil | Average | 165.954 | 1.40692 | 99.2944 | 475.37 | 871.407 | 0.001147569 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 1 | | | | 2379.62 | 742.96 | 0.001345967 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 2 | | | | 441.74 | 817.49 | 0.001223256 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | 3 | | | | 455.48 | 820.01 | 0.001219497 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand | Average | | | | 425.613 | 793.487 | 0.001260260 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 1 | | | | 459.69 | 838.54 | 0.001192548 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 2 | | | | 466.55 | 830.89 | 0.001203528 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | 3 | | | | 470.38 | 837.32 | 0.001194286 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil | Average | | | | 465.54 | 835.583 | 0.001196769 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand VS acpi-cpufreq-schedutil | Comprison(%) | | | | 9.3810 | 5.3051 | -5.0379 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + amd-pstate-ondemand VS amd-pstate-schedutil | Comprison(%) | 124.7392 | -36.2934 | 140.7329 | 1.1081 | 2.0661 | -2.0242 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-ondemand VS amd-pstate-ondemand | Comprison(%) | | | | 10.4665 | 7.5968 | -7.0605 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ + acpi-cpufreq-schedutil VS amd-pstate-schedutil | Comprison(%) | | | | 2.1115 | 4.2873 | -4.1110 | +-------------------------------------------------+--------------+----------+----------+----------+-------------+---------+----------------------+ h](jY)}(hhh]j^)}(hbasic h]j)}(hbasich]hbasic}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj? ubah}(h]h ]h"]h$]h&]uh1j]hj< ubah}(h]h ]h"]h$]h&]jjuh1jXhhhMhj8 ubj)}(hXWhen you finish test, you will get the following log info :: $ dmesg | grep "amd_pstate_ut" | tee log.txt [12977.570663] amd_pstate_ut: 1 amd_pstate_ut_acpi_cpc_valid success! [12977.570673] amd_pstate_ut: 2 amd_pstate_ut_check_enabled success! [12977.571207] amd_pstate_ut: 3 amd_pstate_ut_check_perf success! [12977.571212] amd_pstate_ut: 4 amd_pstate_ut_check_freq success! h](j)}(h1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj0ubj)}(hhh]j)}(hLoadh]hLoad}(hjY1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM+hjV1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj0ubj)}(hhh]j)}(hTimeh]hTime}(hjq1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM+hjn1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj0ubj)}(hhh]j)}(hEnergyh]hEnergy}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM+hj1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj0ubj)}(hhh]j)}(hPerformance Per Watth]hPerformance Per Watt}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM+hj1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj0ubj)}(hhh](j)}(hhh]j)}(hUnith]hUnit}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM-hj1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj1ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj1ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj1ubj)}(hhh]j)}(hGHzh]hGHz}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM-hj1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj1ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj1ubj)}(hhh]j)}(hsh]hs}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM-hj2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj1ubj)}(hhh]j)}(hjO"h]hJ}(hj12hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM-hj.2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj1ubj)}(hhh]j)}(h1/Jh]h1/J}(hjH2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM-hjE2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubj)}(hhh](j)}(hhh](j)}(hhh]j)}(hamd-pstate-ondemandh]hamd-pstate-ondemand}(hj{2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM/hjx2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhju2ubj)}(hhh]j)}(hjh]h1}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM/hj2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhju2ubj)}(hhh]j)}(h50.119h]h50.119}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM/hj2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhju2ubj)}(hhh]j)}(h2.10509h]h2.10509}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM/hj2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhju2ubj)}(hhh]j)}(h23.3076h]h23.3076}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM/hj2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhju2ubj)}(hhh]j)}(h475.69h]h475.69}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM/hj2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhju2ubj)}(hhh]j)}(h865.78h]h865.78}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM/hj3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhju2ubj)}(hhh]j)}(h 0.001155027h]h 0.001155027}(hj"3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM/hj3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhju2ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-ondemandh]hamd-pstate-ondemand}(hjL3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM1hjI3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjF3ubj)}(hhh]j)}(hjh]h2}(hjd3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM1hja3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjF3ubj)}(hhh]j)}(h94.8006h]h94.8006}(hj{3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM1hjx3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjF3ubj)}(hhh]j)}(h1.98771h]h1.98771}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM1hj3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjF3ubj)}(hhh]j)}(h56.6533h]h56.6533}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM1hj3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjF3ubj)}(hhh]j)}(h467.1h]h467.1}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM1hj3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjF3ubj)}(hhh]j)}(h839.67h]h839.67}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM1hj3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjF3ubj)}(hhh]j)}(h 0.001190944h]h 0.001190944}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM1hj3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjF3ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-ondemandh]hamd-pstate-ondemand}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM3hj4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(hj8h]h3}(hj54hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM3hj24ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(h76.6091h]h76.6091}(hjL4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM3hjI4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(h2.53251h]h2.53251}(hjd4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM3hja4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(h43.7791h]h43.7791}(hj|4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM3hjy4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(h467.69h]h467.69}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM3hj4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(h855.85h]h855.85}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM3hj4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(h 0.001168429h]h 0.001168429}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM3hj4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-ondemandh]hamd-pstate-ondemand}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM5hj4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(hAverageh]hAverage}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM5hj5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(h73.8429h]h73.8429}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM5hj5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(h2.20844h]h2.20844}(hj65hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM5hj35ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(h41.2467h]h41.2467}(hjN5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM5hjK5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(h470.16h]h470.16}(hjf5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM5hjc5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(h853.767h]h853.767}(hj~5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM5hj{5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubj)}(hhh]j)}(h 0.001171279h]h 0.001171279}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM5hj5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-schedutilh]hamd-pstate-schedutil}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM7hj5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj5ubj)}(hhh]j)}(hjh]h1}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM7hj5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj5ubj)}(hhh]j)}(h165.919h]h165.919}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM7hj5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj5ubj)}(hhh]j)}(h1.62319h]h1.62319}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM7hj6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj5ubj)}(hhh]j)}(h98.3868h]h98.3868}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM7hj6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj5ubj)}(hhh]j)}(h464.17h]h464.17}(hj76hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM7hj46ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj5ubj)}(hhh]j)}(h866.8h]h866.8}(hjO6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM7hjL6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj5ubj)}(hhh]j)}(h 0.001153668h]h 0.001153668}(hjg6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM7hjd6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-schedutilh]hamd-pstate-schedutil}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM9hj6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(hjh]h2}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM9hj6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h165.97h]h165.97}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM9hj6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h1.31309h]h1.31309}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM9hj6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h99.5712h]h99.5712}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM9hj6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h480.15h]h480.15}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM9hj7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h880.4h]h880.4}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM9hj7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h 0.001135847h]h 0.001135847}(hj87hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM9hj57ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-schedutilh]hamd-pstate-schedutil}(hjb7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM;hj_7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj\7ubj)}(hhh]j)}(hj8h]h3}(hjz7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM;hjw7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj\7ubj)}(hhh]j)}(h165.973h]h165.973}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM;hj7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj\7ubj)}(hhh]j)}(h1.28448h]h1.28448}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM;hj7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj\7ubj)}(hhh]j)}(h99.9252h]h99.9252}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM;hj7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj\7ubj)}(hhh]j)}(h481.79h]h481.79}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM;hj7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj\7ubj)}(hhh]j)}(h867.02h]h867.02}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM;hj7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj\7ubj)}(hhh]j)}(h 0.001153375h]h 0.001153375}(hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM;hj8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj\7ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-schedutilh]hamd-pstate-schedutil}(hj38hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM=hj08ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj-8ubj)}(hhh]j)}(hAverageh]hAverage}(hjK8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM=hjH8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj-8ubj)}(hhh]j)}(h165.954h]h165.954}(hjc8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM=hj`8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj-8ubj)}(hhh]j)}(h1.40692h]h1.40692}(hj{8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM=hjx8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj-8ubj)}(hhh]j)}(h99.2944h]h99.2944}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM=hj8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj-8ubj)}(hhh]j)}(h475.37h]h475.37}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM=hj8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj-8ubj)}(hhh]j)}(h871.407h]h871.407}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM=hj8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj-8ubj)}(hhh]j)}(h 0.001147569h]h 0.001147569}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM=hj8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj-8ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-ondemandh]hacpi-cpufreq-ondemand}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM?hj9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj8ubj)}(hhh]j)}(hjh]h1}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM?hj9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj8ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj8ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj8ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj8ubj)}(hhh]j)}(h2379.62h]h2379.62}(hjR9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM?hjO9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj8ubj)}(hhh]j)}(h742.96h]h742.96}(hjj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM?hjg9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj8ubj)}(hhh]j)}(h 0.001345967h]h 0.001345967}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM?hj9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-ondemandh]hacpi-cpufreq-ondemand}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMAhj9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9ubj)}(hhh]j)}(hjh]h2}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMAhj9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj9ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj9ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj9ubj)}(hhh]j)}(h441.74h]h441.74}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMAhj9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9ubj)}(hhh]j)}(h817.49h]h817.49}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMAhj:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9ubj)}(hhh]j)}(h 0.001223256h]h 0.001223256}(hj):hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMAhj&:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-ondemandh]hacpi-cpufreq-ondemand}(hjS:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMChjP:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjM:ubj)}(hhh]j)}(hj8h]h3}(hjk:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMChjh:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjM:ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjM:ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjM:ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjM:ubj)}(hhh]j)}(h455.48h]h455.48}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMChj:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjM:ubj)}(hhh]j)}(h820.01h]h820.01}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMChj:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjM:ubj)}(hhh]j)}(h 0.001219497h]h 0.001219497}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMChj:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjM:ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-ondemandh]hacpi-cpufreq-ondemand}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMEhj:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj:ubj)}(hhh]j)}(hAverageh]hAverage}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMEhj;ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj:ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj:ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj:ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj:ubj)}(hhh]j)}(h425.613h]h425.613}(hjH;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMEhjE;ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj:ubj)}(hhh]j)}(h793.487h]h793.487}(hj`;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMEhj];ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj:ubj)}(hhh]j)}(h 0.001260260h]h 0.001260260}(hjx;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMEhju;ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-schedutilh]hacpi-cpufreq-schedutil}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMGhj;ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;ubj)}(hhh]j)}(hjh]h1}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMGhj;ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj;ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj;ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj;ubj)}(hhh]j)}(h459.69h]h459.69}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMGhj;ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;ubj)}(hhh]j)}(h838.54h]h838.54}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMGhj<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;ubj)}(hhh]j)}(h 0.001192548h]h 0.001192548}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMGhj<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-schedutilh]hacpi-cpufreq-schedutil}(hjI<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMIhjF<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjC<ubj)}(hhh]j)}(hjh]h2}(hja<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMIhj^<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjC<ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjC<ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjC<ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjC<ubj)}(hhh]j)}(h466.55h]h466.55}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMIhj<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjC<ubj)}(hhh]j)}(h830.89h]h830.89}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMIhj<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjC<ubj)}(hhh]j)}(h 0.001203528h]h 0.001203528}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMIhj<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjC<ubeh}(h]h ]h"]h$]h&]uh1jhKjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-schedutilh]hacpi-cpufreq-schedutil}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMKhj<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]j)}(hj8h]h3}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMKhj=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]j)}(h470.38h]h470.38}(hj==hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMKhj:=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]j)}(h837.32h]h837.32}(hjU=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMKhjR=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]j)}(h 0.001194286h]h 0.001194286}(hjm=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMKhjj=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-schedutilh]hacpi-cpufreq-schedutil}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMMhj=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj=ubj)}(hhh]j)}(hAverageh]hAverage}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMMhj=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj=ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj=ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj=ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj=ubj)}(hhh]j)}(h465.54h]h465.54}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMMhj=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj=ubj)}(hhh]j)}(h835.583h]h835.583}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMMhj=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj=ubj)}(hhh]j)}(h 0.001196769h]h 0.001196769}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMMhj>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(h/acpi-cpufreq-ondemand VS acpi-cpufreq-schedutilh]h/acpi-cpufreq-ondemand VS acpi-cpufreq-schedutil}(hj?>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMOhj<>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9>ubj)}(hhh]j)}(h Comprison(%)h]h Comprison(%)}(hjW>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMOhjT>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9>ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj9>ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj9>ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj9>ubj)}(hhh]j)}(h9.3810h]h9.3810}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMOhj>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9>ubj)}(hhh]j)}(h5.3051h]h5.3051}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMOhj>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9>ubj)}(hhh]j)}(h-5.0379h]h-5.0379}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMOhj>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9>ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(h+amd-pstate-ondemand VS amd-pstate-schedutilh]h+amd-pstate-ondemand VS amd-pstate-schedutil}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMQhj>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj>ubj)}(hhh]j)}(h Comprison(%)h]h Comprison(%)}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMQhj>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj>ubj)}(hhh]j)}(h124.7392h]h124.7392}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMQhj?ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj>ubj)}(hhh]j)}(h-36.2934h]h-36.2934}(hj/?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMQhj,?ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj>ubj)}(hhh]j)}(h140.7329h]h140.7329}(hjG?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMQhjD?ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj>ubj)}(hhh]j)}(h1.1081h]h1.1081}(hj_?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMQhj\?ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj>ubj)}(hhh]j)}(h2.0661h]h2.0661}(hjw?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMQhjt?ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj>ubj)}(hhh]j)}(h-2.0242h]h-2.0242}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMQhj?ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(h,acpi-cpufreq-ondemand VS amd-pstate-ondemandh]h,acpi-cpufreq-ondemand VS amd-pstate-ondemand}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMShj?ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj?ubj)}(hhh]j)}(h Comprison(%)h]h Comprison(%)}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMShj?ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj?ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj?ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj?ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj?ubj)}(hhh]j)}(h10.4665h]h10.4665}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMShj@ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj?ubj)}(hhh]j)}(h7.5968h]h7.5968}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMShj@ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj?ubj)}(hhh]j)}(h-7.0605h]h-7.0605}(hj7@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMShj4@ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh](j)}(hhh]j)}(h.acpi-cpufreq-schedutil VS amd-pstate-schedutilh]h.acpi-cpufreq-schedutil VS amd-pstate-schedutil}(hja@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMUhj^@ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj[@ubj)}(hhh]j)}(h Comprison(%)h]h Comprison(%)}(hjy@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMUhjv@ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj[@ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj[@ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj[@ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj[@ubj)}(hhh]j)}(h2.1115h]h2.1115}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMUhj@ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj[@ubj)}(hhh]j)}(h4.2873h]h4.2873}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMUhj@ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj[@ubj)}(hhh]j)}(h-4.1110h]h-4.1110}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMUhj@ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj[@ubeh}(h]h ]h"]h$]h&]uh1jhjr2ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjr2ubeh}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]colsKuh1jthj0ubah}(h]h ]h"]h$]h&]uh1johj0ubeh}(h]h ]h"]h$]h&]uh1jhhhM%hj8 ubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubeh}(h]h ]h"]h$]h&]uh1j]hj$hhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1j"hjhhhhhMubeh}(h]unit-tests-for-amd-pstateah ]h"]unit tests for amd-pstateah$]h&]uh1j[hjhhhhhMxubeh}(h]diagnostics-and-tuningah ]h"]diagnostics and tuningah$]h&]uh1j[hj]hhhhhM7ubj\)}(hhh](ja)}(h Referenceh]h Reference}(hjLAhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjIAhhhhhMYubhfootnote)}(hxAMD64 Architecture Programmer's Manual Volume 2: System Programming, https://docs.amd.com/v/u/en-US/24593_3.44_APM_Vol2 h](hlabel)}(h1h]h1}(hjbAhhhNhNubah}(h]h ]h"]h$]h&]uh1j`Ahj\Aubj)}(hwAMD64 Architecture Programmer's Manual Volume 2: System Programming, https://docs.amd.com/v/u/en-US/24593_3.44_APM_Vol2h](hGAMD64 Architecture Programmer’s Manual Volume 2: System Programming, }(hjpAhhhNhNubj)}(h2https://docs.amd.com/v/u/en-US/24593_3.44_APM_Vol2h]h2https://docs.amd.com/v/u/en-US/24593_3.44_APM_Vol2}(hjxAhhhNhNubah}(h]h ]h"]h$]h&]refurijzAuh1jhjpAubeh}(h]h ]h"]h$]h&]uh1jhhhM[hj\Aubeh}(h]jah ]h"]1ah$]h&]j~ajjuh1jZAhhhM[hjIAhhjKubj[A)}(hAdvanced Configuration and Power Interface Specification, https://uefi.org/sites/default/files/resources/ACPI_Spec_6_4_Jan22.pdf h](jaA)}(h2h]h2}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j`AhjAubj)}(hAdvanced Configuration and Power Interface Specification, https://uefi.org/sites/default/files/resources/ACPI_Spec_6_4_Jan22.pdfh](h:Advanced Configuration and Power Interface Specification, }(hjAhhhNhNubj)}(hFhttps://uefi.org/sites/default/files/resources/ACPI_Spec_6_4_Jan22.pdfh]hFhttps://uefi.org/sites/default/files/resources/ACPI_Spec_6_4_Jan22.pdf}(hjAhhhNhNubah}(h]h ]h"]h$]h&]refurijAuh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhhhM^hjAubeh}(h]jah ]h"]2ah$]h&]jajjuh1jZAhhhM^hjIAhhjKubj[A)}(hProcessor Programming Reference (PPR) for AMD Family 19h Model 51h, Revision A1 Processors https://docs.amd.com/v/u/en-US/56569-A1-PUB_3.03 h](jaA)}(h3h]h3}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j`AhjAubj)}(hProcessor Programming Reference (PPR) for AMD Family 19h Model 51h, Revision A1 Processors https://docs.amd.com/v/u/en-US/56569-A1-PUB_3.03h](h[Processor Programming Reference (PPR) for AMD Family 19h Model 51h, Revision A1 Processors }(hjAhhhNhNubj)}(h0https://docs.amd.com/v/u/en-US/56569-A1-PUB_3.03h]h0https://docs.amd.com/v/u/en-US/56569-A1-PUB_3.03}(hjAhhhNhNubah}(h]h ]h"]h$]h&]refurijAuh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhhhMahjAubeh}(h]j ah ]h"]3ah$]h&]j ajjuh1jZAhhhMahjIAhhjKubj[A)}(hWLinux Kernel Selftests, https://www.kernel.org/doc/html/latest/dev-tools/kselftest.htmlh](jaA)}(h4h]h4}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j`AhjBubj)}(hWLinux Kernel Selftests, https://www.kernel.org/doc/html/latest/dev-tools/kselftest.htmlh](hLinux Kernel Selftests, }(hjBhhhNhNubj)}(h?https://www.kernel.org/doc/html/latest/dev-tools/kselftest.htmlh]h?https://www.kernel.org/doc/html/latest/dev-tools/kselftest.html}(hjBhhhNhNubah}(h]h ]h"]h$]h&]refurijBuh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhhhMdhjBubeh}(h]jah ]h"]4ah$]h&]jajjuh1jZAhhhMdhjIAhhjKubeh}(h] referenceah ]h"] referenceah$]h&]uh1j[hj]hhhhhMYubeh}(h])amd-pstate-cpu-performance-scaling-driverah ]h"])amd-pstate cpu performance scaling driverah$]h&]uh1j[hhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j`N generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjhBerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets](j! jB j j?jeesubstitution_defs}(hhjhjjj jj/j#j>j2jMjAj\jPjkj_jzjnjj}jjjjjjjjjjjjjjjjjjjjj.j"j=j1jLj@j[jOjjj^jyjmjj|jjjjjjjjjjjjjjjjjjjjj-j!j<j0jKj?jZjNjij]jxjljj{jjjjjjjjjjjjjjjjjjjjj,j j;j/jJj>jYjMjhj\jwjkjjzjjjjjjjjjjjjjjjjj jjjj+jj:j.jIj=jXjLusubstitution_names}(amphaposjastjbrvbarj bsolj/centj>colonjMcommaj\commatjkcopyjzcurrenjdarrjdegjdividejdollarjequalsjexcljfrac12jfrac14jfrac18jfrac34jfrac38j.frac58j=frac78jLgtj[halfjjhorbarjyhyphenjiexcljiquestjlaquojlarrjlcubjldquojlowbarjlparjlsqbjlsquojltj-microj<middotjKnbspjZnotjinumjxohmjordfjordmjparajpercntjperiodjplusjplusmnjpoundjquestjquotjraquoj,rarrj;rcubjJrdquojYregjhrparjwrsqbjrsquojsectjsemijshyjsoljsungjsup1jsup2jsup3j timesjtradej+uarrj:verbarjIyenjXurefnames}(1]jta2]japerf_cap](j! j jB j2 j j j?j/e3]jx aprocessor_support](jejUe4]jaurefids}(j1](j'j! jB j j?ejc ](jY jeeunameids}(jCBj@Bjjjjjj1jjjhjejjjjjjjjj^j[jjjjjjji jf j1 jc j0 j- jS jP j( j% jjjjjjjjj jjjjjjjjjjjjJjGjBj?jjjFAjCAjjjjj>Aj;Aj;Bj8BjAjjAjjAj j3Bju nametypes}(jCBjjjjjhjjjjj^jjjji j1 j0 jS j( jjjjj jjjjjjJjBjjFAjjj>Aj;BjAjAjAj3Buh}(j@Bj]jj j~jtjjjjj1j3jj3jejDjjkjjjjjjj[j,jjajjjjjf j jc jl j- jl j jx jP j j% jV jj6 jjjjjjjjjj#jjjjjjjjjGjj?jjjMjCAjjjjjj;Ajjjj8BjIAjj\AjjAj jAjjBu footnote_refs}(jB]jtajB]jajB]jx ajB]jau citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes](j\AjAjAjBe citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jvBK sRparse_messages]transform_messages](hsystem_message)}(hhh]j)}(hhh]h6Hyperlink target "full msr support" is not referenced.}hj/Csbah}(h]h ]h"]h$]h&]uh1jhj,Cubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehnjlineKuh1j*Cubj+C)}(hhh]j)}(hhh]h;Hyperlink target "shared memory support" is not referenced.}hjJCsbah}(h]h ]h"]h$]h&]uh1jhjGCubah}(h]h ]h"]h$]h&]levelKtypejDCsourcehnjlineKuh1j*Cubj+C)}(hhh]j)}(hhh]hEHyperlink target "amd cppc performance capability" is not referenced.}hjdCsbah}(h]h ]h"]h$]h&]uh1jhjaCubah}(h]h ]h"]h$]h&]levelKtypejDCsourcehnjlineKuh1j*Cubj+C)}(hhh]j)}(hhh]hEHyperlink target "amd cppc performance capability" is not referenced.}hj~Csbah}(h]h ]h"]h$]h&]uh1jhj{Cubah}(h]h ]h"]h$]h&]levelKtypejDCsourcehnjlineMuh1j*Cubj+C)}(hhh]j)}(hhh]h7Hyperlink target "processor support" is not referenced.}hjCsbah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]levelKtypejDCsourcehnjlineKuh1j*Cube transformerN include_log]+Documentation/admin-guide/pm/amd-pstate.rst(NNNNta decorationNhhub.