ประสิทธิภาพของ EXT4 นั้นแย่มากในระบบที่มีไฟล์ขนาดเล็กจำนวนมาก


10

ฉันมีอุปกรณ์ฝังตัวเล็ก ๆ ที่มี RAM เพียง 128MB

เชื่อมต่อกับอุปกรณ์นี้เป็นฮาร์ดดิสก์ 2TB USB2

ฉันมีความสุขมากกับประสิทธิภาพของอุปกรณ์จนถึงเมื่อเร็ว ๆ นี้เมื่อจำนวนไฟล์ข้ามขีด จำกัด ของความจุของดิสก์มีขีด จำกัด (ฉันไม่แน่ใจว่าอันไหน)

บนดิสก์มีไฟล์ขนาดเล็กจำนวนมากเนื่องจากลักษณะของไฟล์แอปพลิเคชั่นการเขียนที่ได้รับการจัดระเบียบอย่างสมดุล - ไม่มีไดเร็กทอรี leaf node มีมากกว่า 200 ไฟล์และมีเพียง 800,000 ไฟล์

ฉันหวังว่าจะเป็นผู้นำในการตรวจสอบ ประสิทธิภาพการทำงานของดิสก์ลดลงอย่างมีนัยสำคัญอุปกรณ์ได้รับการซิปได้เป็นอย่างดีจากนั้นประสิทธิภาพในทันทีก็ลดลงราวกับก้อนหิน

ข้อสันนิษฐานของฉันคือโครงสร้างองค์กรที่ฉันเลือกบนดิสก์สำหรับไฟล์ของฉันได้ทำลายความสามารถในการแคชของ inode เพื่อรักษาความเป็น zippy

เป็นการทดลองฉันยกเลิกการต่อดิสก์ (ล้างแคชยืนยันด้วยฟรี) จากพรอมต์คำสั่งฉันสำรวจลึกเข้าไปในโครงสร้างไดเรกทอรี ทั้งหมดบอกไดเรกทอรีนี้ (และลูก ๆ ) มีเพียงประมาณ 3200 ไฟล์ที่อยู่ด้านล่างและ ณ จุดนี้ 'ฟรี' แสดงให้เห็น> หน่วยความจำว่าง 117MB

ณ จุดนี้ฉันพิมพ์คำสั่ง 'ค้นหา' ตามด้วย 'ฟรี'

'find' แสดงประมาณ 3000 ไฟล์ แต่การใช้หน่วยความจำเริ่มจาก ~ 117MB ถึง ~ 2MB

ฉันเข้าใจยอดคงเหลือของแคชเทียบกับหน่วยความจำฟรีและวิธีที่เคอร์เนลพิจารณาหน้าที่ว่างเปล่าหน้าไม่ดี - อย่างไรก็ตามเนื้อหาที่แคชไว้ 115MB จากไดเรกทอรี 3000 ไฟล์ชี้ไปที่ช่องว่างที่ร้ายแรงในความเข้าใจของฉัน ฉันหวังว่าบางคนจะช่วยให้ฉันเข้าใจว่าเกิดอะไรขึ้น

ฉันจะถือว่าทรีที่สมดุลเป็นวิธีที่จะมีไฟล์จำนวนมากได้หรือไม่?

คำตอบ:


9

คำอธิบายปัญหาที่ดีมาก

จากสิ่งที่คุณพูดฉันคิดว่าสิ่งที่คุณเห็นคือการใช้งานพื้นสูงขึ้น การทดลองที่ดีที่จะเรียกใช้cat /proc/meminfoและcat /proc/slabinfoมากกว่าความล่าช้า 3 ครั้งที่สองในขณะที่คุณไปลึกเข้าไปในลำดับชั้น FS และค้นพบ 3000 ไฟล์ สิ่งที่เป็นหลักคือสิ่งที่เกิดขึ้นคือเคอร์เนลจะสำรวจโครงสร้าง fs และสแกนไฟล์แต่ละไฟล์และ inodes และทั้งหมดจะถูกเก็บไว้ในหน่วยความจำ หากคุณตรวจสอบ/proc/slabinfoคุณจะเห็นวัตถุที่เรียกว่าext4_inode_cacheซึ่งจะบอกคุณว่าหน่วยความจำแต่ละอันใช้เวลาเท่าใด ทวีคูณสิ่งนี้ด้วยจำนวนของวัตถุ (obj_size * no_obj) และคุณจะได้รับจำนวนหน่วยความจำที่ใช้โดยวัตถุ ยิ่งคุณเข้าสู่ลำดับชั้น f มากเท่าไหร่หน่วยความจำก็จะถูกใช้งานมากขึ้นจนกว่าระบบจะได้รับลายน้ำสูงของโซนหน่วยความจำ ณ จุดนี้เคอร์เนลจะเริ่มเรียกคืน

หากคุณโผล่เข้าสู่ meminfo และ slabinfo คุณจะได้รับรายละเอียดที่คุณต้องการ ถ้าคุณต้องการให้ฉันดู pastebin มัน)

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