सबफ़ोल्डर में लिखना अपने माता-पिता के लिए लिखने से तेज़ है


6

मैं लिखने के लिए पूर्णता मापने के लिए dd का उपयोग करता हूं और कुछ अजीब देखा गया है: / data / emzed2 को लिखना / डेटा लिखने से तेज है। इस तरह से मैंने प्रदर्शन को मापा:

$ dd if = / dev / zero of = / data / emzed2 / testfile bs = 32

^ C4921834 + 0 में रिकॉर्ड

4921834 + 0 रिकॉर्ड 157498688 बाइट्स (157 एमबी) कॉपी किए गए, 2,87329 एस, 54,861 एमबी / एस

$ dd if = / dev / zero of = / data / testfile bs = 32

^ C2487991 + 0 रिकॉर्ड में

2487991 + 0 रिकॉर्ड 79615712 बाइट्स (80 एमबी) कॉपी किए गए, 2,6501 एस, 30,0 एमबी / एस

दोनों फ़ोल्डर SSD ड्राइव पर समान विभाजन पर हैं। मैं Ubuntu 14.04 का उपयोग करता हूं और इसी तरह के परिणामों के साथ कई बार प्रयोग दोहराया है।

किसी भी विचार क्या हो रहा है?


1
मेरे पास 13.10 पर समान माप है। मोटे तौर पर 50% की गति बढ़ जाती है।
कप्तान जिराफ

1
मुझे लगता है कि यह एसयू का है। आपने फ़ाइल सिस्टम का उल्लेख नहीं किया, यह शायद ext4 है। मेरा अनुमान है कि / डेटा एक विभाजन है, और यह कि इस विभाजन की जड़ में स्थानांतरण तेजी से होता है क्योंकि यह ext4 अनुकूलन से लाभान्वित होता है, जिसमें "चौथी चाल यह है कि एक निर्देशिका के सभी आयतों को एक ही ब्लॉक समूह में रखा जाता है। निर्देशिका के रूप में, जब संभव है। " ( ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout )
पॉल

यह ext4 है और / डेटा एक विभाजन है और यह प्रभाव केवल विभाजन जड़ों में होता है! क्या आप एक नियमित उत्तर लिख सकते हैं ताकि मैं इसे स्वीकार कर सकूं?
रॉस्पोर्ट्रकर

जवाबों:


4

ऐसा लगता है कि आप ext4 अनुकूलन से प्रभावित हैं । इनमें से कुछ Ext4 डिस्क लेआउट प्रलेखन में वर्णित हैं ।

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

उपर्युक्त दस्तावेज में वर्णित तीसरे, चौथे और पांचवें "ट्रिक्स" का संयोजन यह समझा सकता है कि आपके मामले में उपनिर्देशिका पर लिखना क्यों तेज है।

पांचवीं चाल यह है कि डिस्क वॉल्यूम 128MB ब्लॉक समूहों में कट जाता है। […] जब एक निर्देशिका रूट डायरेक्टरी में बनाई जाती है, तो इनोड एलोकेटर ब्लॉक समूहों को स्कैन करता है और उस निर्देशिका को कम से कम भारी लोड वाले ब्लॉक समूह में डालता है जिसे वह पा सकता है।

परिणामस्वरूप, emzed2संभवतः 128MB के खाली ब्लॉक में बनाया गया था।

चौथी चाल यह है कि एक डायरेक्टरी के सभी इनोड्स को उसी ब्लॉक ग्रुप में डायरेक्टरी के रूप में रखा जाता है, जब संभव हो।

नतीजतन, /data/testfileरूट ब्लॉक समूह (शायद भारी लोड) /data/emzed2/testfileमें बनाया जाता है , जबकि (शायद खाली) emzed2ब्लॉक समूह में बनाया जाता है ।

तीसरी चाल […] यह है कि यह फ़ाइल के डेटा ब्लॉक को उसी ब्लॉक समूह में रखने की कोशिश करता है, जो उसका इनकोड है।

के लिए /data/emzed2/testfile, फ़ाइल सिस्टम पहले emzed2ब्लॉक समूह में सभी डेटा ब्लॉक आवंटित करेगा । यदि यह ब्लॉक शुरू में रिक्त था, तो पहले 128MB के लिए, इसका मतलब है कि कोई विखंडन नहीं है। के लिए /data/testfile, फाइल सिस्टम पहले रूट ब्लॉक समूह भरना होगा अगर यह अभी तक भरा नहीं गया है, और फिर अन्य स्थानों पर डाटा स्टोर करने के लिए लग रहे हो।

इसके अलावा, आप एक बार में फ़ाइल 32 बाइट्स बढ़ा रहे हैं। सौभाग्य से, फ़ाइल सिस्टम जैसे कि ext4 आपके अनुरोध के अनुसार अधिक डेटा आवंटित करता है (ext4 के मामले में 8kb का हिस्सा) और आवंटन में देरी करने की कोशिश करता है। आप शायद एक समान पैटर्न के साथ देखेंगे bs=8196, लेकिन बड़े ब्लॉक आकारों के साथ गति अंतर घट सकता है।

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