16 KB ページサイズに最適化する

ほとんどのプログラミング作業では、ページサイズを考慮する必要はありません。ただし、大量のメモリを割り当てたり、高度に最適化されたコンポーネントを扱ったりする場合や、カーネルと直接インターフェースしたり、大量のファイル操作を行ったりする場合、Android のページサイズが 16 KB に変わったことは、パフォーマンス分析の新たな考慮点になりえます。このドキュメントでは、ページサイズの変更がパフォーマンスに与える影響を確認する方法について説明します。

メモリの問題を検出する

mmap でメモリを割り当てる際は、必ずページサイズの倍数となる引数を渡すようにしてください。ページサイズが 16 KB のシステムで 4096 バイトをリクエストすると、カーネルは 16 KB を割り当てるため、12 KB のスペースが無駄になります。/proc/maps/proc/smaps を確認(または、無駄なスペースをわかりやすく確認できる Android ツール showmap を使用)したり、プロセスの strace をチェックしたりすることで、無駄なスペースを検出できます。

ディスク容量の問題を検出する

Android 15 以降でリリースされるデバイスは、デフォルトで 16 KB ELF アライメントになっており、多くのアプリケーションも 16 KB アライメントです。システムに関係なく、多くのファイルでパディングが増えています。ファイルの実際のディスク上のサイズは、du <my file> で確認できます(KB 単位)。ファイルの見かけ上のサイズを確認するには、du -b <my file> を使用します。サイズがバイト単位で表示されます。見かけ上のサイズが実際のサイズよりも大きい場合、通常、ファイルが圧縮されているか、ファイルにスパース領域があることを意味します。見かけ上のサイズが実際のサイズよりも小さい場合は、ファイルに余分なメタデータがあるか、ディスク上でファイルが分割されている可能性があります。これらをチェックすることで、ディスク上のファイルの実際のサイズを分析できます。