স্ক্র্যাপটি এত ধীরে কেন এবং কীভাবে তাড়াতাড়ি করা যায়?


59

আমি ফাইলগুলির একটি ব্যাচটি অনুলিপি করার চেষ্টা করছি scpতবে এটি খুব ধীর। এটি 10 ​​টি ফাইল সহ একটি উদাহরণ:

$ time scp cap_* user@host:~/dir
cap_20151023T113018_704979707.png    100%  413KB 413.2KB/s   00:00    
cap_20151023T113019_999990226.png    100%  413KB 412.6KB/s   00:00    
cap_20151023T113020_649251955.png    100%  417KB 416.8KB/s   00:00    
cap_20151023T113021_284028464.png    100%  417KB 416.8KB/s   00:00    
cap_20151023T113021_927950468.png    100%  413KB 413.0KB/s   00:00    
cap_20151023T113022_567641507.png    100%  413KB 413.1KB/s   00:00    
cap_20151023T113023_203534753.png    100%  414KB 413.5KB/s   00:00    
cap_20151023T113023_855350640.png    100%  412KB 411.7KB/s   00:00    
cap_20151023T113024_496387641.png    100%  412KB 412.3KB/s   00:00    
cap_20151023T113025_138012848.png    100%  414KB 413.8KB/s   00:00    
cap_20151023T113025_778042791.png    100%  413KB 413.4KB/s   00:00    

real    0m43.932s
user    0m0.074s
sys 0m0.030s

আশ্চর্যের বিষয় হ'ল স্থানান্তর হারটি প্রায় ৪১৩ কেবি / গুলি এবং ফাইলটির আকার প্রায় ৪১৩ কেবি, সুতরাং এটি প্রতি সেকেন্ডে একটি ফাইল স্থানান্তর করতে হবে, তবে এটি প্রতি ফাইলটিতে প্রায় ৪.৩ সেকেন্ড সময় নেয় taking

এই ওভারহেডটি কোথা থেকে এসেছে এমন কোনও ধারণা, এবং এটিকে আরও দ্রুত করার কোনও উপায় আছে?


3
আপনি কোন গতির প্রত্যাশা করবেন (অর্থাত্, অন্য দুটি প্রোটোকল যা একই দুটি মেশিনের মধ্যে উচ্চ স্থানান্তর গতি দেখায়)? আপনি যখন একটি বৃহত্তর ফাইল (সম্ভবত আপনার সমস্ত 413KB ফাইলের সংমিশ্রণ) স্ক্রিপ করবেন তখন কি হবে?
ধাগ

6
দেখে মনে হচ্ছে রিমোট সিস্টেমটি কোনও নামের সাথে ক্লায়েন্টের আইপি ঠিকানাটি সমাধান করার চেষ্টা করছে এবং সেশনটি এগিয়ে যাওয়ার আগে আপনাকে সময়সীমাটির জন্য অপেক্ষা করতে হবে। আপনি এটি স্থির করে তদন্ত করতে পারেন (যেমন আপনার আইপি ঠিকানাটি গন্তব্যের / ইত্যাদি / হোস্ট ফাইলে যুক্ত করুন)।
উর্টেল

4
এটি উল্লেখযোগ্য যে--সি পতাকা স্থানান্তরকালে সংক্ষেপণ সক্ষম করে। যদিও আপনার সমস্যাটি স্থানান্তর শুরু করে ওভারহেড হিসাবে মনে হচ্ছে, কম্প্রেশনটি মূলত "ফ্রি" এবং প্রায় সর্বদা সহায়তা করে।
স্যাম

@ উর্টেল: আপনি যা দেখছেন তা আমি দেখতে পাচ্ছি না, আমি যা দেখছি তা অনেক সময়। যাইহোক সেখানে কেবল একটি একক বিপরীত ডিএনএস কল থাকা দরকার।
জেমস পুনরায় স্থাপন করুন মনিকা

আপনি কি সুরক্ষা বা কেবল দূরবর্তী অনুলিপি করার জন্য এসসিপিতে নির্ভর করছেন?
ফ্রেইইট

উত্তর:


17

@ উর্টেলের মন্তব্য সম্ভবত সঠিক: প্রতিটি সংযোগ স্থাপনের জন্য প্রচুর ওভারহেড রয়েছে। আপনি যদি তা স্থির করতে পারেন তবে আপনি দ্রুত স্থানান্তর পাবেন (এবং যদি আপনি না পারেন তবে কেবল @ রোয়াইমার কাজটি ব্যবহার করুন rsync)। আমি অনুরূপ আকারের ফাইলগুলি ( head -c 417K /dev/urandom > foo.1এবং সেই ফাইলটির কয়েকটি অনুলিপি তৈরি করে) হোস্টকে সংযুক্ত করতে কিছুটা সময় নেয় (HOST4) এবং খুব দ্রুত সাড়া দেয় এমন একটি (HOST1) স্থানান্তরিত করে একটি পরীক্ষা করেছি:

