একটি প্রসেস কতটি প্রসঙ্গে সুইচ করে তা কীভাবে দেখবেন?


25

আমি দেখতে চাই যে আমার প্রক্রিয়াটি প্রচুর প্রসঙ্গে চলেছে কিনা। আমি আরও দেখতে চাই যে কীভাবে টাস্ক গ্রুপগুলি পরিচালনা করা প্রসঙ্গের সুইচের সংখ্যাকে প্রভাবিত করে।


কি ওএস? কি সংস্করণ? কি কর্নেল?
মাইকেল 25'12

জিএনইউ / লিনাক্স 2.6.18
লুটেইন করুন

5
চেক করুন/proc/[pid]/status
কেভিন

উত্তর:


30

আপনি আপনার প্রক্রিয়া প্রসঙ্গে সুইচ ইন তথ্য দেখতে পারেন /proc/<pid>/status

$ pid=307
$ grep ctxt /proc/$pid/status
voluntary_ctxt_switches:        41
nonvoluntary_ctxt_switches:     16

এই সংখ্যাগুলি ক্রমাগত আপডেট হওয়া দেখতে, চালান

$ # Update twice a second.
$ watch -n.5 grep ctxt /proc/$pid/status

শুধু সংখ্যা পেতে, চালান

$ grep ctxt /proc/$pid/status | awk '{ print $2 }'

আমি উপরের ওয়াচ কমান্ডটি চেষ্টা করেছি কিন্তু আউটপুটটি মাত্র 1 (স্বেচ্ছাসেবী এবং স্বেচ্ছাসেবী প্রসঙ্গের স্যুইচের জন্য)। আমার লিনাক্স কার্নাল সংস্করণটি 2.6.39-400.214.4.el6uek.x86_64। আউটপুটটি কি লিনাক্স সংস্করণের উপর নির্ভরশীল?
অ্যান্ডি ডুফ্রেসনে

আপনার আউটপুট এখানে আটকান দয়া করে।

এটি উত্তরপত্রে উল্লিখিত হিসাবে একই - "ওয়াচ -n.5 গ্রেপ সিটিএসটি / প্রোক / 5647 / স্ট্যাটাস"
অ্যান্ডি

আমাকে প্রোফস ব্যবহার করতে হবে তবে পুরানো কার্নেলগুলিতে / প্রোপ /... / স্ট্যাটাসের মান নেই। যেকোনো পরামর্শ ?
ম্যাসিমো

12

পিডস্ট্যাট (1) - লিনাক্স কাজের জন্য পরিসংখ্যানগুলি রিপোর্ট করুন। অনুযায়ী man pidstatএটি ঠিক হিসাবে সহজpidstat -w …


আমি "watch -n0.5 pidstat -w -I -p 5876" কমান্ড কার্যকর করেছি তবে আউটপুট 0 (cswch / s nvcswch / s উভয়ের জন্য)। এই কমান্ডটি কি লিনাক্স সংস্করণ - 2.6.39-400.214.4.el6uek.x86_64 এর জন্য কাজ করে?
অ্যান্ডি ডুফ্রেসনে

এই আদেশটি ঠিক কাজ করা উচিত। তবে আপনি এটি ব্যবহার করছেন ভুল কারণ যখন আপনি প্রতিবেদন ব্যবধান নির্দিষ্ট না হুঁশিয়ার "কর্ম পরিসংখ্যান সিস্টেমের প্রারম্ভে (বুট) যেহেতু বারের জন্য রিপোর্ট করা হবে।" অনুরূপ vmstat, iostatএবং অন্যদের। সুতরাং যদি বর্তমান পরিসংখ্যানগুলির প্রয়োজন হয় watch'আইএনিং এর পরিবর্তে এটি কেবল একটি দ্বিতীয় বিরতি দিয়ে চালান।
পোয়েজ

যদি আমি ঘড়ি না করি, তবে কীভাবে আমি অবিচ্ছিন্নভাবে নম্বরগুলি আপডেট করতে দেখি? "Pidstat -w -I -p 5876 5" কমান্ডটি কার্যকর করে কমান্ডটি কেবল 5 সেকেন্ড অপেক্ষা করে এবং তারপরে আউটপুট (আবার 0 হিসাবে প্রিন্ট করে)। আমি যেমনটা প্রত্যাশা করছিলাম এটি অবিচ্ছিন্নভাবে চলবে না (আমি জানি যে এটি পিডস্ট্যাট এর মানব পৃষ্ঠা - লিনাক্স.ডিআইনাট / মান / ১ / পিডস্ট্যাট যা বলে তার সাথে বিরোধ করছে )। আমার ওএসটি ওরাকল লিনাক্স সার্ভার 6.4।
অ্যান্ডি ডুফ্রেসনে

