आरएचईएल 6 बनाम आरएचईएल 5 पर उच्च सीपीयू उपयोग का पृथक कारण


9

मैं वर्तमान में आरएचईएल 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: मैंने एक सरल परीक्षण से दूसरे प्रश्न के लिए कुछ परिणाम जोड़े जो अभी भी समस्या को प्रदर्शित करता है।


ऐसा लगता है जैसे RedHat ने इसे GLibC को इंगित किया है। क्या आपने selectवहाँ के बारे में कोड-परिवर्तन की तलाश की थी?
निल्स

ग्लिबेक श्रेणीकरण मेरे द्वारा किया गया था जब मैंने मूल रूप से बगज़िला प्रस्तुत किया था।
डेव जोहान्स

मुझे उचित लगता है (एक कर्नेल समस्या के बजाय)। क्या आप कई समवर्ती नींद के साथ समान परिणाम प्राप्त करते हैं? Ubuntu 11.10, आर्क लिनक्स और RHEL6 से glibc- संस्करण क्या हैं?
नेल्स

हां, पोल और सो दोनों के साथ एक ही परिणाम 1 एमएस के लिए सो रहा है। जहाँ तक glibc, RHEL 5 2.5 है, RHEL 6 2.12, Ubuntu 11.10 2.13 है, और मेरा मानना ​​है कि चाप 2.15 है, लेकिन मुझे जाँच करनी होगी।
डेव जोहान्स

ऐसा लगता है कि आपको इस मूल प्रश्न का उत्तर खुद ही मिल गया। यहाँ उत्तर के रूप में पोस्ट करें और इसके लिए अपने अंक अर्जित करें!
नेल्स

जवाबों:


1

तुम पूछो:

क्या कुछ परीक्षण मैं उनमें से प्रत्येक के साथ चला सकते हैं यदि यह उच्च सीपीयू उपयोग सीपीयू उपयोग के लेखांकन में एक अंतर है जो इसे कृत्रिम रूप से उच्च बना रहा है? या यदि वास्तविक सीपीयू चक्रों को सीएफएस द्वारा चुराया जा रहा है?

यदि आप अपने test_select_smallप्रोग्राम को चला रहे हैं , तो आप सीपीयू बेंचमार्क कैसे चलाते हैं , और देखें कि होस्ट ओएस संस्करण के आधार पर इसका प्रदर्शन बदलता है या नहीं?

बहुत सारे विकल्प हैं: क्लासिक सलाह हमेशा "कुछ ऐसा उपयोग करें जो आपके पास लोड के प्रकार का प्रतिनिधित्व करता है"। लेकिन शांत बच्चों ने हमेशा सिर्फ पोवेरी का इस्तेमाल किया है


1
मुझे लगता है कि यह वह विचार था जिसका मैं उल्लेख कर रहा था। क्या आपके पास ऐसे बेंचमार्क ऐप की सिफारिश है जो लगातार समय देने वाले परिणाम देता है जो मैं उपयोग कर सकता हूं?
डेव जोहानसन

@DaveJohansen - povray पर जोड़ा गया नोट
ckhan

दुर्भाग्य से, जब तक यह आरएचईएल के साथ नहीं आता है, इन प्रणालियों पर किसी भी सॉफ्टवेयर को प्राप्त करने में कम से कम एक या दो सप्ताह लग सकते हैं। मैंने अपना थोड़ा परीक्षण कार्यक्रम बनाया और परिणामों पर चर्चा करने के लिए एक नया प्रश्न बनाया ।
डेव जोहान्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.