Coelacanth's Dream

Intel Alder Lake-P のブートログ

Intel の ChromeOSエンジニアである Sathya Prakash M R 氏により、Alder Lake の Linux Kernel ブートログ (dmesg) がアップロードされている。
アップロード先の Sound Open Firmware はプロセッサやチップセットに内蔵されている音声処理用 DSP のサポートを提供するオープンソースプロジェクトである。
プロジェクトには Intel も参加しており、その一環でブートログは投稿されたものと思われる。

ブートログ

CPU の Family、Model は Family: 0x6, Model: 0x9a となっており、これはマーケットセグメント的にはモバイル向けの ALDERLAKE_L に属する。1
ALDERLAKE_L には、Alder Lake-PAlder Lake-M の 2種類が確認されているが、ファームウェア名等から、今回のは Alder Lake-P と考えられる。
ALDERLAKE_L と Alder Lake-P/M | Coelacanth’s Dream

   [    0.339678] smpboot: CPU0: Genuine Intel(R) 0000 0.80GHz (family: 0x6, model: 0x9a, stepping: 0x0)

使用しているボードは Shadowmountain 。これは Brya とは別にサポートが進められている Alder Lake-P ボードとなる。
Brya は Chromebookボードにおける Alder Lake-P のリファレンスプラットフォームという役割にあるが、Shadowmountain は Pre-CEP (Customer Excellence Program?) 2 として開発されている。

   [    0.000000] DMI: Intel shadowmountain/shadowmountain, BIOS Google_shadowmountain4.13-2419-gedf99a7d7ee-dirty 03/02/2021

CPU の機能に目を向けると、コンパイラ等へのパッチから判明していたように、AVX/2 をサポートしていることが分かる。
AVX-512 命令は非対応とされているが、これは Intel® Architecture Instruction Set Extensions Programming Reference では 「Intel Hybrid Technology は AVX512 をサポートしない」 とあり、今回はそのハイブリッドプロセッサとして動作している状態であるため、無効化されていると考えられる。
Intel ハイブリッドプロセッサでは、非対称な CPUアーキテクチャを搭載していても両方が対応している命令のみが有効化され、命令の対応レベルでは対称的となる。

しかし、Alder Lake に採用される Atom (Small) コア GracemontAtom系アーキテクチャ としては初めて AVX/2 をサポートしており、大きな変化と言えるだろう。
同時に新たに追加された AVX-VNNI (Vector Neural Network Instructions) も Gracemont ではサポートされている。

   [    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
   [    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
   [    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
   [    0.000000] x86/fpu: Supporting XSAVE feature 0x200: 'Protection Keys User registers'
   [    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
   [    0.000000] x86/fpu: xstate_offset[9]:  832, xstate_sizes[9]:    8

ブートログからは、ハイブリッドプロセッサにおいて重要なスケジュール機能の一端を垣間見ることができる。

Alder Lake ではスケジュール機能の一部に、Energy Model Framework3 を活用しているらしい。
Energy Model Framework は 2018/12/03 に、当時 Arm に所属していた、ソフトウェアエンジニア Quentin Perret 氏によって Linux Kernel に実装された。Arm CPU に限定はされておらず、アーキテクチャを問わずに用いることができる。

CPU の em_pd (energy model performance domain) は、CPU[0-7] と CPU[8-15] の 2つに分かれている。
ここでの CPU数はスレッド数を表しており、今回の Alder Lake-P のコア数は明示されていないが、
2021/02 頃 Linux Kernel に投稿されたパッチとそれに含まれていたドキュメントから、12-Core/16-Thread (Core [Big]: 4-Core/8-Thread + Atom [Small]: 8-Core/8-Thread) の構成ではないかと思われる。
パッチは、Linux Kernel のパフォーマンス解析ツール (perf) に Alder Lake のようなハイブリッドプロセッサのサポートを追加するもので、ドキュメント内にて例として示されていた Alder Lake-S は、Core [Big] が cpu[0-15]、Atom [Small] が cpu[16-23] に割り振られている。4

   [    1.723825] intel-hfi: em_pd for cpu0 null, create it. cpumask:0-7, ee: 2048
   [    1.725244] intel-hfi: update em_pd CPU1 span:0-7, ee:2048 >> 2048
   [    1.726450] intel-hfi: update em_pd CPU2 span:0-7, ee:2048 >> 2048
   [    1.727660] intel-hfi: update em_pd CPU3 span:0-7, ee:2048 >> 2048
   [    1.728871] intel-hfi: update em_pd CPU4 span:0-7, ee:2048 >> 2048
   [    1.730082] intel-hfi: update em_pd CPU5 span:0-7, ee:2048 >> 2048
   [    1.731293] intel-hfi: update em_pd CPU6 span:0-7, ee:2048 >> 2048
   [    1.732504] intel-hfi: update em_pd CPU7 span:0-7, ee:2048 >> 2048
   [    1.733718] intel-hfi: em_pd for cpu8 null, create it. cpumask:8-15, ee: 2048
   [    1.735121] intel-hfi: update em_pd CPU9 span:8-15, ee:2048 >> 2048
   [    1.736344] intel-hfi: update em_pd CPU10 span:8-15, ee:2048 >> 2048
   [    1.737587] intel-hfi: update em_pd CPU11 span:8-15, ee:2048 >> 2048
   [    1.738828] intel-hfi: update em_pd CPU12 span:8-15, ee:2048 >> 2048
   [    1.740068] intel-hfi: update em_pd CPU13 span:8-15, ee:2048 >> 2048
   [    1.741311] intel-hfi: update em_pd CPU14 span:8-15, ee:2048 >> 2048
   [    1.742552] intel-hfi: update em_pd CPU15 span:8-15, ee:2048 >> 2048

ハードウェア側では、Alder Lake からサポートしている HFI/EFHI (Enhanced/ Hardware Feedback Interface) が機能している。
HFI/EHFI は OS のソフトウェアスケジューラーを手助けする機能と言え、メモリに配置されるテーブルとそのテーブルのインデックスから、あるソフトウェアスレッドを性能重視の CPU (Core [Big]) と電力効率重視の CPU (Atom [Small]) のどちらに割り当てるかを OS にヒントを提供、アドバイスをする。
OSスケジューラーはそれを元に、性能比あるいは電力効率比を計算し、スレッドを割り当てる。OS として性能を重視するか、電力効率を重視するかの設定も影響する。
また、テーブルは CPU の消費電力等、状況に応じて動的に更新される。5

以前、Intel Architecture Day 2020 にて Raja Koduri 氏は、「 Alder LakeLakefield よりも拡張されたハードウェアベースのスケジューラーを実装している」と語っていたが、その中身が HFI/EHFI (Enhanced/ Hardware Feedback Interface) ではないかと思われる。

今調べた限りでは、HFI/EHFI をサポートするパッチはまだ Linux Kernel に投稿されておらず、Intel 内部でまだ開発中のハードウェアと、それをサポートする Linux Kernel のログを読めるのは中々珍しい機会だと言えるかもしれない。

HFIHEFI の違いについては、HFI は物理コアのみをサポートするが、EHFI は SMT による論理コアもサポートする、ということと思われる、たぶん。
恐らく、正式にパッチが投稿された時、パッチのコメントと実装されたコードから、Alder Lake のスケジュラーについてより詳細が明らかにされるだろう。