ระบบไฟล์ที่เร็วที่สุดสำหรับนักพัฒนาสร้างคืออะไร


10

ฉันกำลังรวมกล่อง Linux ไว้ซึ่งจะทำหน้าที่เป็นเซิร์ฟเวอร์รวมการสร้างอย่างต่อเนื่อง เราจะสร้างสิ่ง Java เป็นส่วนใหญ่ แต่ฉันคิดว่าคำถามนี้ใช้กับภาษาที่รวบรวม

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

UPDATE: ความถูกต้องของข้อมูลมีความสำคัญต่ำในกรณีนี้ มันเป็นเพียงเครื่องจักรสร้าง ... สิ่งประดิษฐ์ขั้นสุดท้ายจะถูกซิปขึ้นและเก็บถาวรที่อื่น หากระบบไฟล์ในเครื่องบิลด์เสียหายและสูญเสียข้อมูลทั้งหมดเราก็สามารถลบและสร้างภาพใหม่ได้ งานสร้างจะยังคงทำงานเหมือนเดิม


ล่อที่เป็นไปได้? serverfault.com/questions/29193/…
gravyface

อ่าน gravyface ลิงก์ที่ให้ไว้ แต่ต้องแน่ใจว่าได้แบ่งพาร์ติชันที่คุณกำลังจะสร้างบิลด์อินแล้วคุณสามารถทดสอบคำตอบที่คุณได้รับที่นี่ หากคุณมีเงินลองดูว่าคุณสามารถใช้ดิสก์ได้หรือไม่ (ใช้ ramdisk หรือ tmpfs cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem )
กลายเป็นสิ่งที่ยิ่งใหญ่ที่สุด

คำตอบ:


6

ใช้ ext4fs เป็นระบบไฟล์พื้นฐานพร้อมตัวเลือกการเร่งความเร็วสองสามอย่างเช่น

noatime,data=writeback,nobh,barrier=0,commit=300

จากนั้นให้สหภาพติดตั้ง tmpfs ramdisk ที่ด้านบนของไฟล์เพื่อให้ไฟล์ที่ถูกเขียนระหว่าง builds ได้รับประโยชน์จาก ramdisk เปลี่ยนโพรซีเดอร์ build เพื่อย้ายไบนารีผลลัพธ์ออกจาก tmpfs ที่ส่วนท้ายของบิลด์หรือผสาน tmpfs กลับเข้าไปใน ext4fs ก่อนที่จะทำการ unmount


ในขณะที่มันเร็วกว่ามันเป็นที่น่าสังเกต: barrier=0, จาก arch wiki: "การปิดกั้นสิ่งกีดขวางเมื่อดิสก์ไม่สามารถรับประกันว่าแคชจะถูกเขียนอย่างถูกต้องในกรณีที่ไฟฟ้าขัดข้องอาจทำให้ระบบไฟล์เสียหายอย่างรุนแรงและการสูญหายของข้อมูล"
ideasman42

6

ระบบไฟล์ที่เร็วที่สุด? tmpfs ติดตั้งจาก RAM ที่มีnoatimeอยู่พร้อมชุด

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


นี่เป็นคำตอบที่ดี แต่ไม่ใช่คำตอบที่ฉันต้องการ นั่นคือ RAM มากกว่าที่ฉันสามารถจ่ายได้ (อาจใช้เวลาสองสามปีที่ RAM มีราคาลดลงครึ่งหนึ่ง!)
Dan Fabulich

@Dan - ต้นไม้ที่มาของคุณใหญ่แค่ไหน? :-)
voretaq7

แผนผังต้นกำเนิดไม่ใหญ่มากนัก แต่วัตถุและไฟล์ทดสอบที่สร้างขึ้นมีขนาดใหญ่เกินไปที่จะใส่ลงในหน่วยความจำโดยไม่ต้องสลับ
Dan Fabulich

2

เพื่อตอบของ Michael Dillon ฉันสามารถเพิ่มที่คุณสามารถสร้างระบบไฟล์ ext4 ด้วยตัวเลือกน้อย:

mkfs.ext4 -O dir_index,extent -i 8096 /dev/<disk>


dir_index
    Use hashed b-trees to speed up lookups in large directories.

extent 
    Instead of using the indirect block scheme for storing the location of data blocks in an inode, use extents instead.  This is a  much  more  efficient  encoding  which  speeds  up filesystem access, especially for large files.

-i 8096ให้ไอโหนดมากขึ้นต่อขนาดซึ่งมีประโยชน์เนื่องจากสภาพแวดล้อมการสร้างสร้างไฟล์จำนวนมาก


0

สำหรับแหล่งที่มาของมันควรที่จะดีกว่าที่จะมีการสนับสนุนการบีบอัด-on-บินซึ่งเป็นReiser4หรือBtrfs ทั้งคู่เป็น "ไม่ผลิต" แต่ฉันเคยได้ยินคนที่ใช้ทั้งสอง FSS อย่างหนักและมีความสุข :-)

