2009-09-18 4 views
5

हमने हाल ही में मल्टीकास्ट भेजने का प्रदर्शन पूरा किया है। खुशी से, जावा और सी ने लगभग समान प्रदर्शन किया क्योंकि हमने विंडोज और सोलारिस पर विभिन्न ट्रैफिक भेजने की दरों का परीक्षण किया था।मल्टीकास्ट प्रदर्शन प्रदर्शन

हालांकि, हमने देखा कि एक मल्टीकास्ट संदेश भेजने का समय बढ़ता है क्योंकि समय बढ़ता है। जितनी बार हम कॉल करते हैं, प्रेषण कॉल को पूरा करने में कम समय लगता है।

एप्लिकेशन हमें कॉलिंग भेजने के बीच कितने समय तक प्रतीक्षा करता है, उसे नियंत्रित करने देता है, नीचे आप समय बढ़ते हुए देखते हैं क्योंकि पैकेट के बीच देरी बढ़ जाती है। 1000 पैकेट/सेकेंड (1 एमएस प्रतीक्षा समय) भेजते समय, कॉल भेजने के लिए केवल 13 माइक्रोसेकंड लगते हैं। 1 पैकेट/सेकेंड (1000 एमएस प्रतीक्षा समय) पर, उस समय 20 माइक्रोसॉन्ड तक बढ़ जाता है।

Wait time (ms)      us to send 
0         8.67 
1         12.97 
10         13.06 
100         18.03 
1000        20.82 
10000        57.20 

हम जावा और सी दोनों और विंडोज और सोलारिस दोनों पर इस घटना को देखते हैं। हम एक इंटेल प्रो 1000 ड्यूल पोर्ट नेटवर्क कार्ड के साथ, डेल 1 9 50 सर्वर पर परीक्षण कर रहे हैं। विशेष रूप से जावा में माइक्रो-बेंचमार्किंग कठिन है, लेकिन हमें नहीं लगता कि यह जेआईटींग या जीसी से संबंधित है।

जावा कोड और कमांड लाइन मैं परीक्षण के लिए उपयोग कर रहा हूँ कर रहे हैं पर: http://www.moneyandsoftware.com/2009/09/18/multicast-send-performance/

उत्तर

2

कुछ सिद्धांतों:

मेरी पहली सोचा कि मैं एक कारक यहां कैशिंग विचार करेगा था - अगर कार्य और मूल्य अभी भी ढेर पर हैं या हाल ही में अल्पकालिक स्मृति में हैं, आप पाते हैं कि यह उन्हें तेज़ी से भेजने में सक्षम है। जैसे-जैसे समय बढ़ता है, यह अभी भी उपलब्ध होने का मौका कम हो जाता है, इसलिए औसत पर अधिक समय लगेगा।

हालांकि, अगर यह मामला था तो मैं ऊपरी सीमा होने की उम्मीद करता हूं ... कुछ बिंदु जिस पर यह हमेशा कैश में होता है।

एक वैकल्पिक तर्क यह है कि आपके ऐप/टेस्ट/प्लेटफॉर्म में समय के साथ मेमोरी रिसाव या कुछ प्रदर्शन गिरावट है। यह भी (यदि यह अस्तित्व में है) का मतलब है कि जितना अधिक आप प्रतीक्षा करेंगे, उतना ही समय में प्रदर्शन को कम करने का समय होगा, और इस प्रकार इसे भेजने में अधिक समय लगेगा।

ALSO - यदि आप उन्हें भेजने के लिए पैकेट के बीच अधिक समय ले रहे हैं - तो आप आईपी टेबल और मैक टेबल दोनों सीखने के समय पते से अधिक हो सकते हैं। यदि इन टेबल/कैश की समयसीमा समाप्त हो गई है, तो उन्हें पैकेट को अग्रेषित करने से पहले उन्हें रिलीज़ करना होगा।

शुभकामनाएं!

+0

इस सिद्धांत को सत्यापित करने के लिए, ओपी को यूनिकास्ट के साथ परीक्षण करना चाहिए और विश्लेषण में एक समान प्रोफ़ाइल दिखाई देनी चाहिए। – Stef

+0

अच्छी तरह से, सिद्धांत में - लेकिन अधिकांश स्विच/राउटर मैंने यूनिकास्ट बनाम मल्टीकास्ट के लिए अलग-अलग टेबल और कैश बनाए रखने के साथ काम किया है। तो वे दोनों एक ही टाइमआउट हो सकते हैं, लेकिन आईआईआरसी वे भी विन्यास योग्य थे ... –

+0

रूटिंग टेबल में टाइमआउट नहीं होगा परिणामस्वरूप समय सारिणी के दौरान सब कुछ एक ही गति है, जबकि सब कुछ धीमा है।लेकिन हम इसे धीरे-धीरे गिरावट देखते हैं क्योंकि हम पैकेट के बीच का समय बढ़ाते हैं। –

1

कॉल करने के लिए कोड को कॉल करने के लिए कोड (शायद अभी भी रजिस्टरों में) के पास कैश किया गया है जब कॉल अभी हुआ था।

+0

यदि सही है, तो आप संचालन के बीच के समय के रूप में किसी भी ऑपरेशन अपग्रेड के प्रदर्शन को देखेंगे। मैंने परीक्षण को एक वर्ग या तन करने के लिए बदल दिया और हम एक समान प्रदर्शन घटाने वक्र देखते हैं। सीपीयू एफ़िनिटी का उपयोग कर रहा है और इसे हल करने के लिए सही तरीके से बचा रहा है? –

3

यह बाधा है कि विशेष मेजबान पर एनआईसी के साथ वालों का एक विरूपण साक्ष्य हो सकता है, विषय पर 29 पश्चिम द्वारा इस लेख की जाँच करें, वे बताएंगे कि कैसे विलंबता, एक e1000 एनआईसी पर 125μs को बढ़ा सकते हैं

http://www.29west.com/docs/THPM/latency-interrupt-coalescing.html

1

आप भेजने के बीच कैसे इंतजार कर रहे हैं? क्या आपने व्यस्त इंतजार करने की कोशिश की है ताकि आप सीपीयू को न छोड़ें?