কীভাবে সিপিইউ অ্যাফিনিটি লিনাক্সে সিগ্রুপের সাথে ইন্টারেক্ট করে?


10

আমি বিচ্ছিন্ন সিপিইউগুলির সেটগুলিতে মাল্টি-থ্রেডড বেঞ্চমার্কগুলি চালানোর চেষ্টা করছি। একটি দীর্ঘ গল্প সংক্ষিপ্ত কাটা, আমি প্রাথমিকভাবে চেষ্টা করেছি isolcpusএবং taskset, কিন্তু সমস্যাগুলি আঘাত । এখন আমি সিগ্রুপ / সিসেট নিয়ে খেলছি।

আমি মনে করি "সাধারণ" cset shieldব্যবহারের ক্ষেত্রে খুব সুন্দরভাবে কাজ করা উচিত। আমার 4 টি কোর রয়েছে, তাই আমি বেঞ্চমার্কিংয়ের জন্য আমি 1-3 ব্যবহার করতে চাই (আমি এই কোরগুলিকে অ্যাডাপটিভ টিক্স মোডে রাখতে কনফিগারও করেছি), তারপরে কোর 0 অন্য সব কিছুর জন্য ব্যবহার করা যেতে পারে।

টিউটোরিয়ালটি এখানে অনুসরণ করে , এটি এতটা সহজ হওয়া উচিত:

$ sudo cset shield -c 1-3
cset: --> shielding modified with:
cset: "system" cpuset of CPUSPEC(0) with 105 tasks running
cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running

সুতরাং এখন আমাদের কাছে একটি "ঝাল" রয়েছে যা বিচ্ছিন্ন (ইউজার সিএসেট) এবং কোর 0 অন্য সব কিছুর জন্য (সিস্টেম সিসেট)।

ঠিক আছে, এখন পর্যন্ত ভাল দেখাচ্ছে। এখন দেখা যাক htop। প্রক্রিয়াগুলি সমস্ত সিপিইউ 0 তে স্থানান্তরিত হওয়া উচিত ছিল:

csets

তাই না? কিছু প্রক্রিয়া রক্ষা কর্ডগুলিতে চলমান হিসাবে প্রদর্শিত হয়। হ্যাপের একটি ত্রুটিযুক্ত মামলাটি খণ্ডন tasksetকরার জন্য , আমি processাল হিসাবে দেখানো কোনও প্রক্রিয়াটির অ্যাফিনিটি মাস্কটিও পরিদর্শন করার চেষ্টা করেছি ।

সম্ভবত এই কাজগুলি অদলবদল ছিল? আসুন সিপিইউ 3 (যা শিল্ডে থাকা উচিত) চলমান হিসাবে দেখানো একটি নির্বিচার প্রক্রিয়াটি এঁকে ফেলুন htopএবং দেখুন সিস্টেম সিগ্রুপে এটি অনুসারে প্রদর্শিত হয়েছে কিনা cset:

$ cset shield -u -v | grep 864
   root       864     1 Soth [gmain]
   vext01    2412  2274 Soth grep 864 

হ্যাঁ, এটি অনুযায়ী সিস্টেম ক্রুগ-এ চলছে cset। সুতরাং htopএবং csetএকমত না।

তাহলে এখানে কি হচ্ছে? আমি কার উপর নির্ভর করব: সিপিইউ অ্যাফিনিটিস ( htop/ taskset) বা cset?

আমি সন্দেহ করি যে আপনার csetএকসাথে ব্যবহার এবং সংযুক্তি থাকার কথা নয় । সম্ভবত ঝালটি ঠিকঠাক কাজ করছে এবং আমার স্নেহ মুখোশ এবং htopআউটপুট উপেক্ষা করা উচিত । যেভাবেই হোক না কেন, আমি এটি বিভ্রান্তিকর মনে করি। কেউ কি কিছু আলোকপাত করতে পারে?


আপনি কোন বিতরণ ব্যবহার করছেন? আমি জিজ্ঞাসা করছি কারণ ওএস এবং সংস্করণ অনুসারে সরঞ্জাম এবং কর্মপ্রবাহগুলি পৃথক।
ew

