「.init.ramfs」イメージを「rootfs」に抽出した後、何を解放しますか?

「.init.ramfs」イメージを「rootfs」に抽出した後、何を解放しますか?

以前のinitrdシステムでは、Linuxを使用して画像を公開していましたinitrd。これはコンソールで追跡されます。

 Freeing initrd memory: xxxxk freed.

ここで言うのは、実際に圧縮された元の画像が占有していたメモリを解放するということです。マウントされたアクティブファイルシステムは、pivot_rootマウント解除(ルート交換)によって解放されます。

initramfsファイルシステムは、などの特定のユーティリティを使用して再帰的に削除することによって解放され、マウントswitch_root解除されません。わかりましたが、.cpioオリジナル画像(圧縮アーカイブ)はどこに公開されますか?

私は探して、init/initramfs.c (populate_rootfs)実際にまたは両方からデータを解凍することが可能であることを発見しましたinitramfs!この領域はによって解放されますが、ここには最初から同様のメモリ解放を実行するロジックはありません。__initramfs_startinitrd_startinitrdfree_initrd()__initramfs_start

誰かがこのメモリを解放する方法を明らかにできますか?それともまだリリースされていないことを確認していますか?使用されていない他のメモリと一緒に廃棄されたセクションにありますか?

__initramfs_start解放された未使用メモリの範囲外であることを示すいくつかの診断を追加しました。これはARM組み込みシステムにあります。

[    1.241857] Freeing unused kernel memory: 3240K [c0c01000, c0f2b000)
[    1.241874] Initramfs image starts at: e7fddef0

しかし、リンカースクリプトを見るとINITRAMFS はい__init_startと記号の間に配置されるので、__init_endこの違いはいくつかのランタイム再配置によるものかもしれませんか?サイズはほぼ正確です。元の圧縮画像は、2958550バイトで報告された3240Kの大部分を合理的に説明しています。

ベストアンサー1

さて、次の実験でメモリが解放されることを確認しました。に数メガバイトのランダムゴミを追加し、initramfsカーネルをビルドしてから起動しました。報告されたFreeing unused kernel memoryサイズはおよそごみのサイズだけ増加します。さらに、これらの拡張はfreeブートによって表示される利用可能なメモリには影響しません/proc/meminfo

おすすめ記事