วิธีการกำหนดค่า Linux เพื่อแคชข้อมูลเมตาของไฟล์ในการตั้งค่าเนื้อหา?


14

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

นี่คือรายละเอียด:

ฉันมีไฟล์เซิร์ฟเวอร์ที่ทำที่บ้าน มันมีดิสก์ห้าตัวในปริมาณ LVM ประมาณ 9TB แต่ RAM 4GB เท่านั้น เนื่องจากเซิร์ฟเวอร์ไม่ทำอะไรมากแล้วให้บริการไฟล์ RAM ส่วนใหญ่จึงใช้สำหรับการแคช (“ ฟรี” รายงาน 3.4G จาก 3.9G ที่ใช้สำหรับแคช)

เซิร์ฟเวอร์อาศัยอยู่ในห้องนอนของฉันและหากดิสก์ทั้งหมดหมุนไปมันจะมีเสียงดังพอที่จะน่ารำคาญเมื่อมันเงียบ (ฉันไม่ได้หมายถึงการค้นหาเสียงรบกวนเพียงแค่การหมุนเท่านั้นเสียงดิสก์มีหลายยี่ห้อและรุ่นต่าง ๆ และฉันคิดว่าความแตกต่างเล็กน้อยในความเร็วการหมุนทำให้เกิดการรบกวนไม่มีดิสก์ตัวใดมีเสียงดังด้วยตัวเอง มีเสียงรบกวนเล็กน้อยกับช่วงเวลาย่อยเฮิรตซ์) ดังนั้นฉันจึงกำหนดค่าเซิร์ฟเวอร์ให้ดิสก์หมุนวนเป็นส่วนใหญ่

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

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

แต่ใครจะคิดว่า 4GB ควรมีมากมายที่จะสามารถแคชเมตาดาต้าระบบไฟล์ส่วนใหญ่อย่างน้อยชิ้นส่วนที่มีการเยี่ยมชมแล้วเพื่อให้ฉันสามารถเรียกดูไฟล์โดยไม่จำเป็นต้องหมุนดิสก์ถ้ามันกลายเป็นพวกเขา นอนหลับ

อาจมีความล่าช้าเมื่อเปิดไฟล์ แต่ก็ไม่เป็นไร เปรียบเทียบ“ คลิก; รอ ; คลิก; รอ ; คลิก; รอ ; เล่น; ดู” ด้วย“ คลิก; คลิก; คลิก; เล่น; รอ ; ดู". อดีตเป็นที่น่าผิดหวังอย่างไม่น่าเชื่อ; หลังคาดว่าเกือบ

