डेवलपर के लिए सबसे तेज़ फ़ाइल सिस्टम क्या है?


10

मैं एक लिनक्स बॉक्स को एक साथ रख रहा हूं जो एक निरंतर एकीकरण बिल्ड सर्वर के रूप में कार्य करेगा; हम ज्यादातर जावा सामान का निर्माण करेंगे, लेकिन मुझे लगता है कि यह प्रश्न किसी भी संकलित भाषा पर लागू होता है।

मुझे किस फाइलसिस्टम और कॉन्फ़िगरेशन सेटिंग्स का उपयोग करना चाहिए? (उदाहरण के लिए, मुझे पता है कि मुझे इसके लिए atime की आवश्यकता नहीं होगी!) बिल्ड सर्वर छोटी फ़ाइलों को पढ़ने और लिखने में बहुत समय बिताएगा, और निर्देशिकाओं को स्कैन करके देखेगा कि कौन सी फाइलें संशोधित हुई हैं।

अद्यतन: डेटा अखंडता इस मामले में एक कम प्राथमिकता है; यह सिर्फ एक निर्माण मशीन है ... अंतिम कलाकृतियों को ज़िप किया जाएगा और कहीं और संग्रहीत किया जाएगा। यदि बिल्ड मशीन पर फ़ाइल सिस्टम दूषित हो जाता है और सभी डेटा खो देता है, तो हम सिर्फ मिटा सकते हैं और फिर से छवि बना सकते हैं; बिल्ड पहले की तरह चलते रहेंगे।


संभव डुबकी? serverfault.com/questions/29193/…
gravyface

दिए गए लिंक को पढ़ें ग्रेवीफेस, लेकिन यह भी सुनिश्चित करें कि जिस विभाजन को आप अपने बिल्ड में करने जा रहे हैं, उसे अलग से सेट करें, फिर आप यहां प्राप्त उत्तरों का परीक्षण कर सकते हैं। आप पैसा है, तो अगर आप डिस्क का उपयोग कर (रैमडिस्क का उपयोग कर, या tmpfs छोड़ कर सकते हैं cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem )
becomingwisest

जवाबों:


6

कुछ स्पीडअप विकल्प जैसे बेस फाइल सिस्टम के रूप में ext4fs का उपयोग करें

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

फिर संघ एक tmpfs ramdisk को उस के ऊपर माउंट करता है ताकि बिल्ड के दौरान लिखी गई फ़ाइलों को ramdisk के लाभ मिलें। निर्माण के अंत में tmpfs से परिणामी बायनेरिज़ को स्थानांतरित करने के लिए या तो निर्माण प्रक्रिया को बदलें, या अनमाउंट करने से पहले tmpfs को वापस ext4fs में मर्ज करें।


हालांकि यह तेज़ है कि यह ध्यान देने योग्य है: barrier=0आर्क विकी से: "डिस्क को अक्षम करने पर कैश की गारंटी नहीं दी जा सकती है, बिजली की विफलता के मामले में ठीक से लिखे जाने पर गंभीर फ़ाइल सिस्टम भ्रष्टाचार और डेटा हानि हो सकती है।"
ideasman42

6

सबसे तेज फाइलसिस्टम? tmpfs noatimeसेट के साथ उपलब्ध RAM से बाहर है ।

यह केवल व्यवहार्य है यदि आपके पास अपने स्रोत के पेड़ को बनाने के लिए आवश्यक सभी चीजों की जांच करने की एक प्रक्रिया है (चूंकि एक tmpfs फाइल सिस्टम की सामग्री जब आप रीबूट करेंगे तो चली जाएगी), और यदि स्रोत और ऑब्जेक्ट आपके उपलब्ध रैम के एक उचित कोने में फिट होते हैं ( अपने कंपाइलर और लिंकर को बिना स्वैप किए चलाने के लिए पर्याप्त छोड़ दिया गया)। कहा कि आप गति के लिए RAM से बाहर काम नहीं कर सकते।


