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 (в которой код находится). Если кто-то знает какую-то актуальную информацию по тому, как бинари грузятся в современном линуксе, буду благодарен.