หมายเหตุ:

  1. เคอร์เนลคือ 3.2, ระบบปฏิบัติการคือ Debian, ไดรฟ์ข้อมูลคือ lvm2 และ FS คือ ext4

  2. เหตุผลเดียวสำหรับการหมุนลงคือเสียงในตอนกลางคืน เซิร์ฟเวอร์กำลังทำงานอย่างต่อเนื่อง (ฉันทำให้มันใช้พลังงานต่ำตามความเหมาะสม) การหน่วงเวลาการปั่นลงจะแตกต่างกันไปขึ้นอยู่กับช่วงเวลาของวัน

  3. ฮาร์ดดิสก์มีไว้สำหรับสื่อบันทึกเท่านั้น ระบบปฏิบัติการอยู่ในแฟลชไดรฟ์ (เล็ก) แยกต่างหาก (ซึ่งหมายถึงความล่าช้าใด ๆ ที่เกิดจากการหมุนข้อมูลไม่ใช่เพียงเพราะมันต้องการบางสิ่งบางอย่าง/usrหรืออะไรก็ตามฉันสามารถสำรอง GB สักสองสาม GB ถ้ามันช่วยด้วยปัญหาของฉันอย่างใด

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

คำตอบ:


10

เพื่อควบคุมวิธีที่แคชของ Linux อ้างถึง https://www.kernel.org/doc/Documentation/sysctl/vm.txt

โดยเฉพาะอย่างยิ่งการดู vfs_cache_pressure คุณอาจต้องการค่าที่ต่ำมากหรืออาจเป็นศูนย์ (1 ฟังดูปลอดภัยกว่าสำหรับฉันเล็กน้อย):

vfs_cache_pressure
------------------

Controls the tendency of the kernel to reclaim the memory which is used for
caching of directory and inode objects.

At the default value of vfs_cache_pressure=100 the kernel will attempt to
reclaim dentries and inodes at a "fair" rate with respect to pagecache and
swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
to retain dentry and inode caches. When vfs_cache_pressure=0, the kernel will
never reclaim dentries and inodes due to memory pressure and this can easily
lead to out-of-memory conditions. Increasing vfs_cache_pressure beyond 100
causes the kernel to prefer to reclaim dentries and inodes.

นอกจากนี้คุณอาจต้องการแก้ไขswappinessเพื่อไม่ให้สลับข้อมูลหรือทำให้เกิดขึ้นในกรณีที่รุนแรงเท่านั้น

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

ฉันแน่ใจว่าอาจมีตัวเลือกอื่น ๆ ที่อาจช่วยได้ดังนั้นให้ตรวจสอบเอกสารเคอร์เนล

หากต้องการนำไปใช้ฉันจะใส่การตั้งค่าที่คุณต้องการเปลี่ยน/etc/sysctl.confหรือสิ่งที่ระบบปฏิบัติการของคุณต้องกู้คืนเมื่อบู๊ต


3
โพสต์ที่ดี แต่คุณต้องการแลกเปลี่ยนมากที่สุดเท่าที่เป็นไปได้ตามเป้าหมายของ OP การสลับเปลี่ยนใช้หน่วยความจำของผู้ใช้เพื่อเพิ่มแนวโน้มที่จะสลับไปยังดิสก์จากนั้นปล่อยให้หน่วยความจำกายภาพมากขึ้นเพื่อให้แคชใช้งานได้ การเพิ่มหน่วยความจำ swappiness ปลดปล่อย แต่สามารถชะลอการใช้งานถ้ามันเพิ่มขึ้นมากเกินไป (กำหนดจุดหวานเป็นพื้น guestimation ซ้ำ)
Bratchley

สวัสดีไคล์ขอบคุณสำหรับความคิด vfs_cache_pressure เรียงลำดับของงาน แต่มันไม่เพียงพอ นี่คือสิ่งที่ฉันทำ:
bogdanb

เมื่อฉันตั้งค่า vcp เป็น 0 ถ้าฉันทำfind / -ls > /dev/nullจากนั้นหมุนดิสก์ลงจากนั้นfindไฟล์ทั้งหมดอีกครั้งดิสก์จะไม่หมุน freeแสดงบัฟเฟอร์ที่เพิ่มขึ้นเป็นประมาณ 202MB เมื่อทำสิ่งนี้ แต่ถ้าผมทำfindแล้วcat /file/bigger/than/ram > /dev/nullแล้วfreeแสดงให้เห็นcachedเพิ่มขึ้นเพื่อเติมเต็มพื้นที่ว่างเปล่าและด้วยเหตุผลบางอย่างbuffersลงไปประมาณ 195MB จากนั้นถ้าฉันหมุนแผ่นดิสก์และทำfindอีกครั้งดิสก์ยังคงหมุน :-(
bogdanb

เกี่ยวกับswappiness: มันถูกตั้งค่าเป็นค่าเริ่มต้น60แต่เครื่องไม่มีพาร์ทิชัน swap ใด ๆ ดังนั้นฉันไม่แน่ใจว่ามันจะทำอะไรมาก ฉันเดาว่าฉันสามารถใส่ไฟล์ swap ในแฟลชไดรฟ์ได้ แต่ฉันไม่รู้ว่ามันจะช่วยได้อย่างไรหรือจะกำหนดขนาดมันได้อย่างไร
bogdanb

1
Linux พยายามฉลาดเกี่ยวกับการแคช ฉันไม่แน่ใจว่าการตั้งค่า vfs = 0 จะทำงานได้ตามที่คุณคาดหวัง ฉันคิดว่ามันจะพยายามเรียกคืนรายการอื่น ๆ เหล่านั้นเมื่อความกดดันจากแอปพลิเคชัน (เช่น malloc ()) ร้องขอหน่วยความจำเพิ่มขึ้น สำหรับวิธีบอก linux ว่าห้ามใช้แคชมากกว่า 2GB สำหรับฉันไม่รู้เรื่องนี้ มันจะเป็นการสิ้นเปลืองแรมในกรณีส่วนใหญ่ อีกสิ่งหนึ่งที่คุณอาจต้องการดูคือ "โหมดแล็ปท็อป" ซึ่งพยายามทำสิ่งต่าง ๆ เพื่อให้ดิสก์หมุนลงสำหรับแล็ปท็อป ฉันไม่ได้ใช้มันดังนั้นฉันจึงไม่ค่อยรู้อะไรเกี่ยวกับมันเลย
Kyle
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.