यह एक महान जवाब है, लेकिन मैं जिसको ढूंढ रहा हूं वह काफी नहीं है; कि मैं जितना खर्च कर सकता हूं उससे अधिक रैम है। (शायद कुछ वर्षों में जब रैम की कीमत आधी हो!)
दान फ़बेलिच

@ दान - आपके स्रोत का पेड़ कितना बड़ा है? :-)
voretaq7

स्रोत ट्री इतना विशाल नहीं है, लेकिन निर्मित वस्तुएं और परीक्षण फाइलें बिना स्वैपिंग के मेमोरी में फिट होने के लिए बहुत बड़ी हैं।
डैन फेबुलिच

2

माइकल डिलन के उत्तर में मैं यह कह सकता हूं कि आप कुछ विकल्पों के साथ 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.

-80 8096 आपको प्रति आकार में अधिक इनकोड देता है, उपयोगी है क्योंकि भवन का वातावरण बहुत सारी फाइलें बनाता है।


0

स्रोतों के लिए यह सम्पीडन-ऑन-फ्लाई समर्थन के लिए बेहतर होगा, जो कि Reiser4 या Btrfs है । दोनों अभी तक "उत्पादन के लिए नहीं" हैं, हालांकि मैंने लोगों को एफएस और भारी दोनों का उपयोग करते हुए सुना है। :-)

अगली पसंद (मैं आमतौर पर करता हूं) Reiser3 है , Ext3 नहीं । Ext3 आजकल थोड़ा तेज़ हो सकता है, लेकिन Reiser3 में i-nodes प्रारूप-समय सीमा नहीं है, "डेटा =" विकल्प के ऑन-लाइन बदलने का समर्थन करता है। इसमें "टेल" सपोर्ट है, जिससे आपको छोटी फाइलों की पैकिंग करने की अनुमति मिलती है, लेकिन यदि आप गति के बारे में चिंतित हैं, तो इसे "नॉट" करें।

एक्सएफएस और जेएफएस दोनों "बहुत सारी छोटी फाइलों" के मामले के लिए एक दर्द होगा, खासकर यदि आपको उन्हें rm'ing की आवश्यकता होगी।

(EXT4 का उल्लेख करने के लिए भूल गए: हाँ, यह और भी तेज़ है, फिर EXT3। लेकिन उपरोक्त सभी EXT3 की सीमाएँ EXT4 की भी हैं)।


0

आपके द्वारा बताए गए ऑपरेशन कुछ महत्वपूर्ण संकेत देते हैं कि आदर्श फाइल-सिस्टम को क्या करने में सक्षम होना चाहिए:

  • बिल्ड प्रक्रिया के दौरान बड़े पैमाने पर यादृच्छिक आर / डब्ल्यू एक्सेस।
  • कई, कई फाइलें अल्प क्रम में अद्यतन हो रही हैं, इसलिए तेजी से मेटा-डेटा संचालन महत्वपूर्ण हैं।
  • संभवतः बहुत फ़ाइल-भारी फ़ाइल-सिस्टम पर कई छोटी फ़ाइलों की कुशल हैंडलिंग।
  • परिपक्व पर्याप्त रूप से अनैतिक और अस्पष्ट धार वाले मामलों में डेटा-हानि का जोखिम नहीं उठाते हैं।

Btrfs और Ext4 उपरोक्त में से तीन हैं, और चौथा संदिग्ध है। Ext4 शायद इसके लिए पर्याप्त परिपक्व है, लेकिन btrfs ने अभी तक बेकिंग नहीं की है। noatimeमेटा-डेटा ऑपरेशन को और अधिक कुशल बनाने में मदद करता है, लेकिन जब आप नई फ़ाइलों का एक समूह बना रहे होते हैं, तब भी आपको चिल्ला-चिल्लाकर तेज़ होने के लिए मेटा-डेटा ऑप्स की आवश्यकता होती है।

