Coelacanth's Dream

amd-pstate ドライバーにおける異種コア構成のトポロジへの対応

AMD の Perry Yuan 氏により、最新の AMD APU/CPU 向けの CPU 周波数ドライバー amd-pstate に異種コア構成のトポロジへの対応を追加するパッチが投稿された。

パッチでは、まず CPUID 命令から取得できる HeterogeneousCoreTopology (0x8000_0026:EAX:Bit30) を見て、それがサポートされている場合は CoreType (0x8000_0026:EBX:Bit31-28) を取得する。
CoreType は以下のように定義されている。

    +/* defined by CPUID_Fn80000026_EBX BIT [31:28] */
    +enum amd_core_type {
    +	CPU_CORE_TYPE_NO_HETERO_SUP = -1,
    +	CPU_CORE_TYPE_PERFORMANCE = 0,
    +	CPU_CORE_TYPE_EFFICIENCY = 1,
    +	CPU_CORE_TYPE_UNDEFINED = 2,
    +};
    +

CPU_CORE_TYPE_PERFORMANCE の場合は highest_perf に 196、CPU_CORE_TYPE_EFFICIENCY の場合は 132、それ以外か HeterogeneousCoreTopology をサポートしていない場合は 166 がセットされるようになっている。

    +	switch (core_type) {
    +	case CPU_CORE_TYPE_NO_HETERO_SUP:
    +		highest_perf = CPPC_HIGHEST_PERF_DEFAULT;
    +		break;
    +	case CPU_CORE_TYPE_PERFORMANCE:
    +		highest_perf = CPPC_HIGHEST_PERF_PERFORMANCE;
    +		break;
    +	case CPU_CORE_TYPE_EFFICIENCY:
    +		highest_perf = CPPC_HIGHEST_PERF_EFFICIENT;
    +		break;
    +	default:
    +		highest_perf = CPPC_HIGHEST_PERF_DEFAULT;
    +		WARN_ONCE(true, "WARNING: Undefined core type found");
    +		break;
    +	}

Intel CPU ではハイブリッド構成、異種コア構成におけるスケジューリングにおいて HFI (Hardware Feedback Interface)ITD (Intel Thread Director) といったハードウェア側からのヒントを用いることを可能としているが、言い換えれば複雑でもある。
一方、AMD CPU は現状 Zen 4 に対する Zen 4c のような、サポートする拡張命令も IPC も同じで、(システムから見れば) 動作クロックのみが異なるコア実装を採っているため、パッチのような CPPC に関連する値の調節だけで対応が済むのだと思われる。

それと Zen 4Zen 4c で構成された AMD APU として Phoenix2 が存在するが、HeterogeneousCoreTopologyCoreType をサポートしていない可能性がある。
Phoenix2CPUID 実行結果が InstLatx64 氏のリポジトリにて公開されているが、どちらも 0 となっており、HeterogeneousCoreTopology はサポートせず、すべての CoreTypePerformance Core と読み取れる。

そのため、このパッチは Phoenix2 に対しては想定と異なる動作をする可能性はあるが、元から Preferred Core の指定で対応していたか、最新の BIOS/UEFI では異なる CPUID 実行結果となる可能性も考えられる。
どちらにせよ自分は実機を持っていないため検証できない。

参考リンク