ডুয়াল-কোর সিপিইউ থাকার সময় লোকেরা কেন মেকিং -j3 বিকল্পের প্রস্তাব দেয়?


18

জেন্টু লিনাক্সে প্যাকেজ তৈরির সময় সমান্তরালে কতটি কাজ চালানো উচিত তা জানাতে MAKEOPTSভেরিয়েবল সেট করা সম্ভব । যেহেতু আমার একটি ডুয়াল-কোর সিপিইউ রয়েছে, তাই আমি নির্বাকভাবে এই বিকল্পটি ব্যবহার করতে বেছে নিয়েছি : কোর প্রতি এক কাজ, তাই উভয়েরই কিছু করার আছে। "সমস্যা" এমন অনেকগুলি উল্লেখ রয়েছে যা ব্যবহারকারীদের পরিবর্তে বিকল্পটি সেট করার জন্য ডুয়াল-কোর সিপিইউ রয়েছে tell এর মধ্যে কয়েকটি হ'ল:/etc/portage/make.confmake-j2-j3

উদাহরণস্বরূপ, জেন্টু হ্যান্ডবুকটি বলে:

একটি ভাল পছন্দ হ'ল আপনার সিস্টেমে সিপিইউগুলির সংখ্যা (বা সিপিইউ কোর) প্লাস ওয়ান, তবে এই গাইডলাইনটি সর্বদা নিখুঁত হয় না।

তবে "সিপিইউ + 1" বিধি সম্পর্কে যৌক্তিকতা কী? অতিরিক্ত কাজ কেন?

মেক কনফ (5) ম্যান পেজ এমনকি বলে:

প্রস্তাবিত সেটিংস সিপিইউ +1 এবং 2 * সিপিইউ + 1 এর মধ্যে।

আমি বিকল্প পৃষ্ঠাটির জন্য makeতথ্য পৃষ্ঠায় এবং makeম্যান পৃষ্ঠা ব্যাখ্যাতে বিভাগ 5.4 (সমান্তরাল কার্যনির্বাহীকরণ )টিও পড়েছি -jতবে মনে হয় সেখানে কোনও উত্তর নেই।



উত্তর:


13

সর্বদা কার্যকর এমন কোনও সাধারণ নিয়ম নেই। লোকেরা কোনও নির্দিষ্ট ব্যক্তিকে সুপারিশ করতে পারে কারণ তারা একটি নির্দিষ্ট মেশিনে একটি নির্দিষ্ট সংকলন নিয়ে পরীক্ষা-নিরীক্ষা করেছিলেন এবং এটিই সেরা সেটিংস, বা কারণ তারা কিছু যুক্তি অনুসরণ করেছিল যার বাস্তবতার সাথে কিছুটা সম্পর্ক থাকতে পারে বা নাও থাকতে পারে।

যদি আপনি প্রচুর র‌্যাম দিয়ে আশীর্বাদ করেন তবে দীর্ঘ সংকলনের সীমিত ফ্যাক্টরটি সিপিইউ সময় হবে। তারপরে সিপিইউতে একটি কাজ, সেইসাথে মাঝে মাঝে আই / ও ব্লকগুলির জন্য একটি পেন্ডিং টাস্ক একটি ভাল সেটিংস setting এটি এটি -j3ডুয়াল-কোর সিপিইউর জন্য তৈরি করে (বা আরও স্পষ্টভাবে ডুয়াল-সিপিইউ মেশিনের জন্য - যদি প্রতিটি কোর হাইপারথ্রেড হয়, তবে এটি 4 সিপিইউ হবে, তাই -j5)।

আপনার যদি খুব সামান্য র‍্যাম থাকে, তবে একটি সীমাবদ্ধ ফ্যাক্টরটি হতে পারে যে আপনার অনেকগুলি সমবর্তী কাজ নাও থাকতে পারে, না হলে তারা একে অপরকে বদলাতে থাকবে। উদাহরণস্বরূপ, আপনি যদি স্বাচ্ছন্দ্যে মেমরির দুটি সংকলক উদাহরণগুলি ফিট করতে না make -j2পারেন তবে ইতিমধ্যে এর চেয়ে ধীর হতে পারে make। যেহেতু এটি একবারে আপনি কতগুলি সংকলক প্রক্রিয়া র‌্যামে ফিট করতে পারেন তার উপর নির্ভরশীল, সাধারণ চিত্র বের করার কোনও উপায় নেই।

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


আমি জানতাম না যে সিপিইউ কোরগুলি যদি হাইপারথ্রেড হয় তবে তাদের প্রত্যেককে দুটি হিসাবে গণনা করা হয়। যাইহোক, মনে হচ্ছে আমার সিপিইউ হাইপার থ্রেডিং সমর্থন করে না।
ফ্রান্সেস্কো টার্কো

আমি এই উত্তর গ্রহণ করেছি। যাইহোক আমি -j2আমার সিস্টেমে লেগে থাকতে পছন্দ করেছি। এর কারণ হল আমি উভয় উঠতি চেষ্টা করেছেন, সেটা gccএবং firefoxথেকে সেটিংসের সাথে -j1পর্যন্ত -j5(10 উত্থান কমান্ড মোট), এবং মনে হচ্ছে যে যখন -j2স্পষ্টভাবে দ্রুত চেয়ে -j1অন্য তিনটি সেটিংস, সমাবস্থা উপর -j2
ফ্রান্সেস্কো টার্কো

