Linux Kernel に Intel HFI をサポートするパッチ | Coelacanth's Dream
Coelacanth's Dream

Linux Kernel に Intel HFI をサポートするパッチ

Linux Kernel において Intel HFI (Hardware Feedback Interface) をサポートするパッチが、Intel の Linuxソフトウェアエンジニア Ricardo Neri 氏によって投稿されている。

Index

Intel HFI

Intel HFI は、ハードウェア (CPU) が OS に対して、ワークロードに応じた最適なスケジューリングを実行するためのガイダンス、ヒントを示す機能。
パッチと Intel のドキュメントにはどの CPU でサポートされているかは記されていないが、CPUID (Level: 0x6:0x0, Bit19) を見るに、ハイブリッドアーキテクチャを採用する Lakefield (Sunny Cove + Tremont) 1Alder Lake (Golden Cove + Gracemont) 2 でサポートされている。

HFI ではスケジューラに対するヒントとして、相対的なレベルを示す値 (8-bit, 0-255) が性能と電力効率のそれぞれに用意され、加えて 6-Byte の予約部を持つ構造体を提供する。その構造体は論理プロセッサ数 (スレッド数) 分が用意される。
性能と電力効率のレベルは高いほど優れている。レベルは設定された CPU温度の上限に達した時や、温度と消費電力に関する設定が変更された時などに更新される。
0 の場合は性能、電力効率が著しく低下していることを示し、ドキュメントではその CPU にタスクをスケジューリングしないことを推奨している。
パッチの実装では、0 の場合、ユーザースペースはその論理プロセッサをオフラインかアイドル状態に移行させられるようになっている。
また、性能のレベルが低下傾向にあると気付いた場合には、0 になることを避けるため、電力制限を事前に調整することもあるとしている。

Intel "E"HFI

Lakefield ではサポートせず、Alder Lake ではサポートしている機能として、Intel HFI より進んだ機能となる Intel EHFI (Enhanced Hardware Feedback Interface) がある。
今回のパッチでは、CPUID の機能フラグビットを HFI だけ確認しており、EHFI (Level: 0x6:0x0, Bit23) は確認していない。HFI のみを対象にした実装となっている。

EHFI は名の通り HFI からスケジューラへのヒントとなる要素が強化されている。ソフトウェアスレッドには固有のインデックス (ClassID) が割り当てられ、スケジューラはこれを基にソフトウェアスレッドをどの CPUコアに割り当てるかを決定できる。
論理プロセッサには EHFI 関連の履歴が蓄積されるようになっており、これは ClassID の割り当て等に用いているのではないかと思われる。履歴をリセットする命令として HRESET 命令も Alder Lake ではサポートされている。

マーケティング的には Intel Thread Director と呼ばれ、Windows 11 でサポートされているそれは Intel EHFI を活用している。3
今の所 Linux Kernel には HFI へのインターフェイスを実装するパッチが投稿、公開されている段階であり、Lakefield も含めた Intel ハイブリッドアーキテクチャへの最適化は進んでいると言えるが、EHFI を活用した Intel Thread Director に相当する機能はまだ実装されていない。
Linux におけるハードウェアの検証や OSS関連のニュースを発信している Phoronix は、Windows 11 と各種 Linuxディストリで多種多様のベンチマークを実行し、その結果を掲載している。4
一部のアプリケーションにおいて Windows 11 の方が優れた性能を示しており、Linuxディストリでは Golden Cove (Performance/Big), Gracemont (Efficient/Small) へのコア割り当てが適切に行えていないことが窺える。

参考リンク