Çekirdek ne kadar RAM kullanıyor?


46

Mac OS X çekirdeğinin 750 MB RAM kullandığını keşfettiğimde bu soru şokumdan kaynaklanıyor .

20 yıldır Linux kullanıyorum ve çekirdek RAM kullanımının X tarafından cüce olduğunu her zaman "biliyordum" (bu doğru mu? Hiç doğru mu?).

Bu yüzden, biraz googling yaptıktan sonra, şunu slabtopsöyledim:

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

Bu, çekirdeğimin şimdi ~ 72 MB RAM kullandığı anlamına mı geliyor?

( RSS'in 17M olarak topbildirildiği göz önüne alındığında Xorg, çekirdek artık tam tersi şekilde X'i cüceyor).

Bir dizüstü bilgisayar için "normal" çekirdek RAM kullanımı (aralık) nedir?

MacOS neden Linux'tan daha fazla RAM büyüklüğü kullanıyor?

PS. Buradaki yanıt yok son soruyu ele aldı, lütfen ilgili soruları inceleyin:


Makinemde yaklaşık 2GB rapor veriyor ... ancak ayrıntılara baktığınızda, hepsi dosya sistemi önbelleğiyle ilgili.
derobert

2
Gerçekten, eğer yaparsam echo 3 > /proc/sys/vm/drop_caches, o zaman sadece 80MB kullandım.
derobert 23:13

Sağladığınız linkteki yorumlara göre, entegre grafik donanımı tarafından kullanılan bellek çekirdek_task muhasebesine dahil edilmiştir.
Russell Borogove

Yanıtlar:


38

Çekirdek biraz yanıltıcıdır. Linux çekirdeği birkaç işlemden / iş parçacığından + modüllerden ( lsmod) oluşur, bu yüzden tam bir görüntü elde etmek için sadece tek bir bileşen değil tüm topa bakmanız gerekir.

Bu arada benimki gösterir slabtop:

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

Man sayfası slabtopda şunu söylemişti:

Levha istatistik istatistiği, kaç byte slab kullanıldığını ve fiziksel hafızanın ölçülmediğini takip ediyor. / Proc / meminfo dosyasındaki 'Slab' alanı, kullanılmış slabın fiziksel hafızası hakkındaki bilgileri izliyor.

Önbellek bırakma

Sorunuzu altındaki yorumlarda önbellekleri @derobert'in önerdiği gibi bırakmak benim için aşağıdakileri yapar:

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

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

3 gönderme aşağıdakileri yapar: ücretsiz sayfa önbelleği, diş macunları ve inode'lar. Bunu daha fazla tartışacağım bu U&L Soru-Cevap bölümünde: Bellek önbelleğini ve arabelleğini boşaltmanın herhangi bir yolu veya aracı var mı? “. Bu yüzden alanımın 110 MB'ı sadece sayfa görüntüleme, dişçilik ve inode hakkındaki bilgileri koruyarak kullanılıyordu.

ek bilgi

  • Eğer ilgileniyorsanız slabtop, biraz daha detaylı olarak tartışan bu blog gönderisini buldum . Bu başlıklı oluyor: Günün Linux komut: slabtop .
  • Döşeme Önbelleği burada Vikipedi'de daha ayrıntılı olarak tartışılmaktadır: Başlık Döşeme tahsisi .

Peki, Çekirdeğim ne kadar RAM kullanıyor?

Bu resim benim için biraz sisli, ama işte bildiğim "düşündüğüm" şeyler.

Döşeme

Bu tekniği kullanarak Slab kullanımının bir görüntüsünü alabiliriz. Esasen bu bilgiyi çıkartabiliriz /proc/meminfo.

$ grep Slab /proc/meminfo
Slab:             100728 kB

Modüller

Ayrıca, Çekirdek modülleri için bir boyut değeri alabiliriz (bu değerleri çekerek diskten mi yoksa RAM'den mi geldiği belli değil) /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 ile ilgili detayların çoğuna bu proc yapısında erişilebilir /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

Sisteminiz önyüklendiğinde, yüklendikten hemen sonra Linux çekirdeğinin bellek kullanımını bildiren bir çizgi vardır.

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

Referanslar


1
Resmin tamamını elde etmek için yine de var mı?
Gilles,

@Gilles - Ne kadar hafıza kullanılıyor, değil mi? Daha önce bununla ilgili bir Q hatırlıyor gibiyim, ya sen?
slm

@Gilles - Ben bu kadar yakın Hakkında bilgi istediğiniz ne olduğunu düşünüyorum: grep Slab /proc/meminfo.
slm

@Gilles - ayrıca /proc/slabinfoşunun da kaynağı var: kaynak olarak görünüyor slabtop, böylece daha kesin bir toplam sayım için buradan miktarlar hesaplanabilir.
slm

1
2 numaralı sütunun /proc/modules, diskteki modüller normal olarak sıkıştırıldığı için bellekte modül boyutuna yüklenme olasılığı daha yüksektir (örneğin, Fedora 27'deki xz), tg3NIC sürücüsünü kontrol ettim , diskteki boyutu (sıkıştırılmış veya orijinal dosya boyutu) gösterilen bayt boyutuyla eşleşmiyor /proc/modules.
Terry Wang

7

Buna ne dersin:

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

Bu normal bir çekirdekli, kafasız çalışan, taze çizili, çok küçük bir makinede . Bu yüzden çok şey gerektirmez.

Derobert'in işaret ettiği gibi, çekirdek önbellekleme için mevcut belleği kullanır ve bu da gördüğünüz şeylerin çoğunu oluşturur slabtop. Dosya önbelleğine ek olarak, bunun artık kullanılmayan kullanıcı alanı işlemlerinin paylaşılabilir belleği ile de ilgisi var. Çekirdek, aynı şeyler tekrar gerekli oluncaya kadar ya da aktif olarak RAM'e ihtiyacı olana kadar onu orada bırakır, bu durumda unutulur. Bir benzetme bir raftan bir kitap alıp bir masada okumak için açık bırakacaktı: okuma bittiğinde kitabı bir daha bakmak zorunda kalmanız durumunda masada açık bırakabilirsiniz.


4

Solaris çalıştıran bu 512 GB RAM sunucusunda, çekirdek 25 GB kullanır:

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

Bu küçük olan, çekirdeğin kullandığı RAM'in yarısından fazlasına sahiptir:

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

Endişelenecek bir şey yok, kullanılmayan RAM zaten boşa harcanıyor.


1
Lütfen çıktılarınızı nasıl elde ettiğinizi açıklayın.
Maus

@Maus, echo ::memstat | mdb -k10/09 güncellemesini öngören bazı Solaris 10 üretim sunucularında çalışarak .
jlliagre
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.