汎用OSの開発は、モバイルOSが最も活発ではないかと思うほど積極的な開発が行われてきているように感じます。
たとえば、これまでの例を振り返ってみると、iOS 10.
Googleは、同じような大仕事を再びやろうとしており、Android OSのメモリ管理に手を入れようとしていることが、Android Developers Blogに公開されたエントリ
Android Developers Blog: Adding 16 Kバイト Page Size to Android
ページサイズが4Kバイトから16Kバイトへ
Googleは、Android OSが管理するメモリのページサイズを変更しようとしています。
多くのCPUやOSがサポートする、一般的なページサイズの4Kバイトから4倍の16Kバイトへの変更が検討されています。4Kバイトのページサイズは、iOSやWindows 11、Linuxなどで採用されています。
ページサイズのページとはメモリ管理を行う際の最小単位で、サイズとはこれの大きさを示しています。このサイズに基づいて、アプリが必要とするメモリを物理メモリに割り当てます。この処理には、MMUと呼ばれるメモリ管理ユニットのハードウェアとOSも関与します。OS側はページテーブルでメモリ割り当ての管理を行い、必要なメモリをプロセスに割り当てます。
ページサイズが変更されるということで、アプリがメモリを必要とするたびに、4Kバイトではなく16Kバイトの単位でメモリの割り当てを行い管理します。ページサイズが拡大されたことにより、メモリ管理に関わる仕事量が少なくなり、Googleによる試算では、全体のパフォーマンスが5%から10%向上するとしています。
ページサイズ変更のメリット・デメリット
ところで、なぜページサイズが4Kバイトなのかと言えば、わかりやすいところではMMUが4Kバイト単位でページサイズを管理しているためです。たとえば、IntelやAMDのCPUでは、デフォルトページサイズは4Kバイトなので、Windows 11やLinuxは、4Kバイトのページサイズで動作します。今回、16Kバイトのページサイズになったのは、ARMのMMUがそれをサポートしているからです。余談にはなりますが、ARMのMMUは64Kバイト、1MB、16MBと更に大きなページサイズもサポートします。
ページサイズを大きくすると、メモリの利用効率が落ちるデメリットがあります。
わかりやすくするために単純な話にしますが、12Kバイトのメモリが必要だった場合、ページサイズが4Kバイトであれば3ページ確保することで事足ります。これが、ページサイズが16Kバイトだった場合、1ページの確保で事が済みますが4Kバイトの無駄が発生します。小さなページサイズで管理する方がメモリの利用効率は良くなりますが、メモリ管理に要する処理コストは増えます。大きなページサイズではこの逆です。
Googleの試算では16Kバイトのページサイズにすることで、9%の追加メモリが必要になるとしています。必要なメモリ増とパフォーマンス向上を天秤にかけ、16Kバイトで運用した方が良い結論に至ったということになります。
最新機種のPixel 9のメモリは12Gバイト、Pixel 9 Pro/
いつから変更になるのか
ページサイズの変更は、Android 15で正式に提供されることはなく、Android 15 QPR1 ベータ版から開発者向けオプションとして用意され、Pixel 8とPixel 8 Proでは、このオプションが利用できるようです。今後、他機種にも展開していくとされており、原稿執筆時点では筆者の使うPixel 6 Proにはオプションがありません。
ページサイズの変更はユーザにはわかりづらい内容ですが、先の10年を見据えた基礎づくりと考えると大仕事なのは間違いありません。冒頭でも触れたように、こうした変更もとあるバージョンからサラリと変更されるのかもしれません。
今週は、このあたりで、また来週。