সমান্তরাল ব্যবহার সঠিক xargs


9

আমি xargsপ্রায় 30 মিলিয়ন ছোট ছোট ফাইলগুলি প্রক্রিয়া করার জন্য পাইথন স্ক্রিপ্ট কল করতে ব্যবহার করছি । আমি xargsপ্রক্রিয়া সমান্তরাল ব্যবহার করতে আশা করি । আমি যে কমান্ডটি ব্যবহার করছি তা হ'ল:

find ./data -name "*.json" -print0 |
  xargs -0 -I{} -P 40 python Convert.py {} > log.txt

মূলত, Convert.pyখুব ছোট পড়তে হবে JSON , ফাইল (4 কিলোবাইট) অন্য 4 কিলোবাইট ফাইলে কিছু প্রক্রিয়াকরণ এবং লেখ না। আমি 40 সিপিইউ কোর সহ একটি সার্ভারে চলছে। এবং এই সার্ভারে অন্য কোনও সিপিইউ-নিবিড় প্রক্রিয়া চলছে না।

হটোপ পর্যবেক্ষণ করে (বিটিডব্লিউ, সিপিইউর পারফরম্যান্স নিরীক্ষণের জন্য অন্য কোনও ভাল উপায় আছে কি?), আমি দেখতে পাচ্ছি যে -P 40এটি প্রত্যাশার চেয়ে দ্রুত নয়। কখনও কখনও সমস্ত কোর স্থির হয়ে যায় এবং 3-4 সেকেন্ডের জন্য প্রায় শূন্যে কমে যায়, তারপরে 60-70% এ ফিরে আসবে। তারপরে আমি সমান্তরাল প্রক্রিয়ার সংখ্যা হ্রাস করার চেষ্টা করি -P 20-30, তবে এটি এখনও খুব দ্রুত নয়। আদর্শ আচরণটি লিনিয়ার স্পিড-আপ হওয়া উচিত। এক্সার্গসের সমান্তরাল ব্যবহারের জন্য কোনও পরামর্শ?


6
আপনার সম্ভবত I / O দ্বারা আঘাত হানা: সিস্টেম ফাইলগুলি দ্রুত পর্যায়ে পড়তে পারে না। 40 এরও বেশি শুরু করার চেষ্টা করুন: কিছু প্রক্রিয়া I / O এর জন্য অপেক্ষা করতে হয় তবে এইভাবে ভাল হবে।
ওলে টেঞ্জ

স্ক্রিপ্ট কোন ধরণের প্রসেসিং করে? কোন ডাটাবেস / নেটওয়ার্ক / আইও জড়িত? কতক্ষণ চলবে?
ফক্স

1
আমি দ্বিতীয় ওলেট্যাঞ্জকে আপনারা যতটা প্রসেস চালাবেন এবং আপনার কাজগুলি আইও আবদ্ধ থাকলে এটি প্রত্যাশিত আচরণ। প্রথমে কোরগুলি তাদের কাজের জন্য ঘুমের জন্য অপেক্ষা করবে (ঘুম), তারপরে তারা প্রক্রিয়া করবে এবং তারপরে পুনরাবৃত্তি করবে। আপনি যদি আরও প্রক্রিয়া যুক্ত করেন তবে অতিরিক্ত পদক্ষেপগুলি বর্তমানে শারীরিক কোরে চলছে না এমন সমান্তরাল আইও ক্রিয়াকলাপ শুরু হবে, যা শেষ হয়ে গেলে আপনার কোরে ঘুমের সময়কে কমিয়ে দেয় বা কমিয়ে দেবে।
পিএসকোকিক

1- আপনি কি হাইপারথ্রেডিং সক্ষম করেছেন? 2- আপনার যা আছে সেখানে লগ.টি.এস.টি.কে রূপান্তর.পি করার জন্য প্রতিটি কল দিয়েই ওভাররাইট করা হয় ... নিশ্চিত না যে এটি উদ্দেশ্যমূলক আচরণ কিনা is
বিচয়

