আপনার একটি কার্নেল বিকল্প কনফিগারেশন রয়েছে যেখানে একটি সিপিইউ ওএস ব্যবহার করবে না, এটি বলা হয় isolcpus
।
isolcpus - কার্নেল শিডিয়ুলার থেকে পৃথক করা CPU গুলি।
সংশ্লেষ isolcpus = cpu_number [, cpu_number, ...]
বিবরণ সাধারণ কার্নেল এসএমপি ব্যালেন্সিং এবং শিডিয়ুলার অ্যালগ্রোথিম থেকে সিপিইউ_ নাম্বার মান দ্বারা নির্ধারিত নির্দিষ্ট সিপিইউগুলি সরান। কোনও "বিচ্ছিন্ন" সিপিইউতে কোনও প্রক্রিয়া স্থানান্তরিত বা বন্ধ করার একমাত্র উপায় হ'ল সিপিইউ অ্যাফিনিটি সিস্কলগুলি। cpu_number 0 থেকে শুরু হয়, সুতরাং সিস্টেমের সিপিইউগুলির সংখ্যার চেয়ে সর্বাধিক মান 1 কম less
এই কনফিগারেশনটি আমি কীভাবে সেটআপ করব তা বর্ণনা করতে চলেছি, পরীক্ষার চেয়ে অনেক বেশি ব্যবহার থাকতে পারে।
উদাহরণস্বরূপ, মেরু তাদের লিনাক্স ভিত্তিক এপি কন্ট্রোলারগুলিতে এই প্রযুক্তি ব্যবহার করে, নেটওয়ার্ক ট্র্যাফিককে ওএসের অভ্যন্তরীণ কার্যকারিতা, যেমন আই / ও অপারেশনগুলিতে হস্তক্ষেপ থেকে বিরত রাখতে পারে।
আমি এটি বেশ ব্যস্ত ওয়েব ফ্রন্টএন্ডেও ব্যবহার করি, একই কারণগুলির জন্য: আমি জীবনের অভিজ্ঞতা থেকে জানতে পেরেছি যে এই সার্ভারটির স্বাদের জন্য আমি নিয়মিত নিয়ন্ত্রণও হারিয়ে ফেলেছি; আমি এর নিজস্ব উত্সর্গীকৃত সিপিইউতে সামনের প্রান্তটি ডিমন আলাদা না করা পর্যন্ত এটিকে জোর করে পুনরায় বুট করতে হয়েছিল।
আপনার যেমন 8 সিপিইউ রয়েছে, আপনি কমান্ডের আউটপুট দিয়ে পরীক্ষা করতে পারেন:
$ grep -c proc /proc/cpuinfo
8
অথবা
$ lscpu | grep '^CPU.s'
CPU(s): 8
/etc/default/grub
অপশনটিতে ফাইলটিতে ডেবিয়ান / উবুন্টু যুক্ত করুন GRUB_CMDLINE_LINUX
:
GRUB_CMDLINE_LINUX="isolcpus=7"
(এটি 7, কারণ এটি 0 থেকে শুরু হয়, এবং আপনার 8 টি কোর রয়েছে)
তারপরে দৌড়াও,
sudo update-grub
এটি কার্নেলটিকে বলছে যে আপনার কোনও কর ব্যবহার করবেন না।
সিস্টেমটি পুনরায় বুট করুন।
তারপরে আপনার প্রক্রিয়া শুরু করুন।
এটি শুরু করার সাথে সাথেই আপনি 8 তম সিপিইউতে পরিবর্তন করতে পারবেন (7 কারণ 0 তম 1 ম), এবং নিশ্চিত হয়ে নিন যে সেই সিপিইউ ব্যবহার করে আপনিই একমাত্র।
তার জন্য, কমান্ডটি ব্যবহার করুন:
taskset -cp 7 PID_number
টাস্কসেট - একটি প্রক্রিয়াগুলির সিপিইউ অ্যাফিনিটি পুনরুদ্ধার বা সেট করুন
সংক্ষিপ্তসার
taskset [options] [mask | list ] [pid | command [arg]...]
বর্ণনা
টাস্কসেটটি তার পিআইডি প্রদত্ত একটি চলমান প্রো সিসের সিপিইউ অ্যাফিনিটি সেট করতে বা পুনরুদ্ধার করতে বা প্রদত্ত সিপিইউ অ্যাফিনিটি সহ একটি নতুন কম্যান্ড চালু করতে ব্যবহৃত হয়। সিপিইউ অ্যাফিনিটি হ'ল একটি শিডিয়ুলার সম্পত্তি যা সিস্টেমে সিপিইউগুলির একটি সেটকে একটি প্রক্রিয়া "বন্ড" করে। লিনাক্স শিডিয়ুলার প্রদত্ত সিপিইউ অ্যাফিনিটি সম্মান করবে এবং প্রক্রিয়াটি অন্য কোনও সিপিইউতে চলবে না। নোট করুন যে লিনাক্স শিডিয়ুলার প্রাকৃতিক সিপিইউ অ্যাফিনিটি সমর্থন করে: সময়সূচী একই সিপিইউতে কর্মক্ষমতা কারণে যতক্ষণ ব্যবহারিক হয় ততক্ষণ প্রসেসগুলি রাখার চেষ্টা করে। সুতরাং, নির্দিষ্ট নির্দিষ্ট অ্যাপ্লিকেশনগুলিতে একটি নির্দিষ্ট সিপিইউ অ্যাফিনিটি জোর করা কার্যকর।
এ সম্পর্কে আরও পড়ার জন্য, দেখুন: isolcpus, namactl এবং কার্যসেট
এছাড়াও ব্যবহার করে ps -eF
আপনাকে পিএসআর কলামে প্রসেসরটি ব্যবহৃত হচ্ছে তা দেখতে হবে।
আমার সিপিইউ 2 এবং 3 বিচ্ছিন্ন সহ একটি সার্ভার রয়েছে, এবং প্রকৃতপক্ষে, এটি ইউজারল্যান্ডেরps -e
একমাত্র প্রক্রিয়া হিসাবে লক্ষ্য হিসাবে দেখা যায়, এটি দেখা যায় ।pound
# ps -eo psr,command | tr -s " " | grep "^ [2|3]"
2 [cpuhp/2]
2 [watchdog/2]
2 [migration/2]
2 [ksoftirqd/2]
2 [kworker/2:0]
2 [kworker/2:0H]
3 [cpuhp/3]
3 [watchdog/3]
3 [migration/3]
3 [ksoftirqd/3]
3 [kworker/3:0]
3 [kworker/3:0H]
2 [kworker/2:1]
3 [kworker/3:1]
3 [kworker/3:1H]
3 /usr/sbin/pound
যদি আপনি এটি অ-বিচ্ছিন্ন সিপিইউগুলির সাথে তুলনা করেন তবে তারা আরও অনেকগুলি জিনিস চালাচ্ছেন ( স্লাইডগুলির নীচে উইন্ডো ):
# ps -eo psr,command | tr -s " " | grep "^ [0|1]"
0 init [2]
0 [kthreadd]
0 [ksoftirqd/0]
0 [kworker/0:0H]
0 [rcu_sched]
0 [rcu_bh]
0 [migration/0]
0 [lru-add-drain]
0 [watchdog/0]
0 [cpuhp/0]
1 [cpuhp/1]
1 [watchdog/1]
1 [migration/1]
1 [ksoftirqd/1]
1 [kworker/1:0]
1 [kworker/1:0H]
1 [kdevtmpfs]
0 [netns]
0 [khungtaskd]
0 [oom_reaper]
1 [writeback]
0 [kcompactd0]
0 [ksmd]
1 [khugepaged]
0 [crypto]
1 [kintegrityd]
0 [bioset]
1 [kblockd]
1 [devfreq_wq]
0 [watchdogd]
0 [kswapd0]
0 [vmstat]
1 [kthrotld]
0 [kworker/0:1]
0 [deferwq]
0 [scsi_eh_0]
0 [scsi_tmf_0]
1 [vmw_pvscsi_wq_0]
0 [bioset]
1 [jbd2/sda1-8]
1 [ext4-rsv-conver]
0 [kworker/0:1H]
1 [kworker/1:1H]
1 [bioset]
0 [bioset]
1 [bioset]
1 [bioset]
1 [bioset]
1 [bioset]
1 [bioset]
1 [bioset]
0 [jbd2/sda3-8]
1 [ext4-rsv-conver]
1 /usr/sbin/rsyslogd
0 /usr/sbin/irqbalance --pid=/var/run/irqbalance.pid
1 /usr/sbin/cron
0 /usr/sbin/sshd
1 /usr/sbin/snmpd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid
1 /sbin/getty 38400 tty1
1 /lib/systemd/systemd-udevd --daemon
0 /usr/sbin/xinetd -pidfile /run/xinetd.pid -stayalive
1 [kworker/1:2]
0 [kworker/u128:1]
0 [kworker/0:2]
0 [bioset]
1 [xfsalloc]
1 [xfs_mru_cache]
1 [jfsIO]
1 [jfsCommit]
0 [jfsCommit]
0 [jfsCommit]
0 [jfsCommit]
0 [jfsSync]
1 [bioset]
0 /usr/bin/monit -c /etc/monit/monitrc
1 /usr/sbin/pound
0 sshd: rui [priv]
0 sshd: rui@pts/0,pts/1
1 -bash
1 -bash
1 -bash
1 [kworker/u128:0]
1 -bash
0 sudo su
1 su
1 bash
0 bash
0 logger -t cmdline root[/home/rui]
1 ps -eo psr,command
0 tr -s
0 grep ^ [0|1]
0 /usr/bin/vmtoolsd
nice -19 process