একটি প্রক্রিয়া একটি পৃথক কোর বরাদ্দ করুন


4

আমি বাস্তবায়ন করার চেষ্টা করছি ডেবিয়ানের সাথে রাস্পবেরী পাই 2 এর নিজস্ব কোরে একটি পাইথন স্ক্রিপ্ট চালানো। এক ব্যবহার করতে পারেন taskset নির্দিষ্ট কোর একটি প্রক্রিয়া বাঁধাই। কিন্তু আমার এই কোরকে একই সময়ে ওএস এর মুক্ত এবং অন্যান্য প্রক্রিয়াগুলির লোড হতে হবে। আমি এটা কিভাবে করবো?


সম্ভবত এটি রিয়েলটাইম অগ্রাধিকার সেট?
grawity

@Leonidas আমি কিছু পরীক্ষার ফলাফল দিয়ে আমার উত্তর প্রসারিত। এটা দেখ.
Kamil Maciorowski

উত্তর:


5

এই পুরো থ্রেড দরকারী হতে হবে।

আমি cpu 1 চালানোর জন্য 'init' প্রক্রিয়া সীমাবদ্ধ করার একটি উপায় সন্ধান করব।

সাধারণ ক্ষেত্রে সর্বশেষ শব্দগুলি "সব CPU গুলি চালানো উচিত তবে 1"। আমি অনুমান কেউ ব্যবহার করতে পারেন কার্নেল পরামিতি ; irqaffinity, isolcpus প্রতিশ্রুতিশীল চেহারা।


সম্পাদনা করুন:

সম্পর্কিত isolcpus মধ্যে কার্নেল পরামিতি নথি :

এই অপশনটি সিপিএস বিচ্ছিন্ন করার পছন্দের উপায়। বিকল্প - সিস্টেমের সমস্ত কাজগুলির সিপিইউ মাস্কটি নিজে সেট করে - সমস্যাগুলি এবং উপাত্ত লোড ব্যালান্সার কর্মক্ষমতা সৃষ্টি করতে পারে।

আমি কিছু পরীক্ষা করেছি। ফলাফল:

  • কার্নেল পরামিতি isolcpus আপনি সীমাবদ্ধ ব্যবহার করতে পারেন এক init প্রক্রিয়া এবং CPU (গুলি) বিচ্ছিন্ন।

  • এটা যে কার্নেল পরামিতি আমার মনে হচ্ছে irqaffinity বিচ্ছিন্ন CPU (গুলি) প্রভাবিত না। আপনি সম্ভবত এই পরামিতি প্রয়োজন হবে না।

  • আমি বিচ্ছিন্ন যখন CPU0 এটা সম্পূর্ণ নিষ্ক্রিয় যেতে না। Isolation সত্ত্বেও যে সিস্টেম বা হার্ডওয়্যার প্রয়োজন সঙ্গে কিছু গণনা করতে হয়? - আমি জানি না।

  • আমি বিচ্ছিন্ন যখন CPU1 অথবা CPU7 ইহা ছিল হিসাবে কঠিন একটি শিলা হিসাবে নিষ্ক্রিয়।

বিচ্ছিন্ন করা CPU1 যোগ isolcpus=1 আপনার মধ্যে grub.cfg, এটার মত:
linux /vmlinuz- (... এখানে আপনার বর্তমান পরামিতি ...) isolcpus=1


মূল উত্তর অবিরত:

বিকল্পরূপে, সিস্টেমটি শুরু হওয়ার পরে, আপনি বর্তমানে চলমান সমস্ত প্রক্রিয়াগুলির সম্বন্ধযুক্ততা পুনরায় বরাদ্দ করতে পারেন, তবে এটি কম মার্জিত বলে মনে হয়।

আমি এটা কম মার্জিত বলে মনে করি, তবে এটি যথেষ্ট ভাল কাজ করতে পারে (সম্পাদন করুন: উপরে সমস্যা হিসাবে এটি সমস্যা এবং নিম্নতম লোড ব্যালান্সার কর্মক্ষমতা সৃষ্টি করতে পারে)। দ্রুত এবং নোংরা এক-মাছ ধরার যন্ত্র যা আমার ডেবিয়ানতে কাজ করে:

sudo bash -c 'cd /proc ; for i in [1-9]* ; do taskset -a -p fffffffe $i ; done'

আমি কিছু জন্য ত্রুটি আছে PID গুলি, তবুও htop দেখায় যে এক কোর কার্যত পরে নিষ্ক্রিয়। অবশ্যই আপনাকে পরে আপনার স্ক্রিপ্ট চালাতে হবে, একেবারে বা সহজভাবে পুনরায় সাইন ইন করুন:

taskset -a -p 1 PID

আমি আশা করি আপনি সিপিইউ অ্যাফিনিটি উত্তরাধিকারসূত্রে প্রাপ্ত নতুন প্রসেসগুলি ঢোকানোর জন্য এক-মাছ ধরার পুনরাবৃত্তি করতে হবে না।


3

প্যাকেজ Cpuset সঙ্গে:

# cset shield -c 42 -k on

আপনার টাস্কের জন্য CPU # 42 রিজার্ভ করতে (আপনি CPU গুলি একটি গ্রুপ সংরক্ষণ করতে পারেন), তারপরে

# cset shield -e your_script

শুরুতেই your_script আপনার সংরক্ষিত CPUs উপর। (এছাড়াও অপশন দেখুন --user এবং --group।)

যখন আপনি সম্পন্ন করবেন, তখন CPU গুলি ("ঢালটি পুনরায় সেট করুন") প্রকাশ করুন:

# cset shield -r

এই সরঞ্জাম অনেক অনেক আছে। উদাঃ, সংরক্ষিত CPU এ পূর্বে চলমান প্রক্রিয়া সংযুক্ত করা হচ্ছে:

# cset shield -s -p <PID> --threads

কমান্ড লাইন সাহায্য:

# cset help

অনলাইন সাহায্য / টিউটোরিয়াল


প্রতিশ্রুতি দেখায়। আপনি আপনার উত্তর প্রসারিত করতে পারেন এবং রিজার্ভেশনটি রিলিজ করতে এবং ডিফল্ট অবস্থায় ফিরতে একটি কমান্ড পোস্ট করতে পারেন?
Kamil Maciorowski

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