xargs -Pএবং >অর্ধ-রেখা সমস্যা হওয়ার কারণে জাতি অবস্থার জন্য আপ খুলছে gnu.org/software/parallel/... গনুহ পরিবর্তে সমান্তরাল যে সমস্যা থাকবে না ব্যবহার করা হচ্ছে।
ওলে টেঞ্জ 11'15

উত্তর:


4

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

আপনি যদি কেবলমাত্র একের পরিবর্তে আপনার অজগর প্রোগ্রামটি ফাইলগুলির একটি তালিকা নিতে পুনর্গঠন করতে পারেন তবে আপনি কার্য সম্পাদনে একটি বিশাল উন্নতি পাবেন। এরপরে আপনি আরও কার্যকারিতা উন্নত করতে এক্সগার্গ ব্যবহার করতে পারেন। উদাহরণস্বরূপ, 40 টি প্রক্রিয়া, প্রতিটি প্রসেসিং 1000 টি ফাইল:

find ./data -name "*.json" -print0 |
  xargs -0 -L1000 -P 40 python Convert.py

এর অর্থ এই নয় যে অজগরটি একটি খারাপ / ধীর ভাষা; এটি স্টার্টআপ সময়ের জন্য উপযুক্ত নয় optim আপনি এটি কোনও ভার্চুয়াল মেশিন-ভিত্তিক বা ব্যাখ্যাযুক্ত ভাষার সাথে দেখতে পাবেন। উদাহরণস্বরূপ জাভা আরও খারাপ হবে। যদি আপনার প্রোগ্রামটি সিটিতে লেখা থাকে তবে প্রতিটি ফাইল হ্যান্ডেল করার জন্য পৃথক অপারেটিং সিস্টেম প্রক্রিয়া শুরু করতে ব্যয় হতে পারে তবে এটি অনেক কম হবে।

সেখান থেকে -Pআপনি দেখতে দেখতে কিছুটা বেশি গতি বের করতে পারবেন কিনা তা দেখতে, আপনি ডেটা পড়ার / লেখার সময় অলস প্রসেসরের সুবিধা নেওয়ার জন্য প্রক্রিয়া সংখ্যা বাড়িয়ে দেখতে পারেন iddle


1

সুতরাং প্রথমত, সীমাবদ্ধতাগুলি বিবেচনা করুন:

প্রতিটি কাজের ক্ষেত্রে বাধা কী? যদি এটি I / O হয় তবে আপনি সম্ভবত সিপিইউ কোর প্রতি একাধিক কাজ পেয়ে চলে যেতে পারেন যতক্ষণ না আপনি আই / ও এর সীমাটি আঘাত হানেন, তবে এটি যদি সিপিইউ নিবিড় হয় তবে এটি আপনার সিপিইউ কোরগুলির চেয়ে একযোগে অধিকতর চাকরি করার চেয়ে খারাপ হতে চলেছে।

এই বিষয়গুলি সম্পর্কে আমার বোঝাটি হ'ল জিএনইউ সমান্তরাল আপনাকে চাকরীর সারি ইত্যাদির উপর আরও ভাল নিয়ন্ত্রণ প্রদান করবে etc.

দেখুন গনুহ সমান্তরাল বনাম & (আমি গড় পটভূমি) বনাম xargs -p দুই পার্থক্য আরো বিস্তারিত ব্যাখ্যার জন্য।


0

অন্যরা যেমন বলেছে, আপনি / আমি আবদ্ধ কিনা তা পরীক্ষা করে দেখুন। এছাড়াও, xargs এর ম্যান পৃষ্ঠাটি এর -nসাথে ব্যবহারের পরামর্শ দেয় -P, আপনি Convert.pyসমান্তরালে চলমান কতগুলি প্রসেসের সংখ্যা উল্লেখ করেন না ।

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

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