এটি একটি ডেবিয়ান 8 সিস্টেম।
এড ব্যারেট

ওহ ঠিক আছে. রেডহাট বিশ্বে, আমাদের কাছে numactlএবং cgconfigএবং cgrules/ cgredআপনি কী করছেন তা প্রবাহিত করতে হবে। এগুলি কিছু কাজ দিয়ে দেবিয়ানের জন্য উপলব্ধ হতে পারে
ew

উত্তর:


5

থেকে cpusets ডকুমেন্টেশন :

তফসিল_সেটেফিনিটির কলগুলি সেই টাস্কের সিপুজেটে অনুমোদিত সেই সিপিইউগুলিতে ফিল্টার করা হয়।

এটি সূচিত করে যে সিপিইউ অ্যাফিনিটি মাস্কগুলি সিগ্রুপে সিপাসের সাথে ছেদ করা হয় যে প্রক্রিয়াটির সদস্য।

উদাহরণস্বরূপ, যদি কোনও প্রক্রিয়াটির অ্যাফিনিটি মাস্কে কোরগুলি {0, 1, 3 includes অন্তর্ভুক্ত থাকে এবং প্রক্রিয়াটি সিস্টেম ক্রগ্রুপে চলছে, যা কোর {1, 2 to এর মধ্যে সীমাবদ্ধ থাকে, তবে প্রক্রিয়াটি কোর 1 এ চালাতে বাধ্য হবে।

আমি 99% নিশ্চিত যে htopআউটপুটটি "ভুল" এটির সত্য যে cgroups তৈরি হওয়ার পর থেকে প্রক্রিয়াগুলি জেগে ওঠে না এবং ডিসপ্লেটি শেষ কোরটি দেখায় যে প্রক্রিয়াটি চলছে।

যদি আমি আমার ঝালটি তৈরির আগে ভিমটি শুরু করি, দ্বিগুণ (কোনও কারণে) কাঁটাচামচ কাঁটাচামচ করা হয়, এবং গভীরতম শিশুটি মূল 2 তে চলছে I আমি যদি তখন ঝালটি তৈরি করি, তবে ঘুম ভিমে (সিটিআরএল + জেড) ঘুমিয়েছি এবং উভয় প্রক্রিয়া রয়েছে কোর 0 তে সরানো হয়েছে বলে আমি মনে করি এটি htopবাসী তথ্য দেখাচ্ছে এমন অনুমানকে নিশ্চিত করে ।

এছাড়াও আপনি পরিদর্শন করতে পারেন /proc/<pid>/statusএবং তাকান cpus_allowed_*ক্ষেত্র।

উদাহরণস্বরূপ, আমার এখানে একটি console-kit-daemonপ্রক্রিয়া রয়েছে (পিড 857) এখানে হ্যাপে দেখানো হচ্ছে কোর 3 এ চলছে তবে এতে /proc/857/status:

Cpus_allowed:   1
Cpus_allowed_list:      0

আমি মনে করি এটি বলছে যে অ্যাফিনিটি মাস্কটি 0x1, যা সিগ্রুপের কারণে কেবলমাত্র কোর 1 এ চলতে দেয়: যেমন ছেদ করুন ({0,1,2,3}, {0}) = {0}}

যদি আমি পারি তবে আরও ভাল উত্তর আসে কিনা তা দেখার জন্য আমি প্রশ্নটি কিছুক্ষণ খোলা রেখে দেব।

এই (রাইস উপর) সাহায্য করার জন্য @ ডেভম্যাক ধন্যবাদ।


1
আপনি সঠিক, এইচটিওপি-তে প্রদর্শিত তথ্যটি বর্তমানে কোন প্রক্রিয়াটি চালু আছে তা নয়, তবে শেষেরটিটি নির্ধারিত ছিল (তথ্য সংগ্রহের জন্য একই ইন্টারফেস ব্যবহার করে এমন কোনও কিছুতেই এটি যায়)।
অস্টিন হেমেলগার্ন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.