2010-04-26 12 views
9

मेरे पास एक एम्बेडेड लिनक्स सिस्टम है जो एटमेल AT91SAM9260EK बोर्ड पर चल रहा है जिस पर मेरे पास रीयल-टाइम प्राथमिकता पर दो प्रक्रियाएं चल रही हैं। एक प्रबंधक प्रक्रिया समय-समय पर कार्यकर्ता प्रक्रिया के स्वास्थ्य की जांच के लिए POSIX संदेश कतारों का उपयोग करके एक कार्यकर्ता प्रक्रिया "पिंग्स" करती है। आमतौर पर राउंड-ट्रिप पिंग लगभग 1ms लेता है, लेकिन कभी-कभी इसमें अधिक समय लगता है - लगभग 800ms। उच्च प्राथमिकता पर चलने वाली कोई अन्य प्रक्रिया नहीं है।एम्बेडेड लिनक्स सिस्टम में विलंबता समस्याएं (स्टाल) ढूंढना

ऐसा प्रतीत होता है कि स्टाल लॉगिंग (syslog) से संबंधित हो सकता है। अगर मैं लॉगिंग बंद करना बंद कर देता हूं तो समस्या दूर हो जाती है। हालांकि लॉग फ़ाइल जेएफएफएस 2 या एनएफएस पर है तो इससे कोई फर्क नहीं पड़ता। "डिस्क" पर कोई अन्य प्रक्रियाएं लिख रही हैं - बस syslog।

मुझे ये पता लगाने में सहायता के लिए कौन से टूल्स उपलब्ध हैं कि ये स्टॉल क्यों हो रहे हैं? मैं latencytop से अवगत हूं और इसका उपयोग करूँगा। क्या कुछ अन्य उपकरण हैं जो अधिक उपयोगी हो सकते हैं?

कुछ विवरण:

  • कर्नेल संस्करण: 2.6.32.8
  • libc (syslog कार्यों): uclibc 0.9.30.1
  • syslog: बिजीबॉक्स 1.15.2
  • कोई स्वैप स्पेस कॉन्फ़िगर किया गया [जोड़ा संपादित करें] में
  • जड़ फाइल सिस्टम tmpfs पर है (initramfs से लोड) [संपादित करें में जोड़ा]
+0

एलटीटीएनजी अब एक विकल्प है, जैसा कि यहां बताया गया है: http://lttng.org/blog/2015/02/04/web-request-latency-root-cause/ – camh

उत्तर

2

समस्या है (जैसा आपने कहा) syslogd। जबकि आपकी प्रक्रिया आरटी प्राथमिकता पर चल रही है, syslogd नहीं है। इसके अतिरिक्त, syslogd अपने ढेर को लॉक नहीं करता है और कर्नेल द्वारा (और होगा) को विशेष रूप से बहुत कम 'ग्राहकों' के साथ निकाल दिया जा सकता है।

क्या आप की कोशिश कर सकते है:

  • एक प्राथमिकता कतार प्रबंधन करने के लिए एक और धागा शुरू, कि धागा तंत्र लॉग को बात की है। लॉगिंग तब लॉक प्राप्त कर लेगी और सूची में कुछ डालने लगेगी। केवल दो ग्राहकों को देखते हुए, आपको म्यूटेक्स प्राप्त करने में काफी समय नहीं लगाया जाना चाहिए।

  • syslog का उपयोग नहीं करते, अपना स्वयं का लॉगिंग लागू करें (मूल रूप से पहला सुझाव, कम से कम syslog से बात करना)।

मुझे एक ही समस्या थी और इसे ठीक करने का मेरा पहला प्रयास अपने ढेर को लॉक करने के लिए syslogd को संशोधित करना था। वह एक आपदा थी। मैंने फिर rsyslogd की कोशिश की, जिसने कुछ सुधार किया लेकिन मुझे अभी भी यादृच्छिक विलंबता चोटियां मिलीं। मैंने प्राथमिकता कतार का उपयोग करके अपनी खुद की लॉगिंग को लागू करने में मदद की ताकि यह सुनिश्चित किया जा सके कि अधिक महत्वपूर्ण संदेश वास्तव में पहले लिखे गए थे।

नोट, अगर आप स्वैप का उपयोग नहीं कर रहे हैं (बिल्कुल), तो इसे ठीक करने का सबसे छोटा रास्ता शायद आपके स्वयं के लॉगिंग को लागू कर रहा है।

+0

स्वैप का उपयोग नहीं कर रहा है। इसके अलावा, rootfs एक tmpfs (initramfs) है, इसलिए प्रोग्राम टेक्स्ट (व्यस्त बॉक्स) रैम से पेज किया जाएगा। – camh

+0

@camh - मुझे आपकी समस्या को हल करने के लिए और सुझाव देने से नफरत है, लेकिन उस समय इसकी जांच करने के लिए, आप अपना लॉगिंग लागू कर सकते थे। –

+0

मुझे नहीं लगता कि समस्या स्वयं syslog के साथ है, लेकिन कहीं कर्नेल में है।Busybox syslog बहुत सरल है, और पुन: कार्यान्वित करना जो बहुत अधिक भिन्न नहीं होता है, क्योंकि मुझे एकाधिक अनुप्रयोगों से लॉग को एक घूर्णन लॉग (आकार के आधार पर) में एकत्रित करने की क्षमता की आवश्यकता होती है। इसके अलावा, मुझे यह जानना है कि यह क्यों रोक रहा है। मैं इसे मैदान में वापस नहीं आ सकता। आपके उत्तर के लिए धन्यवाद। – camh

संबंधित मुद्दे