$ time ssh $HOST1 echo


real    0m0.146s
user    0m0.016s
sys     0m0.008s
$ time scp * $HOST1:
foo.1                                         100%  417KB 417.0KB/s   00:00    
foo.2                                         100%  417KB 417.0KB/s   00:00    
foo.3                                         100%  417KB 417.0KB/s   00:00    
foo.4                                         100%  417KB 417.0KB/s   00:00    
foo.5                                         100%  417KB 417.0KB/s   00:00    

real    0m0.337s
user    0m0.032s
sys     0m0.016s
$ time ssh $HOST4 echo


real    0m1.369s
user    0m0.020s
sys     0m0.016s
$ time scp * $HOST4:
foo.1                                         100%  417KB 417.0KB/s   00:00    
foo.2                                         100%  417KB 417.0KB/s   00:00    
foo.3                                         100%  417KB 417.0KB/s   00:00    
foo.4                                         100%  417KB 417.0KB/s   00:00    
foo.5                                         100%  417KB 417.0KB/s   00:00    

real    0m6.489s
user    0m0.052s
sys     0m0.020s
$ 

1
ধন্যবাদ, এটি খুব আকর্ষণীয় স্কেপ আউটপুটটি একধরণের ভাঙ্গা হলেও যদি এটি একই সময় দেখায় তবে এটি একটি হোস্ট থেকে অন্য হোস্টের সাথে সম্পূর্ণ আলাদা। তারা সম্ভবত সংযোগ সময় মোট সময় অন্তর্ভুক্ত করা উচিত।
লরেন্ট

1
সুতরাং আপনার অনুমানটি কি প্রতিটি ফাইলের জন্য একবার নতুন সংযোগ তৈরি করে?
রজারডপ্যাক

59

আপনি rsync(ওভার ssh) ব্যবহার করতে পারেন , যা সমস্ত উত্স ফাইল স্থানান্তর করতে একক সংযোগ ব্যবহার করে।

rsync -avP cap_* user@host:dir

আপনি না থাকে rsync(এবং কেন !? নয়) আপনি ব্যবহার করতে পারেন tarসঙ্গে sshভালো, যা একটি অস্থায়ী ফাইল তৈরি এড়াতে:

tar czf - cap_* | ssh user@host tar xvzfC - dir

rsyncঅগ্রাধিকার, সব অন্যান্য বিষয় সমান হচ্ছে, কারণ এটি একটি বাধা ঘটনা restartable হয়।


6
আপনি কি বলছেন যে কোনও একক অনুরোধ scpসমস্ত ফাইল স্থানান্তর করতে একটি সংযোগ ব্যবহার করবে না?
একটি সিভিএন 21

1
তারপাইপের ক্ষেত্রে, f -প্রতিটি দিকের কোনও প্রয়োজন নেই , যেহেতু ডিফল্টরূপে স্টারডাউট / স্টিডিন থেকে টর আউটপুটগুলি পড়ে / পড়ে। সুতরাং tar cz cap_* | ssh user@host tar xvzC dirএটি করতে হবে।
কাঁপানো

1
@Tremby অগত্যা নয়। tarবিভিন্ন ডিফল্ট মান সহ সংকলন করা যায় ( tar --show-defaultsআপনি জিএনইউ টর ব্যবহার করছেন কিনা তা দেখুন বা /etc/default/tarঅন্যথায়, এবং উভয় ক্ষেত্রেই TAPEপরিবেশের পরিবর্তনশীলটি ভুলে যাবেন না )
রোয়াইমা

1
@ মাইকেলKjörling প্রথমদিকে আমি ধরে নিয়েছিলাম যে scpপ্রতিটি ফাইলের জন্য একটি নতুন সংযোগ তৈরি করবে, তবে পুনরায় স্মরণে - এবং এর সাথে ডাবল-চেক করার পরে tshark- আমি বুঝতে পারি যে আমি ভুল ছিল was এই মুহুর্তে আমি নিশ্চিত নই যে কেন ওপি'র scpফাইলের জন্য এত দীর্ঘ সময় নেওয়া উচিত।
রোয়াইমা

