2009-11-04 12 views
10

विंडोज 7 अल्टीमेट x64 पर मैंने लिखा है कि एक यूडीपी मल्टीकास्ट सर्वर का परीक्षण करते समय, मैं सबसे उत्सुक चीज में आया। पृष्ठभूमि में foobar2000 के साथ संगीत बजाना महत्वपूर्ण रूप से में सुधार हुआ सर्वर की ट्रांसमिशन दर अभी तक मामूली पैकेट हानि हुई है। संगीत बंद करने से तुरंत ट्रांसमिशन दर को स्वीकार्य स्तर से नीचे गिरा दिया गया लेकिन 0 पैकेट नुकसान भी हुआ। (मेरे पास एक क्लाइंट एप्लिकेशन है जो सर्वर से बात करता है और अनजान पैकेट की रिपोर्ट करता है)उच्च प्रदर्शन नेटवर्क अनुप्रयोगों के सर्वोत्तम अभ्यास

मुझे मीडिया और नेटवर्क अनुप्रयोगों को अच्छी तरह से खेलने के लिए Vista (और ऊपर) थ्रॉटलिंग व्यवहार से अवगत है, लेकिन मुझे निश्चित रूप से यह खेलने की उम्मीद नहीं थी संगीत नेटवर्क प्रदर्शन में सुधार करेगा, न ही यह खराब नेटवर्क प्रदर्शन को बंद कर देगा।

मेरे सर्वर एप्लिकेशन में कोड स्टैंडपॉइंट से मैं इसके बारे में क्या कर सकता हूं ताकि यह लगातार चल रहा हो कि संगीत बजाना या Vista और ऊपर नहीं? मैं निश्चित रूप से स्वीकार्य संचरण दर प्राप्त करने के लिए अपने रजिस्ट्री को कैसे बदल सकता हूं, इसके बारे में अपने सभी ग्राहकों को सूचित करना चाहता हूं, और स्वीकार्य संचरण दर प्राप्त करने के लिए उन्हें "संगीत चलाने" से बचने के लिए भी पसंद करना चाहूंगा। आवेदन को मेरी राय में "बस काम" करना चाहिए।

मुझे लगता है कि समाधान प्रक्रिया प्राथमिकताओं, एमएमसीएसएस, या संभवतः कुछ अन्य अस्पष्ट विंडोज एपीआई कॉल के साथ कुछ सही चीज (टीएम) करने के लिए समाधान शामिल है।

इसके अलावा, खेद है कि एक पुन: उत्पन्न परीक्षण केस बनाना एक गैर-मामूली काम है। थ्रॉटलिंग व्यवहार तब होता है जब भौतिक एनआईसी के लिए ड्राइवर सक्रिय रूप से काम कर रहा है और लूपबैक इंटरफ़ेस का उपयोग करके पुन: उत्पन्न नहीं किया जा सकता है। परीक्षण करने के लिए एक ग्राहक कार्यान्वयन, एक सर्वर कार्यान्वयन, और भौतिक नेटवर्क हार्डवेयर की आवश्यकता होगी।

+0

जब आप कहते हैं कि 'संगीत बजाना' है, तो क्या आपका मतलब है कि यह आपके एचडी का संगीत बजा रहा है और साउंडकार्ड का उपयोग कर रहा है? या यह एक ही नेटवर्क कार्ड के माध्यम से स्ट्रीमिंग है? – Toad

+0

@reinier: हां, foobar2000 धीरे-धीरे एचडी से डेटा लोड कर रहा है और यूएसबी 2.0 के माध्यम से मेरे बाहरी ऑडियो इंटरफेस में ऑडियो स्ट्रीमिंग कर रहा है। –

उत्तर

3

जो आप देखते हैं वह आपके मीडिया प्लेयर की घड़ी के रिज़ॉल्यूशन को 1 एमएस तक सेट करने का दुष्प्रभाव है।

यह खेलने के दौरान ही होता है

पार्श्व प्रभाव होता है - अपने ऐप्लिकेशन छोटे timeslices है और यह आपके एप्लिकेशन imporves क्योंकि आप शायद और लंबे समय तक timeslices के साथ अपने ऐप से चोरी CPU के बहुत था - अब के लिए पहर।

इसका परीक्षण करने के लिए आप बस अपने ऐप के भीतर टाइमर रिज़ॉल्यूशन 1ms पर सेट कर सकते हैं और प्रदर्शन की तुलना मीडिया प्लेइंग के बिना कर सकते हैं।

ऐसा होना चाहिए जैसे कि कोई क्लॉसर सेटिंग नहीं बल्कि मीडिया के साथ।

0

Foobar को विभिन्न लोगों द्वारा लिखे गए कई प्लगइन्स मिल गए। ये आपके मुद्दे का कारण हो सकता है। मैं आपको वास्तविक कारण के करीब आने का प्रस्ताव करता हूं। प्लगइन अक्षम होने पर प्रत्येक बार एक परीक्षण करके प्रदर्शन प्लगइन को बंद करने का प्रयास करें।

आशा है कि विचार मदद करेगा।

+0

मुझे अत्यधिक संदेह है कि समस्या foobar2000 विशिष्ट है। मैं इस मुद्दे का निदान करने के लिए अन्य मीडिया प्लेयरों की कोशिश करूंगा। यह * यूएसबी 2.0 ऑडियो इंटरफ़ेस का उपयोग करने के लिए कुछ करने के लिए हो सकता है। मैं ऑनबोर्ड साउंड कार्ड के साथ कुछ परीक्षण चलाऊंगा। –

0

