Сколько оперативной памяти использует ядро?

46

Этот вопрос мотивирован моим шоком, когда я обнаружил, что ядро ​​Mac OS X использует 750 МБ ОЗУ .

Я использую Linux в течение 20 лет, и я всегда «знал», что использование ОЗУ в ядре намного меньше X (правда ли это?

Итак, после некоторого поиска, я попробовал, slabtopкоторый сказал мне:

Active / Total Size (% used)       : 68112.73K / 72009.73K (94.6%)

Значит ли это, что мое ядро ​​сейчас использует ~ 72 МБ ОЗУ?

(Учитывая, что RSS topсообщает Xorg17M, ядро ​​теперь превосходит X, а не наоборот).

Каково «нормальное» использование ОЗУ ядра (диапазон) для ноутбука?

Почему MacOS использует на порядок больше оперативной памяти, чем Linux?

PS. Здесь нет ответа на последний вопрос, поэтому, пожалуйста, смотрите связанные вопросы:

ДСН
источник
На моей машине он сообщает о почти 2 ГБ ... но когда вы смотрите на детали, все это связано с кешем файловой системы.
Дероберт
2
Действительно, если я это сделаю echo 3 > /proc/sys/vm/drop_caches, то у меня будет только 80 МБ.
Дероберт
Согласно комментариям в предоставленной вами ссылке, память, используемая встроенным графическим оборудованием, включена в учет kernel_task.
Рассел Борогове

Ответы:

38

Ядро немного неправильное. Ядро Linux состоит из нескольких процедур / потоков + модулей ( lsmod), поэтому, чтобы получить полную картину, вам нужно рассмотреть весь шар, а не только один компонент.

Кстати мои шоу slabtop:

 Active / Total Size (% used)       : 173428.30K / 204497.61K (84.8%)

На странице руководства slabtopтакже было сказано следующее:

Заголовок статистики slabtop отслеживает, сколько байтов slabs используется, и это не показатель физической памяти. Поле 'Slab' в файле / proc / meminfo отслеживает информацию об используемой физической памяти плиты.

Сброс кешей

Удаление моих кешей, как предложил @derobert в комментариях к вашему вопросу, делает для меня следующее:

$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$

 Active / Total Size (% used)       : 61858.78K / 90524.77K (68.3%)

Отправка 3 делает следующее: бесплатный pagecache, dentries и inode. Я обсуждаю это больше в этом разделе вопросов и ответов под названием: Существуют ли какие-либо способы или инструменты для сброса кэша и буфера памяти? ". Таким образом, 110 МБ моего пространства использовалось, просто поддерживая информацию, касающуюся кэша страниц, дентриев и инодов.

Дополнительная информация

  • Если вам интересно, я нашел этот пост в блоге, который обсуждает slabtopнемного больше деталей. Это называется: Linux-команда дня: slabtop .
  • Кэш плиты более подробно обсуждается здесь, в Википедии, под названием: Распределение плиты .

Так сколько оперативной памяти использует мое ядро?

Эта картина немного более туманная для меня, но вот то, что я «думаю», мы знаем.

горбыль

Мы можем получить снимок использования Slab, используя эту технику. По сути, мы можем извлечь эту информацию из /proc/meminfo.

$ grep Slab /proc/meminfo
Slab:             100728 kB

Модули

Также мы можем получить значение размера для модулей ядра (неясно, является ли их размер на диске или в оперативной памяти), извлекая эти значения из /proc/modules:

$ awk '{print $1 " " $2 }' /proc/modules | head -5
cpufreq_powersave 1154
tcp_lp 2111
aesni_intel 12131
cryptd 7111
aes_x86_64 7758

Slabinfo

Большая часть деталей о SLAB доступна в этой структуре процедур /proc/slabinfo:

$ less /proc/slabinfo | head -5
slabinfo - version: 2.1
# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_ffff8801f2b30000      0      0    320   25    2 : tunables    0    0    0 : slabdata      0      0      0
fuse_request         100    125    632   25    4 : tunables    0    0    0 : slabdata      5      5      0
fuse_inode            21     21    768   21    4 : tunables    0    0    0 : slabdata      1      1      0

Dmesg

Когда ваша система загружается, появляется строка, которая сообщает об использовании памяти ядром Linux сразу после его загрузки.

$ dmesg |grep Memory:
[    0.000000] Memory: 7970012k/9371648k available (4557k kernel code, 1192276k absent, 209360k reserved, 7251k data, 948k init)

Рекомендации

ОДС
источник
1
Есть ли способ получить полную картину?
Жиль
@ Жиль - сколько памяти используется, верно? Кажется, я помню вопрос об этом раньше, а вы?
SLM
@ Жиль - я думаю, это близко к тому, о чем ты спрашиваешь grep Slab /proc/meminfo.
SLM
@Gilles - есть также следующее:, /proc/slabinfoкоторый выглядит как источник slabtop, поэтому отсюда можно рассчитать суммы для более точного общего подсчета.
SLM
1
2-й столбец с /proc/modulesбольшей вероятностью будет загружен размером модуля в память, поскольку модули на диске обычно сжимаются (например, в Fedora 27 это xz), я проверил tg3драйвер NIC, размер на диске (сжатый или оригинальный размер файла) не соответствует размеру байта, отображаемому в /proc/modules.
Терри Ванг
7

Как насчет этого:

Active / Total Size (% used)       : 4709.24K / 5062.03K

Это на недавно загруженной, очень маленькой машине, работающей без головы с нормальным ядром. Так что это не требует много.

Как подсказывает Дероберт, ядро ​​будет использовать доступную память для кэширования, и это многое из того, что вы видите slabtop. В дополнение к файловому кешу, это связано с разделяемой памятью от процессов пользовательского пространства, которые больше не используются. Ядро оставляет его там до тех пор, пока либо снова не потребуются те же самые вещи, либо что-то активно требует оперативной памяти, и в этом случае это забывается. По аналогии можно взять книгу с полки и разложить ее для чтения на столе: когда вы закончите чтение, вы можете оставить книгу открытой на столе на случай, если вам понадобится снова посмотреть на нее.

лютик золотистый
источник
4

На этом сервере ОЗУ 512 ГБ, работающем под управлением Solaris, ядро ​​использует 25 ГБ:

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    3210102             25078    5%
Anon                     15266226            119267   23%
Exec and libs               41457               323    0%
Page cache                3539331             27651    5%
Free (cachelist)         13799571            107809   21%
Free (freelist)          30093164            235102   46%

Total                    65949851            515233
Physical                 65927406            515057

Этот меньший имеет более половины своей оперативной памяти, используемой ядром:

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    2149699             16794   52%
Anon                       517016              4039   13%
Exec and libs               15420               120    0%
Page cache                  21840               170    1%
Free (cachelist)             8768                68    0%
Free (freelist)           1404862             10975   34%

Total                     4117605             32168
Physical                  4096002             32000

Не о чем беспокоиться, неиспользованная ОЗУ тратится впустую ОЗУ в любом случае.

jlliagre
источник
1
Пожалуйста, опишите, как вы достигли результата.
Maus
@Maus, запущенный echo ::memstat | mdb -kна некоторых рабочих серверах Solaris 10, выпущенных до обновления 10/09.
Jlliagre