สมมติว่าคุณเริ่มต้นด้วยกระดานชนวนว่างเปล่านั่นคือคุณยังไม่ได้เข้าถึงระบบไฟล์เลย ตอนนี้ให้คุณเรียกใช้ stat (“ / some / dir / file”) ก่อนอื่นเคอร์เนลต้องค้นหาไฟล์ซึ่งในทางเทคนิคเรียกว่า inode มันเริ่มต้นด้วยการดูในระบบไฟล์ superblock ซึ่งเก็บ inode ของไดเรกทอรีราก จากนั้นจะเปิดไดเรกทอรีรากค้นหา“ บางส่วน” เปิดที่ค้นหา“ dir” และอื่น ๆ ในที่สุดการค้นหา inode สำหรับไฟล์
จากนั้นคุณต้องอ่านข้อมูลไอโหนด หลังจากอ่านครั้งแรกนี้จะถูกเก็บไว้ใน RAM ดังนั้นการอ่านจะต้องเกิดขึ้นเพียงครั้งเดียว
คิดว่า HD เป็นเครื่องเล่นแผ่นเสียงเก่าเมื่อคุณอยู่ในตำแหน่งที่ถูกต้องด้วยเข็มคุณสามารถอ่านสิ่งต่าง ๆ ได้อย่างรวดเร็วในขณะที่มันหมุน อย่างไรก็ตามเมื่อคุณต้องการย้ายไปยังสถานที่อื่นเรียกว่า "การค้นหา" คุณกำลังทำสิ่งที่แตกต่างกันมาก คุณต้องขยับแขนตามร่างกายแล้วรอให้จานหมุนจนกว่าจะวางที่ถูกต้องไว้ใต้เข็ม การเคลื่อนไหวทางกายภาพชนิดนี้ช้ามาก ๆ ดังนั้นเวลาในการค้นหาดิสก์จึงค่อนข้างยาว
ดังนั้นเราจะหาเมื่อไหร่ ขึ้นอยู่กับรูปแบบของระบบไฟล์แน่นอน ระบบไฟล์พยายามจัดเก็บไฟล์อย่างต่อเนื่องเพื่อเพิ่มประสิทธิภาพการอ่านและโดยทั่วไปแล้วพวกเขายังพยายามจัดเก็บ inodes สำหรับไดเรกทอรีเดียวใกล้ ๆ กัน แต่ทุกอย่างขึ้นอยู่กับสิ่งต่าง ๆ เช่นเมื่อไฟล์ถูกเขียนการแตกแฟรกเมนต์ของระบบเป็นต้น กรณีสถิติของไฟล์แต่ละไฟล์จะทำให้เกิดการค้นหาและจากนั้นแต่ละไฟล์ที่เปิดจะทำให้เกิดการแสวงหาที่สอง ดังนั้นสิ่งต่าง ๆ จึงใช้เวลานานเช่นนี้เมื่อไม่มีอะไรถูกแคช
ระบบไฟล์บางระบบดีกว่าระบบอื่นการจัดเรียงข้อมูลอาจช่วยได้ คุณสามารถทำบางสิ่งในแอพ ตัวอย่างเช่น GIO จะเรียงลำดับ inodes ที่ได้รับจาก readdir () ก่อนที่จะระบุว่าหวังว่าหมายเลข inode นั้นมีความสัมพันธ์กับลำดับของดิสก์ (โดยทั่วไปจะมี) ดังนั้นจึงเป็นการลดการค้นหาแบบสุ่มไปมา
สิ่งสำคัญอย่างหนึ่งคือการออกแบบที่เก็บข้อมูลและแอพของคุณเพื่อลดการค้นหา ตัวอย่างเช่นนี่คือสาเหตุที่ Nautilus การอ่าน / usr / bin ช้าเพราะไฟล์ในนั้นไม่มีส่วนขยายที่เราต้องใช้ในการดมเวทมนตร์ ดังนั้นเราจำเป็นต้องเปิดแต่ละไฟล์ => หนึ่งค้นหาต่อไฟล์ => slooooow อีกตัวอย่างหนึ่งคือแอปที่เก็บข้อมูลในไฟล์ขนาดเล็กจำนวนมากเช่น gconf ที่เคยทำและเป็นความคิดที่ไม่ดีเช่นกัน อย่างไรก็ตามในทางปฏิบัติฉันไม่คิดว่าจะมีอะไรมากมายที่คุณทำได้ยกเว้นพยายามซ่อนเวลาแฝง