Linuxカーネルは、カーネルを変更せずに4KBを超えるデフォルトの仮想メモリページサイズを使用できますか?

Linuxカーネルは、カーネルを変更せずに4KBを超えるデフォルトの仮想メモリページサイズを使用できますか?

16KBの仮想メモリページサイズの利点を享受できるCPUを設計しています(これにより、キャッシュアクセスの電力効率が低下し、ターゲットワークロードのパフォーマンスが向上し、メモリの断片化は問題になりません)。標準ページサイズは4KBです。カーネルソースコードにデフォルトのページサイズを16KBに設定する簡単な方法はありますか?それとも4KBから16KBに変更するには、カーネルソースコードを変更する必要がありますか?ファイルシステムの場合、仮想メモリページサイズが16 KBの場合、予期しない副作用は何ですか?

Linuxカーネルのより深い理解を提供するURLがあれば良いでしょう。

ありがとうございます:-)

ベストアンサー1

はい、Linuxカーネルは4KB以外のページサイズをサポートし、場合によってはデフォルトでこれらのページサイズを使用します。

x86_64アーキテクチャでは4KBのみがサポートされています(AFAIK)。これがこのチップができる唯一の作業だからです。

たとえば、ppc64アーキテクチャには4KBページを使用するカーネルコンパイル時の設定がありますが、デフォルトでは64KBページに設定されています(64KBページよりもテストが少ないためお勧めできません)。

ARM(aarch64プラットフォーム)の場合、カーネルは4KB、16KB、64KBのページサイズをサポートすると思います。これは、Linuxを実行しているARMでこれらのページサイズを見たことがあるからです。 (私はこれらがすべて上流のカーネルから来たと信じています。)

「私たちはCPUを設計しています」と言い、カーネルソースコードの修正について話します。まあ、新しいアーキテクチャの場合は、ページサイズのサポートを含め、カーネルにサポートを追加する必要があります。既存のアーキテクチャ(aarch64など)の実装では、既存のサポートを使用できますが、サポートするにはカーネルにCPU関連のエントリを追加する必要があるかもしれません。

ファイルシステムの場合、ファイルシステムのブロックサイズがページサイズと一致する必要はありません。ページサイズが16KBまたは64KBのシステムでは、デフォルトのブロックサイズが4KBのext4形式を使用できます。

これら2つが互いに関連する傾向があるのは、ファイルシステムを読み書きするときにページキャッシュをバイパスするためにO_DIRECTを使用することです。ただし、これはまだ機能し、最新のカーネルでは通常512バイトの境界でのみソートが必要です。

つまり、ページサイズとファイルシステムブロックサイズは何らかの方法で一致する必要はありません。

おすすめ記事