@ রাইমা, আকর্ষণীয়, ধন্যবাদ আমি স্টিডিন / স্টডআউট এখনও পর্যন্ত ডিফল্ট না হওয়ার বিষয়টি লক্ষ্য করি নি। কর্মক্ষেত্রে আমার ম্যাকের বিএসডি টারে তার ম্যান পেজে কোনও টেপ এনভির বর্ণের উল্লেখ নেই, যদিও আমার লিনাক্স মেশিনে জিএনইউ টার করে।
কাঁপুনি

15

এটি স্থানান্তরের আলোচনার জন্য সময় নেয়। সাধারণভাবে, বি বাইটের এন ফাইলগুলিতে অপারেশনগুলি এন * বি বাইটের একটি ফাইলে একক অপারেশনের থেকে অনেক বেশি সময় নেয় । এটি ডিস্ক I / O এর ক্ষেত্রেও সত্য।

আপনি যদি সাবধানতার সাথে তাকান তবে আপনি দেখতে পাবেন যে এই ক্ষেত্রে স্থানান্তর হারটি আকার_পরে_ফাইলে / সেকেন্ড।

আরও দক্ষতার সাথে ফাইল স্থানান্তর করতে, এগুলি একসাথে বান্ডিল করুন, তারপালটি tarট্রান্সফার করুন:

tar cvf myarchive.tar cap_20151023T*.png

বা, আপনি যদি সংরক্ষণাগারটিও সংক্ষেপ করতে চান,

tar cvzf myarchive.tar.gz myfile*

ফাইলের বিষয়বস্তুর উপর নির্ভর করে সংকোচন করা উচিত বা না, যেমন। যদি তারা জেপিগ বা পিএনজি হয় তবে সংক্ষেপণের কোনও প্রভাব থাকবে না।


পিএনজিগুলি ডিফল্ট ব্যবহার করে এবং এগুলিকে জিপ করাও অর্থহীন।
আর্থার 2e5

আমি বলবো যেহেতু যখন ফাইলগুলি আরও সংকুচিত করা যায় না তখন -z
ট্যার

1
@ ডেভ যদি সেগুলি সংকুচিত করা না যায় বা নেটওয়ার্ক দ্রুত হয় তবে এটি জিনিসগুলিকে ধীর করবে।
ডেভিডম

@ ডেভিডমাহ কি এটি একটি উল্লেখযোগ্য পরিমাণ দ্বারা হবে? আমি ভাবব যে একটি ইতিমধ্যে সংকুচিত ফাইল সংকোচন করা মোটামুটি দ্রুত হবে কারণ এটি সত্যিই কেবল এটি কী সংকোচন করতে পারে তার উপর নজর রাখবে এবং খুঁজে পাওয়া যাবে যে এটি কিছুই নয় is নির্ভর করে আমার ধারণা নির্ভর tarকরে যে সাধারণত সংক্ষেপণের জন্য দ্বিতীয় পাসটি করে বা এটি একই সময়ে সংকোচনের এবং সংরক্ষণাগারভুক্ত হয়
সেন্টিমানে

3
@ আমার ক্ষেত্রে ডেভ (একটি আধুনিক 7000 আরপিএম এইচডি, উচ্চ প্রান্তের সিপিইউ, খুব দ্রুত নেটওয়ার্ক, মোটেই দাম্ভিক নয়) এর ডেটা, সংকোচনের ছাড়াই নিখুঁতভাবে IO আবদ্ধ, তবে এর সাথে -zসিপিইউ আবদ্ধ, এবং অনেক ধীর। gzip সর্বদা সংকোচনের চেষ্টা করবে, সুতরাং মন্দা; সর্বোপরি, আপনি বলতে পারবেন না যে আপনি বাইটের একটি স্ট্রিং সংকোচনযোগ্য না হওয়া পর্যন্ত আপনি এটি সংকোচনের চেষ্টা না করে। আমার সেট আপে, প্লেইন টেক্সট ফাইলগুলি স্থানান্তর করার সময়ও, হালকা সংকোচনের তুলনায় কম্প্রেশন ছাড়াই rsync সবচেয়ে দ্রুতগতি 2-3 এর ফ্যাক্টর দ্বারা। অবশ্যই, ওয়াইএমএমভি।
ডেভিডম

6

স্ক্রিপটি এটির চেয়ে ধীর হওয়া আরও একটি কারণ, বিশেষত উচ্চ ব্যান্ডউইথ নেটওয়ার্কগুলিতে এটি হ'ল স্থিরভাবে অভ্যন্তরীণ প্রবাহ নিয়ন্ত্রণ বাফারগুলি সংজ্ঞায়িত করা হয়েছে যা নেটওয়ার্কের কর্মক্ষমতা বাধা হয়ে দাঁড়ায়।

