Re: Анонимная подкачка и контейнеры

George Shuklin <[email protected]>
Newsgroups gmane.linux.debian.user.russian
Message-ID <[email protected]>
On 24/11/2022 15:19, Maksim Dmitrichenko wrote:
> Всем хай!
>
> Граждане, никак не могу найти ответ на вопрос. Вот есть у меня 
> допустим 100 контейнеров из одного имиджа, или 100 имиджей с общим 
> слоем (слоями). Будет ли скажем libc загружен в память единожды, так 
> как это один и тот же бинарь из базового слоя, или же в каждом 
> контейнере своя анонимная память?
>

Меня этот вопрос интересовал даже в более простом разрезе: из одного и 
того же image'а запускается N контейнеров, будет ли там какая-либо 
экономия памяти из-за shared code. Достоверного ответа я не нашёл, но 
запуск 500 копий из разных ven'ов на хосте или запуск 500 контейнеров с 
одного image дал одинаковый результат по используемой памяти.  Более 
того, 500 копий из одного venv'а дало тот же результат.

Поскольку магической дедупликации в ядре нет, то, получается, что если 
экономия и есть (на rodata), то не существенная.

Моё размышление: если у нас всё проходит через динамический линкер, то 
relocation table кто-то должен заполнять (а у нас же ещё и рандомизация 
адресного пространства!), так что код в памяти не может соответствовать 
секции в файле. Единственная возможная секция для прямого маппинга - это 
.rodata, но во-первых я не уверен, что она есть, а во-вторых её явно 
меньше, чем .text (в которой код находится).

Если кто-то знает какую-то актуальную информацию по тому, как бинари 
грузятся в современном линуксе, буду благодарен.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.