chroot如何影响动态库的内存使用?

时间:2013-12-25 07:30:41

标签: linux memory-management shared-libraries ld chroot

虽然another question有类似主题,但它不包括chrooted jails中共享库的内存使用。

假设我们有一些类似的chroots。更具体地说,完全相同的二进制文件和共享库集合实际上是主副本的硬链接以节省磁盘空间(为了防止文件系统更改的可能性,只读文件系统)。

在这样的设置中如何影响内存使用?

3 个答案:

答案 0 :(得分:8)

如chroot系统调用中所述:

  

此调用会更改路径名解析过程中的某个成分,而不会执行任何操作。

因此,共享库的加载方式与chroot jail之外的方式相同(共享只读页面,重复数据等)。

http://man7.org/linux/man-pages/man2/chroot.2.html

答案 1 :(得分:3)

因为硬链接共享相同的底层inode,所以内核在缓存/映射时将它们视为相同的项目。

您可以通过使用硬链接以及磁盘空间节省来节省文件系统缓存。

我遇到的最大问题是,如果有人管理如此破坏其中一个chroot环境的只读性质,那么他们可以通过修改任何来破坏所有这些环境。硬链接文件。

答案 2 :(得分:2)

当我设置它时,我每个chroot复制了共享库,而不是链接到只读挂载。使用单独的文件时,文本段不会共享。相同的inode可能会映射到相同的只读文本段,但这可能会因可用的内存管理硬件和类似的架构细节而有所不同。

在您的系统上尝试此实验:编写一个小程序,尽量少用大型共享库。如您所述,运行二十或三十个chroot jails,每个jail都有一个程序的运行副本。在&之前检查整体内存使用情况在运行期间,剖析一个实例以获得良好的文本/数据段细分。如果内存使用量增加了每个实例的地图的完整大小,则不会共享这些段。相反,如果内存使用量增加了一小部分,则会共享这些段。