Berapa banyak RAM yang digunakan kernel?

46

Pertanyaan ini dilatarbelakangi oleh keterkejutan saya ketika saya menemukan bahwa kernel Mac OS X menggunakan RAM sebesar 750MB .

Saya telah menggunakan Linux selama 20 tahun, dan saya selalu "tahu" bahwa penggunaan RAM kernel dikerdilkan oleh X (apakah benar? Pernahkah itu benar?).

Jadi, setelah beberapa googling, saya mencoba slabtopyang memberi tahu saya:

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

Apakah ini berarti bahwa kernel saya menggunakan ~ 72MB RAM sekarang?

(Mengingat RSS yang topdilaporkan Xorgsebagai 17M, kernel sekarang mengerdilkan X, bukan sebaliknya).

Apa penggunaan (kisaran) kernel RAM "normal" untuk laptop?

Mengapa MacOS menggunakan urutan besarnya lebih banyak RAM daripada Linux?

PS. Tidak ada jawaban di sini yang menjawab pertanyaan terakhir, jadi silakan lihat pertanyaan terkait:

sds
sumber
Di komputer saya, ia melaporkan hampir 2GB ... tetapi ketika Anda melihat detailnya, semuanya terkait dengan cache sistem file.
derobert
2
Memang, jika saya melakukan echo 3 > /proc/sys/vm/drop_caches, maka saya hanya memiliki 80MB digunakan.
derobert
Menurut komentar di tautan yang Anda berikan, memori yang digunakan oleh perangkat keras grafik terintegrasi termasuk dalam akuntansi kernel_task.
Russell Borogove

Jawaban:

38

Kernel sedikit keliru. Kernel Linux terdiri dari beberapa proses / utas + modul ( lsmod) sehingga untuk mendapatkan gambaran lengkap Anda harus melihat keseluruhan bola dan bukan hanya satu komponen.

Tambang saya secara tidak sengaja menunjukkan slabtop:

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

Halaman manual untuk slabtopjuga mengatakan ini:

Header statistik slabtop melacak berapa byte slab yang digunakan dan itu bukan ukuran memori fisik. Kolom 'Slab' dalam file / proc / meminfo melacak informasi tentang memori fisik slab yang digunakan.

Menjatuhkan cache

Menjatuhkan cache saya seperti yang disarankan oleh @derobert dalam komentar di bawah pertanyaan Anda:

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

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

Mengirim nomor 3 melakukan hal berikut: pagecache, gigi palsu, dan inode gratis. Saya membahas hal ini lebih lanjut dalam T&J T&J berjudul: Apakah ada cara atau alat untuk membuang cache dan buffer memori? "Jadi, 110MB ruang saya digunakan dengan hanya mempertahankan informasi tentang pagecache, gigi palsu dan inode.

informasi tambahan

  • Jika Anda tertarik, saya menemukan posting blog ini yang membahas slabtoplebih detail. Itu berjudul: Perintah Linux hari ini: slabtop .
  • Cache Slab dibahas secara lebih rinci di sini di Wikipedia, berjudul: Alokasi slab .

Jadi berapa banyak RAM yang digunakan Kernel saya?

Gambar ini agak foggier bagi saya, tetapi di sini ada hal-hal yang saya "pikir" kita tahu.

Lempeng

Kita bisa mendapatkan snapshot dari penggunaan Slab menggunakan teknik ini. Intinya kita dapat menarik informasi ini /proc/meminfo.

$ grep Slab /proc/meminfo
Slab:             100728 kB

Modul

Kita juga bisa mendapatkan nilai ukuran untuk modul Kernel (tidak jelas apakah ukurannya dari pada disk atau ketika di RAM) dengan menarik nilai-nilai ini dari /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

Banyak rincian tentang SLAB yang dapat diakses dalam struktur proc ini, /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

Ketika sistem Anda boot ada baris yang melaporkan penggunaan memori dari kernel Linux setelah itu dimuat.

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

Referensi

slm
sumber
1
Apakah ada cara untuk mendapatkan gambar yang lengkap?
Gilles
@Gilles - berapa banyak memori yang digunakan, kan? Saya sepertinya ingat Q tentang itu sebelumnya, Anda?
slm
@Gilles - saya pikir ini adalah dekat dengan apa yang Anda bertanya tentang: grep Slab /proc/meminfo.
slm
@Gilles - ada juga ini:, /proc/slabinfoyang tampaknya menjadi sumber slabtop, sehingga orang dapat menghitung jumlah dari sini untuk jumlah total yang lebih akurat.
slm
1
kolom 2 dari /proc/moduleslebih cenderung memuat ukuran modul dalam memori karena modul pada-disk biasanya dikompresi (misalnya pada Fedora 27 itu xz), saya sudah memeriksa tg3driver NIC, ukuran pada disk (ukuran file asli atau terkompresi) tidak tidak cocok dengan ukuran byte yang muncul di /proc/modules.
Terry Wang
7

Bagaimana dengan ini:

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

Itu ada di mesin yang baru saja di-boot, mesin yang sangat kecil berjalan tanpa kepala dengan kernel normal. Jadi tidak perlu banyak.

Sebagai derobert mengisyaratkan, kernel akan menggunakan memori yang tersedia untuk caching dan itulah yang Anda lihat slabtop. Selain cache file, ini ada hubungannya dengan memori yang dapat dibagi dari proses userspace yang tidak lagi digunakan. Kernel membiarkannya di sana sampai hal-hal yang sama diperlukan lagi, atau sesuatu yang secara aktif membutuhkan RAM, dalam hal ini dilupakan. Sebuah analogi akan mengambil sebuah buku dari rak dan meletakkannya terbuka untuk dibaca di atas meja: ketika Anda selesai membaca, Anda dapat membiarkan buku itu terbuka di meja jika Anda perlu melihatnya lagi.

goldilocks
sumber
4

Pada server RAM 512 GB ini yang menjalankan Solaris, kernel menggunakan 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

Yang lebih kecil memiliki lebih dari setengah RAM yang digunakan oleh kernel:

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

Tidak ada yang perlu dikhawatirkan, RAM yang tidak digunakan adalah RAM yang terbuang.

Jlliagre
sumber
1
Tolong jelaskan bagaimana Anda mencapai output Anda.
Maus
@Maus dengan menjalankan echo ::memstat | mdb -kbeberapa server produksi Solaris 10 yang ada sebelum pembaruan 10/09.
jlliagre