Скільки оперативної пам’яті використовує ядро?


46

Це питання мотивоване моїм шоком, коли я виявив, що ядро ​​Mac OS X використовує 750 Мб оперативної пам’яті .

Я використовую Linux протягом 20 років, і я завжди «знав», що використання оперативної пам’яті ядра глухає X (це правда? Це колись було правдою?).

Тож, після деякого гуглінгу, я спробував, slabtopякий сказав мені:

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

Чи означає це, що моє ядро ​​зараз використовує ~ 72 Мб оперативної пам’яті?

(З огляду на , що topдоповіді XorgRSS «и , як 17M, ядро Тепер карлики X, а не навпаки).

Що таке "звичайне" використання оперативної пам'яті ядра (діапазон) для ноутбука?

Чому MacOS використовує на порядок більше оперативної пам'яті, ніж Linux?

PS. Тут немає відповіді на останнє запитання, тому, будь ласка, дивіться відповідні запитання:


На моїй машині він повідомляє про майже 2 Гб ... але коли ви подивитесь на деталі, це все пов'язано з кешем файлової системи.
derobert

2
Дійсно, якщо я це роблю echo 3 > /proc/sys/vm/drop_caches, тоді я використовую лише 80 Мб.
derobert

Відповідно до коментарів у наданому вами посиланні, пам'ять, яка використовується інтегрованим графічним обладнанням, включена в облік kernel_task.
Рассел Борогов

Відповіді:


38

Ядро трохи помилково. Ядро Linux складається з декількох процесів / потоків + модулів ( lsmod), щоб отримати повне уявлення, вам потрібно буде переглянути весь бал, а не лише один компонент.

Між іншим, мої шоу slabtop:

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

Сторінка man для slabtopтакож мала сказати:

Статистичний заголовок на верхній панелі відстежує кількість байтів плит, які використовуються, і це не міра фізичної пам'яті. Поле "Плита" у файлі / proc / meminfo відстежує інформацію про використану фізичну пам'ять платів.

Випадання схованок

Якщо мені випадати кеші, як @derobert запропонував у коментарях під вашим запитанням, для мене таке:

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

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

Надсилання 3 робить наступне: безкоштовний кеш-сторінок, зубні сторони та вставки. Я обговорюю це детальніше в цьому запитанні U&L під назвою: Чи є способи чи інструменти для скидання кешу пам'яті та буфера? "Отже, 110 Мб мого простору використовувалося просто підтримкою інформації про кеш сторінок, зубних стоматологів та введеннях.

Додаткова інформація

  • Якщо вас цікавить, я знайшов цю публікацію в блозі, в якій обговорюється slabtopтрохи детальніше. Це під назвою: Команда дня Linux: slabtop .
  • Кеш слябів обговорюється більш детально тут у Вікіпедії під назвою: Розподіл плит .

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

Ця картина для мене трохи туманніша, але ось ті речі, про які я "думаю", ми знаємо.

Плити

Ми можемо отримати знімок використання плит за допомогою цієї методики. По суті, ми можемо витягнути цю інформацію з /proc/meminfo.

$ grep Slab /proc/meminfo
Slab:             100728 kB

Модулі

Також ми можемо отримати значення розміру для модулів Kernel (незрозуміло, чи є їх розмір з диска чи коли в оперативній пам'яті), витягнувши ці значення з /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

Слабінфо

Більшість деталей про 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
Чи все-таки можна отримати повну картину?
Жиль

@Gilles - скільки спогадів у використанні, правда? Здається, я пам’ятаю питання про це раніше, ти?
slm

@Gilles - Я думаю , що це близько до того , що ви питаєте про: 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

Не варто турбуватися, невикористана оперативна пам’ять все одно витрачається на ОЗП.


1
Опишіть, будь ласка, як ви досягли свого результату.
Маус

@Maus, запустивши echo ::memstat | mdb -kна деяких виробничих серверах Solaris 10, що передували оновлення 10/09.
jlliagre
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.