ค้นหา / ls แคช


10

ดูเหมือนว่าครั้งแรกที่ฉันเรียกใช้findหรือlsในไดเรกทอรีมันใช้เวลาสักครู่ในการทำงาน แต่ทุกครั้งหลังจากนั้นจะรวดเร็วราวกับว่ารายการเนื้อหาของไดเรกทอรีถูกแคชหรือจัดทำดัชนีไว้ที่ใดที่หนึ่ง

มีวิธีในการเก็บแคชนี้ไว้ระหว่างการรีบูตเครื่องคอมพิวเตอร์หรือไม่?


1
มันแคชแน่นอน Linux ใช้หน่วยความจำที่ไม่ได้ใช้เป็นแคชและบัฟเฟอร์ (นั่นคือเหตุผลหนึ่งที่คุณควรมี swap อยู่เสมอแม้จะมี RAM "พอ") คำสั่งฟรีแสดงจำนวนที่มีอยู่ ไม่แน่ใจว่าเป็นจุดในการแคชระหว่าง reboots มากสามารถเปลี่ยนแปลงระหว่างรองเท้า วิธีทำ cron-job ให้ทำงานโดยมีลำดับความสำคัญต่ำสุดในทุก ๆ 10,30 นาทีเพื่อดูไฟล์ทั้งหมดของคุณ? ควรเก็บแคชให้ทันสมัยอยู่ตลอดเวลา ยังคิดว่ามีวิธี (สำหรับเคอร์เนล) ในการตรวจจับการเปลี่ยนแปลงไฟล์
Baard Kopperud

คำตอบ:


8

คุณสามารถใช้vmtouchเพื่อเพิ่มไฟล์ในแคชเพจของคุณ (ดิสก์แคช)

ใส่nohup vmtouch -dl <files or directories> &ใน/etc/rc.localไฟล์ของคุณเพื่อเพิ่มและล็อคไฟล์ในแคชของหน้าเมื่อบูต หากคุณต้องการเพิ่มไฟล์ลงในแคชหน้าของคุณ แต่ไม่ต้องการล็อคไว้ในหน่วยความจำให้ใช้การ-tตั้งค่าสถานะแทนการตั้ง-ldค่าสถานะ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแคชหน้าให้ดูที่นี่ , ที่นี่และในวิกิพีเดีย


ดูเหมือนว่าคำสั่งนั้นจะไม่พร้อมใช้งานใน Ubuntu - มีทางเลือกอื่นที่ฉันสามารถลองได้หรือไม่?
Richard

@Richard มันง่ายมากที่จะรวบรวม vmtouch ด้วยตัวเอง: ติดตั้งbuild-essentialแพ็คเกจ vmtouch.cดาวน์โหลด เรียกใช้gcc -O2 -o vmtouch vmtouch.cหรือmake vmtouchและคุณได้รับไบนารีvmtouchซึ่งคุณสามารถคัดลอกเช่นการหรือโทรโดย/usr/local/bin ./vmotouch
jofel

@ Richard ฉันไม่ได้ใช้อูบุนตูดังนั้นฉันไม่ได้ทดสอบนี้และไม่รับผิดชอบ แต่ Googling "อูบุนตู mvtouch" นำขึ้นนี้ppa
terdon

@ โจเฟลใช่มันง่ายพอที่จะรวบรวม - ขอบคุณ ฉันชอบใช้แพ็คเกจเมื่อเป็นไปได้
Richard

@Evan ถูกต้องฉันถ้าฉันผิด แต่จะไม่ใช้vmtouchเป็นคำสั่ง on-boot ช้าทั้งการทำงานลง? ความหวังของฉันคือการรักษาแคชไว้ในรองเท้าบู๊ตมากกว่าจะสร้างใหม่ทุกครั้ง
Richard

2

"รักษาแนวเรียบไว้" ฉันสงสัย แต่คุณสามารถสร้างแคชในการบู๊ตได้เล็กน้อยซึ่งทำได้เกือบเหมือนกันลบด้วยความล่าช้าเล็กน้อย

สร้างไฟล์/etc/cron.d/rebuild-fs-cacheและใส่ต่อไปนี้ในมัน:

@reboot root /usr/bin/nice -n 19 /usr/bin/ionice -c 3 -t /usr/bin/find / >/dev/null 2>&1

สิ่งนี้ใช้niceและionice(ซึ่งควรติดตั้งโดยค่าเริ่มต้นและสามารถใช้ได้ผ่านทางตัวจัดการแพคเกจ Debian วางไว้ในcoreutilsและutil-linuxตามลำดับ) เพื่อลดระดับความสำคัญของfindกระบวนการให้อยู่ในระดับที่ดีที่สุดเท่าที่จะทำได้ซึ่งหมายความว่าไม่ควรยุ่งกับสิ่งอื่น ทำงานบนระบบของคุณ แต่จะใช้เวลานานกว่าเล็กน้อยกว่าจะเสร็จสมบูรณ์ findตัวเองจะผ่านและstat()ทุกอย่างซึ่งบังคับให้เคอร์เนลโหลดข้อมูลระบบไฟล์จากดิสก์ลงในหน่วยความจำ

เมื่อแคชถูกสร้างขึ้นตราบใดที่มันไม่ได้ถูกกำจัดเพราะระบบปฏิบัติการต้องการหน่วยความจำสำหรับสิ่งอื่นก็ควรได้รับการดูแลรักษา ผมเคยใช้นี้ในขณะที่และไดเรกทอรีรายชื่อแม้ในไดเรกทอรีขนาดใหญ่อย่างมีนัยสำคัญได้เร็วกว่าโดยไม่ต้อง cron งานดังกล่าวข้างต้นแม้ว่าฉันไม่สามารถกล่าวถึงตัวเลขที่แน่นอนใด ๆ


1
หากคุณกำลังจะสร้างล้อใหม่คุณอาจใช้เช่นกันlocateซึ่งมาพร้อมกับupdatedbการอัพเดทฐานข้อมูลค้นหา: en.wikipedia.org/wiki/Locate_(Unix)
laebshade

@ laebshade ฉันไม่ได้ใช้locateเลย แต่ฉันใช้lsมาก findและบางครั้ง (นอกจากนี้ find และ ls เป็นคำสั่งเฉพาะที่ OP ถามถึง) จุดที่ใช้findที่นี่คือมันวนซ้ำทุกสิ่งในการจัดเก็บที่เรียกว่า stat () ดังนั้นเคอร์เนลจึงต้องโหลดข้อมูลเมตาลงในหน่วยความจำ เมื่อมันอยู่ที่นั่นมันก็ดีเหมือนเก็บไว้ในการรีบูต
CVn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.