カーネルのリリースノート

このページでは、各カーネル リリースの主な機能の概要を説明し、追加情報へのリンクを掲載しています。

カーネル 6.12 の新機能

このセクションでは、カーネル 6.12 の新機能について説明します。

メモリ割り当てのプロファイリング

メモリ使用量を把握するための鍵は、割り当てが行われる場所を知ることです。カーネル 6.12 には、メモリ割り当てプロファイリング(構成の CONFIG_MEM_ALLOC_PROFILING)という新しいメモリ割り当てアトリビューション システムが含まれています。メモリ割り当てプロファイリングでは、各割り当てが一意のソース行に関連付けられるため、割り当てに関する問題をすばやく特定できます。また、メモリ割り当てのプロファイリングでは、次のことができます。

  • エンジニアリング フェーズで使用されますが、標準の GKI イメージで使用できます。

  • sysctl.vm.mem_profiling ブートパラメータを使用して有効にできます。

  • カーネル内モジュールと読み込まれたモジュールの両方で機能します。

ゼロコピーとマルチショット読み取りによる io_uring の高速化

カーネル 6.12 では、statsd モジュールと logd モジュールが sendfile ゼロコピーを使用するため、パフォーマンスが向上しています。

また、このカーネル バージョンでは、1 回の読み取りオペレーションで複数のデータを一括取得できるマルチショット読み取りを実装し、パフォーマンスを向上させています。

Berkeley Packet Filter(BPF)の機能とサポートを改善

カーネル 6.12 では、BPF ツールチェーンが移行され、CO-RE といくつかの最新機能をサポートするようになりました。また、新しい BPF ローダーにより、AOSP の一部であるプログラムで最新の BPF を使用できるようになりました。

プロキシの実行

プロキシ実行により、スケジューラは優先度の高いプロセスから CPU サイクルを借用して、優先度の低いプロセスによって保持されているロックを回復できます。この機能により、優先度逆転の問題が軽減されます。

カーネル 6.6 の新機能

このセクションでは、カーネル 6.6 の新機能について説明します。

Rust のサポート

複数のカーネル 6.6 プロジェクトで Rust が使用されています。

仮想メモリ領域(VMA)ごとのロック

カーネル 6.6 では、仮想メモリ領域ごとのロックを使用して、mmap_sem(旧称 mmap_lock)の競合の問題に対処します。そのため、スレッド数が多いアプリでは、起動時間が最大 20% 短縮される可能性があります。

最短の有効な仮想期限優先(EEVDF)スケジューラが CFS に代わる

EEVDF は Completely Fair Scheduler(CFS)に代わるもので、短時間実行タスクと長時間実行タスクの間で CPU アクセスのバランスを改善します。

読み取りコピー更新(RCU)コールバックによる消費電力の削減

RCU_LAZY オプションは、タイマーベースの RCU コールバック バッチ処理方法を使用して電力を節約します。負荷が軽いシステムやアイドル状態のシステムでは、このオプションを使用すると消費電力を 5 ~ 10% 削減できます。

ZRAM メモリ圧縮の改善

新しい CONFIG_ZRAM_MULTI_COMP ビルド設定により、ZRAM は 3 つの代替アルゴリズムのいずれかを使用してページを再圧縮できます。この再圧縮により、圧縮メモリがさらに縮小され、アクティブなタスクに使用できる空き容量が増えます。

カーネル 6.1 の新機能

このセクションでは、カーネル 6.1 の新機能について説明します。

カーネル制御フロー整合性(KCFI)による高速なセキュリティ

KCFI は制御フローの整合性(CFI)に代わるもので、実行時のコストが削減され、ビルド時のコストは発生しません。ランタイム コストが削減されたことで、CFI と比較して、KCFI を有効にできる場所が増えました。特に、トレースポイントとベンダーフックが該当します。

KCFI に加えて、カーネル 6.1 には、厳格な memcpy 境界チェックやストレートライン推測攻撃の軽減など、複数のセキュリティ機能が導入されています。

KCFI の詳細については、カーネル制御フロー整合性をご覧ください。

マルチジェネレーション LRU(MGLRU)

カーネル 6.1 に MGLRU が追加されました。これにより、実際に使用されているページをより正確に識別して、メモリ管理が改善されます。この改善により、システムでメモリ不足が発生した場合にアプリを停止する必要がなくなります。また、デバイス全体の応答性が向上するため、ユーザー エクスペリエンスも向上します。

MGLRU の実装には、新しい RCU セーフのマップル ツリーもサポートされています。これは、場合によっては、レッドブラック ツリー(rbtree)の代わりに使用できます。RCU セーフのマップル ツリーを使用すると、フットプリントが小さくロックフリーであるため、パフォーマンスが向上します。

MGLRU の詳細については、マルチジェネレーション LRU をご覧ください。

スケジュール

スケジューラの維持と更新は、カーネルの改善作業の重要な要素です。6.1 のカーネルの更新内容は次のとおりです。

  • クラスタ対応のスケジューリングを追加しました。これにより、L2 キャッシュを共有するコアに移行することでパフォーマンスが向上します。
  • 不要なエネルギー マージンのヒューリスティクスを削除しました。この更新により、一部の移行を制限することで、最大 5% のエネルギー使用量を削減できます。
  • ロード バランシングの改善により、ウェイクアップ レイテンシを短縮しました。
  • RCU の猶予期間をリアルタイムの kthread に移動しました。この更新により、RCU 関連のレイテンシの外れ値が大幅に減少しました。

グラフィック

カーネル 6.1 には、Vulkan Video API のニーズに合わせて、同期ファイルをエクスポートおよびインポートするための dma-buf の新しいメソッドが含まれています。

新しい futex_waitv() メソッドは、複数の futexe を同時に待機することで、他のプラットフォームからのゲームの移植を簡素化します。

デバッグツール

デバッグビルドで Kernel Concurrency SANitizer(KCSAN)を使用して、カーネルコードの競合を特定します。

また、Kernel Memory SANitizer(KMSAN)を使用して、カーネル内の初期化されていない値を見つけます。

ARM64 サポートの改善

6.1 カーネルでは、ARM64 アーキテクチャに次のような複数の改善が加えられています。

  • ARMv8.6 タイマー拡張機能のサポート
  • QARMA3 ポインタ認証アルゴリズムのサポート
  • ARMv9 スケーラブル マトリックス拡張機能(SME)の初期サポート
  • 代替機能のパッチ適用を改善し、カーネル イメージのサイズを小さくしました