ऐसा लगता है कि आप 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
, लेकिन बड़े ब्लॉक आकारों के साथ गति अंतर घट सकता है।