Подтвердить что ты не робот

Как chroot влияет на использование памяти динамических библиотек?

Хотя есть другой вопрос с аналогичной темой, он не распространяется на использование памяти совместно используемыми библиотеками в chrooted jails.

Скажем, у нас есть несколько подобных кротов. Чтобы быть более конкретным, точно такие же наборы двоичных файлов и разделяемых библиотек, которые на самом деле являются жесткими ссылками на главные копии для экономии места на диске (во избежание потенциальной возможности изменения файлов файловая система монтируется только для чтения).

Как влияет использование памяти в такой настройке?

4b9b3361

Ответ 1

Как описано в системном вызове chroot:

Этот вызов изменяет компонент в процессе разрешения пути и ничего не делает.

Таким образом, общая библиотека будет загружена так же, как если бы она находилась за пределами chroot-тюрьмы (обмениваться только страницами с текстом, дублировать данные и т.д.).

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

Ответ 2

Поскольку hardlinks используют один и тот же основной индекс, ядро ​​рассматривает их как один и тот же элемент, когда дело доходит до кэширования/сопоставления.

Вы увидите экономию кеша файловой системы, используя жесткие ссылки, а также экономию дискового пространства.

Самая большая проблема, с которой я столкнулся бы, заключается в том, что если кто-то управляет таким образом, чтобы подорвать только для чтения одну из окружений chroot, тогда они могут подорвать их все, внеся изменения в любой из файлов с жесткой привязкой.

Ответ 3

Когда я установил это, я скопировал разделяемые библиотеки на chroot вместо ссылки на монтируемое только для чтения. С отдельными файлами текстовые сегменты не были разделены. Вероятно, тот же самый индекс будет отображаться в один и тот же текстовый сегмент только для чтения, но это может варьироваться в зависимости от имеющегося оборудования для управления памятью и подобных архитектурных деталей.

Попробуйте этот эксперимент в вашей системе: напишите небольшую программу, которая делает минимальное использование большой общей библиотеки. Запустите двадцать или тридцать chroot тюрьмы, как вы описали, каждая с бегущей копией программы. Проверьте общее использование памяти до и во время работы и проанализируйте один экземпляр, чтобы получить хороший анализ сегмента текста/данных. Если использование памяти увеличивается на полный размер карты для каждого экземпляра, сегменты не разделяются. И наоборот, если использование памяти увеличивается на часть карты, сегменты разделяются.