`Pidstat -w -l -p SELF 1` আপনার জন্য কাজ করে?
পোজ

4

একটি সম্পূর্ণ প্রক্রিয়া চলার রেকর্ড পেতে, আপনি বিকল্পটি সহ জিএনইউ timeইউটিলিটি (এটি bashবিল্টিনের সাথে বিভ্রান্ত করবেন না ) ব্যবহার করতে পারেন -v। অসম্পূর্ণ লাইন আউটপুট অপসারণ সহ এখানে একটি উদাহরণ:

$ `which time` -v ls
a.out  exception_finder.cpp  log.txt
    Command being timed: "ls"
               ...
    Voluntary context switches: 1
    Involuntary context switches: 2
               ...
    Exit status: 0

3

আপনি ব্যবহার করতে পারেন sar -w,। উদাহরণস্বরূপ, sar -w 1 3প্রতি 1 সেকেন্ডের জন্য মোট 3 বারের জন্য প্রতি সেকেন্ডে প্রসঙ্গের স্যুইচগুলির সংখ্যা উল্লেখ করে।


1
কমান্ড উপলব্ধ থাকলেও এটি অনেক সিস্টেমে "বাক্সের বাইরে" কাজ করে না। আপনি কীভাবে তথ্য সংগ্রহের জন্য সক্ষম করবেন তা আপনার উত্তরে অন্তর্ভুক্ত করতে পারেন sar?
অ্যান্থন

2

ফাইল ( ctx.sh) ফাইলের জন্য নিম্নলিখিত স্ক্রিপ্ট লিখুন । এর সাথে ctx.sh <core>আপনি দেখতে পাবেন যে প্রদত্ত সমস্ত কোর প্রক্রিয়া চলছে এবং এনভি-প্রসঙ্গের সুইচ পরিবর্তন করা হাইলাইট হবে। এটি দেখে, আপনি মূলটির জন্য প্রতিযোগিতামূলক প্রক্রিয়াগুলি সনাক্ত করতে সক্ষম হবেন।

#!/bin/bash

if [[ $# -eq 0 ]]
then
   echo "Usage:"
   echo "$0 <core>"
   exit 1
fi

if [[ -z $2 ]]
then
   watch -d -n .2 $0 $1 nw
fi

ps -Leo lastcpu:1,tid,comm | grep "^$1 " | awk '{printf $3": ";system("cut -d\" \" -f3  /proc/"$2"/task/"$2"/schedstat 2>/dev/null")}' | sort -k 1 | column -t

1

ম্যান গেট্রাসেজ দেখুন যা আপনাকে স্বেচ্ছাসেবী এবং স্বেচ্ছাসেবী প্রসঙ্গের স্যুইচগুলির সংখ্যা জিজ্ঞাসা করতে দেবে।

struct rusage {
           struct timeval ru_utime; /* user CPU time used */
           struct timeval ru_stime; /* system CPU time used */
           long   ru_maxrss;        /* maximum resident set size */
           long   ru_ixrss;         /* integral shared memory size */
           long   ru_idrss;         /* integral unshared data size */
           long   ru_isrss;         /* integral unshared stack size */
           long   ru_minflt;        /* page reclaims (soft page faults) */
           long   ru_majflt;        /* page faults (hard page faults) */
           long   ru_nswap;         /* swaps */
           long   ru_inblock;       /* block input operations */
           long   ru_oublock;       /* block output operations */
           long   ru_msgsnd;        /* IPC messages sent */
           long   ru_msgrcv;        /* IPC messages received */
           long   ru_nsignals;      /* signals received */
           long   ru_nvcsw;         /* voluntary context switches */
           long   ru_nivcsw;        /* involuntary context switches */
};

আপনি প্রতি থ্রেড তথ্যের প্রতিবেদন করতে এটি বলতে পারেন:

struct rusage usage;
getrusage( RUSAGE_THREAD, &usage );

আপনার সমালোচনামূলক বিভাগের আগে এবং পরে কেবল একবার দু'বার কল করুন এবং দেখুন। Use.ru_nivcsw এর মান বেড়েছে কি না।


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