2014-07-11 8 views
12

मैं एक स्थानीय नेटवर्क में एफ़टीपी सर्वर पर बहुत सारे डेटा और डेटा (~ 100 फाइल एक्स 2 जीबी) को स्थानांतरित करने के लिए पायथन के ftplib का उपयोग कर रहा हूं। यह कोड उबंटू पर चल रहा है। यहाँ मेरी कॉल है (स्वयं मेरी FtpClient वस्तु है, जो ftplib ग्राहक के चारों ओर एक आवरण है):पायथन ftplib इष्टतम ब्लॉक आकार?

# Store file.  
self.ftpClient.storbinary('STOR ' + destination, fileHandle, blocksize = self.blockSize, callback = self.__UpdateFileTransferProgress) 

मेरा प्रश्न है, मैं कैसे एक इष्टतम ब्लॉक आकार का चयन करते हैं? मेरी समझ यह है कि इष्टतम ब्लॉक आकार कई चीजों पर निर्भर है, जिनमें से कम से कम कनेक्शन की गति और विलंबता नहीं है। मेरा कोड कई अलग-अलग नेटवर्कों पर चल रहा है, जिसमें विभिन्न गति और दिन भर भीड़ की अलग-अलग मात्रा होती है। आदर्श रूप में, मैं रन टाइम पर इष्टतम ब्लॉक आकार की गणना करना चाहता हूं।

क्या इष्टतम एफ़टीपी स्थानांतरण ब्लॉक आकार इष्टतम टीसीपी विंडो आकार के समान होगा? यदि यह सत्य है, और टीसीपी विंडो स्केलिंग चालू है, तो क्या कर्नेल से इष्टतम टीसीपी विंडो आकार प्राप्त करने का कोई तरीका है? लिनक्स कर्नेल इष्टतम विंडो आकार कैसे/कब निर्धारित करता है? आदर्श रूप से मैं लिनक्स कर्नेल को इष्टतम ब्लॉक आकार के लिए पूछ सकता हूं, ताकि पहिया को पुनर्निर्मित करने से बचें। http://erlerobotics.gitbooks.io/erle-robotics-python-gitbook-free/content/udp_and_tcp/udp_fragmentation.html

लेकिन, आप भी बारे में सोचना चाहिए:

+0

नेटवर्क के रूप में (होना चाहिए ... मैं/ओ डिस्क की तुलना में धीमी है मैं/हे, [गिरी कि का ख्याल आप के लिए ले जाना चाहिए] http : //en.wikipedia.org/wiki/Nagle%27s_algorithm)। आप 'TCP_CORK' विकल्प सेट करने पर भी विचार कर सकते हैं। – Phillip

+0

आप किस तरह की सहमति की उम्मीद कर रहे हैं या यहां उपयोग कर रहे हैं? क्या यह एक सिंगल थ्रेडेड एप्लीकेशन होना है? क्या आप मल्टीप्लेक्ड असिंक्रोनस I/O से लाभ उठा सकते हैं? –

उत्तर

7

यह एक दिलचस्प सवाल है और मैं थोड़ा गहरा में गोता लगाने के लिए किया था)

वैसे भी, यहाँ एक अच्छा उदाहरण है कि कैसे MTU निर्धारित करने के लिए है निम्नलिखित: एमटीयू ऐसा कुछ है जो एक स्थानीय घटना है और शायद आपके स्थानीय नेटवर्क का केवल एक हिस्सा मानता है। आप क्या सोचते हैं पथ एमटीयू, पूर्ण परिवहन पथ पर न्यूनतम एमटीयू है। http://en.wikipedia.org/wiki/Path_MTU_Discovery तो, आपको प्रत्येक शामिल घटक के प्रत्येक एमटीयू को जानना होगा। यह एक समस्या हो सकती है, उदाहरण के लिए यदि आप जंबो फ्रेम्स और स्विच का उपयोग नहीं कर रहे हैं, तो स्विच को फ्रेम को विभाजित करना होगा। मुझे पहले से ही समस्या थी कि एक स्विच जंबो फ्रेम को समझ नहीं पाया और फ्रेम गिरा दिया।

अब सबसे दिलचस्प सवाल: इष्टतम अवरोध। बहुत सारे अजगर कार्य अवरोध या चंकीकरण जैसे तर्क लेते हैं। लेकिन वे अंतर्निहित परिवहन प्रोटोकॉल के अवरोध को संबोधित नहीं करते हैं। अवरोध एक रीडिंग बफर को परिभाषित करता है जिसमें डेटा को भेजने/पढ़ने के लिए शामिल किया जाएगा। Ftplib में मानक आकार 8K (8192 बाइट्स) है। इसलिए, ब्लॉकइज़ को समायोजित करना वास्तव में स्थानांतरण की गति को प्रभावित नहीं करना चाहिए।

अंतर्निहित परिवहन प्रोटोकॉल के एमटीयू को नियंत्रित करना कुछ ऐसा है जो ऑपरेशन सिस्टम और उसके कर्नेल द्वारा संभाला जाएगा।

अंततः ftp के बारे में कुछ शब्द। ftp एक पुराना डायनासोर है जो सेटअप और उपयोग करना आसान है लेकिन फाइलों को स्थानांतरित करने के लिए हमेशा सबसे अच्छी विधि नहीं है। विशेष रूप से यदि आप बहुत सी छोटी फाइलें स्थानांतरित करते हैं। मैं बिल्कुल आपके उपयोग के मामले को नहीं जानता, इसलिए अन्य ट्रांसफर प्रोटोकॉल विकल्पों जैसे कि rsync या bbcp के बारे में सोचना समझ में आ सकता है। बाद में कॉपी की गति में भारी वृद्धि हुई है। आप वास्तव में http://moo.nac.uci.edu/~hjm/HOWTO_move_data.html

बस मेरी दो सेंट पर एक नज़र जब तक

संबंधित मुद्दे