बहुत सारी छोटी फ़ाइलों (HDD, SSD नहीं) के भंडारण के लिए सबसे उच्च प्रदर्शन वाली लिनक्स फाइल सिस्टम क्या है?


43

मेरे पास एक निर्देशिका पेड़ है जिसमें कई छोटी फाइलें, और बड़ी संख्या में छोटी फाइलें हैं। एक फ़ाइल का औसत आकार लगभग 1 किलोबाइट है। पेड़ में 210158 फाइलें और निर्देशिकाएं हैं (यह संख्या रनिंग द्वारा प्राप्त की गई थी find | wc -l)।

फ़ाइलों का एक छोटा प्रतिशत प्रति सप्ताह कई बार जोड़ा / हटा दिया / फिर से लिखा जाता है। यह छोटी फ़ाइलों पर लागू होता है, साथ ही बड़ी फ़ाइलों के लिए (छोटी संख्या में)।

फाइलसिस्टम जो मैंने आज़माया (ext4, btrfs) को डिस्क पर फ़ाइलों की स्थिति के साथ कुछ समस्याएं हैं। अधिक समय तक, डिस्क पर फ़ाइलों की भौतिक स्थिति (घूर्णन मीडिया, ठोस राज्य डिस्क नहीं) अधिक यादृच्छिक रूप से वितरित हो रही है। इस यादृच्छिक वितरण का नकारात्मक परिणाम यह है कि फाइलसिस्टम धीमा हो रहा है (जैसे: एक ताजा फाइलसिस्टम की तुलना में 4 गुना धीमा)।

क्या कोई लिनक्स फाइल सिस्टम (या फाइलसिस्टम रखरखाव का एक तरीका) है जो इस प्रदर्शन में गिरावट से ग्रस्त नहीं है और एक घूर्णन मीडिया पर एक स्थिर प्रदर्शन प्रोफ़ाइल को बनाए रखने में सक्षम है? फ़्यूज़ सिस्टम फ़्यूज़ पर चल सकता है, लेकिन इसे विश्वसनीय बनाने की आवश्यकता है।


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

मुझे यह जानकर आश्चर्य हुआ कि btrfs (कॉपी-ऑन-राइट फीचर के साथ) आपको कुछ समय के लिए सुस्त कर दिया गया है। मैं आपसे परिणाम साझा करने के लिए उत्सुक हूं, संभवतः इसके साथ प्रदर्शन ट्यूनिंग की नई दिशा में एक-दूसरे की मदद कर रहा हूं।
निखिल मुल्ले

लिनक्स पर एक नया जानवर ऑनलाइन zfs है, जो देशी मोड और फ्यूज कार्यान्वयन में उपलब्ध है, यदि आप एक नज़र रखना चाहते थे।
निखिल मुल्ले

मैंने एक बार लिनक्स पर zfs की कोशिश की, काफी अस्थिर था। पूरी तरह से अक्सर फाइलसिस्टम को बंद करने का प्रबंधन। बॉक्स काम करेगा, लेकिन एफएस तक कोई भी पहुंच लटकाएगा।
पैट्रिक

इसी प्रकार के पोस्ट serverfault.com/questions/6711/...
निखिल Mulley

जवाबों:


47

प्रदर्शन

मैंने एक छोटा सा बेंचमार्क ( स्रोत ) लिखा है , यह पता लगाने के लिए कि सौ हजारों छोटी फाइलों के साथ कौन सी फाइल प्रणाली सर्वश्रेष्ठ प्रदर्शन करती है:

  • / dev / urandom से डेटा के साथ 300000 फाइल (512B से 1536B) बनाएँ
  • 30000 यादृच्छिक फ़ाइलों को फिर से लिखना और आकार बदलना
  • 30000 अनुक्रमिक फ़ाइलें पढ़ें
  • 30000 यादृच्छिक फ़ाइलें पढ़ें
  • सभी फ़ाइलों को हटा दें

  • सिंक और ड्रॉप हर कदम के बाद कैश

परिणाम (सेकंड में औसत समय, कम = बेहतर):

Using Linux Kernel version 3.1.7
Btrfs:
    create:    53 s
    rewrite:    6 s
    read sq:    4 s
    read rn:  312 s
    delete:   373 s

ext4:
    create:    46 s
    rewrite:   18 s
    read sq:   29 s
    read rn:  272 s
    delete:    12 s

ReiserFS:
    create:    62 s
    rewrite:  321 s
    read sq:    6 s
    read rn:  246 s
    delete:    41 s

XFS:
    create:    68 s
    rewrite:  430 s
    read sq:   37 s
    read rn:  367 s
    delete:    36 s

