เคอร์เนลใช้ RAM เท่าใด


46

คำถามนี้เป็นแรงบันดาลใจโดยช็อตของฉันเมื่อฉันค้นพบว่า Mac OS X เคอร์เนลใช้750MB of RAM

ฉันใช้ลินุกซ์มา 20 ปีแล้วและฉันก็ "รู้" อยู่เสมอว่าการใช้ RAM ในเคอร์เนลนั้นถูกแคระโดย X (มันเป็นความจริงหรือเปล่า?

ดังนั้นหลังจาก googling ฉันพยายามslabtopที่บอกฉัน:

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

นี่หมายความว่าเคอร์เนลของฉันใช้ RAM ~ 72MB หรือไม่

(เนื่องจากว่าRSS ของtopรายงานXorgเป็น 17 ล้านเคอร์เนลตอนนี้ก็แคระ X ซึ่งไม่ใช่วิธีอื่น ๆ )

การใช้ RAM เคอร์เนล "ปกติ" (ช่วง) สำหรับแล็ปท็อปคืออะไร

เหตุใด MacOS จึงใช้ RAM ขนาดใหญ่กว่าลีนุกซ์

PS ไม่มีคำตอบที่นี่ตอบคำถามสุดท้ายดังนั้นโปรดดูคำถามที่เกี่ยวข้อง:


บนเครื่องของฉันรายงานเกือบ 2GB ... แต่เมื่อคุณดูรายละเอียดทั้งหมดเกี่ยวข้องกับแคชของระบบไฟล์
Derobert

2
แน่นอนถ้าฉันทำecho 3 > /proc/sys/vm/drop_cachesแล้วฉันมีเพียง 80MB ใช้
Derobert

ตามความคิดเห็นในลิงก์ที่คุณให้ไว้หน่วยความจำที่ใช้โดยฮาร์ดแวร์กราฟิกรวมอยู่ในบัญชี kernel_task
รัสเซล Borogove

คำตอบ:


38

เคอร์เนลเป็นบิตของการเรียกชื่อผิด เคอร์เนล Linux ประกอบด้วยโพรเซส / กระทู้ + โมดูล ( lsmod) หลายชุดเพื่อให้ได้ภาพที่สมบูรณ์คุณจะต้องมองที่ลูกบอลทั้งหมดไม่ใช่แค่องค์ประกอบเดียว

แสดงให้เห็นว่าฉันตั้งใจslabtop:

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

หน้าคนที่slabtopมีสิ่งนี้ต้องพูดว่า:

ส่วนหัวของสถิติ slabtop กำลังติดตามจำนวนไบต์ของแผ่นพื้นที่กำลังใช้งานอยู่และไม่ใช่หน่วยความจำกายภาพ ฟิลด์ 'Slab' ในไฟล์ / proc / meminfo กำลังติดตามข้อมูลเกี่ยวกับหน่วยความจำฟิสิคัลของแผ่นพื้นที่ใช้

วางแคช

วางแคชของฉันตามที่@derobert แนะนำในความคิดเห็นภายใต้คำถามของคุณสำหรับฉันต่อไปนี้:

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

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

การส่ง 3 ทำได้ดังนี้: รับ pagecache, dentries และ inodes ฟรี ฉันพูดคุยเรื่องนี้เพิ่มเติมในคำถาม & คำตอบ U & L นี้: มีวิธีหรือเครื่องมือใดในการถ่ายโอนข้อมูลแคชหน่วยความจำและบัฟเฟอร์หรือไม่ พื้นที่ว่างของฉันถูกใช้ไปแล้วเพียง 110MB โดยการรักษาข้อมูลเกี่ยวกับ pagecache, dentries และ inodes

ข้อมูลเพิ่มเติม

  • หากคุณสนใจฉันพบโพสต์บล็อกนี้ที่กล่าวถึงslabtopในรายละเอียดเพิ่มเติมอีกเล็กน้อย มันชื่อ: คำสั่ง Linux ของวันที่: slabtop
  • เดอะแคช Slab จะหารือในรายละเอียดเพิ่มเติมได้ที่นี่ในวิกิพีเดียหัวข้อ: การจัดสรรพื้น

Kernel ของฉันใช้ RAM เท่าไหร่?

ภาพนี้เป็นสิ่งที่ฉันควรรู้ แต่นี่คือสิ่งที่ฉัน "คิด" ที่เรารู้

แผ่นหิน

เราจะได้ภาพรวมของการใช้ Slab โดยใช้เทคนิคนี้ /proc/meminfoเป็นหลักที่เราสามารถดึงข้อมูลเหล่านี้ออกมาจาก

$ grep Slab /proc/meminfo
Slab:             100728 kB

โมดูล

นอกจากนี้เรายังสามารถรับค่าขนาดสำหรับโมดูลเคอร์เนล (ไม่ชัดเจนว่าเป็นขนาดจากดิสก์หรือเมื่ออยู่ใน RAM) โดยการดึงค่าเหล่านี้จาก/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 สามารถเข้าถึงได้ในโครงสร้าง 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

เมื่อบูทระบบของคุณจะมีบรรทัดที่รายงานการใช้หน่วยความจำของเคอร์เนล Linux หลังจากโหลดเสร็จ

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

อ้างอิง


1
อย่างไรก็ตามมีเพื่อให้ได้ภาพที่สมบูรณ์หรือไม่
Gilles

@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

นั่นเป็นเครื่องที่เพิ่งบู๊ตใหม่ซึ่งมีขนาดเล็กมาก ๆ ที่ทำงานโดยไม่มีหัวกับเคอร์เนลปกติ ดังนั้นจึงไม่ต้องการอะไรมาก

ในฐานะที่เป็นคำแนะนำ derobert slabtopเคอร์เนลจะทำให้การใช้หน่วยความจำแคชและที่มากของสิ่งที่คุณเห็นใน นอกเหนือจากแคชไฟล์แล้วสิ่งนี้จะทำอย่างไรกับหน่วยความจำที่แชร์ได้จากกระบวนการ userspace ที่ไม่ได้ใช้งานอีกต่อไป เคอร์เนลออกจากที่นั่นจนกว่าจะต้องการสิ่งเดียวกันอีกครั้งหรืออย่างอื่นที่ต้องการ RAM ในกรณีที่มันถูกลืม การเปรียบเทียบจะนำหนังสือออกจากชั้นวางและวางมันเปิดเพื่ออ่านบนโต๊ะ: เมื่อคุณอ่านเสร็จแล้วคุณสามารถเปิดหนังสือไว้บนโต๊ะในกรณีที่คุณต้องการดูอีกครั้ง


4

บนเซิร์ฟเวอร์ RAM 512 GB นี้ที่เรียกใช้ Solaris เคอร์เนลใช้ 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

อันที่เล็กกว่านั้นมี RAM มากกว่าครึ่งหนึ่งที่ใช้โดยเคอร์เนล:

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

ไม่ต้องกังวลว่า RAM ที่ไม่ได้ใช้จะเสียแรมอยู่แล้ว


1
โปรดอธิบายว่าคุณบรรลุผลสำเร็จได้อย่างไร
Maus

@Maus โดยการเรียกใช้echo ::memstat | mdb -kบนเซิร์ฟเวอร์ที่ใช้งานจริงของSolaris 10 ที่อัพเดทก่อน 10/09
jlliagre
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.