Hạt nhân sử dụng bao nhiêu RAM?


46

Câu hỏi này được thúc đẩy bởi cú sốc của tôi khi tôi phát hiện ra rằng hạt nhân Mac OS X sử dụng 750MB RAM .

Tôi đã sử dụng Linux được 20 năm và tôi luôn "biết" rằng việc sử dụng RAM kernel bị X lấn át (điều đó có đúng không? Có bao giờ là sự thật không?).

Vì vậy, sau một số googling, tôi đã thử slabtopnói với tôi:

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

Điều này có nghĩa là hạt nhân của tôi hiện đang sử dụng ~ 72 MB RAM?

(Cho rằng RSS của topbáo cáo Xorglà 17M, hạt nhân bây giờ lùn X, không phải là cách khác).

Việc sử dụng (phạm vi) RAM nhân "bình thường" cho máy tính xách tay là gì?

Tại sao MacOS sử dụng một lượng RAM lớn hơn Linux?

Tái bút Không có câu trả lời ở đây giải quyết câu hỏi cuối cùng, vì vậy xin vui lòng xem các câu hỏi liên quan:


Trên máy của tôi, nó báo cáo gần 2GB ... nhưng khi bạn xem chi tiết, tất cả đều liên quan đến bộ đệm của hệ thống tập tin.
derobert

2
Thật vậy, nếu tôi làm một echo 3 > /proc/sys/vm/drop_caches, thì tôi chỉ có 80 MB được sử dụng.
derobert

Theo nhận xét trong liên kết bạn cung cấp, bộ nhớ được sử dụng bởi phần cứng đồ họa tích hợp được bao gồm trong kế toán kernel_task.
Russell Borogove

Câu trả lời:


38

Kernel là một chút sai lầm. Nhân Linux bao gồm một số quy trình / luồng + mô-đun ( lsmod) vì vậy để có được một bức tranh hoàn chỉnh, bạn cần nhìn vào toàn bộ quả bóng chứ không chỉ là một thành phần.

Vô tình của tôi cho thấy slabtop:

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

Trang người đàn ông slabtopcũng có điều này để nói:

Tiêu đề thống kê slabtop đang theo dõi có bao nhiêu byte đang được sử dụng và nó không phải là thước đo của bộ nhớ vật lý. Trường 'Slab' trong tệp / Proc / meminfo đang theo dõi thông tin về bộ nhớ vật lý bản đã sử dụng.

Bộ nhớ đệm

Bỏ bộ nhớ cache của tôi như @derobert đã đề xuất trong các nhận xét dưới câu hỏi của bạn thực hiện như sau đối với tôi:

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

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

Gửi 3 làm như sau: pagecache miễn phí, nha khoa và inodes. Tôi thảo luận thêm về vấn đề này trong phần Hỏi & Đáp của U & L có tiêu đề: Có cách nào hay công cụ nào để xóa bộ nhớ cache và bộ đệm không? ". Vì vậy, 110 MB không gian của tôi đã được sử dụng chỉ bằng cách duy trì thông tin liên quan đến pagecache, nha khoa và inodes.

thông tin thêm

  • Nếu bạn quan tâm tôi đã tìm thấy bài đăng trên blog này thảo luận slabtopchi tiết hơn một chút. Nó có tiêu đề: Lệnh Linux trong ngày: slabtop .
  • Bộ đệm Slab được thảo luận chi tiết hơn ở đây trên Wikipedia, có tiêu đề: Phân bổ bản mỏng .

Vậy Kernel của tôi sử dụng bao nhiêu RAM?

Bức ảnh này hơi khó hiểu với tôi, nhưng đây là những điều mà tôi "nghĩ" chúng ta biết.

Phiến

Chúng ta có thể có được một ảnh chụp nhanh về việc sử dụng Slab bằng kỹ thuật này. Về cơ bản chúng ta có thể kéo thông tin này ra /proc/meminfo.

$ grep Slab /proc/meminfo
Slab:             100728 kB

Mô-đun

Ngoài ra, chúng ta có thể nhận được giá trị kích thước cho các mô-đun Kernel (không rõ kích thước của chúng từ trên đĩa hay khi ở trong RAM) bằng cách kéo các giá trị này từ /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

Phần lớn các chi tiết về SLAB có thể truy cập được trong cấu trúc Proc này , /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

Khi hệ thống của bạn khởi động, có một dòng báo cáo việc sử dụng bộ nhớ của nhân Linux ngay sau khi được tải.

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

Người giới thiệu


1
Có cách nào để có được bức tranh hoàn chỉnh?
Gilles

@Gilles - bao nhiêu kỷ niệm được sử dụng, phải không? Tôi dường như nhớ một Q liên quan đến điều đó trước đây, bạn?
slm

@Gilles - Tôi nghĩ rằng điều này gần với những gì bạn đang hỏi về : grep Slab /proc/meminfo.
slm

@Gilles - cũng có cái này : /proc/slabinfo, có vẻ là nguồn cho slabtop, vì vậy người ta có thể tính toán số tiền từ đây để tính tổng chính xác hơn.
slm

1
cột 2 /proc/modulescó nhiều khả năng được tải kích thước mô-đun trong bộ nhớ vì các mô-đun trên đĩa thường được nén (ví dụ: trên Fedora 27 là xz), tôi đã kiểm tra tg3trình điều khiển NIC, kích thước trên đĩa (kích thước tệp nén hoặc kích thước tệp gốc) không khớp với kích thước byte hiển thị trong /proc/modules.
Terry Wang

7

Còn cái này thì sao:

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

Đó là trên một cỗ máy rất nhỏ mới khởi động, chạy không đầu với một hạt nhân bình thường. Vì vậy, nó không đòi hỏi nhiều.

Theo gợi ý của derobert, kernel sẽ sử dụng bộ nhớ khả dụng để lưu vào bộ đệm và đó là rất nhiều thứ bạn thấy trong đó slabtop. Ngoài bộ đệm tệp, điều này phải thực hiện với bộ nhớ có thể chia sẻ từ các quy trình không gian người dùng không còn được sử dụng. Hạt nhân để nó ở đó cho đến khi một thứ tương tự được yêu cầu một lần nữa, hoặc một cái gì đó tích cực cần RAM, trong trường hợp nó bị lãng quên. Một sự tương tự sẽ lấy một cuốn sách ra khỏi kệ và đặt nó để đọc trên bàn: khi bạn đọc xong, bạn có thể để cuốn sách mở trên bàn trong trường hợp bạn cần nhìn lại nó.


4

Trên máy chủ RAM 512 GB này chạy Solaris, kernel sử dụng 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

Cái nhỏ hơn đó có hơn một nửa RAM được sử dụng bởi 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

Không có gì phải lo lắng, RAM không sử dụng là lãng phí RAM.


1
Vui lòng mô tả làm thế nào bạn đã đạt được đầu ra của bạn.
Maus

@Maus bằng cách chạy echo ::memstat | mdb -ktrên một số máy chủ sản xuất Solaris 10 có trước bản cập nhật 10/09.
jlliagre
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.