sphinx.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]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*}hhsbah}(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\}hjsbah}(h]h ]h"]bsolah$]h&]uh1hhhhK hhhhubh)}(h*.. |cent| unicode:: U+000A2 .. CENT SIGNh]h¢}hjsbah}(h]h ]h"]centah$]h&]uh1hhhhK hhhhubh)}(h&.. |colon| unicode:: U+0003A .. COLONh]h:}hj-sbah}(h]h ]h"]colonah$]h&]uh1hhhhK hhhhubh)}(h&.. |comma| unicode:: U+0002C .. COMMAh]h,}hj<sbah}(h]h ]h"]commaah$]h&]uh1hhhhKhhhhubh)}(h... |commat| unicode:: U+00040 .. COMMERCIAL ATh]h@}hjKsbah}(h]h ]h"]commatah$]h&]uh1hhhhKhhhhubh)}(h/.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGNh]h©}hjZsbah}(h]h ]h"]copyah$]h&]uh1hhhhKhhhhubh)}(h... |curren| unicode:: U+000A4 .. CURRENCY SIGNh]h¤}hjisbah}(h]h ]h"]currenah$]h&]uh1hhhhKhhhhubh)}(h0.. |darr| unicode:: U+02193 .. DOWNWARDS ARROWh]h↓}hjxsbah}(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⅜}hjsbah}(h]h ]h"]frac38ah$]h&]uh1hhhhKhhhhubh)}(h=.. |frac58| unicode:: U+0215D .. VULGAR FRACTION FIVE EIGHTHSh]h⅝}hjsbah}(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>}hj;sbah}(h]h ]h"]gtah$]h&]uh1hhhhKhhhhubh)}(h9.. |half| unicode:: U+000BD .. VULGAR FRACTION ONE HALFh]h½}hjJsbah}(h]h ]h"]halfah$]h&]uh1hhhhK hhhhubh)}(h/.. |horbar| unicode:: U+02015 .. HORIZONTAL BARh]h―}hjYsbah}(h]h ]h"]horbarah$]h&]uh1hhhhK!hhhhubh)}(h'.. |hyphen| unicode:: U+02010 .. HYPHENh]h‐}hjhsbah}(h]h ]h"]hyphenah$]h&]uh1hhhhK"hhhhubh)}(h:.. |iexcl| unicode:: U+000A1 .. INVERTED EXCLAMATION MARKh]h¡}hjwsbah}(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µ}hjsbah}(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 }hj:sbah}(h]h ]h"]nbspah$]h&]uh1hhhhK0hhhhubh)}(h).. |not| unicode:: U+000AC .. NOT SIGNh]h¬}hjIsbah}(h]h ]h"]notah$]h&]uh1hhhhK1hhhhubh)}(h,.. |num| unicode:: U+00023 .. NUMBER SIGNh]h#}hjXsbah}(h]h ]h"]numah$]h&]uh1hhhhK2hhhhubh)}(h).. |ohm| unicode:: U+02126 .. OHM SIGNh]hΩ}hjgsbah}(h]h ]h"]ohmah$]h&]uh1hhhhK3hhhhubh)}(h;.. |ordf| unicode:: U+000AA .. FEMININE ORDINAL INDICATORh]hª}hjvsbah}(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→}hjsbah}(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”}hj9sbah}(h]h ]h"]rdquoah$]h&]uh1hhhhKAhhhhubh)}(h0.. |reg| unicode:: U+000AE .. REGISTERED SIGNh]h®}hjHsbah}(h]h ]h"]regah$]h&]uh1hhhhKBhhhhubh)}(h2.. |rpar| unicode:: U+00029 .. RIGHT PARENTHESISh]h)}hjWsbah}(h]h ]h"]rparah$]h&]uh1hhhhKChhhhubh)}(h5.. |rsqb| unicode:: U+0005D .. RIGHT SQUARE BRACKETh]h]}hjfsbah}(h]h ]h"]rsqbah$]h&]uh1hhhhKDhhhhubh)}(h<.. |rsquo| unicode:: U+02019 .. RIGHT SINGLE QUOTATION MARKh]h’}hjusbah}(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™}hj sbah}(h]h ]h"]tradeah$]h&]uh1hhhhKOhhhhubh)}(h... |uarr| unicode:: U+02191 .. UPWARDS ARROWh]h↑}hjsbah}(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¥}hj8sbah}(h]h ]h"]yenah$]h&]uh1hhhhKRhhhhubhsection)}(hhh](htitle)}(h-``amd-pstate`` CPU Performance Scaling Driverh](hliteral)}(h``amd-pstate``h]h amd-pstate}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubh CPU Performance Scaling Driver}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjIhhhhhKubh field_list)}(hhh](hfield)}(hhh](h field_name)}(h Copyrighth]h Copyright}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjshhhKubh 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&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jqhhhKhjnhhubjr)}(hhh](jw)}(hAuthorh]hAuthor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjhhhKubj)}(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&]uh1jqhhhK hjnhhubeh}(h]h ]h"]h$]h&]uh1jlhjIhhhhhKubjH)}(hhh](jM)}(h Introductionh]h Introduction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhKubj)}(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](jS)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhXd 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&]uh1jhhhKhjhhubj)}(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](jS)}(h``amd-pstate``h]h amd-pstate}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ubh. leverages the Linux kernel governors such as }(hj$hhhNhNubjS)}(h ``schedutil``h]h schedutil}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ubh, }(hj$hhhNhNubjS)}(h ``ondemand``h]hondemand}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ubh, 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 }(hj$hhhNhNubhfootnote_reference)}(h[1]_h]h1}(hj`hhhNhNubah}(h]id1ah ]h"]h$]h&]refidid6docnameadmin-guide/pm/amd-pstateuh1j^hj$resolvedKubh). Currently, }(hj$hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ubh 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.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h] introductionah ]h"] introductionah$]h&]uh1jGhjIhhhhhKubjH)}(hhh](jM)}(hAMD CPPC Overviewh]hAMD CPPC Overview}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhK%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 }(hjhhhNhNubj_)}(h[2]_h]h2}(hjhhhNhNubah}(h]id2ah ]h"]h$]h&]joid7jqjruh1j^hjjsKubh 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. }(hjhhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh will initialize a }(hjhhhNhNubjS)}(h``struct cpufreq_driver``h]hstruct cpufreq_driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh instance, }(hjhhhNhNubjS)}(h``amd_pstate_driver``h]hamd_pstate_driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh@, 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 ------>+-----------------------+ +-----------------------+ | | | | | | Lowest perf ---->| | | | | | Lowest perf ------>+-----------------------+ +-----------------------+ | | | | | | | | | | | | 0 ------>+-----------------------+ +-----------------------+ AMD P-States Performance Scaleh]hX Highest Perf ------>+-----------------------+ +-----------------------+ | | | | | | | | | | Max Perf ---->| | | | | | | | | | Nominal Perf ------>+-----------------------+ +-----------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | Desired Perf ---->| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Lowest non- | | | | linear perf ------>+-----------------------+ +-----------------------+ | | | | | | Lowest 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&]joperf-capuh1jhKhjhhhh referencedKubjH)}(hhh](jM)}(hAMD CPPC Performance Capabilityh]hAMD CPPC Performance Capability}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhKYubjH)}(hhh](jM)}(hHighest Performance (RO)h]hHighest Performance (RO)}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hhhhhK\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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK^hj0hhubeh}(h]highest-performance-roah ]h"]highest performance (ro)ah$]h&]uh1jGhjhhhhhK\ubjH)}(hhh](jM)}(h%Nominal (Guaranteed) Performance (RO)h]h%Nominal (Guaranteed) Performance (RO)}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhhhhhKfubj)}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhhjWhhubeh}(h]!nominal-guaranteed-performance-roah ]h"]%nominal (guaranteed) performance (ro)ah$]h&]uh1jGhjhhhhhKfubjH)}(hhh](jM)}(h"Lowest non-linear Performance (RO)h]h"Lowest non-linear Performance (RO)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hhhhhKoubj)}(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 }(hjhhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKqhj~hhubeh}(h] lowest-non-linear-performance-roah ]h"]"lowest non-linear performance (ro)ah$]h&]uh1jGhjhhhhhKoubjH)}(hhh](jM)}(hLowest Performance (RO)h]hLowest Performance (RO)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhKxubj)}(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&]uh1jGhjhhhhhKxubeh}(h](amd-cppc-performance-capabilityjeh ]h"](amd cppc performance capabilityperf_capeh$]h&]uh1jGhjhhhhhKYexpect_referenced_by_name}jjsexpect_referenced_by_id}jjsjKubjH)}(hhh](jM)}(hAMD CPPC Performance Controlh]hAMD CPPC Performance Control}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhKubj)}(h``amd-pstate`` passes performance goals through these registers. The register drives the behavior of the desired performance target.h](jS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhv passes performance goals through these registers. The register drives the behavior of the desired performance target.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubjH)}(hhh](jM)}(h"Minimum requested performance (RW)h]h"Minimum requested performance (RW)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhKubj)}(h?``amd-pstate`` specifies the minimum allowed performance level.h](jS)}(h``amd-pstate``h]h amd-pstate}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubh1 specifies the minimum allowed performance level.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h] minimum-requested-performance-rwah ]h"]"minimum requested performance (rw)ah$]h&]uh1jGhjhhhhhKubjH)}(hhh](jM)}(h"Maximum requested performance (RW)h]h"Maximum requested performance (RW)}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhhhhhKubj)}(hi``amd-pstate`` specifies a limit the maximum performance that is expected to be supplied by the hardware.h](jS)}(h``amd-pstate``h]h amd-pstate}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubh[ specifies a limit the maximum performance that is expected to be supplied by the hardware.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjMhhubeh}(h] maximum-requested-performance-rwah ]h"]"maximum requested performance (rw)ah$]h&]uh1jGhjhhhhhKubjH)}(hhh](jM)}(hDesired performance target (RW)h]hDesired performance target (RW)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhKubj)}(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](jS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhX 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&]uh1jGhjhhhhhKubjH)}(hhh](jM)}(h(Energy Performance Preference (EPP) (RW)h]h(Energy Performance Preference (EPP) (RW)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhKubj)}(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&]uh1jGhjhhhhhKubeh}(h]amd-cppc-performance-controlah ]h"]amd cppc performance controlah$]h&]uh1jGhjhhhhhKubeh}(h]amd-cppc-overviewah ]h"]amd cppc overviewah$]h&]uh1jGhjIhhhhhK%ubjH)}(hhh](jM)}(hKey Governors Supporth]hKey Governors Support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhKubj)}(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](jS)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhD can be used with all the (generic) scaling governors listed by the }(hjhhhNhNubjS)}(h``scaling_available_governors``h]hscaling_available_governors}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh policy attribute in }(hjhhhNhNubjS)}(h ``sysfs``h]hsysfs}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhi. Then, it is responsible for the configuration of policy objects corresponding to CPUs and provides the }(hjhhhNhNubjS)}(h ``CPUFreq``h]hCPUFreq}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 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 }(hjhhhNhNubjS)}(h``scaling_cur_freq``h]hscaling_cur_freq}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh information comes from the }(hjhhhNhNubjS)}(h ``CPUFreq``h]hCPUFreq}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh core.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(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](jS)}(h``amd-pstate``h]h amd-pstate}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju ubh mainly supports }(hju hhhNhNubjS)}(h ``schedutil``h]h schedutil}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju ubh and }(hju hhhNhNubjS)}(h ``ondemand``h]hondemand}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju ubhR for dynamic frequency control. It is to fine tune the processor configuration on }(hju hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju ubh to the }(hju hhhNhNubjS)}(h ``schedutil``h]h schedutil}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju ubh with CPU CFS scheduler. }(hju hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju ubhs registers the adjust_perf callback to implement performance update behavior similar to CPPC. It is initialized by }(hju hhhNhNubjS)}(h``sugov_start``h]h sugov_start}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju ubhC and then populates the CPU’s update_util_data pointer to assign }(hju hhhNhNubjS)}(h``sugov_update_single_perf``h]hsugov_update_single_perf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju ubh_ as the utilization update callback function in the CPU scheduler. The CPU scheduler will call }(hju hhhNhNubjS)}(h``cpufreq_update_util``h]hcpufreq_update_util}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju ubh5 and assigns the target performance according to the }(hju hhhNhNubjS)}(h``struct sugov_cpu``h]hstruct sugov_cpu}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju ubh/ that the utilization update belongs to. Then, }(hju hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju ubhI updates the desired performance according to the CPU scheduler assigned.}(hju hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(h.. _processor_support:h]h}(h]h ]h"]h$]h&]joprocessor-supportuh1jhMhjhhhhjKubeh}(h]key-governors-supportah ]h"]key governors supportah$]h&]uh1jGhjIhhhhhKubjH)}(hhh](jM)}(hProcessor Supporth]hProcessor Support}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjX 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 }(hji hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhji ubh! initialization will fail if the }(hji hhhNhNubjS)}(h``_CPC``h]h_CPC}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhji ubhK entry in the ACPI SBIOS does not exist in the detected processor. It uses }(hji hhhNhNubjS)}(h``acpi_cpc_valid``h]hacpi_cpc_valid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhji ubh to check the existence of }(hji hhhNhNubjS)}(h``_CPC``h]h_CPC}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhji ubhW. All Zen based processors support the legacy ACPI hardware P-States function, so when }(hji hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhji ubhC fails initialization, the kernel will fall back to initialize the }(hji hhhNhNubjS)}(h``acpi-cpufreq``h]h acpi-cpufreq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhji ubh driver.}(hji hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjX 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 hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh : one is }(hj hhhNhNubj)}(h`Full MSR Support `_h]hFull MSR Support}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameFull MSR Supportjojuh1jhj jsKubj)}(h h]h}(h]h ]h"]full msr supportah$]h&]jojuh1jindirect_reference_nameperf_caphj jsKubh and another is }(hj hhhNhNubj)}(h$`Shared Memory Support `_h]hShared Memory Support}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameShared Memory Supportjojuh1jhj jsKubj)}(h h]h}(h]h ]h"]shared memory supportah$]h&]jojuh1jj perf_caphj jsKubh. It can use the }(hj hhhNhNubh)}(h:c:macro:`X86_FEATURE_CPPC`h]jS)}(hj@ h]hX86_FEATURE_CPPC}(hjB hhhNhNubah}(h]h ](xrefcc-macroeh"]h$]h&]uh1jRhj> ubah}(h]h ]h"]h$]h&]refdocjr refdomainjM 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 hhhNhNubj_)}(h[3]_h]h3}(hjd hhhNhNubah}(h]id4ah ]h"]h$]h&]joid8jqjruh1j^hj jsKubh.) }(hj hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh is to register different }(hj hhhNhNubjS)}(h``static_call``h]h static_call}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh2 instances for different hardware implementations.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjX 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 hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubhF. In the future, it will be supported on more and more AMD processors.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjX hhubjH)}(hhh](jM)}(hFull MSR Supporth]hFull MSR Support}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 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]jS)}(hj h]hX86_FEATURE_CPPC}(hj hhhNhNubah}(h]h ](jL jM c-macroeh"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]refdocjr refdomainjM reftypemacro refexplicitrefwarnj^ X86_FEATURE_CPPCuh1hhhhKhj ubh CPU feature flag is set. }(hj hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubhF can handle the MSR register to implement the fast switch function in }(hj hhhNhNubjS)}(h ``CPUFreq``h]hCPUFreq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh] that can reduce the latency of frequency control in interrupt context. The functions with a }(hj hhhNhNubjS)}(h``pstate_xxx``h]h pstate_xxx}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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&]uh1jGhjX hhhhhKubjH)}(hhh](jM)}(hShared Memory Supporth]hShared Memory Support}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjB 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 }(hjS hhhNhNubh)}(h:c:macro:`X86_FEATURE_CPPC`h]jS)}(hj] h]hX86_FEATURE_CPPC}(hj_ hhhNhNubah}(h]h ](jL jM c-macroeh"]h$]h&]uh1jRhj[ ubah}(h]h ]h"]h$]h&]refdocjr refdomainjM reftypemacro refexplicitrefwarnj^ X86_FEATURE_CPPCuh1hhhhKhjS ubh_ CPU feature flag is not set, the processor supports the shared memory solution. In this case, }(hjS hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjS ubh uses the }(hjS hhhNhNubjS)}(h ``cppc_acpi``h]h cppc_acpi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjS ubhH helper methods to implement the callback functions that are defined on }(hjS hhhNhNubjS)}(h``static_call``h]h static_call}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjS ubh. The functions with the }(hjS hhhNhNubjS)}(h ``cppc_xxx``h]hcppc_xxx}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjS ubhU prefix represent the operations of ACPI CPPC helpers for the shared memory solution.}(hjS hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjB 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]jS)}(hj h]hMSR_AMD_CPPC_ENABLE}(hj hhhNhNubah}(h]h ](jL jM c-macroeh"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]refdocjr refdomainjM reftypemacro refexplicitrefwarnj^ MSR_AMD_CPPC_ENABLEuh1hhhhKhj ubh or }(hj hhhNhNubjS)}(h``cppc_set_enable``h]hcppc_set_enable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh3, it will respond to the request from AMD P-States.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjB hhubeh}(h]shared-memory-supportah ]h"]shared memory supportah$]h&]uh1jGhjX hhhhhKubeh}(h](jO id3eh ]h"](processor supportprocessor_supporteh$]h&]uh1jGhjIhhhhhKj}j jE sj}jO jE sjKubjH)}(hhh](jM)}(h6User Space Interface in ``sysfs`` - Per-policy controlh](hUser Space Interface in }(hj% hhhNhNubjS)}(h ``sysfs``h]hsysfs}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj% ubh - Per-policy control}(hj% hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhj" 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](jS)}(h``amd-pstate``h]h amd-pstate}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjE ubh. exposes several global attributes (files) in }(hjE hhhNhNubjS)}(h ``sysfs``h]hsysfs}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjE ubhK to control its functionality at the system level. They are located in the }(hjE hhhNhNubjS)}(h,``/sys/devices/system/cpu/cpufreq/policyX/``h]h(/sys/devices/system/cpu/cpufreq/policyX/}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjE ubh directory and affect all CPUs.}(hjE hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj" 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_lowest_nonlinear_freq /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_max_freqh]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_lowest_nonlinear_freq /sys/devices/system/cpu/cpufreq/policy0/amd_pstate_max_freq}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhj" hhubj)}(h1``amd_pstate_highest_perf / amd_pstate_max_freq``h]jS)}(hj h]h-amd_pstate_highest_perf / amd_pstate_max_freq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhhhKhj" 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 Capabilityjojuh1jhj jsKubj)}(h h]h}(h]h ]h"]amd cppc performance capabilityah$]h&]jojuh1jj perf_caphj jsKubhE). In some ASICs, the highest CPPC performance is not the one in the }(hj hhhNhNubjS)}(h``_CPC``h]h_CPC}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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 hhhNhNubjS)}(h ``cpuinfo``h]hcpuinfo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh. This attribute is read-only.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj" hhubj)}(h$``amd_pstate_lowest_nonlinear_freq``h]jS)}(hj h]h amd_pstate_lowest_nonlinear_freq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhhhMhj" 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 }(hjhhhNhNubj)}(h.`AMD CPPC Performance Capability `_h]hAMD CPPC Performance Capability}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameAMD CPPC Performance Capabilityjojuh1jhjjsKubj)}(h h]h}(h]h ]h"]amd cppc performance capabilityah$]h&]jojuh1jj perf_caphjjsKubh.) This attribute is read-only.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj" hhubj)}(h``amd_pstate_hw_prefcore``h]jS)}(hjCh]hamd_pstate_hw_prefcore}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhhhM hj" hhubj)}(hnWhether the platform supports the preferred core feature and it has been enabled. This attribute is read-only.h]hnWhether the platform supports the preferred core feature and it has been enabled. This attribute is read-only.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hj" hhubj)}(h``amd_pstate_prefcore_ranking``h]jS)}(hjhh]hamd_pstate_prefcore_ranking}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubah}(h]h ]h"]h$]h&]uh1jhhhMhj" hhubj)}(hThe 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.h]hThe 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.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj" hhubj)}(h,``energy_performance_available_preferences``h]jS)}(hjh]h(energy_performance_available_preferences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhhhMhj" hhubj)}(hXaA 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. This attribute is read-only.h](hCA list of all the supported EPP preferences that could be used for }(hjhhhNhNubjS)}(h!``energy_performance_preference``h]henergy_performance_preference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 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. }(hjhhhNhNubjS)}(h ``default``h]hdefault}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhS represents the epp value is set by platform firmware. This attribute is read-only.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj" hhubj)}(h!``energy_performance_preference``h]jS)}(hjh]henergy_performance_preference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhhhMhj" hhubj)}(hXThe current energy performance preference can be read from this attribute. and user can change current preference according to energy or performance needs Please get all support profiles list from ``energy_performance_available_preferences`` attribute, all the profiles are integer values defined between 0 to 255 when EPP feature is enabled by platform firmware, if EPP feature is disabled, driver will ignore the written value 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 Please get all support profiles list from }(hjhhhNhNubjS)}(h,``energy_performance_available_preferences``h]h(energy_performance_available_preferences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh attribute, all the profiles are integer values defined between 0 to 255 when EPP feature is enabled by platform firmware, if EPP feature is disabled, driver will ignore the written value This attribute is read-write.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj" 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](jS)}(h ``boost``h]hboost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh The }(hj hhhNhNubhtitle_reference)}(h`boost`h]hboost}(hj#hhhNhNubah}(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&]uh1jhhhM'hj" 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.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM-hj" 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 }(hjIhhhNhNubj")}(h`boost`h]hboost}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j!hjIubh' attribute, users can write a value of }(hjIhhhNhNubj")}(h`0`h]h0}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j!hjIubh to disable the boost or }(hjIhhhNhNubj")}(h`1`h]h1}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j!hjIubh; to enable it, for the respective CPU using the sysfs path }(hjIhhhNhNubj")}(h,`/sys/devices/system/cpu/cpuX/cpufreq/boost`h]h*/sys/devices/system/cpu/cpuX/cpufreq/boost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j!hjIubh, where }(hjIhhhNhNubj")}(h`X`h]hX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j!hjIubh represents the CPU number.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM3hj" 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 }(hjhhhNhNubjS)}(h+``/sys/devices/system/cpu/cpuX/acpi_cppc/``h]h'/sys/devices/system/cpu/cpuX/acpi_cppc/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, see }(hjhhhNhNubh)}(h:ref:`cppc_sysfs`h]hinline)}(hjh]h cppc_sysfs}(hjhhhNhNubah}(h]h ](jL stdstd-refeh"I?]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjr refdomainjreftyperef refexplicitrefwarnj^ cppc_sysfsuh1hhhhM7hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM7hj" hhubeh}(h]0user-space-interface-in-sysfs-per-policy-controlah ]h"]2user space interface in sysfs - per-policy controlah$]h&]uh1jGhjIhhhhhKubjH)}(hhh](jM)}(h"``amd-pstate`` vs ``acpi-cpufreq``h](jS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh vs }(hjhhhNhNubjS)}(h``acpi-cpufreq``h]h acpi-cpufreq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubeh}(h]h ]h"]h$]h&]uh1jLhjhhhhhM<ubj)}(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 }(hj,hhhNhNubjS)}(h``acpi-cpufreq``h]h acpi-cpufreq}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubhX, 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. }(hj,hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubh 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.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM>hjhhubeh}(h]amd-pstate-vs-acpi-cpufreqah ]h"]amd-pstate vs acpi-cpufreqah$]h&]uh1jGhjIhhhhhM<ubjH)}(hhh](jM)}(h%``amd-pstate`` Driver Operation Modesh](jS)}(h``amd-pstate``h]h amd-pstate}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubh Driver Operation Modes}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjfhhhhhMKubj)}(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](jS)}(h``amd_pstate``h]h amd_pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMMhjfhhubh 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMQhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMThjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(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&]uh1jhhhMVhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhMQhjfhhubjH)}(hhh](jM)}(h Active Modeh]h Active Mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhM[ubj)}(h``amd_pstate=active``h]jS)}(hj h]hamd_pstate=active}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhhhM]hjhhubj)}(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 }(hj hhhNhNubjS)}(h``amd_pstate_epp``h]hamd_pstate_epp}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh driver with }(hj hhhNhNubjS)}(h``amd_pstate=active``h]hamd_pstate=active}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh9 passed to the kernel in the command line. In this mode, }(hj hhhNhNubjS)}(h``amd_pstate_epp``h]hamd_pstate_epp}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubhXN 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.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM_hjhhubeh}(h] active-modeah ]h"] active modeah$]h&]uh1jGhjfhhhhhM[ubjH)}(hhh](jM)}(h Passive Modeh]h Passive Mode}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhhhhhMhubj)}(h``amd_pstate=passive``h]jS)}(hjh]hamd_pstate=passive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jhhhMjhjlhhubj)}(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 }(hjhhhNhNubjS)}(h``amd_pstate=passive``h]hamd_pstate=passive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh< is passed to the kernel in the command line. In this mode, }(hjhhhNhNubjS)}(h``amd_pstate``h]h amd_pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhX 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMlhjlhhubeh}(h] passive-modeah ]h"] passive modeah$]h&]uh1jGhjfhhhhhMhubjH)}(hhh](jM)}(h Guided Modeh]h Guided Mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhMvubj)}(h``amd_pstate=guided``h]jS)}(hjh]hamd_pstate=guided}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhhhMxhjhhubj)}(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 }(hjhhhNhNubjS)}(h``amd_pstate=guided``h]hamd_pstate=guided}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 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&]uh1jhhhMzhjhhubeh}(h] guided-modeah ]h"] guided modeah$]h&]uh1jGhjfhhhhhMvubeh}(h]!amd-pstate-driver-operation-modesah ]h"]!amd-pstate driver operation modesah$]h&]uh1jGhjIhhhhhMKubjH)}(hhh](jM)}(h``amd-pstate`` Preferred Coreh](jS)}(h``amd-pstate``h]h amd-pstate}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubh Preferred Core}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhj&hhhhhMubj)}(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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj&hhubj)}(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](jS)}(h``amd-pstate``h]h amd-pstate}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubh 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.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj&hhubj)}(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 }(hjohhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubh driver. The }(hjohhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubh+ driver will also determine whether or not }(hjohhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubh- preferred core is supported by the platform.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj&hhubj)}(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](jS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhX 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 }(hjhhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh} driver receives a message with the highest performance change, it will update the core ranking and set the cpu’s priority.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj&hhubeh}(h]amd-pstate-preferred-coreah ]h"]amd-pstate preferred coreah$]h&]uh1jGhjIhhhhhMubjH)}(hhh](jM)}(h$``amd-pstate`` Preferred Core Switchh](jS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh Preferred Core Switch}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhhhhhMubjH)}(hhh](jM)}(hKernel Parametersh]hKernel Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhMubj)}(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](jS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh peferred core`` has two states: enable and disable. Enable/disable states can be chosen by different kernel parameters. Default enable }(hjhhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh preferred core.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(h``amd_prefcore=disable``h]jS)}(hjIh]hamd_prefcore=disable}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(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 }(hj^hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubh preferred core, the core rankings will always be advertised by the platform. But OS can choose to ignore that via the kernel parameter }(hj^hhhNhNubjS)}(h``amd_prefcore=disable``h]hamd_prefcore=disable}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubh.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubeh}(h]kernel-parametersah ]h"]kernel parametersah$]h&]uh1jGhjhhhhhMubeh}(h] amd-pstate-preferred-core-switchah ]h"] amd-pstate preferred core switchah$]h&]uh1jGhjIhhhhhMubjH)}(hhh](jM)}(h+User Space Interface in ``sysfs`` - Generalh](hUser Space Interface in }(hjhhhNhNubjS)}(h ``sysfs``h]hsysfs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh - General}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhhhhhMubjH)}(hhh](jM)}(hGlobal Attributesh]hGlobal Attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhMubj)}(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](jS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh. exposes several global attributes (files) in }(hjhhhNhNubjS)}(h ``sysfs``h]hsysfs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhL to control its functionality at the system level. They are located in the }(hjhhhNhNubjS)}(h'``/sys/devices/system/cpu/amd_pstate/``h]h#/sys/devices/system/cpu/amd_pstate/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 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]jS)}(hj#h]hstatus}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!ubah}(h]h ]h"]h$]h&]uh1jhhhMhjubh definition)}(hhh](j)}(hIOperation mode of the driver: "active", "passive", "guided" or "disable".h]hYOperation mode of the driver: “active”, “passive”, “guided” or “disable”.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj:ubj)}(hhh](j)}(h="active" The driver is functional and in the ``active mode`` h](j )}(h"active"h]h “active”}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjNubj9)}(hhh]j)}(h3The driver is functional and in the ``active mode``h](h$The driver is functional and in the }(hjchhhNhNubjS)}(h``active mode``h]h active mode}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubeh}(h]h ]h"]h$]h&]uh1jhhhMhj`ubah}(h]h ]h"]h$]h&]uh1j8hjNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjKubj)}(h?"passive" The driver is functional and in the ``passive mode`` h](j )}(h "passive"h]h “passive”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj9)}(hhh]j)}(h4The driver is functional and in the ``passive mode``h](h$The driver is functional and in the }(hjhhhNhNubjS)}(h``passive mode``h]h passive mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjKubj)}(h="guided" The driver is functional and in the ``guided mode`` h](j )}(h"guided"h]h “guided”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj9)}(hhh]j)}(h3The driver is functional and in the ``guided mode``h](h$The driver is functional and in the }(hjhhhNhNubjS)}(h``guided mode``h]h guided mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjKubj)}(h="disable" The driver is unregistered and not functional now. h](j )}(h "disable"h]h “disable”}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj9)}(hhh]j)}(h2The driver is unregistered and not functional now.h]h2The driver is unregistered and not functional now.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjKubeh}(h]h ]h"]h$]h&]uh1jhj:ubj)}(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.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj:ubeh}(h]h ]h"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(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](j )}(h ``prefcore``h]jS)}(hjZh]hprefcore}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhhhMhjTubj9)}(hhh](j)}(hubh tool support for }(hj>hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubeh}(h]h ]h"]h$]h&]uh1jLhj;hhhhhMubj)}(h``amd-pstate`` is supported by the ``cpupower`` tool, which can be used to dump frequency information. Development is in progress to support more and more operations for the new ``amd-pstate`` module with this tool. ::h](jS)}(h``amd-pstate``h]h amd-pstate}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubh is supported by the }(hjhhhhNhNubjS)}(h ``cpupower``h]hcpupower}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubh tool, which can be used to dump frequency information. Development is in progress to support more and more operations for the new }(hjhhhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubh module with this tool.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj;hhubj)}(hXroot@hr-test1:/home/ray# cpupower frequency-info analyzing CPU 0: driver: amd-pstate CPUs which run at the same hardware frequency: 0 CPUs which need to have their frequency coordinated by software: 0 maximum transition latency: 131 us hardware limits: 400 MHz - 4.68 GHz available cpufreq governors: ondemand conservative powersave userspace performance schedutil current policy: frequency should be within 400 MHz and 4.68 GHz. The governor "schedutil" may decide which speed to use within this range. current CPU frequency: Unable to call hardware current CPU frequency: 4.02 GHz (asserted by call to kernel) boost state support: Supported: yes Active: yes AMD PSTATE Highest Performance: 166. Maximum Frequency: 4.68 GHz. AMD PSTATE Nominal Performance: 117. Nominal Frequency: 3.30 GHz. AMD PSTATE Lowest Non-linear Performance: 39. Lowest Non-linear Frequency: 1.10 GHz. AMD PSTATE Lowest Performance: 15. Lowest Frequency: 400 MHz.h]hXroot@hr-test1:/home/ray# cpupower frequency-info analyzing CPU 0: driver: amd-pstate CPUs which run at the same hardware frequency: 0 CPUs which need to have their frequency coordinated by software: 0 maximum transition latency: 131 us hardware limits: 400 MHz - 4.68 GHz available cpufreq governors: ondemand conservative powersave userspace performance schedutil current policy: frequency should be within 400 MHz and 4.68 GHz. The governor "schedutil" may decide which speed to use within this range. current CPU frequency: Unable to call hardware current CPU frequency: 4.02 GHz (asserted by call to kernel) boost state support: Supported: yes Active: yes AMD PSTATE Highest Performance: 166. Maximum Frequency: 4.68 GHz. AMD PSTATE Nominal Performance: 117. Nominal Frequency: 3.30 GHz. AMD PSTATE Lowest Non-linear Performance: 39. Lowest Non-linear Frequency: 1.10 GHz. AMD PSTATE Lowest Performance: 15. Lowest Frequency: 400 MHz.}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhMhj;hhubeh}(h]$cpupower-tool-support-for-amd-pstateah ]h"]$cpupower tool support for amd-pstateah$]h&]uh1jGhjIhhhhhMubjH)}(hhh](jM)}(hDiagnostics and Tuningh]hDiagnostics and Tuning}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhMubjH)}(hhh](jM)}(h Trace Eventsh]h Trace Events}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhMubj)}(hXThere are two static trace events that can be used for ``amd-pstate`` diagnostics. One of them is the ``cpu_frequency`` trace event generally used by ``CPUFreq``, and the other one is the ``amd_pstate_perf`` trace event specific to ``amd-pstate``. The following sequence of shell commands can be used to enable them and see their output (if the kernel is configured to support event tracing). ::h](h7There are two static trace events that can be used for }(hjhhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh! diagnostics. One of them is the }(hjhhhNhNubjS)}(h``cpu_frequency``h]h cpu_frequency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh trace event generally used by }(hjhhhNhNubjS)}(h ``CPUFreq``h]hCPUFreq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, and the other one is the }(hjhhhNhNubjS)}(h``amd_pstate_perf``h]hamd_pstate_perf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh trace event specific to }(hjhhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh. The following sequence of shell commands can be used to enable them and see their output (if the kernel is configured to support event tracing).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(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=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}hjHsbah}(h]h ]h"]h$]h&]hhuh1jhhhMhjhhubj)}(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 }(hjVhhhNhNubjS)}(h``cpu_frequency``h]h cpu_frequency}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubh- trace event will be triggered either by the }(hjVhhhNhNubjS)}(h ``schedutil``h]h schedutil}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubhB scaling governor (for the policies it is attached to), or by the }(hjVhhhNhNubjS)}(h ``CPUFreq``h]hCPUFreq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubh6 core (for the policies with other scaling governors).}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubeh}(h] trace-eventsah ]h"] trace eventsah$]h&]uh1jGhjhhhhhMubjH)}(hhh](jM)}(h Tracer Toolh]h Tracer Tool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhMubj)}(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](jS)}(h``amd_pstate_tracer.py``h]hamd_pstate_tracer.py}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh can record and parse }(hjhhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhk trace log, then generate performance plots. This utility can be used to debug and tune the performance of }(hjhhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh= driver. The tracer tool needs to import intel pstate tracer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(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 }(hjhhhNhNubjS)}(h+``linux/tools/power/x86/amd_pstate_tracer``h]h'linux/tools/power/x86/amd_pstate_tracer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhc. 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&]uh1jhhhM#hjhhubj)}(h>./amd_pstate_trace.py [-c cpus] -t -n h]h>./amd_pstate_trace.py [-c cpus] -t -n }hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhM'hjhhubj)}(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}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM)hjhhubj)}(hMsudo ./amd_pstate_trace.py [-c cpus] -n -i [-m kbytes]h]hMsudo ./amd_pstate_trace.py [-c cpus] -n -i [-m kbytes]}hj/sbah}(h]h ]h"]h$]h&]hhuh1jhhhM+hjhhubj)}(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 }(hj=hhhNhNubjS)}(h``results/test_name``h]hresults/test_name}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=ubh4. Following is the example about part of the output.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM-hjhhubj)}(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}hj]sbah}(h]h ]h"]h$]h&]hhuh1jhhhM0hjhhubeh}(h] tracer-toolah ]h"] tracer toolah$]h&]uh1jGhjhhhhhMubjH)}(hhh](jM)}(hUnit Tests for amd-pstateh]hUnit Tests for amd-pstate}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjshhhhhM5ubj)}(hI``amd-pstate-ut`` is a test module for testing the ``amd-pstate`` driver.h](jS)}(h``amd-pstate-ut``h]h amd-pstate-ut}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh" is a test module for testing the }(hjhhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh driver.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM7hjshhubh 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]j)}(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&]uh1jhhhM9hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1jhjubj)}(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&]uh1jhhhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j*uh1jhhhM9hjubah}(h]h ]h"]h$]h&]uh1jhhhM9hjshhubhenumerated_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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM?hjubj)}(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&]uh1jhhhMAhj'ubj)}(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 }(hj=hhhNhNubjS)}(h``amd-pstate``h]h amd-pstate}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=ubh driver.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMChj9ubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jghjdubjh)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jghjdubjh)}(hhh]h}(h]h ]h"]h$]h&]colwidthKTuh1jghjdubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]j)}(hIndexh]hIndex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(h Functionsh]h Functions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjdubhtbody)}(hhh](j)}(hhh](j)}(hhh]j)}(h1h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMHhjubah}(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&]uh1jhhhMHhjubah}(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.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hindentKhjhhhKubj")}(hhh]h}(h]h ]h"]h$]h&]uh1hhjj1KhhhKubj")}(h>The detail refer to `Processor Support `_.h](hThe detail refer to }(hj;hhhNhNubj)}(h)`Processor Support `_h]hProcessor Support}(hjChhhNhNubah}(h]h ]h"]h$]h&]nameProcessor SupportjojO uh1jhj;jsKubj)}(h h]h}(h]h ]h"]processor supportah$]h&]jojO uh1jj processor_supporthj;jsKubh.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hj1KhjhhhKubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(h2h]h2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMLhj~ubah}(h]h ]h"]h$]h&]uh1jhj{ubj)}(hhh]j)}(hamd_pstate_ut_check_enabledh]hamd_pstate_ut_check_enabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMLhjubah}(h]h ]h"]h$]h&]uh1jhj{ubj)}(hhh]j)}(hhh](j")}(h%Check whether AMD P-State is enabled.h]h%Check whether AMD P-State is enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hj1KhjhhhKubj")}(hhh]h}(h]h ]h"]h$]h&]uh1hhjj1KhhhKubj")}(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]jS)}(hjh]hMSR_AMD_CPPC_ENABLE}(hjhhhNhNubah}(h]h ](jL jM c-macroeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocjr refdomainjM reftypemacro refexplicitrefwarnj^ MSR_AMD_CPPC_ENABLEuh1hhhhMOhjubh or }(hjhhhNhNubjS)}(h``cppc_set_enable``h]hcppc_set_enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh3, it will respond to the request from AMD P-States.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hj1KhjhhhKubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(h3h]h3}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMShj!ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hamd_pstate_ut_check_perfh]hamd_pstate_ut_check_perf}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMShj8ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hhh](j")}(h4Check if the each performance values are reasonable.h]h4Check if the each performance values are reasonable.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hj1KhjRhhhKubj")}(hGhighest_perf >= nominal_perf > lowest_nonlinear_perf > lowest_perf > 0.h]hGhighest_perf >= nominal_perf > lowest_nonlinear_perf > lowest_perf > 0.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hj1KhjRhhhKubeh}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(h4h]h4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMVhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hamd_pstate_ut_check_freqh]hamd_pstate_ut_check_freq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMVhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hhh](j")}(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&]uh1hj1KhjhhhKubj")}(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&]uh1hj1KhjhhhKubj")}(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 }(hjhhhNhNubjS)}(h ``cpuinfo``h]hcpuinfo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hj1KhjhhhKubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]colsKuh1jbhj_ubah}(h]h ]h"]h$]h&]uh1j]hj9ubeh}(h]h ]h"]h$]h&]uh1jhhhMChj'ubj)}(h2). Tbench testh]h2). Tbench test}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM]hj'ubj)}(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 }(hj3hhhNhNubjS)}(h``acpi-cpufreq``h]h acpi-cpufreq}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubh kernel driver for comparison.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM_hj/ubah}(h]h ]h"]h$]h&]uh1jhhhM_hj'ubj)}(h3). Gitsource testh]h3). Gitsource test}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMdhj'ubj)}(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 }(hjkhhhNhNubjS)}(h``acpi-cpufreq``h]h acpi-cpufreq}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubh kernel driver for comparison.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMfhjgubah}(h]h ]h"]h$]h&]uh1jhhhMfhj'ubeh}(h]h ]h"]h$]h&]uh1jhhhMAhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(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&]uh1jhhhMkhjubj)}(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 }(hjhhhNhNubjS)}(h``amd-pstate-ut``h]h amd-pstate-ut}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhO module and tie it into kselftest.(for details refer to Linux Kernel Selftests }(hjhhhNhNubj_)}(h[4]_h]h4}(hjhhhNhNubah}(h]id5ah ]h"]h$]h&]joid9jqjruh1j^hjjsKubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMmhjubj)}(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&]uh1jhhhMqhjubj)}(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]j)}(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]jS)}(hj h]hCONFIG_X86_AMD_PSTATE}(hj hhhNhNubah}(h]h ](jL jM c-macroeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocjr refdomainjM reftypemacro refexplicitrefwarnj^ CONFIG_X86_AMD_PSTATEuh1hhhhMshjubh configuration option.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMshjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hFset the :c:macro:`CONFIG_X86_AMD_PSTATE_UT` configuration option to M.h]j)}(hj8h](hset the }(hj:hhhNhNubh)}(h#:c:macro:`CONFIG_X86_AMD_PSTATE_UT`h]jS)}(hjCh]hCONFIG_X86_AMD_PSTATE_UT}(hjEhhhNhNubah}(h]h ](jL jM c-macroeh"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]refdocjr refdomainjM reftypemacro refexplicitrefwarnj^ CONFIG_X86_AMD_PSTATE_UTuh1hhhhMthj:ubh configuration option to M.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMthj6ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h make projecth]j)}(hjrh]h make project}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMuhjpubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hCmake selftest :: $ cd linux $ make -C tools/testing/selftests h](j)}(hmake selftest ::h]h make selftest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMvhjubj)}(h,$ cd linux $ make -C tools/testing/selftestsh]h,$ cd linux $ make -C tools/testing/selftests}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhMxhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(h+make perf :: $ cd tools/perf/ $ make h](j)}(h make perf ::h]h make perf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM{hjubj)}(h$ cd tools/perf/ $ makeh]h$ cd tools/perf/ $ make}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhM}hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j+uh1jhhhMshjubah}(h]h ]h"]h$]h&]uh1jhhhMshjubj)}(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}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhMhjubj)}(h3). Specified test case ::h]h3). Specified test case}(hjhhhNhNubah}(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}(hjhhhNhNubah}(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](j)}(hhh]j)}(hbasic h]j)}(hbasich]hbasic}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj-ubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]jjuh1jhhhMhj&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)}(h&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj;&ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-ondemandh]hacpi-cpufreq-ondemand}(hjh&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhje&ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjb&ubj)}(hhh]j)}(hjh]h1}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj}&ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjb&ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjb&ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjb&ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjb&ubj)}(hhh]j)}(h2529.9h]h2529.9}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj&ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjb&ubj)}(hhh]j)}(h1564.4h]h1564.4}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj&ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjb&ubj)}(hhh]j)}(h160.0997h]h160.0997}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj&ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjb&ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-ondemandh]hacpi-cpufreq-ondemand}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj 'ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj 'ubj)}(hhh]j)}(hjh]h2}(hj''hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj$'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)}(h2249.76h]h2249.76}(hj\'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjY'ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj 'ubj)}(hhh]j)}(h1432.97h]h1432.97}(hjt'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjq'ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj 'ubj)}(hhh]j)}(h155.4297h]h155.4297}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj'ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj 'ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-ondemandh]hacpi-cpufreq-ondemand}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj'ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj'ubj)}(hhh]j)}(hj&h]h3}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj'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)}(h2181.46h]h2181.46}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj(ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj'ubj)}(hhh]j)}(h1406.88h]h1406.88}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj(ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj'ubj)}(hhh]j)}(h153.5060h]h153.5060}(hj3(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj0(ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh](js)}(hhh]j)}(hacpi-cpufreq-ondemandh]hacpi-cpufreq-ondemand}(hj](hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjZ(ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjW(ubj)}(hhh]j)}(hAverageh]hAverage}(hju(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjr(ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjW(ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjW(ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjW(ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjW(ubj)}(hhh]j)}(h2320.37h]h2320.37}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj(ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjW(ubj)}(hhh]j)}(h1468.08h]h1468.08}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj(ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjW(ubj)}(hhh]j)}(h156.4741h]h156.4741}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj(ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjW(ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-schedutilh]hacpi-cpufreq-schedutil}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj)ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj(ubj)}(hhh]j)}(hjh]h1}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj)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)}(h2137.64h]h2137.64}(hjR)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjO)ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj(ubj)}(hhh]j)}(h1385.24h]h1385.24}(hjj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjg)ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj(ubj)}(hhh]j)}(h152.7723h]h152.7723}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj)ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-schedutilh]hacpi-cpufreq-schedutil}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj)ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj)ubj)}(hhh]j)}(hjh]h2}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj)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)}(h2107.05h]h2107.05}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj)ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj)ubj)}(hhh]j)}(h1372.23h]h1372.23}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj*ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj)ubj)}(hhh]j)}(h152.0138h]h152.0138}(hj)*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj&*ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-schedutilh]hacpi-cpufreq-schedutil}(hjS*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjP*ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjM*ubj)}(hhh]j)}(hj&h]h3}(hjk*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjh*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)}(h2085.86h]h2085.86}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj*ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjM*ubj)}(hhh]j)}(h1365.35h]h1365.35}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj*ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjM*ubj)}(hhh]j)}(h151.2433h]h151.2433}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj*ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjM*ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-schedutilh]hacpi-cpufreq-schedutil}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj*ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj*ubj)}(hhh]j)}(hAverageh]hAverage}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj+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)}(h2110.18h]h2110.18}(hjH+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjE+ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj*ubj)}(hhh]j)}(h1374.27h]h1374.27}(hj`+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj]+ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj*ubj)}(hhh]j)}(h152.0136h]h152.0136}(hjx+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhju+ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubj)}(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&]uh1jhhhMhj+ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj+ubj)}(hhh]j)}(h Comprison(%)h]h Comprison(%)}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj+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)}(h-9.0584h]h-9.0584}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj+ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj+ubj)}(hhh]j)}(h-6.3899h]h-6.3899}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj,ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj+ubj)}(hhh]j)}(h-2.8506h]h-2.8506}(hj ,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj,ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh](j)}(hhh]j)}(h+amd-pstate-ondemand VS amd-pstate-schedutilh]h+amd-pstate-ondemand VS amd-pstate-schedutil}(hjJ,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjG,ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjD,ubj)}(hhh]j)}(h Comprison(%)h]h Comprison(%)}(hjb,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj_,ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjD,ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjD,ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjD,ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjD,ubj)}(hhh]j)}(h8.8053h]h8.8053}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj,ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjD,ubj)}(hhh]j)}(h-5.5463h]h-5.5463}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj,ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjD,ubj)}(hhh]j)}(h-3.4503h]h-3.4503}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj,ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjD,ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubj)}(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&]uh1jhhhMhj,ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj,ubj)}(hhh]j)}(h Comprison(%)h]h Comprison(%)}(hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj-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)}(h-0.4245h]h-0.4245}(hj@-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj=-ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj,ubj)}(hhh]j)}(h-0.2029h]h-0.2029}(hjX-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjU-ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj,ubj)}(hhh]j)}(h-0.2219h]h-0.2219}(hjp-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjm-ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh](j)}(hhh]j)}(h.acpi-cpufreq-schedutil VS amd-pstate-schedutilh]h.acpi-cpufreq-schedutil VS amd-pstate-schedutil}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj-ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj-ubj)}(hhh]j)}(h Comprison(%)h]h Comprison(%)}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj-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)}(h-0.1473h]h-0.1473}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj-ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj-ubj)}(hhh]j)}(h0.6963h]h0.6963}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj-ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj-ubj)}(hhh]j)}(h-0.8378h]h-0.8378}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj.ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj} ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jbhjubah}(h]h ]h"]h$]h&]uh1j]hjubeh}(h]h ]h"]h$]h&]uh1jhhhMhj&ubj)}(hhh]j)}(h gitsource h]j)}(h gitsourceh]h gitsource}(hj\.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjX.ubah}(h]h ]h"]h$]h&]uh1jhjU.ubah}(h]h ]h"]h$]h&]jjuh1jhhhMhj&ubj)}(hXWhen 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)}(hXWhen 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 :h]hXWhen 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 :}(hjz.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjv.ubj^)}(hhh]jc)}(hhh](jh)}(hhh]h}(h]h ]h"]h$]h&]colwidthK1uh1jghj.ubjh)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jghj.ubjh)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jghj.ubjh)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jghj.ubjh)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jghj.ubjh)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jghj.ubjh)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jghj.ubjh)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jghj.ubj)}(hhh](j)}(hhh](j)}(hhh]j)}(hGovernorh]hGovernor}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj.ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj.ubj)}(hhh]j)}(hRoundh]hRound}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj.ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj.ubj)}(hhh]j)}(hDes-perfh]hDes-perf}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj/ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj.ubj)}(hhh]j)}(hFreqh]hFreq}(hj//hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj,/ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj.ubj)}(hhh]j)}(hLoadh]hLoad}(hjG/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjD/ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj.ubj)}(hhh]j)}(hTimeh]hTime}(hj_/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj\/ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj.ubj)}(hhh]j)}(hEnergyh]hEnergy}(hjw/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjt/ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj.ubj)}(hhh]j)}(hPerformance Per Watth]hPerformance Per Watt}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj/ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj.ubj)}(hhh](j)}(hhh]j)}(hUnith]hUnit}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj/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]j)}(hGHzh]hGHz}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj/ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj/ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj/ubj)}(hhh]j)}(hsh]hs}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj0ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj/ubj)}(hhh]j)}(hj= h]hJ}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj0ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj/ubj)}(hhh]j)}(h1/Jh]h1/J}(hj60hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj30ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj.ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubj)}(hhh](j)}(hhh](j)}(hhh]j)}(hamd-pstate-ondemandh]hamd-pstate-ondemand}(hji0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjf0ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjc0ubj)}(hhh]j)}(hjh]h1}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj~0ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjc0ubj)}(hhh]j)}(h50.119h]h50.119}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj0ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjc0ubj)}(hhh]j)}(h2.10509h]h2.10509}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj0ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjc0ubj)}(hhh]j)}(h23.3076h]h23.3076}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj0ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjc0ubj)}(hhh]j)}(h475.69h]h475.69}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj0ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjc0ubj)}(hhh]j)}(h865.78h]h865.78}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj0ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjc0ubj)}(hhh]j)}(h 0.001155027h]h 0.001155027}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj 1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjc0ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-ondemandh]hamd-pstate-ondemand}(hj:1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj71ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj41ubj)}(hhh]j)}(hjh]h2}(hjR1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjO1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj41ubj)}(hhh]j)}(h94.8006h]h94.8006}(hji1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjf1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj41ubj)}(hhh]j)}(h1.98771h]h1.98771}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj~1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj41ubj)}(hhh]j)}(h56.6533h]h56.6533}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj41ubj)}(hhh]j)}(h467.1h]h467.1}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj41ubj)}(hhh]j)}(h839.67h]h839.67}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj41ubj)}(hhh]j)}(h 0.001190944h]h 0.001190944}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj1ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj41ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-ondemandh]hamd-pstate-ondemand}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(hj&h]h3}(hj#2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj 2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(h76.6091h]h76.6091}(hj:2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj72ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(h2.53251h]h2.53251}(hjR2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjO2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(h43.7791h]h43.7791}(hjj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjg2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(h467.69h]h467.69}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(h855.85h]h855.85}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(h 0.001168429h]h 0.001168429}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-ondemandh]hamd-pstate-ondemand}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(hAverageh]hAverage}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj2ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(h73.8429h]h73.8429}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj 3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(h2.20844h]h2.20844}(hj$3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj!3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(h41.2467h]h41.2467}(hj<3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj93ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(h470.16h]h470.16}(hjT3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjQ3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(h853.767h]h853.767}(hjl3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhji3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubj)}(hhh]j)}(h 0.001171279h]h 0.001171279}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-schedutilh]hamd-pstate-schedutil}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj3ubj)}(hhh]j)}(hjh]h1}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj3ubj)}(hhh]j)}(h165.919h]h165.919}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj3ubj)}(hhh]j)}(h1.62319h]h1.62319}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj3ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj3ubj)}(hhh]j)}(h98.3868h]h98.3868}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj 4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj3ubj)}(hhh]j)}(h464.17h]h464.17}(hj%4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj"4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj3ubj)}(hhh]j)}(h866.8h]h866.8}(hj=4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj:4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj3ubj)}(hhh]j)}(h 0.001153668h]h 0.001153668}(hjU4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjR4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-schedutilh]hamd-pstate-schedutil}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj|4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjy4ubj)}(hhh]j)}(hjh]h2}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjy4ubj)}(hhh]j)}(h165.97h]h165.97}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjy4ubj)}(hhh]j)}(h1.31309h]h1.31309}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjy4ubj)}(hhh]j)}(h99.5712h]h99.5712}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjy4ubj)}(hhh]j)}(h480.15h]h480.15}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj4ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjy4ubj)}(hhh]j)}(h880.4h]h880.4}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj 5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjy4ubj)}(hhh]j)}(h 0.001135847h]h 0.001135847}(hj&5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj#5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjy4ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-schedutilh]hamd-pstate-schedutil}(hjP5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjM5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjJ5ubj)}(hhh]j)}(hj&h]h3}(hjh5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhje5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjJ5ubj)}(hhh]j)}(h165.973h]h165.973}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj|5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjJ5ubj)}(hhh]j)}(h1.28448h]h1.28448}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjJ5ubj)}(hhh]j)}(h99.9252h]h99.9252}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjJ5ubj)}(hhh]j)}(h481.79h]h481.79}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjJ5ubj)}(hhh]j)}(h867.02h]h867.02}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjJ5ubj)}(hhh]j)}(h 0.001153375h]h 0.001153375}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj5ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjJ5ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hamd-pstate-schedutilh]hamd-pstate-schedutil}(hj!6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(hAverageh]hAverage}(hj96hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj66ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h165.954h]h165.954}(hjQ6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjN6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h1.40692h]h1.40692}(hji6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjf6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h99.2944h]h99.2944}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj~6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h475.37h]h475.37}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h871.407h]h871.407}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h 0.001147569h]h 0.001147569}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-ondemandh]hacpi-cpufreq-ondemand}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj6ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(hjh]h1}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h2379.62h]h2379.62}(hj@7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj=7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h742.96h]h742.96}(hjX7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjU7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubj)}(hhh]j)}(h 0.001345967h]h 0.001345967}(hjp7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjm7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-ondemandh]hacpi-cpufreq-ondemand}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj7ubj)}(hhh]j)}(hjh]h2}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj7ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj7ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj7ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj7ubj)}(hhh]j)}(h441.74h]h441.74}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj7ubj)}(hhh]j)}(h817.49h]h817.49}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj7ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj7ubj)}(hhh]j)}(h 0.001223256h]h 0.001223256}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-ondemandh]hacpi-cpufreq-ondemand}(hjA8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj>8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;8ubj)}(hhh]j)}(hj&h]h3}(hjY8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjV8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;8ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj;8ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj;8ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj;8ubj)}(hhh]j)}(h455.48h]h455.48}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;8ubj)}(hhh]j)}(h820.01h]h820.01}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;8ubj)}(hhh]j)}(h 0.001219497h]h 0.001219497}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;8ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-ondemandh]hacpi-cpufreq-ondemand}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj8ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj8ubj)}(hhh]j)}(hAverageh]hAverage}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj8ubah}(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)}(h425.613h]h425.613}(hj69hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj39ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj8ubj)}(hhh]j)}(h793.487h]h793.487}(hjN9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjK9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj8ubj)}(hhh]j)}(h 0.001260260h]h 0.001260260}(hjf9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjc9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-schedutilh]hacpi-cpufreq-schedutil}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9ubj)}(hhh]j)}(hjh]h1}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj9ubah}(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)}(h459.69h]h459.69}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9ubj)}(hhh]j)}(h838.54h]h838.54}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj9ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9ubj)}(hhh]j)}(h 0.001192548h]h 0.001192548}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj :ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-schedutilh]hacpi-cpufreq-schedutil}(hj7:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj4:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj1:ubj)}(hhh]j)}(hjh]h2}(hjO:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjL:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj1:ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj1:ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj1:ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhj1:ubj)}(hhh]j)}(h466.55h]h466.55}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj1:ubj)}(hhh]j)}(h830.89h]h830.89}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj1:ubj)}(hhh]j)}(h 0.001203528h]h 0.001203528}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj1:ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-schedutilh]hacpi-cpufreq-schedutil}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj:ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj:ubj)}(hhh]j)}(hj&h]h3}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj: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&]uh1jhhhMhj(;ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj:ubj)}(hhh]j)}(h837.32h]h837.32}(hjC;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj@;ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj:ubj)}(hhh]j)}(h 0.001194286h]h 0.001194286}(hj[;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjX;ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(hacpi-cpufreq-schedutilh]hacpi-cpufreq-schedutil}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hj;ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;ubj)}(hhh]j)}(hAverageh]hAverage}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hj;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&]uh1jhhhM hj;ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;ubj)}(hhh]j)}(h835.583h]h835.583}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hj;ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;ubj)}(hhh]j)}(h 0.001196769h]h 0.001196769}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hj<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(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&]uh1jhhhM hj*<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj'<ubj)}(hhh]j)}(h Comprison(%)h]h Comprison(%)}(hjE<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hjB<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)}(h9.3810h]h9.3810}(hj{<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hjx<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj'<ubj)}(hhh]j)}(h5.3051h]h5.3051}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hj<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj'<ubj)}(hhh]j)}(h-5.0379h]h-5.0379}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hj<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj'<ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(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&]uh1jhhhMhj<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]j)}(h Comprison(%)h]h Comprison(%)}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj<ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]j)}(h124.7392h]h124.7392}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]j)}(h-36.2934h]h-36.2934}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]j)}(h140.7329h]h140.7329}(hj5=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj2=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]j)}(h1.1081h]h1.1081}(hjM=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjJ=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]j)}(h2.0661h]h2.0661}(hje=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjb=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubj)}(hhh]j)}(h-2.0242h]h-2.0242}(hj}=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjz=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(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&]uh1jhhhMhj=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj=ubj)}(hhh]j)}(h Comprison(%)h]h Comprison(%)}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj=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&]uh1jhhhMhj=ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj=ubj)}(hhh]j)}(h7.5968h]h7.5968}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj >ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj=ubj)}(hhh]j)}(h-7.0605h]h-7.0605}(hj%>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj">ubah}(h]h ]h"]h$]h&]morerowsKuh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh](j)}(hhh]j)}(h.acpi-cpufreq-schedutil VS amd-pstate-schedutilh]h.acpi-cpufreq-schedutil VS amd-pstate-schedutil}(hjO>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjL>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjI>ubj)}(hhh]j)}(h Comprison(%)h]h Comprison(%)}(hjg>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjd>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjI>ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjI>ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjI>ubj)}(hhh]h}(h]h ]h"]h$]h&]morerowsKuh1jhjI>ubj)}(hhh]j)}(h2.1115h]h2.1115}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjI>ubj)}(hhh]j)}(h4.2873h]h4.2873}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjI>ubj)}(hhh]j)}(h-4.1110h]h-4.1110}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj>ubah}(h]h ]h"]h$]h&]morerowsKuh1jhjI>ubeh}(h]h ]h"]h$]h&]uh1jhj`0ubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`0ubeh}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]colsKuh1jbhj.ubah}(h]h ]h"]h$]h&]uh1j]hjv.ubeh}(h]h ]h"]h$]h&]uh1jhhhMhj&ubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhhhMqhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jhjshhhhhM?ubeh}(h]unit-tests-for-amd-pstateah ]h"]unit tests for amd-pstateah$]h&]uh1jGhjhhhhhM5ubeh}(h]diagnostics-and-tuningah ]h"]diagnostics and tuningah$]h&]uh1jGhjIhhhhhMubjH)}(hhh](jM)}(h Referenceh]h Reference}(hj:?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7?hhhhhMubhfootnote)}(hyAMD64 Architecture Programmer's Manual Volume 2: System Programming, https://www.amd.com/system/files/TechDocs/24593.pdf h](hlabel)}(h1h]h1}(hjP?hhhNhNubah}(h]h ]h"]h$]h&]uh1jN?hjJ?ubj)}(hxAMD64 Architecture Programmer's Manual Volume 2: System Programming, https://www.amd.com/system/files/TechDocs/24593.pdfh](hGAMD64 Architecture Programmer’s Manual Volume 2: System Programming, }(hj^?hhhNhNubj)}(h3https://www.amd.com/system/files/TechDocs/24593.pdfh]h3https://www.amd.com/system/files/TechDocs/24593.pdf}(hjf?hhhNhNubah}(h]h ]h"]h$]h&]refurijh?uh1jhj^?ubeh}(h]h ]h"]h$]h&]uh1jhhhMhjJ?ubeh}(h]jpah ]h"]1ah$]h&]jjajqjruh1jH?hhhMhj7?hhjsKubjI?)}(hAdvanced Configuration and Power Interface Specification, https://uefi.org/sites/default/files/resources/ACPI_Spec_6_4_Jan22.pdf h](jO?)}(h2h]h2}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jN?hj?ubj)}(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, }(hj?hhhNhNubj)}(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}(hj?hhhNhNubah}(h]h ]h"]h$]h&]refurij?uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhhhMhj?ubeh}(h]jah ]h"]2ah$]h&]jajqjruh1jH?hhhMhj7?hhjsKubjI?)}(hProcessor Programming Reference (PPR) for AMD Family 19h Model 51h, Revision A1 Processors https://www.amd.com/system/files/TechDocs/56569-A1-PUB.zip h](jO?)}(h3h]h3}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jN?hj?ubj)}(hProcessor Programming Reference (PPR) for AMD Family 19h Model 51h, Revision A1 Processors https://www.amd.com/system/files/TechDocs/56569-A1-PUB.ziph](h[Processor Programming Reference (PPR) for AMD Family 19h Model 51h, Revision A1 Processors }(hj?hhhNhNubj)}(h:https://www.amd.com/system/files/TechDocs/56569-A1-PUB.ziph]h:https://www.amd.com/system/files/TechDocs/56569-A1-PUB.zip}(hj?hhhNhNubah}(h]h ]h"]h$]h&]refurij?uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhhhMhj?ubeh}(h]js ah ]h"]3ah$]h&]jn ajqjruh1jH?hhhMhj7?hhjsKubjI?)}(hWLinux Kernel Selftests, https://www.kernel.org/doc/html/latest/dev-tools/kselftest.htmlh](jO?)}(h4h]h4}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jN?hj?ubj)}(hWLinux Kernel Selftests, https://www.kernel.org/doc/html/latest/dev-tools/kselftest.htmlh](hLinux Kernel Selftests, }(hj@hhhNhNubj)}(h?https://www.kernel.org/doc/html/latest/dev-tools/kselftest.htmlh]h?https://www.kernel.org/doc/html/latest/dev-tools/kselftest.html}(hj@hhhNhNubah}(h]h ]h"]h$]h&]refurij @uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhhhM!hj?ubeh}(h]jah ]h"]4ah$]h&]jajqjruh1jH?hhhM!hj7?hhjsKubeh}(h] referenceah ]h"] referenceah$]h&]uh1jGhjIhhhhhMubeh}(h])amd-pstate-cpu-performance-scaling-driverah ]h"])amd-pstate cpu performance scaling driverah$]h&]uh1jGhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jLN 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_handlerjV@error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _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 j. j j+jSesubstitution_defs}(hhhhhhj jjjj*jj9j-jHj<jWjKjfjZjujijjxjjjjjjjjjjjjjjjjj jjjj)jj8j,jGj;jVjJjejYjtjhjjwjjjjjjjjjjjjjjjjj jjj j(jj7j+jFj:jUjIjdjXjsjgjjvjjjjjjjjjjjjjjjjj jjj j'jj6j*jEj9jTjHjcjWjrjfjjujjjjjjjjjjjjjjjjjjjj j&jj5j)jDj8usubstitution_names}(amphߌaposhasthbrvbarj bsoljcentj*colonj9commajHcommatjWcopyjfcurrenjudarrjdegjdividejdollarjequalsjexcljfrac12jfrac14jfrac18jfrac34j frac38jfrac58j)frac78j8gtjGhalfjVhorbarjehyphenjtiexcljiquestjlaquojlarrjlcubjldquojlowbarjlparjlsqbjlsquoj ltjmicroj(middotj7nbspjFnotjUnumjdohmjsordfjordmjparajpercntjperiodjplusjplusmnjpoundjquestjquotj raquojrarrj'rcubj6rdquojEregjTrparjcrsqbjrrsquojsectjsemijshyjsoljsungjsup1jsup2jsup3jtimesjtradejuarrj&verbarj5yenjDurefnames}(1]j`a2]japerf_cap](j j j. j j j j+je3]jd aprocessor_support](jSjCe4]jaurefids}(j](jj j. j j+ejO ](jE jSeunameids}(j1@j.@jjjjjjjjjTjQj{jxjjjjjjjJjGjj|jjjjjU jR j jO j j j? j< j j jjjcj`j#j jijfjjjjjjjjjjj8j5j0j-jjj4?j1?jjjpjmj,?j)?j)@j&@j?jpj?jj?js j!@ju nametypes}(j1@jjjjjTj{jjjjJjjjjU j j j? j jjcj#jijjjjjj8j0jj4?jjpj,?j)@j?j?j?j!@uh}(j.@jIjjjjj`jjjjjjjjjQj0jxjWjj~jjjjjGjj|jMjjjjjR jjO jX j jX jn jd j< j j jB jj" j`jj jfjfjjjljjjj&jjjjj5jj-jjj;j1?jjjjmjj)?jsjjj&@j7?jpjJ?jj?js j?jj?u footnote_refs}(j@]j`aj@]jaj@]jd aj@]jau citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes](jJ?j?j?j?e citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jd@K sRparse_messages]transform_messages](hsystem_message)}(hhh]j)}(hhh]h6Hyperlink target "full msr support" is not referenced.}hjAsbah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1jAubjA)}(hhh]j)}(hhh]h;Hyperlink target "shared memory support" is not referenced.}hj8Asbah}(h]h ]h"]h$]h&]uh1jhj5Aubah}(h]h ]h"]h$]h&]levelKtypej2AsourcehlineKuh1jAubjA)}(hhh]j)}(hhh]hEHyperlink target "amd cppc performance capability" is not referenced.}hjRAsbah}(h]h ]h"]h$]h&]uh1jhjOAubah}(h]h ]h"]h$]h&]levelKtypej2AsourcehlineKuh1jAubjA)}(hhh]j)}(hhh]hEHyperlink target "amd cppc performance capability" is not referenced.}hjlAsbah}(h]h ]h"]h$]h&]uh1jhjiAubah}(h]h ]h"]h$]h&]levelKtypej2AsourcehlineMuh1jAubjA)}(hhh]j)}(hhh]h7Hyperlink target "processor support" is not referenced.}hjAsbah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]levelKtypej2AsourcehlineKuh1jAube transformerN include_log]+Documentation/admin-guide/pm/amd-pstate.rst(NNNNta decorationNhhub.