ฟิลด์“ buff / cache” และ“ avail mem” ที่ด้านบนหมายถึงอะไร


28

ภายในเอาต์พุตของด้านบนมีสองฟิลด์ทำเครื่องหมาย "buff / cache" และ "avail Mem" ในหน่วยความจำและสลับการใช้สาย:

ป้อนคำอธิบายรูปภาพที่นี่

สองฟิลด์นี้หมายความว่าอย่างไร

ฉันได้ลองใช้ Googling แล้ว แต่ผลลัพธ์นำบทความทั่วไปมาไว้ด้านบนและพวกเขาไม่ได้อธิบายว่าฟิลด์เหล่านี้มีความหมายว่าอย่างไร

คำตอบ:


31

top's manpage ไม่ได้อธิบายฟิลด์ แต่free' sไม่:

บัฟเฟอร์

หน่วยความจำที่ใช้โดยบัฟเฟอร์เคอร์เนล ( Buffersใน/proc/meminfo)

ขุมทรัพย์

หน่วยความจำที่ใช้โดยแคชหน้าและแผ่นพื้น ( Cachedและ SReclaimableใน/proc/meminfo)

หนัง / แคช

ผลรวมของบัฟเฟอร์และแคช

ใช้ได้

การประมาณจำนวนหน่วยความจำที่พร้อมใช้งานสำหรับการเริ่มต้นแอปพลิเคชันใหม่โดยไม่ต้องสลับ ซึ่งแตกต่างจากข้อมูลที่ได้รับจากแคชหรือเขตข้อมูลที่ว่างเขตข้อมูลนี้จะนำไปใช้กับหน้าแคชของบัญชีและแผ่นข้อมูลหน่วยความจำที่เรียกคืนได้ทั้งหมดจะถูกเรียกคืนเนื่องจากรายการที่ใช้งานอยู่ ( MemAvailableใน /proc/meminfoมีให้บริการในเมล็ด 3.14 มิฉะนั้นเหมือนกับฟรี)

โดยทั่วไป“ บัฟ / แคช” จะนับหน่วยความจำที่ใช้สำหรับข้อมูลที่อยู่ในดิสก์หรือควรจะจบลงที่นั่นในไม่ช้าและอาจทำให้สามารถใช้งานได้ (หน่วยความจำที่เกี่ยวข้องสามารถให้บริการได้ทันทีในกรณีของแคช ในกรณีของบัฟเฟอร์ - หลังควรอยู่เล็ก ๆ ); “ ว่าง” วัดปริมาณของหน่วยความจำที่สามารถจัดสรรและใช้งานได้โดยไม่ทำให้เกิดการแลกเปลี่ยนมากขึ้น (ดูฉันจะรับปริมาณหน่วยความจำที่พร้อมใช้งานได้แบบพกพาข้ามการกระจายได้อย่างไรเพื่อดูรายละเอียดเพิ่มเติม)


1
บัฟเฟอร์แคช / ไม่ได้ทำใช้ได้มีเวลาเพียงพอ ; เป็นเซ็กเมนต์หน่วยความจำที่พร้อมใช้งานทันทีหากโปรแกรมใด ๆ ต้องการหน่วยความจำบางส่วนที่จะได้รับการจัดสรร ดูlinuxatemyram.com ด้วย
DopeGhoti

4

เพียงชี้แจงบิตบัฟเฟอร์หมายถึงข้อมูลที่ถูกเขียน - หน่วยความจำที่ไม่สามารถเรียกคืนจนกว่าการเขียนเสร็จสมบูรณ์

แคชหมายถึงข้อมูลที่ถูกอ่าน - มันถูกเก็บไว้ในกรณีที่จำเป็นต้องอ่านอีกครั้ง แต่สามารถเรียกคืนได้ทันทีเนื่องจากสามารถอ่านซ้ำได้จากดิสก์เสมอ


นั่นไม่ใช่ความหมายที่นี่จริงๆ /proc/meminfoมีฟิลด์สำหรับWritebackโดยเฉพาะ มีข้อมูลที่แยกต่างหากBuffersและนั่นคือสิ่งที่แสดงให้เห็นว่าในbuffers free -wสาเหตุทั่วไปของBuffersการใช้หน่วยความจำแสดงอยู่ที่นี่: " 30% ของ RAM คือ" บัฟเฟอร์ "มันคืออะไร "
sourcejedi

จากนี้ ( access.redhat.com/solutions/406773 ) ฉันคิดว่า Writeback เป็นส่วนของบัฟเฟอร์ที่ยังไม่ได้เขียนลงดิสก์ หรือคุณกำลังพูดอย่างอื่นหรือ
WallStProg

คำอธิบายนั้นจะทำให้เข้าใจผิด Buffersคือ (ตอนนี้) ส่วนหนึ่งของแคชหน้า มันไม่ได้นับแต่มันจะถูกนับเป็นส่วนหนึ่งของCached Active(file) + Inactive(file)ดูความคิดเห็นเกี่ยวกับคำตอบของ Stephen Kitt Dirtyเป็นส่วนหนึ่งของแคชหน้าซึ่งถูกเขียนไปและในที่สุดก็จำเป็นต้องเขียนกลับไปที่ดิสก์ ไม่รวมถึงWriteback Dirtyดังนั้นไม่ได้เป็นส่วนหนึ่งของค่าของWriteback Buffers
sourcejedi

อะไรBuffersจริงหมายถึงเป็นแคชหน้าที่เกี่ยวข้องกับอุปกรณ์ป้องกัน ระบบไฟล์บางระบบใช้สิ่งนี้ภายใน คนอื่นไม่ได้ใช้เลย / ไปที่การแก้ไขคำตอบของฉันในคำถาม "30% ของ RAM เป็นบัฟเฟอร์"
sourcejedi

2

แหล่งที่มาตามบัญญัติของข้อมูลนี้คือ /usr/src/linux/Documentation/filesystems/proc.txt

บัฟเฟอร์ : ที่เก็บข้อมูลชั่วคราวสำหรับบล็อกดิสก์ดิบไม่ควรมีขนาดใหญ่มาก (20MB หรือมากกว่านั้น) แคช : แคชในหน่วยความจำสำหรับไฟล์ที่อ่านจากดิสก์ (แคชหน้า) ไม่รวม SwapCached

นอกจากนี้คุณยังสามารถหารายละเอียดเพิ่มเติมบางส่วนที่นี่

แคชของหน้า Linux (" แคช :" จาก meminfo) เป็นผู้ใช้ RAM รายใหญ่ที่สุดในระบบส่วนใหญ่ เมื่อใดก็ตามที่คุณอ่าน () จากไฟล์บนดิสก์ข้อมูลนั้นจะถูกอ่านในหน่วยความจำและไปที่แคชของหน้า (1)
บัฟเฟอร์แคช (" บัฟเฟอร์ :" ใน meminfo) เป็นญาติสนิทกับแคช Dentry / inode

หรือการวิเคราะห์รหัสแหล่งที่มาเช่นนี้

จำนวนbuffersคือค่าส่งคืนของฟังก์ชันnr_blockdev_pages(void)

long nr_blockdev_pages(void)
{
        struct block_device *bdev;
        long ret = 0;
        spin_lock(&bdev_lock);
        list_for_each_entry(bdev, &all_bdevs, bd_list) {
                ret += bdev->bd_inode->i_mapping->nrpages;
        }
        spin_unlock(&bdev_lock);
        return ret;
}

จำนวนcached:

global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.