[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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




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 (в которой код находится).

Если кто-то знает какую-то актуальную информацию по тому, как бинари грузятся в современном линуксе, буду благодарен.


Reply to: