কোন কার্যটি লিনাক্সে প্রচুর প্রসঙ্গের সুইচ তৈরি করছে তা সন্ধান করুন


11

ভিএমস্ট্যাট অনুসারে, আমার লিনাক্স সার্ভার (2xCore2 ডুও 2.5 গিগাহার্টজ) প্রতি সেকেন্ডে প্রায় 20k কনটেক্সট স্যুইচ করে চলেছে।

# vmstat 3
procs -----------memory----------  ---swap-- -----io----  -system-- ----cpu----
 r  b   swpd   free   buff  cache    si   so    bi    bo   in    cs us sy id wa
 2  0   7292 249472  82340 2291972    0    0     0     0    0     0  7 13 79  0
 0  0   7292 251808  82344 2291968    0    0     0   184   24 20090  1  1 99  0
 0  0   7292 251876  82344 2291968    0    0     0    83   17 20157  1  0 99  0
 0  0   7292 251876  82344 2291968    0    0     0    73   12 20116  1  0 99  0

... তবে uptimeছোট লোড দেখায়: load average: 0.01, 0.02, 0.01এবং topউচ্চ% সিপিইউ ব্যবহারের সাথে কোনও প্রক্রিয়া দেখায় না।

Context প্রসঙ্গের স্যুইচগুলি ঠিক কীভাবে উত্পন্ন করছে তা আমি কীভাবে আবিষ্কার করব? কোন প্রক্রিয়া / থ্রেড?

আমি pidstatআউটপুট বিশ্লেষণ করার চেষ্টা করেছি :

# pidstat -w 10 1

12:39:13          PID   cswch/s nvcswch/s  Command
12:39:23            1      0.20      0.00  init
12:39:23            4      0.20      0.00  ksoftirqd/0
12:39:23            7      1.60      0.00  events/0
12:39:23            8      1.50      0.00  events/1
12:39:23           89      0.50      0.00  kblockd/0
12:39:23           90      0.30      0.00  kblockd/1
12:39:23          995      0.40      0.00  kirqd
12:39:23          997      0.60      0.00  kjournald
12:39:23         1146      0.20      0.00  svscan
12:39:23         2162      5.00      0.00  kjournald
12:39:23         2526      0.20      2.00  postgres
12:39:23         2530      1.00      0.30  postgres
12:39:23         2534      5.00      3.20  postgres
12:39:23         2536      1.40      1.70  postgres
12:39:23        12061     10.59      0.90  postgres
12:39:23        14442      1.50      2.20  postgres
12:39:23        15416      0.20      0.00  monitor
12:39:23        17289      0.10      0.00  syslogd
12:39:23        21776      0.40      0.30  postgres
12:39:23        23638      0.10      0.00  screen
12:39:23        25153      1.00      0.00  sshd
12:39:23        25185     86.61      0.00  daemon1
12:39:23        25190     12.19     35.86  postgres
12:39:23        25295      2.00      0.00  screen
12:39:23        25743      9.99      0.00  daemon2
12:39:23        25747      1.10      3.00  postgres
12:39:23        26968      5.09      0.80  postgres
12:39:23        26969      5.00      0.00  postgres
12:39:23        26970      1.10      0.20  postgres
12:39:23        26971     17.98      1.80  postgres
12:39:23        27607      0.90      0.40  postgres
12:39:23        29338      4.30      0.00  screen
12:39:23        31247      4.10     23.58  postgres
12:39:23        31249     82.92     34.77  postgres
12:39:23        31484      0.20      0.00  pdflush
12:39:23        32097      0.10      0.00  pidstat

দেখে মনে হচ্ছে কিছু পোস্টগ্র্যাস্কল টাস্ক> 10 সেকেন্ডে প্রতি সেকেন্ডে সুইচ করে তবে এটি সমস্তভাবে 20 কে পর্যন্ত সমান হয় না।

কোনও ধারণার উত্তরের জন্য আরও গভীর কীভাবে খনন করা যায়?


পোস্টগ্রের বিষয়টি হ'ল এগুলি হ'ল সম্পূর্ণ আলাদা প্রোগ্রাম different
গোপোই

উত্তর:


5

বেশ, বেশ আকর্ষণীয় কেস। পর্যবেক্ষণ করার চেষ্টা করুন watch -tdn1 cat /proc/interrupts। আপনি কি সেখানে কোনও মূল্যবান পরিবর্তন দেখতে পাচ্ছেন?


"স্থানীয় টাইমার বিঘ্ন" প্রতিটি সিপিইউ কোরে কয়েকশ (200-800) বিঘ্ন তৈরি করে। এর অর্থ কী হতে পারে? এছাড়াও eth0-rx / tx সেই সার্ভারে ট্র্যাফিকের কারণে কিছু বিঘ্ন সৃষ্টি করছে, তবে এটি খুব বেশি নয়।
গ্রিজাক্স

"ফাংশন কল বাধা" কীভাবে?
কবিজ

10

ব্যবহার করার চেষ্টা করুন

pidstat -wt

'T' বিকল্পটি থ্রেডগুলিও প্রদর্শন করে। এটি এমন একটি থ্রেড হতে পারে যা প্রসঙ্গে স্যুইচ করছে।


1
pidstat -wt চলমান সাজানো -n -k4 ভাল হয়।
ইসমাইল ভ্যাকো

2

আরও নতুন কার্নেল সংস্করণে

sudo perf record -e context-switches -a  # record the events

# then ctrl+c

sudo perf report # inspect the result

এটি আপনাকে প্রসঙ্গ-স্যুইচ ইভেন্টগুলি সম্পর্কে ঠিক ফলাফল দেবে।

এবং আপনি অ্যাপেন্ড "-জি" পতাকাগুলি দ্বারা প্রাসঙ্গিক-স্যুইচগুলির কারণ খুঁজে পেতে পারেন (প্রতীক তথ্য দ্বারা নির্ধারিত পাঠযোগ্য ফলাফল)

sudo perf record -e context-switches -a -g

1

প্রসঙ্গ সুইচটি স্বাভাবিক। একটি প্রক্রিয়া বেশিরভাগ সময় নির্ধারিত হয়, যদি এটি শেষ করে (বা এটি রিসোর্সের প্রয়োজনের কারণে বিরাম ঘটে) এটির কী কী প্রসেসরকে যেতে দেওয়া যায়।

এতে বলা হয়েছে যে কতগুলি প্রসঙ্গের স্যুইচ হয়েছে তা গণনা করতে (এটি একটি স্ট্যাকওভারফো.কম উত্তর হয়ে যায়) প্রক্রিয়া সারণিতে লেখার জন্য অভ্যন্তরীণ কার্নেল সময়সূচী () কমান্ড লাগবে। আপনি যদি নিজের কার্নেলটি প্রোগ্রাম করেন তবে এমন কোনও জিনিস নেই আপনি দেখতে সক্ষম হবেন তবে এটি বেশ কঠিন।


1
আমরা হব. আমি জানি কনটেক্সট স্যুইচ কী এবং সিস্টেমের কার্য সম্পাদনের জন্য এর কী কী প্রভাব ফেলে। আমার লিনাক্সে কোন প্রসেসের সুইচগুলি করা হয় তা পরিমাপ করার জন্য আমার কেবল একটি উপায় প্রয়োজন। আমি ইতিমধ্যে / proc / * / পরিসংখ্যান (স্বেচ্ছাসেবক_সেক্সট_ইউইচস)
গ্রাজ্যাকস

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