मैं वर्तमान में आरएचईएल 5 से आरएचईएल 6 तक हमारे सिस्टम को स्थानांतरित करना चाहता हूं, लेकिन मैं आरएचईएल 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;
}
आरएचईएल 5 मशीन पर यह 0% सीपीयू के उपयोग पर रहेगा, लेकिन आरएचईएल 6 स्थापित के साथ एक ही हार्डवेयर पर यह लगभग 0.5% सीपीयू का उपयोग करेगा, इसलिए जब 30 से 50 प्रोग्राम select
एक नींद का उपयोग करने के लिए चल रहे होते हैं, तो यह खाता है बड़ी मात्रा में सीपीयू अनावश्यक रूप से।
मैंने एक Bugzilla खोला और मैंने OProfile को चलाने की कोशिश की और यह केवल आवेदन के लिए मुख्य रूप से 100% दिखाता है और कर्नेल को देखते समय 99% से अधिक प्रदूषित करता है (मेरे पास मेरे विकल्प में निष्क्रिय = पोल सेट है ताकि सब कुछ कैप्चर किया जा सके)।
किसी भी अन्य विचार जो मैं कोशिश कर सकता हूं और उच्च CPU उपयोग का कारण क्या है को अलग करने के लिए?
अद्यतन: मैं सही उपकरण पाया और निम्नलिखित उत्पादन मिला:
# 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
ऐसा प्रतीत होता है कि उच्च CPU उपयोग अनुसूचक से है। मैंने इनमें से 100 को एक साथ किक करने के लिए निम्नलिखित बैश स्क्रिप्ट का उपयोग किया:
#!/bin/bash
for i in {1..100}
do
./test_select_small &
done
आरएचईएल 5 पर सीपीयू का उपयोग 0% के करीब रहता है, लेकिन आरएचईएल 6 पर उपयोगकर्ता और एसईएस दोनों में सीपीयू के उपयोग की गैर-तुच्छ मात्रा है। इस के सच्चे स्रोत को ट्रैक करने और उम्मीद को ठीक करने के बारे में कोई विचार?
मैंने एक वर्तमान आर्क लिनक्स बिल्ड और उबंटू 11.10 पर भी इस परीक्षण की कोशिश की और समान व्यवहार देखा, इसलिए यह कुछ प्रकार का कर्नेल मुद्दा है, न कि केवल एक आरएचईएल मुद्दा।
UPDATE2: मैं इसे ऊपर लाने के लिए थोड़ा संकोच करता हूं क्योंकि मुझे पता है कि यह एक बहुत बड़ी बहस है, लेकिन मैंने Ubuntu 11.10 पर BFS पैच के साथ एक कर्नेल आज़माया और यह उसी उच्च सिस्टम CPU उपयोग (उपयोगकर्ता cpu उपयोग के बारे में नहीं लगता था) वही)।
क्या कुछ परीक्षण मैं उनमें से प्रत्येक के साथ चला सकते हैं यदि यह उच्च सीपीयू उपयोग सीपीयू उपयोग के लेखांकन में एक अंतर है जो इसे कृत्रिम रूप से उच्च बना रहा है? या यदि वास्तविक सीपीयू चक्रों को सीएफएस द्वारा चुराया जा रहा है?
UPDATE3: इस प्रश्न से जुड़े विश्लेषण से प्रतीत होता है कि यह अनुसूचक से संबंधित कुछ है, इसलिए मैंने परिणामों पर चर्चा करने के लिए एक नया प्रश्न बनाया ।
UPDATE4: मैंने अन्य प्रश्न में कुछ और जानकारी जोड़ी ।
UPDATE5: मैंने एक सरल परीक्षण से दूसरे प्रश्न के लिए कुछ परिणाम जोड़े जो अभी भी समस्या को प्रदर्शित करता है।
select
वहाँ के बारे में कोड-परिवर्तन की तलाश की थी?