• =?UTF-8?B?0JDQvdC+0L3QuNC80L3QsNGPINC/0L7QtNC60LDRh9C60LAg0Lgg0LrQvtC90

    From Maksim Dmitrichenko@21:1/5 to All on Thu Nov 24 14:30:01 2022
    0JLRgdC10Lwg0YXQsNC5IQ0KDQrQk9GA0LDQttC00LDQvdC1LCDQvdC40LrQsNC6INC90LUg0LzQ vtCz0YMg0L3QsNC50YLQuCDQvtGC0LLQtdGCINC90LAg0LLQvtC/0YDQvtGBLiDQktC+0YIg0LXR gdGC0Ywg0YMg0LzQtdC90Y8g0LTQvtC/0YPRgdGC0LjQvCAxMDANCtC60L7QvdGC0LXQudC90LXR gNC+0LIg0LjQtyDQvtC00L3QvtCz0L4g0LjQvNC40LTQttCwLCDQuNC70LggMTAwINC40LzQuNC0 0LbQtdC5INGBINC+0LHRidC40Lwg0YHQu9C+0LXQvCAo0YHQu9C+0Y/QvNC4KS4g0JHRg9C00LXR gg0K0LvQuCDRgdC60LDQttC10LwgbGliYyDQt9Cw0LPRgNGD0LbQtdC9INCyINC/0LDQvNGP0YLR jCDQtdC00LjQvdC+0LbQtNGLLCDRgtCw0Log0LrQsNC6INGN0YLQviDQvtC00LjQvSDQuCDRgtC+ 0YIg0LbQtSDQsdC40L3QsNGA0YwNCtC40Lcg0LHQsNC30L7QstC+0LPQviDRgdC70L7Rjywg0LjQ u9C4INC20LUg0LIg0LrQsNC20LTQvtC8INC60L7QvdGC0LXQudC90LXRgNC1INGB0LLQvtGPINCw 0L3QvtC90LjQvNC90LDRjyDQv9Cw0LzRj9GC0Yw/DQoNCi0tIA0KV2l0aCBiZXN0IHJlZ2FyZHMN CiAgTWFrc2ltIERtaXRyaWNoZW5rbw0K PGRpdiBkaXI9Imx0ciI+0JLRgdC10Lwg0YXQsNC5ITxicj48YnI+0JPRgNCw0LbQtNCw0L3QtSwg 0L3QuNC60LDQuiDQvdC1INC80L7Qs9GDINC90LDQudGC0Lgg0L7RgtCy0LXRgiDQvdCwINCy0L7Q v9GA0L7RgS4g0JLQvtGCINC10YHRgtGMINGDINC80LXQvdGPINC00L7Qv9GD0YHRgtC40LwgMTAw INC60L7QvdGC0LXQudC90LXRgNC+0LIg0LjQtyDQvtC00L3QvtCz0L4g0LjQvNC40LTQttCwLCDQ uNC70LggMTAwINC40LzQuNC00LbQtdC5INGBINC+0LHRidC40Lwg0YHQu9C+0LXQvCAo0YHQu9C+ 0Y/QvNC4KS4g0JHRg9C00LXRgiDQu9C4INGB0LrQsNC20LXQvCBsaWJjINC30LDQs9GA0YPQttC1 0L0g0LIg0L/QsNC80Y/RgtGMINC10LTQuNC90L7QttC00YssINGC0LDQuiDQutCw0Log0Y3RgtC+ INC+0LTQuNC9INC4INGC0L7RgiDQttC1INCx0LjQvdCw0YDRjCDQuNC3INCx0LDQt9C+0LLQvtCz 0L4g0YHQu9C+0Y8sINC40LvQuCDQttC1INCyINC60LDQttC00L7QvCDQutC+0L3RgtC10LnQvdC1 0YDQtSDRgdCy0L7RjyDQsNC90L7QvdC40LzQvdCw0Y8g0L/QsNC80Y/RgtGMPzxiciBjbGVhcj0i YWxsIj48ZGl2Pjxicj48L2Rpdj4tLSA8YnI+PGRpdiBkaXI9Imx0ciIgY2xhc3M9ImdtYWlsX3Np Z25hdHVyZSIgZGF0YS1zbWFydG1haWw9ImdtYWlsX3NpZ25hdHVyZSI+PGRpdiBkaXI9Imx0ciI+ PGRpdj5XaXRoIGJlc3QgcmVnYXJkczxicj7CoCBNYWtzaW0gRG1pdHJpY2hlbmtvPC9kaXY+PC9k aXY+PC9kaXY+PC9kaXY+DQo=

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Tim Sattarov@21:1/5 to Maksim Dmitrichenko on Thu Nov 24 20:40:02 2022
    Привет

    On 11/24/22 08:19, Maksim Dmitrichenko wrote:
    Всем хай!

    Граждане, никак не могу найти ответ на вопрос. Вот есть у меня допустим 100 контейнеров из одного
    имиджа, или 100 имиджей с общим слоем (слоями). Будет ли скажем libc загружен в память единожды,
    так как это один и тот же бинарь из базового слоя, или же в каждом контейнере своя анонимная память?


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

    Тим

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Victor Wagner@21:1/5 to All on Thu Nov 24 21:10:01 2022
    В Thu, 24 Nov 2022 17:19:43 +0400
    Maksim Dmitrichenko <[email protected]> пишет:

    Всем хай!

    Граждане, никак не могу найти ответ на вопрос. Вот есть у меня
    допустим 100 контейнеров из одного имиджа, или 100 имиджей с общим

    Какая система контейнеризации, какой способ монтирования образов?

    Для того чтобы ядро могло понять что это одна и та же libc, где-то
    должен быть примонтирован этот образ, а последующие слои цепляться туда
    как overlayfs.

    И то не уверен.

    Мне так казалось что control groups на базе которых строятся системы
    контейнеризавции предназначены как раз для того, чтобы сделать
    полностью незвисимыми области памяти, используемые контейнерами.
    слоем (слоями). Будет ли скажем libc загружен в память единожды, так
    как это один и тот же бинарь из базового слоя, или же в каждом
    контейнере своя анонимная память?




    --
    Victor Wagner <[email protected]>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?koi8-r?B?6dfBziDsz8g=?=@21:1/5 to Maksim Dmitrichenko on Thu Nov 24 21:40:01 2022
    On Thu, Nov 24, 2022 at 05:19:43PM +0400, Maksim Dmitrichenko wrote:
    Всем хай!

    Граждане, никак не могу найти ответ на вопрос. Вот есть у меня допустим 100
    контейнеров из одного имиджа, или 100 имиджей с общим слоем (слоями). Будет
    ли скажем libc загружен в память единожды, так как это один и тот же бинарь
    из базового слоя, или же в каждом контейнере своя анонимная память?

    В ядре есть такая технология — KSM (kernel same-page merging), но, насколько
    я знаю, она включается если на страницы выставлен соответствующий флаг.
    Так, что не факт, что это всегда работает во всех системах.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Andrey Jr. Melnikov@21:1/5 to Maksim Dmitrichenko on Thu Nov 24 22:20:01 2022
    Maksim Dmitrichenko <[email protected]> wrote:
    [-- text/plain, encoding base64, charset: UTF-8, 11 lines --]

    Всем хай!

    Граждане, никак не могу найти ответ на вопрос. Вот есть у меня допустим 100
    контейнеров из одного имиджа, или 100 имиджей с общим слоем (слоями). Будет
    ли скажем libc загружен в память единожды, так как это один и тот же бинарь
    из базового слоя, или же в каждом контейнере своя анонимная память?

    KSM то в ядре есть, только толку от него - не много:

    KSM only deduplicates (merges) memory pages that were flagged with MADV_MERGEABLE
    flag using madvise() syscall. Recent QEMU versions are using madvise() to advise
    memory pages used by VMs to be merged.

    А UKSM за 10 лет так и не довели до вменяемого состояния. И не доведут -
    память подешевела настолько, что проще воткнуть следующие 64 гига, чем
    заниматься поиском и де-дупликацией одинаковых страниц (который ещё и жрет
    процессор).

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From George Shuklin@21:1/5 to Maksim Dmitrichenko on Thu Dec 15 15:10:01 2022
    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 (в которой код находится).

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

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)