চলমান প্রক্রিয়াটির জন্য একচেটিয়া সিপিইউ উপলব্ধতা কীভাবে নিশ্চিত করবেন?


25

প্রথমে, প্রশ্নটি কিছুটা নির্বোধ / বিভ্রান্ত বলে মনে হচ্ছে কারণ ওএস প্রক্রিয়া সম্পাদন পরিচালনা করার কাজ করে।

তবে আমি সিপিইউ / আইও-আবদ্ধ কতগুলি প্রক্রিয়া পরিমাপ করতে চাই এবং আমার মনে হয় যে আমার ওএস আমার পরীক্ষাগুলিতে হস্তক্ষেপ করছে, উদাহরণস্বরূপ, নির্ধারিত ওএস প্রক্রিয়াগুলি।

উদাহরণস্বরূপ নিম্নলিখিত পরিস্থিতিটি ধরুন: আমি দুটি বার প্রক্রিয়াটি চালিয়েছি এবং সরঞ্জামটি "সময়" (সেকেন্ডে সময় কলাম) থেকে নিম্নলিখিত আউটপুট পেয়েছি:

+---+-------+---------+-----------+---------+
|Run|Process|User Time|System Time|Wall time|
+---+-------+---------+-----------+---------+
|1  |A      |196.3    |5.12       |148.86   |
|2  |A      |190.79   |4.93       |475.46   |
+---+-------+---------+-----------+---------+

যেমন আমরা দেখতে পাচ্ছি, যদিও ব্যবহারকারীর এবং সিস্টেমে সময় একইরকম, উভয়ের অতিবাহিত সময়টি অত্যন্ত পরিবর্তন করে (~ 5 মিনিটের ব্যবধানে)। আমার পরিবেশের মতো কিছু মনে হচ্ছে কিছুটা বিতর্ক সৃষ্টি করেছিল।

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

আমি উবুন্টু 14.04 এলটিএস 64 বিটের সাথে লিনাক্স 4.4.0-45-জেনেরিক ব্যবহার করছি

আমি সত্যই সহায়তা প্রশংসা করি। আপনার যদি লোকদের কোনও অনুপস্থিত তথ্যের প্রয়োজন হয়, আমি তাত্ক্ষণিকভাবে আমার পোস্টটি সম্পাদনা করব।

সিপিইউ তথ্য

$ grep proc /proc/cpuinfo | wc -l
8
$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Stepping:              3
CPU MHz:               4002.609
BogoMIPS:              7183.60
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7

আপনি একটি nice -19 process
hight

উত্তর:


26

আপনার একটি কার্নেল বিকল্প কনফিগারেশন রয়েছে যেখানে একটি সিপিইউ ওএস ব্যবহার করবে না, এটি বলা হয় 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

আমি জানতাম না যে এটি করা সম্ভব ছিল :) আমি আপনার উল্লেখগুলি যাচ্ছি check এই
থ্রেডটিকে

আমি প্রায় ভুলে গিয়েছি ... এই বিচ্ছিন্নতা কাজ করে কিনা তা পরীক্ষা করার জন্য ফাঁসির উপর নজরদারি করার কোনও উপায় আছে কি?
জেন্ডারসন ক্যান্ডিডো

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