এইচপিএন-এসএসএইচ ওপেনএসএসএইচের একটি প্যাচড সংস্করণ যা এই বাফারগুলির আকার বাড়িয়ে তোলে। এটি স্কিপ ট্রান্সফার গতিতে বিশাল পার্থক্য করে (সাইটে চার্টগুলি দেখুন, তবে আমি ব্যক্তিগত অভিজ্ঞতা থেকেও কথা বলি)। অবশ্যই, আপনার সমস্ত হোস্টগুলিতে এইচপিএন-এসএসএইচ ইনস্টল করতে আপনার প্রয়োজনীয় সুবিধাগুলি পেতে তবে আপনার যদি প্রায়শই বড় বড় ফাইল স্থানান্তর করার প্রয়োজন হয় তবে এটি ভাল।


5

আমি এখানে বর্ণিত কৌশলটি ব্যবহার করেছি যা ডেটাগুলি সঙ্কুচিত করতে এবং অনুলিপি করতে সমান্তরাল জিজেপ এবং নেটক্যাট ব্যবহার করে।

এটি এ পর্যন্ত সিদ্ধ হয়:

# SOURCE: 
> tar -cf - /u02/databases/mydb/data_file-1.dbf | pigz | nc -l 8888

# TARGET:
> nc <source host> 8888 | pigz -d | tar xf - -C /

ফাইল বা ফাইলগুলি সংগ্রহ করতে এটি টার ব্যবহার করে। তারপরে ফাইলটি সংকুচিত করতে এবং প্রেরণে অনেক সিপিইউ থ্রেড পেতে পিগজ ব্যবহার করে, নেটওয়ার্ক ট্রান্সমিশন নেটক্যাট ব্যবহার করছে is প্রাপ্তির দিক থেকে, নেটক্যাট তারপরে (সমান্তরালভাবে) এবং আনট্রেসগুলি সঙ্কলিত করে।


3
ncএনক্রিপ্ট করা হয় না। কিছু ssh -Dম্যাজিক যোগ করতে পারেন ?
আর্থার 2e5

এটি আসলে বেশ উজ্জ্বল
জাবরান সা Saeedদ

5

এই সমস্যাটি কেবল একটি সাইটের মাধ্যমে একটি বড় এমপি 4 ফাইলের মাধ্যমে সাইটের স্থানান্তর করছিল scp। ~ 250KB / s পাচ্ছিল। গন্তব্য ফায়ারওয়ালে ইউডিপি বন্যা সুরক্ষা (এফপি) নিষ্ক্রিয় করার পরে, স্থানান্তর হার 6.5MB / s এ বৃদ্ধি পেয়েছে। এফপিটি আবার চালু করার সময়, হারটি নেমে আসে ~ 250 কেবি / সেকেন্ডে।

প্রেরক: সাইগউইন, রিসিভার: ফেডোরা 20, ফায়ারওয়াল সোফস ইউটিএম।

এসএসএইচ ইউডিপি কী জন্য ব্যবহার করে? @ superuser.com - আমি যা পড়ি তা সরাসরি তা থেকে আসে না।

ফায়ারওয়াল লগ পর্যালোচনা করে, জনসাধারণের আইপি অ্যাড্রেসগুলিতে 4500, উত্স এবং গন্তব্য বন্দরগুলিতে উভয়ই বন্যা শনাক্তকরণ ঘটেছে, ব্যক্তিগত সাইট-টু-সাইটের অভ্যন্তরীণ ভিপিএন ঠিকানা নয়। সুতরাং মনে হচ্ছে আমার সমস্যাটি সম্ভবত একটি NAT ট্র্যাভারসাল পরিস্থিতি যেখানে scpটিসিপি ডেটা শেষ পর্যন্ত ইএসপি এবং ইউডিপি প্যাকেটে এনক্রিপ্ট করা এবং ফলস্বরূপ এফপির সাপেক্ষে। scpসমীকরণ থেকে অপসারণ করতে , আমি ভিপিএন জুড়ে একটি উইন্ডোজ ফাইল অনুলিপি অপারেশন চালিয়েছি scpএবং এফপি সক্ষম হওয়া ছাড়াও একইরকম পারফরম্যান্স লক্ষ্য করেছি । iperfটিসিপি-র মাধ্যমেও একটি পরীক্ষা চালিয়েছে এবং এফপি দিয়ে 2 মেগাট / সেকেন্ড এবং 55 মবিট / সেকেন্ড ছাড়া লক্ষ্য করেছে।

আইপিএসকে দিয়ে NAT-T কীভাবে কাজ করে? @ সিসকো ডট কম

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.