Ile pamięci RAM używa jądro?


46

To pytanie jest uzasadnione moim szokiem, gdy odkryłem, że jądro Mac OS X zużywa 750 MB pamięci RAM .

Używam Linuksa od 20 lat i zawsze „wiedziałem”, że użycie pamięci RAM jądra jest zmniejszone przez X (czy to prawda? Czy to kiedykolwiek prawda?).

Więc po jakimś googlowaniu spróbowałem, slabtopco powiedziało mi:

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

Czy to oznacza, że ​​moje jądro używa teraz ~ 72 MB pamięci RAM?

(Biorąc pod uwagę, że topraporty zawierają XorgRSS jako 17M, jądro obecnie karła X, a nie na odwrót).

Jakie jest „normalne” użycie pamięci RAM (zakres) jądra dla laptopa?

Dlaczego MacOS używa o rząd wielkości więcej pamięci RAM niż Linux?

PS. Brak odpowiedzi tutaj dotyczy ostatniego pytania, więc proszę zobaczyć powiązane pytania:


Na moim komputerze zgłasza prawie 2 GB ... ale kiedy przyjrzysz się szczegółom, wszystko związane jest z pamięcią podręczną systemu plików.
derobert

2
Rzeczywiście, jeśli to zrobię echo 3 > /proc/sys/vm/drop_caches, mam tylko 80 MB.
derobert

Zgodnie z komentarzami w podanym linku pamięć wykorzystywana przez zintegrowany sprzęt graficzny jest uwzględniona w rozliczeniu kernel_task.
Russell Borogove

Odpowiedzi:


38

Jądro jest trochę mylące. Jądro Linux składa się z kilku procesów / wątków + modułów ( lsmod), więc aby uzyskać pełny obraz, musisz spojrzeć na całą piłkę, a nie tylko na jeden komponent.

Nawiasem mówiąc, moje pokazy slabtop:

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

Strona podręcznika man slabtoprównież miała następującą informację:

Nagłówek statystyki slabtop śledzi, ile bajtów płyt jest używanych i nie jest miarą pamięci fizycznej. Pole „Slab” w pliku / proc / meminfo śledzi informacje o użytej pamięci fizycznej płyty.

Upuszczanie skrzynek

Upuszczenie moich pamięci podręcznych zgodnie z sugestią @derobert w komentarzach pod Twoim pytaniem ma dla mnie następujące znaczenie:

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

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

Wysłanie 3 wykonuje następujące czynności: darmowy pagecache, dentries i i-węzły. Omawiam to więcej w tym pytaniu U&L zatytułowanym: Czy istnieją sposoby lub narzędzia do zrzucania pamięci podręcznej i bufora pamięci? ". Więc 110 MB mojej przestrzeni zostało wykorzystane tylko przez utrzymanie informacji o pagecache, dentries i i-węzłach.

Dodatkowe informacje

  • Jeśli jesteś zainteresowany, znalazłem ten post na blogu, który omawia slabtopnieco więcej szczegółów. Nosi tytuł: Linux dnia: slabtop .
  • Pamięć podręczna płyty jest omawiana bardziej szczegółowo tutaj na Wikipedii, zatytułowana: Przydział płyty .

Ile pamięci RAM używa moje jądro?

To zdjęcie jest dla mnie trochę bardziej zamglone, ale oto rzeczy, które „myślę”, że wiemy.

Płyta

Za pomocą tej techniki możemy uzyskać migawkę użycia płyty. Zasadniczo możemy wyciągnąć te informacje /proc/meminfo.

$ grep Slab /proc/meminfo
Slab:             100728 kB

Moduły

Możemy również uzyskać wartość rozmiaru dla modułów jądra (niejasne, czy jest to ich rozmiar na dysku, czy w pamięci RAM), pobierając te wartości z /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

Wiele szczegółów na temat SLAB jest dostępnych w tej strukturze proc /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

Po uruchomieniu systemu pojawia się wiersz, który informuje o zużyciu pamięci przez jądro Linuksa zaraz po załadowaniu.

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

Bibliografia


1
Czy w ogóle jest możliwe uzyskanie pełnego obrazu?
Gilles

@Gilles - ile pamięci w użyciu, prawda? Wydaje mi się, że pamiętam Q dotyczące tego wcześniej?
slm

@Gilles - Myślę, że to jest blisko co pytasz o: grep Slab /proc/meminfo.
slm

@Gilles - istnieje również:, /proc/slabinfoktóry wydaje się być źródłem slabtop, więc można obliczyć kwoty stąd, aby uzyskać dokładniejszą całkowitą liczbę.
slm

1
kolumna 2 z /proc/moduleswiększym prawdopodobieństwem załaduje rozmiar modułu do pamięci, ponieważ moduły na dysku są normalnie skompresowane (np. w Fedorze 27 to xz), sprawdziłem tg3sterownik karty sieciowej, rozmiar na dysku (skompresowany lub oryginalny rozmiar pliku) nie pasuje do rozmiaru bajtu wyświetlanego w /proc/modules.
Terry Wang,

7

Co powiesz na to:

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

To na świeżo uruchomionej, bardzo małej maszynie bezgłowej z normalnym jądrem. Więc nie wymaga wiele.

Jak sugeruje derobert, jądro wykorzysta dostępną pamięć do buforowania i to wiele z tego, co widzisz slabtop. Oprócz pamięci podręcznej plików ma to związek z pamięcią współdzieloną z procesów przestrzeni użytkownika, która nie jest już używana. Jądro pozostawia je tam, dopóki znów nie będzie wymagane to samo, lub coś aktywnie potrzebuje pamięci RAM, w którym to przypadku zostanie zapomniane. Analogią byłoby zdejmowanie książki z półki i otwieranie jej do czytania na stole: kiedy skończysz czytać, możesz zostawić książkę otwartą na stole na wypadek, gdybyś musiał ponownie na nią spojrzeć.


4

Na tym 512 GB pamięci RAM z systemem Solaris jądro używa 25 GB:

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

Ten mniejszy ma ponad połowę pamięci RAM używanej przez jądro:

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

Nie martw się, i tak nieużywana pamięć RAM to zmarnowana pamięć RAM.


1
Opisz, w jaki sposób osiągnąłeś swój wynik.
Maus,

@Maus, działając echo ::memstat | mdb -kna niektórych serwerach produkcyjnych Solaris 10, które poprzedzają aktualizację 10/09.
jlliagre,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.