আমি বর্তমানে আমাদের সিস্টেমটি RHEL 5 থেকে RHEL 6 এ স্থানান্তরিত করতে চাইছি, তবে আমি RHEL 6 মেশিনে অপ্রত্যাশিতভাবে উচ্চ সিপিইউ ব্যবহার সহ একটি ছিনতাই করেছি। এটি উপস্থিত হতে পারে যে অন্তত কিছুটা ক্ষেত্রে select
বাধাদানযোগ্য ঘুম ব্যবহারের কারণে এটি হতে পারে । আচরণের দেখায় এমন একটি সাধারণ উদাহরণ এখানে:
#include <sys/select.h>
int main()
{
timeval ts;
for (unsigned int ii=0; ii<10000; ++ii) {
ts.tv_sec = 0;
ts.tv_usec = 1000;
select(0, 0, 0, 0, &ts);
}
return 0;
}
একটি RHEL 5 মেশিনে এটি 0% সিপিইউ ব্যবহারে থাকবে, তবে আরএইচইএল 6 ইনস্টল করা একই হার্ডওয়্যারটিতে এটি সিপিইউয়ের প্রায় 0.5% ব্যবহার করবে, সুতরাং যখন 30 থেকে 50 টি প্রোগ্রাম select
ঘুম সঞ্চালনের জন্য চলছে তখন এটি খায় অকারণে সিপিইউয়ের বিশাল পরিমাণ।
আমি একটি বুগজিলা খুলেছি এবং আমি ওপ্রোফিল চালানোর চেষ্টা করেছি এবং কার্নেলের দিকে তাকানোর সময় এটি কেবল অ্যাপ্লিকেশনটির জন্য মূলত 100% এবং পোল_ইডলগুলিতে মাত্র 99% এর বেশি দেখায় (আমার নিষ্ক্রিয় বিকল্পগুলিতে আমার কাছে নিষ্ক্রিয় = পোল সেট রয়েছে যাতে সমস্ত কিছু ক্যাপচার করা যায়)।
উচ্চতর সিপিইউ ব্যবহারের কারণটি কী এবং আমি আলাদা করার জন্য আমি কী করতে পারি তার অন্য কোনও ধারণা?
আপডেট: আমি পারফেক্ট সরঞ্জামটি পেয়েছি এবং নিম্নলিখিত আউটপুট পেয়েছি:
# Events: 23K cycles
#
# Overhead Command Shared Object Symbol
# ........ ....... ................... ....................................
#
13.11% test_select_sma [kernel.kallsyms] [k] find_busiest_group
5.88% test_select_sma [kernel.kallsyms] [k] schedule
5.00% test_select_sma [kernel.kallsyms] [k] system_call
3.77% test_select_sma [kernel.kallsyms] [k] copy_to_user
3.39% test_select_sma [kernel.kallsyms] [k] update_curr
3.22% test_select_sma ld-2.12.so [.] _dl_sysinfo_int80
2.83% test_select_sma [kernel.kallsyms] [k] native_sched_clock
2.72% test_select_sma [kernel.kallsyms] [k] find_next_bit
2.69% test_select_sma [kernel.kallsyms] [k] cpumask_next_and
2.58% test_select_sma [kernel.kallsyms] [k] native_write_msr_safe
2.47% test_select_sma [kernel.kallsyms] [k] sched_clock_local
2.39% test_select_sma [kernel.kallsyms] [k] read_tsc
2.26% test_select_sma [kernel.kallsyms] [k] do_select
2.13% test_select_sma [kernel.kallsyms] [k] restore_nocheck
দেখা যাচ্ছে যে সিপিইউর উচ্চতর ব্যবহারটি শিডিয়ুলারের। আমি একই সাথে এই 100 টি কিক করতে নীচের ব্যাশ স্ক্রিপ্টটিও ব্যবহার করেছি:
#!/bin/bash
for i in {1..100}
do
./test_select_small &
done
RHEL 5 এ সিপিইউ ব্যবহার 0% এর কাছাকাছি থাকে, তবে RHEL 6 এ ব্যবহারকারী এবং সিস্টে উভয়ই একটি অপ্রয়োজনীয় সিপিইউ ব্যবহারের পরিমাণ থাকে। এর আসল উত্সটি কীভাবে ট্র্যাক করা যায় এবং আশা করি এটি ঠিক করা যায় সে সম্পর্কে কোনও ধারণা?
আমি বর্তমান আর্ট লিনাক্স বিল্ড এবং উবুন্টু ১১.১০ এও এই পরীক্ষাটি ব্যবহার করে দেখেছি এবং একইরকম আচরণ দেখেছি, তাই এটি কেবল কোনও আরএইচএল ইস্যু নয়, কিছু ধরণের কার্নেল সমস্যা বলে মনে হয়।
আপডেট 2: আমি এটি আনতে কিছুটা সংকোচ করেছি কারণ আমি জানি যে এটি একটি বিশাল বিতর্ক, তবে আমি উবুন্টু ১১.১০-তে বিএফএস প্যাচগুলি দিয়ে একটি কার্নেল চেষ্টা করেছিলাম এবং এটি একই উচ্চ সিস্টেমের সিপিইউ ব্যবহারটি দেখায় নি (ব্যবহারকারী সিপিইউ ব্যবহার সম্পর্কে মনে হয়েছিল) একই).
এই উচ্চ সিপিইউ ব্যবহারটি সিপিইউ ব্যবহারের অ্যাকাউন্টিংয়ের ক্ষেত্রে কেবলমাত্র একটি পার্থক্য যা এটি কৃত্রিমভাবে উচ্চ দেখায়? বা সিএফএসের মাধ্যমে যদি আসল সিপিইউ চক্রটি চুরি হয়ে যায়?
আপডেট 3: এই প্রশ্নের সাথে জড়িত বিশ্লেষণটি সূচিদাতার সাথে সম্পর্কিত এমন কিছু বোঝায় যে , ফলাফলগুলি নিয়ে আলোচনা করার জন্য আমি একটি নতুন প্রশ্ন তৈরি করেছি ।
আপডেট: আমি অন্যান্য প্রশ্নের সাথে আরও কিছু তথ্য যুক্ত করেছি ।
আপডেট 5: আমি একটি সহজ পরীক্ষা থেকে অন্য প্রশ্নের সাথে কিছু ফলাফল যুক্ত করেছি যা এখনও বিষয়টি দেখায়।
select
সেখানে সম্পর্কিত কোড-পরিবর্তনগুলি সন্ধান করেছেন ?