172 похожих чатов

Привет, чатик! Контейнеры используют одно ядро с хост системой, не так

ли?
А если так, то почему следующие значения внутри контейнера и на хост машине различаются?
cat /sys/fs/cgroup/memory/memory.kmem.max_usage_in_bytes
cat /sys/fs/cgroup/memory/memory.kmem.slabinfo
cat /sys/fs/cgroup/memory/memory.kmem.usage_in_bytes

19 ответов

8 просмотров

Ядро одно, но смотреть надо про сгрупсы. Потому что сгрупс - это про иерархию. В контейнере эти значения - "подиерархия" хостовой структуры сгрупсов. На хосте надо смотреть где-то тут: /sys/fs/cgroup/memory/docker/<container id> (это если у вас драйвер cgroupfs)

Andrey-Enshin Автор вопроса
Alexander Grigoriev
Ядро одно, но смотреть надо про сгрупсы. Потому чт...

Понял! Верно ли я понимаю, что kmem.usage_in_bytes в главной сигруппе хоста - это сумма kmem.usage_in_bytes всех подгрупп, где могут быть контейнеры и что угодно?

Andrey Enshin
Понял! Верно ли я понимаю, что kmem.usage_in_bytes...

Не совсем корректный вопрос, кмк. Но usage_in_bytes вышестоящей иерархии должен быть равен сумме usage_in_bytes нижестоящих. Проверить можно просто скриптом, и вы увидете так это или нет.

Andrey-Enshin Автор вопроса
Alexander Grigoriev
Не совсем корректный вопрос, кмк. Но usage_in_byte...

ага, понял! т.е. запись kmem.usage_in_bytes в корне сигруппы memory - это сумма всех "листов" этой иерархии? а в чём предыд. вопрос некорректен?

Andrey Enshin
ага, понял! т.е. запись kmem.usage_in_bytes в корн...

Не корректен "главной сигруппой хоста". Вы ведь для контейнеров и докердемона смотрите. Проверить, что это сумма вы можете через скрипт.

Andrey-Enshin Автор вопроса
Alexander Grigoriev
Не корректен "главной сигруппой хоста". Вы ведь дл...

Ага, как раз сейчас пытаюсь проверить сумму пробежавшись по иерархии. Я смотрю использование памяти ядра для контейнера и для самого хоста. Ожидаю, что они будут иметь одинаковое значение. Ведь ядро одно на всех. Наверное, я ошибся когда сказал "главная сигруппа хоста". Есть корневая запись сигруппы и главный неймспейс сигрупп в хосте А почему значения использования памяти ядра в контейнере и на хосте разнятся?

Andrey Enshin
Ага, как раз сейчас пытаюсь проверить сумму пробеж...

1. Нет такого понятия "неймспейс сгруппы". Или я про такое не знаю. 2. Значения суммы могут отличаться от реальных значений вложенных иерархий, т.к. тут есть варианты, как собирать статистику из ядра. И тут явно не банальный getrusage. 3 Все подробности реализации надо смотреть либо тут: https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt либо тут: https://github.com/torvalds/linux/blob/master/kernel/cgroup/cgroup.c

Andrey-Enshin Автор вопроса
Alexander Grigoriev
1. Нет такого понятия "неймспейс сгруппы". Или я п...

неймспейс сигрупп вроде бы есть, вот тут он описан https://man7.org/linux/man-pages/man7/namespaces.7.html всего 8 типов неймспейсов кажется Cgroup IPC Network Mount PID Time User UTS

Andrey Enshin
неймспейс сигрупп вроде бы есть, вот тут он описан...

А, вот вы про что. Я думал что мы про понятие неймспейсов "внутри сгрупсов". Те неймспейсы, которые вы прислали - работают "выше" самих сигрупсов.

Andrey-Enshin Автор вопроса
Alexander Grigoriev
А, вот вы про что. Я думал что мы про понятие нейм...

хех, не. сигруппы состоят из групп (видны в виде директорий в /sys/fs) а неймспейсы - это то, на что я выше дал ссылку теперь всё сходится?

Andrey Enshin
хех, не. сигруппы состоят из групп (видны в виде д...

Я не понял, что именно должно сойтись? Мы начинаем смешивать две разные абстракции: сигрупсы и неймспейсы.

Andrey-Enshin Автор вопроса
Alexander Grigoriev
Я не понял, что именно должно сойтись? Мы начинаем...

Предлагаю их не смешивать, если нет надобности. Я сам не понимаю, нужно ли вообще говорить о неймспейсах в контексте этой беседы. Мне интересно значение memory.kmem.max_usage_in_bytes внутри контейнера и на хост системе взятое в обоих случаях из корня иерархии memory. Вопрос мой прост: почему они разные?

Andrey-Enshin Автор вопроса
Alexander Grigoriev
а вы посчитали?

Cтоит уточнить - я считаю сходимость т.е. равна ли сумма memory.kmem.max_usage_in_bytes "листьев" иерархии memory использованию памяти под ядро на хосте Таким образом проверю догадку. Но что это даст - хз А отдельно взятый контейнер и хост, где он крутится, имеют разные значения. Это точно И тут вопрос. Почему? Ведь ядро одно на всех

Andrey Enshin
Cтоит уточнить - я считаю сходимость т.е. равна ли...

не сойдется она на 100%. Потому, что ядро не предоставляет прям тот самый реал-тайм о котором вы мечтаете.

Andrey Enshin
Cтоит уточнить - я считаю сходимость т.е. равна ли...

И вот вам из доки по сгрупсам: 5.5 usage_in_bytes For efficiency, as other kernel components, memory cgroup uses some optimization to avoid unnecessary cacheline false sharing. usage_in_bytes is affected by the method and doesn't show 'exact' value of memory (and swap) usage, it's a fuzz value for efficient access. (Of course, when necessary, it's synchronized.) If you want to know more exact memory usage, you should use RSS+CACHE(+SWAP) value in memory.stat(see 5.2).

Andrey-Enshin Автор вопроса
Alexander Grigoriev
не сойдется она на 100%. Потому, что ядро не пред...

ну если пару байт не сойдутся, это не беда, думаю ) кстати тут сказано Of course, when necessary, it's synchronized. Интересно, что значит necessary тут?

Andrey Enshin
ну если пару байт не сойдутся, это не беда, думаю ...

Полагаю, что это отсылка к mmu и линуксовому драйверу работы с ram

Andrey-Enshin Автор вопроса
Alexander Grigoriev
Полагаю, что это отсылка к mmu и линуксовому драйв...

хорошо. выходит измерять эту "сходимость" не только не имеет смысла, но и вообще-то невозможно измерить : ) тогда остается вопрос, почему же всё-таки у них разные значения? наверное, когда мы изолируем процесс неймспейсами, каким-то образом контроллер памяти (не путать с железкой) тоже изолирован и видит только часть ядра отведенную под процесс?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта