昨年 Intel に買収された Linutronix の Thomas Gleixner 氏と彼のチームは、Linux x86/x86_64 ブート プロセスのクリーンアップに取り組んでいます。初期の Linux カーネル初期化コードやその他のツリー全体の変更に触れる 17 個のパッチのセットが、ディスカッションのために投稿されました。

Linux カーネル開発者は、x86 ブート プロセスのサニタイズとコードのクリーンアップに取り組んでいます。 Thomas Gleixner 氏は、現在の Linux x86 ブート コードと、この最新のパッチ シリーズの焦点について次のように説明しました。

「私のチームと私自身は、x86 ブート プロセス、特に CPUID の完全なホラー ショーのサニタイズに取り組んでいます。評価は、干し草のワイヤー回路、ダクトテープ、瞬間接着剤で構築されます。

関連する目標は、初期の起動中には必要のないインフラストラクチャの初期化を、起動プロセスの後のフェーズに移動することです。初期の起動は脆弱です。すでに十分に複雑になっているため、後のフェーズに移行できるものはすべて勝利です。

X86 FPU の初期化は、早期に実行する必要がない明白な部分の 1 つです。唯一の要件は、それが行われることです。代替パッチを適用する前に、早期に実行するとカスタム コマンド ライン解析も必要になりますが、初期化が後で行われる場合は明らかに回避できます。

代替パッチ適用は、start_kernel() の後半で呼び出される check_bugs() から行われます。 check_bugs() は fork_init() の後に呼び出されるため、FPU の初期化をそこに移行するのは遅すぎますが、X86 では task_struct のサイズが FPU レジスタ バッファのサイズに依存するため、fork_init() では FPU が X86 で初期化される必要があります。

別の魔法の関数を避けるために、私たちは check_bugs() をより早く移動することに着手し、これを遅くする理由があるかどうかをすべての化身で検査しました。何も存在しないことが判明しました (有名な最後の言葉) が、check_bugs() がまったくの誤称であることも明らかになりました。

check_bugs() は、残りの初期化コードを実行する前に CPU の初期化を完了するためのダンプ グラウンドになっています。」

このパッチ シリーズは、最初は 17 パッチであり、Linux x86 ブート コードをクリーンアップすることを目的としています。これは素晴らしい取り組みであり、並列 CPU に関する Gleixner の最近の研究に続くものです。 Linux 6.5 では、ブートのもう 1 つの改善点としてブリングアップのサポートが予定されています。

Categories: IT Info