7

আমি অনুমান করি যে এটি দর্শনীয় হিউরিস্টিক - প্রসেস makeচালু করার অনুমতি CPUs + 1দেওয়া তা নিশ্চিত করা:

  1. কোনও শ্রমিক-প্রক্রিয়া সবেমাত্র শেষ হয়ে গেছে এমন একটি কর্মী এবং এখনও চালানো-এমন কোনও শ্রমিকের মধ্যে কোনও ব্যবধান থাকবে না - কিছুটা প্রাক-ফিলিং রান সারির মতো।
  2. সেই রান-সারি প্রাক-পূরণের সাথে লক্ষণীয়ভাবে ওভারহেড আনার জন্য খুব বেশি প্রতিযোগিতামূলক প্রক্রিয়া হবে না।

তবে, আবারও এটি তাত্পর্যপূর্ণ এবং ফ্রিবিএসডি এর হ্যান্ডবুকটি এখনও একটি সিপিইউয়ের জন্য সুপারিশ করে make -j4


5

সাধারণত, কোরের সংখ্যার চেয়ে বেশি কাজ শুরু করার কারণ রয়েছে। গিসি ব্যবহার করে সি সংকলনের জন্য, যদি পাইপটি জিসিসি বিকল্পগুলিতে সংজ্ঞায়িত না হয়, তবে এটি অস্থায়ী ফাইলগুলি ব্যবহার করে ক্রমানুসারে তার ক্রিয়াকলাপগুলি (প্রিপ্রসেসিং, প্রথম রান, অপ্টিমাইজেশন এবং অ্যাসেম্বলি) করে; -পাইপ সাব-প্রসেসের মধ্যে পাইপ ব্যবহার করে এটি পরিবর্তন করে। (পাইপ যোগ করা ডিফল্ট উদাহরণস্বরূপ ফ্রিবিএসডি-র ক্ষেত্রে তবে লিনাক্সে traditionalতিহ্যবাহী নয় So) সুতরাং, আপনার যদি 2 টি কোর থাকে এবং 2 টি কাজের সমান্তরালে অনুমতি দেয় তবে তারা ডিস্ক I / O তে কিছু সময় ব্যয় করবে। 1 টি কাজ যুক্ত করার প্রস্তাবটি এই নির্দিষ্টকরণের সাথে সম্পর্কিত বলে মনে হচ্ছে। তবে চূড়ান্ত উত্তর পাওয়ার জন্য আপনাকে এই সুপারিশটি কখন যুক্ত করা উচিত এবং তাকে জিজ্ঞাসা করা উচিত :) বা জেন্টো ডেভেলসের মেলিং তালিকায় জিজ্ঞাসা করা উচিত।


2

মূলত সেই সংখ্যাটিকেই লেখকরা সাধারণ জ্ঞান বলে। সর্বোত্তম, এটি একটি ভাল অনুমান। যতদূর আমি জানি আপনি টাইপ করার সময় তৈরি হওয়া মেক প্রক্রিয়াটি makeইতিমধ্যে গণনা করা হয়েছে যাতে আপনার সাথে -j3অপেক্ষাকৃত প্রধান প্রক্রিয়াটি শেষ হতে পারে, যখন অন্য দু'টি সংকলন করছেন।

যাইহোক, আমি যখন জেন্টুকে ব্যবহার করতাম তখন থাম্বের নিয়ম ছিল <#cpus>*2 + 1

আপনার মুরগির ট্রেইল, চায়ের পাতা বা ম্যাজিক 8 বল আপনাকে যে ডিস্কটি I / O করতে হবে এবং আপনার বর্তমান লিনাক্স কার্নেলের সময় নির্ধারণের প্রয়োজন তা নির্ভর করে all [এই পোস্টের মূলটি শুরু করুন] আমার ব্যক্তিগত অভিজ্ঞতা থেকে ( -jজেন্টো নির্দিষ্ট নয়) থেকে, #cpus + 1 এবং #cpus * 2 +1 এর মধ্যে সমস্ত কিছুই সূক্ষ্ম ফলাফল লাভ করে [এই পোস্টের মূলটি শেষ করুন] এবং গড়ে আপনি কোনও পার্থক্য খুব কমই লক্ষ্য করবেন। প্রসেসর এবং কার্নেলগুলি আজকাল বেশ ভাল good

তবে এই সমস্ত পরিবর্তনগুলি যখন: ক) আপনি আসলে সংকলনের জন্য একাধিক বাক্স ব্যবহার করেন (ডু'হ) বা খ) আপনার নিজস্ব কোড বিকাশ করছে

একটি উচ্চতর -jবৈশিষ্ট্য পূর্বে অজানা নির্ভরতা দেখানোর সম্ভাবনা বেশি।

এবং একপাশে নোট: কোরের সংখ্যায় যাবেন না, তবে সিপিইউগুলি একত্রে প্রবাহের সংখ্যার দ্বারা। (Hypertheading!)

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