परिणाम:
जबकि Ext4 में समग्र प्रदर्शन अच्छा था, ReiserFS अनुक्रमिक फ़ाइलों को पढ़ने में अत्यधिक तेज था। यह पता चला कि XFS कई छोटी फाइलों के साथ धीमा है - आपको इस उपयोग के मामले के लिए इसका उपयोग नहीं करना चाहिए।

विखंडन मुद्दा

फ़ाइल सिस्टम को ड्राइव पर फ़ाइलों को वितरित करने से रोकने का एकमात्र तरीका यह है कि विभाजन को केवल उतना ही बड़ा रखें जितना आपको वास्तव में इसकी आवश्यकता है, लेकिन ध्यान दें कि विभाजन को बहुत छोटा नहीं करना चाहिए, ताकि घुसपैठ-विखंडन को रोका जा सके। LVM का उपयोग करना बहुत मददगार हो सकता है।

आगे की पढाई

द आर्क विकी में फाइल सिस्टम के प्रदर्शन से संबंधित कुछ बेहतरीन लेख हैं:

https://wiki.archlinux.org/index.php/Beginner%27s_Guide#Filesystem_types

https://wiki.archlinux.org/index.php/Maximizing_Performance#Storage_devices


4
आपको निर्दिष्ट करना चाहिए कि कर्नेल youre के किस संस्करण से तुलना की जा रही है। एक्सएफएस को हाल के गुठली में से एक में कुछ बहुत महत्वपूर्ण गति imporovments मिला (लगता है कि यह 2.6.31 था, लेकिन उस पर मुझे उद्धृत न करें)।
पैट्रिक

1
btrfs आंतरिक रूप से आपकी lvm ट्रिक करता है। यह डिस्क के छोटे विखंडू को आवंटित करता है और उन चंक्सों में फाइलें रखता है, तभी डिस्क का एक और हिस्सा तब आवंटित करता है जब मौजूदा चंक्स भर जाते हैं।
Psusi

1
यह किसी भी फाइलसिस्टम का सच है। यही कारण है कि एप्लिकेशन fsync () जैसी चीजों का उपयोग करते हैं।
Psusi

2
@ फटाफट, यह है। लेनदेन का वैसा ही प्रभाव होता है जैसा कि अन्य फाइल सिस्टम में जर्नल करता है: वे एफएस मेटाडेटा की रक्षा करते हैं। सिद्धांत रूप में वे आपके द्वारा वर्णित तरीके से अनुप्रयोगों द्वारा उपयोग किए जा सकते हैं, लेकिन वर्तमान में लेनदेन खोलने और बंद करने के लिए एप्लिकेशन को अनुमति देने के लिए कोई एपीआई नहीं है।
Psusi

1
@taffer आपका "हालिया बेंचमार्क" अप्रैल 2015 से है, तीन साल से अधिक पुराना है और केवल डिफ़ॉल्ट विकल्पों के साथ एक्सएफएस का उपयोग करता है। यह प्री-डेट्स xfsprogs 3.2.3 है जो XFS v5 को डिफ़ॉल्ट बनाता है और इससे मिलने वाले सभी लाभ। यह भी नहीं प्रारूपित किया गया था -m फ़िनवेल = 1 जो कि छोटी फ़ाइलों और भारी मेटाडेटा अद्यतन के साथ XFS प्रदर्शन के लिए एक गेम-चेंजर है। नहीं, कोई चांदी की गोलियां नहीं हैं, लेकिन पुराने बेंचमार्क पर आपकी राय को ध्यान में रखते हुए, बुद्धिमान नहीं है, खासकर जब प्रमुख प्रदर्शन-बदल सुविधाओं को अनदेखा, अनुपलब्ध या अक्षम किया गया हो।
जोडी ली ब्रूचॉन

7

मैं इस कार्य के लिए ReiserFS का उपयोग कर रहा हूं, यह विशेष रूप से बहुत सारी छोटी फाइलों को संभालने के लिए बनाया गया है। फंटू विकि पर इसके बारे में एक आसान पाठ पढ़ा जा सकता है

ReiserFS में विशेष रूप से छोटे फ़ाइल प्रदर्शन को बेहतर बनाने के उद्देश्य से कई सुविधाएँ हैं। Ext2 के विपरीत, ReiserFS निश्चित एक k या चार k ब्लॉकों में भंडारण स्थान आवंटित नहीं करता है। इसके बजाय, यह सटीक आकार आवंटित कर सकता है जिसे इसकी आवश्यकता है।


1
वहाँ स्थिरता मुद्दों के साथ ही ReiserFS हैं - तो आरएच और SuSE है कि एफएस गिरा दिया है। सिद्धांत से (बीट्री-आधारित-एफएस) बीटीआरएफएस तुलनीय होना चाहिए।
निल्स


