x86_64 Linuxカーネルのページサイズは?

x86_64 Linuxカーネルのページサイズは?

x86_64 Linuxカーネルのページサイズがどれくらいになるのか気になります。 4KBと聞きましたが、他のソースでは2MBと言いますね。

ユーザーのカーネルページサイズがカーネルページサイズと異なる可能性があるかどうか疑問に思います。 Linuxはカーネルページに2MBを使用し、ユーザーページに4KBを使用できますか?

ありがとう

ベストアンサー1

x86_64アーキテクチャ(このアーキテクチャの32ビットバージョンであるi386またはIA-32と同じ)のページサイズは4KiBです。

また、2MiBへの参照も表示されます。これはx86_64アーキテクチャの「ラージページ」サイズの1つであり、場合によってはLinuxでも使用される1GiB巨大ページを許可するためです。 (32ビットバリアントi386またはIA-32には4MiB大容量ページがあります。)

また、Linuxカーネルには、多くの最新のLinuxディストリビューションでデフォルトで有効になっている「透明な巨大ページ」という機能があります。プロセスが大量のメモリを割り当てるたびに、Linuxカーネルは2MiBでソートされたメモリブロックを割り当て、ページテーブルを設定してプロセスに巨大なページを提供することを決定できます。ただし、システムにメモリ不足が発生して一部のメモリを交換する必要がある場合でも、それを別のページに分割して一部を交換し、残りをメモリに残すことができます。 (場合によっては、単一ページを含む割り当てから透明な巨大ページを再構築することもできます。)

カーネルとユーザースペースに関して、ページテーブルの設定方法にはいくつかの微妙な違いがあります(セキュリティ機能、特にSpectreやMeltdownなどの最近のセキュリティ問題以降に導入された機能は、ページテーブルマッピングをカーネルとユーザースペースから分離しようとします) 。カーネルとユーザー空間の両方が同じ方法で同じメモリ領域にアクセスします。たとえば、hugepages(透明またはその他)もカーネルモードでhugepageマッピングを使用します。

おすすめ記事