एससीपी अपलोड की गति लाइब्रेरी में कमांड लाइन स्किप उपयोगिता सक्षम करने में सक्षम है, के साथ प्रदर्शन समस्याएं काफी प्रतीत होती हैं। मैं समझता हूं कि यह रूबी (1.9.2-पी 0) है, लेकिन नेट :: एससीपी लिनक्स उपयोगिता से लगभग 8x धीमी है (बड़ी फाइलों का उपयोग करके देखा गया है ... नीचे देखें)। मुझे जानना उत्सुक है (मैंने कोड पर एक त्वरित नज़र डाली) यदि यह है कि रूबी में सॉकेट कैसे हैं, या नेट :: एससीपी सॉकेट को बेहतर तरीके से मल्टीप्लेक्स करना संभव है?रूबी और नेट :: एससीपी स्थानान्तरण (सॉकेट)
मैंने देखा कि अपलोड की कौन सी शैली मैंने कोशिश की है (धारावाहिक अपलोड, चैनल स्कैन ऑब्जेक्ट के कई उदाहरणों का उपयोग करके असीमित रूप से ऑपरेटिंग) मैं कभी भी एससीपी अपलोड पर 9 मेगाबाइट/दूसरी स्थानांतरण गति प्राप्त नहीं कर सकता।
1) की कोशिश की विभिन्न एन्क्रिप्शन एल्गोरिदम
मैं बहुत महत्वपूर्ण गति परिवर्तन उदाहरण के बिना एन्क्रिप्शन के विभिन्न प्रकार प्रयोग किया है:: मैं का उपयोग कर मेरी 1GB परीक्षण फ़ाइल सबमिट कर सकता है अब ... मुझे मेरी जांच का ब्यौरा स्पष्ट करता हूं कमांड लाइन एसपीपी (एन्क्रिप्शन एल्गोरिदम = arcfour128) और मेरे आंतरिक गीगाबिट कनेक्शन पर 73.3 मेगाबाइट्स/एस की स्थानांतरण दर प्राप्त करें। नेट :: एससीपी.अपलोड लिब का उपयोग करके मुझे अपने आंतरिक गीगाबिट कनेक्शन पर 9 मेगाबाइट्स से अधिक नहीं मिला।
2) की कोशिश की विभिन्न मेजबान/OSes
मैंने पाया कि लिनक्स -> लिनक्स अपलोड सबसे तेजी से कर रहे थे। एसयूए का एसएसएच सर्वर (विंडोज) केवल मुझे अधिकतम 13.5 मेगाबाइट्स/एस अपलोड गति (लिनक्स -> विंडोज़, आर्कफॉर एल्गोरिदम डब्ल्यू/एसपीपी कमांड लाइन का उपयोग करके) प्रदान कर सकता है, जबकि लिनक्स -> लिनक्स (आर्कफॉर, डब्ल्यू/एसपीपी कमांड लाइन का उपयोग करना)) एक चमकदार 73.3 मेगाबाइट्स/एस था। > 2 तुल्यकालिक अपलोड इस्तेमाल किया - मैं, आदि
3) की कोशिश की विभिन्न SCP अपलोड विधियां
कि इन विंडोज और लिनक्स मशीनों में ठीक उसी मॉडल, हार्डवेयर कर रहे हैं उल्लेख करना चाहिए! कॉल, एक के बाद एक खत्म हो गया था। -> 2 एसिंक्रोनस अपलोड कॉल का इस्तेमाल किया गया, एक दूसरे ने शुरू करने के बाद -> 2 नेट :: एससीपी ऑब्जेक्ट्स का इस्तेमाल किया और फ़ाइल को अपलोड के गैर-अवरुद्ध/असीमित संस्करण में सबमिट किया (इसलिए वे समानांतर में चल रहे थे) इनमें से कोई भी अलग विधि नहीं कोई महत्वपूर्ण प्रदर्शन लाभ दें, जो निराशाजनक है।
यहाँ परीक्षण (पाठ पठनीयता के लिए बढ़ाया है, लेकिन कोड के उत्पादन के लिए इसी तरह प्रदान की गई) के परिणाम हैं:
Net::SCP
Done creating channels
Starting transfer of /home/seth/afpcases/systeme.afp # two upload! calls, one after another
Finished transfer of /home/seth/afpcases/systeme.afp
--> Duration: 126.07707 seconds (8.7168903909331 megabytes/s) should show transfer speed of serial uploads
Starting transfer of /home/seth/afpcases/systeme.afp # two upload calls, one after another, with a wait on both channels after both have started
Finished transfer of /home/seth/afpcases/systeme.afp
--> Duration: 122.588784 seconds (8.964931082112699 megabytes/s) should show transfer speed of simultaneous async channels.
Starting transfer of /home/seth/afpcases/systeme.afp # two upload calls on two separate Net::SCP objects, one after another, with a wait on both channels after both have started
Finished transfer of /home/seth/afpcases/systeme.afp
--> Duration: 122.822663 seconds (8.947860054133495 megabytes/s) should show transfer speed of simultaneous SCP instances
Finished in 371.761262 seconds
आप एक बड़ी फ़ाइल है (मैं एक ~ 1GB फ़ाइल का उपयोग किया), आप इन आरएसपीईसी परीक्षणों (scp_spec.rb में) का उपयोग कर सकते हैं या उन्हें इस प्रदर्शन में गिरावट देखने के लिए परिचित होने वाले परीक्षण परीक्षणों में बदल सकते हैं।
यदि आपको नहीं पता कि पुस्तकालय में इस प्रदर्शन को कैसे बेहतर किया जा सकता है, तो क्या आपके पास एससीपी हस्तांतरण की कुछ अतिरिक्त समानांतर गति को खोलने के बारे में कोई और विचार है, इसके अलावा एससीपी उपयोगिता को सबस्केल के माध्यम से कॉल करना?
Rspec यहां टेस्ट: https://gist.github.com/703966