0

XFS इस तरह की स्थितियों में बहुत अच्छा प्रदर्शन करने के लिए जाना जाता है। यह इसका कारण है कि हम इसे अपने मेल स्टोर्स के लिए अपने काम पर उपयोग करते हैं (जिसमें 1 डायरेक्टरी में सैकड़ों हजारों फाइलें हो सकती हैं)। इसमें ReiserFS की तुलना में बेहतर दोष सहिष्णुता है, बहुत व्यापक उपयोग में है, और आमतौर पर एक बहुत ही परिपक्व फाइलसिस्टम है।

इसके अतिरिक्त, XFS ऑनलाइन डीफ़्रैग्मेन्टेशन का समर्थन करता है। हालांकि यह एक विलंबित आवंटन तकनीक का उपयोग करता है जिसके परिणामस्वरूप कम विखंडन (बनाम अन्य फाइल सिस्टम) के साथ शुरू होता है।


20
XFS इस तरह की स्थितियों में बहुत अच्छा प्रदर्शन करने के लिए जाना जाता है। [उद्धरण वांछित]
१४'१२

8
एहम, एक्सएफ़एस को विशेष रूप से विपरीत के लिए जाना जाता है: बड़ी फ़ाइलों के साथ वास्तव में अच्छी तरह से काम करना, लेकिन छोटे पर अच्छी तरह से नहीं! उदाहरण के लिए यह इन्हीं तक बेंचमार्क पर देखो (या पेज 10 ^^ पर इस निष्कर्ष पर सही कूद): ilsistemista.net/index.php/linux-a-unix/...
लेवीय

1
@ मुझे लगता है कि आप उस रिपोर्ट को गलत बता रहे हैं। रिपोर्ट बहुत स्पष्ट रूप से दिखाती है कि XFS यादृच्छिक IO के लिए बहुत अच्छा प्रदर्शन करता है। लेकिन उस तरफ, रिपोर्ट इस प्रश्न में परिदृश्य के प्रकार को संबोधित नहीं करती है, बहुत सारी फाइलें। रैंडम IO एक चीज है, बड़ी संख्या में फाइलें ऐसी होती हैं जहां ext * उसके चेहरे पर गिरता है।
पैट्रिक

2
एकमात्र जगह XFS वास्तव में बेहतर है यादृच्छिक रीड / राइट ऑपरेशन हैं (अभी भी अजीब लगता है कि यांत्रिक डिस्क पर वास्तव में यादृच्छिक रीड पैटर्न 10MB / s प्राप्त करने में सक्षम है - मुझे कुछ अनुकूलन की तरह लगता है जो वास्तविक दुनिया में नहीं उड़ते हैं (imho)), जबकि पृष्ठ 7 पर यह वही दिखाता है जो मैंने पहले कहा था, एक्सएफएस वास्तव में बड़ी फ़ाइलों को संभालने में अच्छा है! पेज 3 और 5 को देखें, 3 पर जासूसी करने पर आप इसे छोटी फाइलों को साफ-साफ संभालते हुए देख सकते हैं कि यह एक्सट्रीम भी नहीं है! मैं वास्तव में XFS के खिलाफ कुछ भी नहीं है, लेकिन क्या आप के बारे में सिर्फ हर जगह मिल जाए, यह कई छोटी फ़ाइलों के लिए सबसे अच्छा ऑप्टिओम नहीं है, यह सब मैं कह रहा हूँ!
लेविट

5
बड़ी फ़ाइलों की बात आने पर एक्सएफएस भी बेहद धीमी हो सकती है, अगर ये फाइलें लंबे समय तक छोटे-छोटे टुकड़ों के साथ यादृच्छिक रूप से / धीरे-धीरे विस्तारित होती हैं। (विशिष्ट syslogdपैटर्न।) उदाहरण के लिए, एमडी सेटअप पर एक एक्सएफएस में मेरी तरफ से मैंने अभी देखा, कि 1.5 जीबी फ़ाइल को हटाने में 4.75 मिनट (!) लगे, जबकि डिस्क ड्राइव एक लेखन दर पर 100 लेनदेन / एस सीमा पर छाया हुआ था! 2 एमबी / एस से अधिक। यह समान रूप से एक ही ड्राइव पर अन्य समानांतर चलने वाले IO संचालन के प्रदर्शन को भी प्रभावित करता है, क्योंकि ड्राइव पहले से ही अधिकतम है। अन्य एफएस (या बेंचमार्क में परीक्षण किया जा रहा है) जैसा कुछ भी कभी नहीं देखा।
तिनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.