ทางเลือกถัดไป (ฉันมักจะทำ) เป็นReiser3ไม่Ext3 Ext3 อาจเร็วขึ้นเล็กน้อยในปัจจุบัน แต่ Reiser 3 ไม่มีขีด จำกัด รูปแบบเวลาของ i-nodes รองรับการเปลี่ยนแปลงออนไลน์ของตัวเลือก "data =" มันมีการรองรับ "หาง" ที่อนุญาตให้มีการบรรจุไฟล์ขนาดเล็ก แต่ถ้าคุณกังวลเรื่องความเร็ว

ทั้ง XFS และ JFS จะเป็นปัญหาสำหรับกรณี "ไฟล์ขนาดเล็กจำนวนมาก" โดยเฉพาะถ้าคุณต้องการ rm'ing

(ลืมที่จะพูดถึง EXT4: ใช่มันเร็วกว่าแล้วก็ EXT3 แต่ข้อ จำกัด ของ EXT3 ที่กล่าวมาทั้งหมดข้างต้นนั้นก็คือ EXT4 ด้วย)


0

การดำเนินการที่คุณอธิบายให้คำแนะนำที่สำคัญเกี่ยวกับสิ่งที่ระบบไฟล์ในอุดมคติต้องสามารถทำได้:

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

Btrfs และ Ext4 เป็นสามรายการข้างต้นและข้อที่สี่เป็นที่น่าสงสัย Ext4 น่าจะโตพอสำหรับสิ่งนั้น แต่ btrfs ยังไม่ได้ทำการอบ noatimeช่วยให้การดำเนินการ meta-data มีประสิทธิภาพมากขึ้น แต่เมื่อคุณสร้างไฟล์ใหม่ ๆ จำนวนมากคุณยังคงต้องใช้ meta-data ops อย่างรวดเร็ว

นั่นคือเมื่อพื้นที่เก็บข้อมูลเริ่มกลายเป็นปัจจัย การดำเนินการ meta-data ของ XFS มีแนวโน้มที่จะมีสมาธิในช่วงไม่กี่ช่วงตึกซึ่งสามารถกดดันการดำเนินงาน ระบบไฟล์สไตล์ Ext จะดีกว่าเกี่ยวกับการทำให้เมตาดาต้าใกล้กับข้อมูลที่อธิบายไว้มากขึ้น แต่ถ้าเก็บข้อมูลของคุณเป็นนามธรรมอย่างพอเพียง (คุณกำลังทำงานใน VPS หรือแนบมากับ SAN) มันไม่ได้เรื่องอย่างมีนัยสำคัญ

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

ในการจัดเก็บข้อมูลถ้าคุณมีค่าใช้จ่าย I / O การดำเนินงานเพียงพอในการจัดเก็บข้อมูลของคุณระบบแฟ้มไร้ประสิทธิภาพเริ่มไม่สำคัญเท่าไหร่ หากคุณใช้ SSD สำหรับการสร้างพาร์ติชันตัวเลือกระบบไฟล์มีความสำคัญน้อยกว่าการใช้งานที่สะดวกสบายกว่า


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

0

สำหรับไฟล์ขนาดเล็กจำนวนมากฉันขอแนะนำ Reiser ให้รู้จักกับ ext3, xfs, jfs ... แม้ว่าฉันจะได้ยินว่า ext4 นั้นดีกว่ามาก

Reiser ผลักดันโครงสร้างไฟล์จำนวนมากขึ้นบนต้นไม้ไอโหนดดังนั้นจึงทำงานได้ดีมากเมื่อจัดการกับไฟล์ขนาดเล็ก

อย่างไรก็ตามความแตกต่างของพฤติกรรมระหว่างระบบไฟล์ชั้นนำนั้นมีขนาดค่อนข้างเล็กเมื่อเทียบกับผลประโยชน์ที่คุณจะได้รับจากการมีหน่วยความจำฟิสิคัลให้แคช / บัฟเฟอร์เพียงพอ

และสแกนไดเรกทอรีเพื่อดูไฟล์ที่ถูกแก้ไข

นี่เป็นวิธีเส็งเคร็งในการแก้ปัญหาแม้ว่ามันจะค่อนข้างง่าย หากเป็นสิ่งสำคัญลองนึกถึงการเขียนตัวจัดการinotifyเพื่อจัดทำดัชนี mods

OTOH ถ้าคุณใช้แฟลช SSD (ซึ่งจะให้เวลาในการค้นหาที่ต่ำมาก) ฉันขอแนะนำให้ใช้ fs ซึ่งกระจายการเขียนได้อย่างมีประสิทธิภาพมากขึ้นด้วยเหตุผลอายุยืน - เช่น JFFS2

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