जब अंतर्निहित भंडारण एक कारक बनना शुरू होता है। एक्सएफएस मेटा-डेटा ऑपरेशन कुछ ब्लॉकों में ध्यान केंद्रित करते हैं, जो संचालन को तनाव दे सकते हैं। एक्सट-स्टाइल फाइलसिस्टम मेटा-डेटा को उसके विवरण के डेटा के करीब लाने के लिए बेहतर है। हालाँकि, यदि आपका संग्रहण पर्याप्त रूप से सारगर्भित है (आप VPS में चल रहे हैं, या SAN से जुड़े हैं) तो यह काफी मायने नहीं रखता

प्रत्येक फाइलसिस्टम में बहुत कम स्पीडअप होते हैं जो कुछ और प्रतिशत अंकों को eek कर सकते हैं। अंतर्निहित भंडारण कितना अच्छा है, यह आपको कितना लाभ देगा यह बहुत प्रभावित करेगा।

स्टोरेज पार्लेंस में, यदि आपके स्टोरेज में पर्याप्त I / O ऑपरेशन ओवरहेड है, तो फाइलसिस्टम अक्षमताएं बहुत ज्यादा मायने नहीं रखती हैं। यदि आप अपने बिल्ड विभाजन के लिए SSD का उपयोग करते हैं, तो फाइलसिस्टम का चुनाव उस कार्य से कम महत्वपूर्ण नहीं है, जिसके साथ आप अधिक सहज हैं।


मैं वास्तव में डेटा हानि के बारे में ज्यादा परवाह नहीं करता हूं। (स्पष्ट करने के लिए सवाल अपडेट किया।) मेरा मतलब है, डेटा हानि एक अच्छी बात नहीं है, लेकिन मैं महत्वपूर्ण डेटा संग्रहीत नहीं कर रहा हूं; मैं बहुत सारी फ़ाइलों को संसाधित कर रहा हूं और डेटा को कहीं और स्थानांतरित कर रहा हूं। अगर मैं RAM बर्दाश्त कर सकता था, तो मैं बस tmpfs का उपयोग करूँगा क्योंकि voretaq7 ऊपर सुझाया गया है।
डान फेबुलिच

0

बहुत सी छोटी फाइलों के लिए, मैं ext3, xfs, jfs पर Reiser की सलाह दूंगा ..., हालांकि मैंने सुना है कि एक्सेस के इस पैटर्न के लिए ext4 अपने पिछले अवतारों की तुलना में बहुत बेहतर है (अर्थात जो कहता है, उसके विपरीत)।

रेज़र इनोड ट्री के ऊपर ढेर सारी फाइलों की संरचना को आगे बढ़ाता है - इसलिए यह छोटी फाइलों के साथ काम करते समय वास्तव में अच्छी तरह से काम करता है।

हालाँकि, प्रमुख फ़ाइल सिस्टम के बीच व्यवहार में अंतर, उन लाभों की तुलना में अपेक्षाकृत कम है, जो आपको कैश / बफर को प्रभावी ढंग से पर्याप्त भौतिक मेमोरी प्रदान करते हैं।

और फ़ाइलों को संशोधित करने के लिए निर्देशिकाओं को स्कैन करना।

यह समस्या को हल करने का एक भद्दा तरीका है - भले ही यह अपेक्षाकृत सरल है। यदि यह महत्वपूर्ण है, तो मॉड को इंडेक्स करने के लिए एक इनवॉइस हैंडलर लिखने के बारे में सोचें

OTOH, यदि आप फ्लैश SSD का उपयोग कर रहे हैं (जो आपको बहुत कम समय देगा) मैं एक एफएस का उपयोग करने की सलाह दूंगा जो लंबी उम्र के कारणों के लिए अधिक प्रभावी ढंग से लिखता है - जैसे JFFS2

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.