यह टीएसपी/आईपी प्रबंधन थ्रूपुट की तरह लगता है जो इसके आदिम एल्गोरिदम पर आधारित है। यहां पर श्वेत पत्र अधिक पृष्ठभूमि देना चाहिए। http://www.asperasoft.com/?gclid=CICSzMqD8Z0CFShGagod_ltSMQ उनका उत्पाद एक यूडीपी प्रोटोकॉल है जो बहुत अच्छी तरह से काम करता है।

+0

मुझे उल्लेख करना चाहिए कि मैं एक ही आवेदन के भीतर टीसीपी और यूडीपी प्रोटोकॉल दोनों का उपयोग करता हूं। टीसीपी केवल नियंत्रण जानकारी और सभी ग्राहकों के समन्वय के लिए है; यह यहां बाधा नहीं होनी चाहिए। मैं डेटा हस्तांतरण के लिए पूरी तरह से यूडीपी का उपयोग करता हूं और पैकेट को 1500 बाइट्स के नीचे रखता हूं। मैं सभी यूडीपी का उपयोग कर रहा था लेकिन गंभीर सिंक्रनाइज़ेशन मुद्दों में भाग गया और टीसीपी व्हील का पुन: आविष्कार करने वाला था इसलिए मैंने कहा कि क्यों न सिर्फ टीसीपी का उपयोग करें। –

+0

टीसीपी/आईपी पहली जगह है जहां मैं आपकी समस्या की तलाश करूंगा। –

+0

@ माइक: क्या आपको लगता है कि सर्वर पक्ष पर यूडीपी पैकेट नुकसान किसी भी तरह से टीसीपी संचार से संबंधित है? टीसीपी का उपयोग केवल उन सभी ग्राहकों को सूचित करने के लिए किया जाता है जो डेटा का अगला बैच यूडीपी पर भेजे जाने वाले हैं। एक 'सेक्टर पूर्ण' संदेश भी है जो सर्वर से थोड़ी देर के बाद भेजा जाता है। एक यूडीपी बैच हस्तांतरण होने पर, एप्लिकेशन द्वारा स्थापित किए जाने वाले सामान्य टीसीपी ट्रैफिक प्रवाह को छोड़कर एप्लिकेशन द्वारा आगे और आगे भेजे गए कोई भी टीसीपी संदेश नहीं होते हैं। –

2

नेटवर्क प्रोटोकॉल से संबंधित कोड लिखने के बाद से कई सालों रहे हैं, लेकिन मैं अनुमान लगाऊंगा।

मुझे संदेह है कि यह throughput and latency का मुद्दा है। संगीत बजाना I/O विवाद शुरू कर रहा है और पैकेट संचारित करने में विलंबता जोड़ रहा है। हालांकि, अतिरिक्त विलंबता संभावित रूप से पैकेट को कतार में लाने की संभावना है और इस प्रकार थ्रूपुट बढ़ रहा है।

अपने कोड में इसे संबोधित करने के लिए, आप अपने बैच में पैकेट भेजने का प्रयास कर सकते हैं। मुझे लगता है कि डेटा ट्रांसमिशन के लिए सिस्टम में प्रत्येक पैकेट भेज रहा है क्योंकि डेटा तैयार हो जाता है। एकाधिक पैकेट समूह और उन्हें एक ही समय में सिस्टम में भेजें। यहां तक ​​कि केवल दो या तीन पैकेट का एक समूह नाटकीय अंतर बना सकता है, खासकर यदि आप प्रत्येक सिस्टम कॉल के बीच introducing your own small delay हैं।

मुझे Google पर त्वरित खोज से कोई भी प्रासंगिक प्रासंगिक लिंक नहीं मिल सका। हालांकि, आप अवधारणा को this discussion of network tuning for Linux या this FAQ में देख सकते हैं जो थ्रूपुट को बेहतर बनाने के लिए बैचिंग जैसी तकनीकों का वर्णन करता है।

+0

मैं पहले से ही 1,024 समूहों में पैकेट बैच कर रहा हूं। पैकेट प्रत्येक के बारे में 1400 बाइट हैं। मुझे क्लाइंट द्वारा 1,024 में से लगभग 50-60 नकारात्मक रूप से स्वीकृत पैकेट मिलते हैं। जब मैं सर्वर मशीन पर मीडिया प्लेयर को बंद करता हूं, तो एनएके गिनती 0 पर तुरंत गिर जाती है और बेहतर थ्रूपुट प्राप्त होता है। ऐसा लगता है कि सर्वर पैकेट नुकसान के लिए ज़िम्मेदार है। मैं सोच रहा हूं कि सर्वर I से, यदि कुछ भी हो, तो मैं इस I/O विवाद के लिए स्वचालित रूप से समायोजित करने के लिए क्या कर सकता हूं। –

+0

आपकी टिप्पणी आपके प्रश्न के विपरीत इंगित करने लगती है। क्या आप वास्तव में हर 50-100 μs 1024 पैकेट भेजने की कोशिश कर रहे हैं? वह पागल थ्रूपुट है। और वास्तव में समस्या थ्रूपुट या डेटा हानि है? –

+0

ओह नहीं नहीं। 50-100 माइक्रोसॉन्ड विलंब 1024 पैकेट क्षेत्र के भीतर व्यक्तिगत पैकेट भेजने के बीच देरी है। इसके अलावा मुझे विश्वास नहीं है कि मैंने इस प्रश्न में 50-100 माइक्रोसॉन्ड देरी का उल्लेख किया है। क्या आप मेरे SO प्रश्नों का संदर्भ दे रहे हैं? :) –

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