12

सबसे पहले, पृष्ठभूमि का एक बिट। वितरित संस्करण नियंत्रण प्रणाली (डीवीसीएस) की कई अलग-अलग तुलनाएं हैं जो भंडार के आकार की तुलना करती हैं, या संचालन की बेंचमार्क गति की तुलना करती हैं। मुझे ऐसा कोई भी नहीं मिला है जो विभिन्न डीवीसीएस के नेटवर्क प्रदर्शन को बेंचमार्क करेगा, और विभिन्न प्रोटोकॉल का उपयोग किया जाएगा ... 'क्लोन', 'पुल'/'fetch' या 'push' जैसे नेटवर्क से जुड़े संचालन (कमांड) की गति को मापने के बगल में।नेटवर्क प्रदर्शन को मापने के लिए कैसे करें (नेटवर्क प्रोटोकॉल को बेंचमार्क कैसे करें)

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

यदि संभव हो तो मैं केवल एक कंप्यूटर से जुड़े समाधानों को प्राथमिकता दूंगा। मैं लिनक्स पर काम कर रहे ओपन सोर्स सॉल्यूशंस देखना चाहता हूं। लेकिन मैं अधिक सामान्य उत्तरों का भी स्वागत करता हूं।

पसंदीदा ओएस: लिनक्स
पसंदीदा भाषाओं: सी, पर्ल, खोल स्क्रिप्ट


संभावित माप:

  • बाइट की कुल संख्या सर्वर से स्थानांतरित क्लाइंट और क्लाइंट से सर्वर तक एक से ssion; यह भी प्रोटोकॉल (बैंडविड्थ)
  • राउंड ट्रिप की संख्या एक लेन-देन (कनेक्शन) (प्रतीक्षा अवधि) नेटवर्क आपरेशन की गति (समय यह क्लोन करने के लिए ले जाता है की
  • निर्भरता/की भूमि के ऊपर मापने के लिए इस्तेमाल किया जा सकता है पुल/पुश) नेटवर्क बैंडविड्थ से, और नेटवर्क विलंबता (पिंग समय) से

ऐसे माप कैसे करें (ऐसे मानक)?


जोड़ा 02-06-2009:
एक सरल बेंचमार्क (माप) दौर यात्राएं की time आदेश के एक नेटवर्क संस्करण, यानी आदेश जो रन मुझे स्थानांतरित बाइट्स की संख्या देना होगा, और संख्या होगी/दिए गए आदेश के निष्पादन के दौरान नेटवर्क कनेक्शन।


जोड़ा गया 2009/09/06:

$ ntime git clone -q git://git.example.com/repo.git 
... 
bytes sent: nnn (nn kiB), bytes received: nnn (nn kiB), avg: nn.nn KB/s 
nn reads, nn writes 

नोट यह है कि:
उदाहरणtime आदेश के नेटवर्क संस्करण के समाधान के ऊपर उल्लेख किया है के लिए काल्पनिक उत्पादन की तरह निम्नलिखित दिखाई दे सकता है केवल एक उदाहरण आउटपुट, जानकारी की तरह जानकारी देना जो शायद प्राप्त करना चाहते हैं।


जोड़ा गया 2009/09/06:
यह मैं क्या परीक्षण नेटवर्किंग प्रोटोकॉल के लिए dummynet, उपकरण (मूल) का उपयोग कर प्राप्त किया जा सकता चाहते हैं में से कुछ की तरह लग रहा ...

+0

आप पूछ रहे हैं, कैसे आदेश एक मनमाना नेटवर्क कार्यक्रम के लिए इस तरह के मानक के साथ आने के लिए आवश्यक डेटा प्राप्त करने के लिए? – none

+0

हां, मैं कम से कम कुल बाइट्स को स्थानांतरित करना चाहता हूं और शायद किसी दिए गए कमांड के लिए पढ़ने के लिए पढ़ने से परिवर्तनों की संख्या, सीपीयू और मेमोरी के लिए समय/समय, और I/O के लिए सिस्टमटैप iotimes जैसे कुछ प्राप्त करना चाहते हैं। –

+0

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

उत्तर

15

हैं मैं आपको सही ढंग से समझ रहा हूं, आप नेटवर्क-विशिष्ट सिस्टम कॉल के लिए मूल रूप से Linux 'strace' (Introduction) में रुचि रखते हैं?

संभावित रूप से नेटवर्क अनुप्रयोगों (यानी 'ntrace') के लिए एक प्रोफाइलर और डीबगर का संयोजन, विभिन्न वैकल्पिक मापों का विस्तृत विश्लेषण प्रदान करता है?

ptrace का उपयोग करना, यह डेटा है कि आप में रुचि रखते हैं के सबसे प्राप्त करने के लिए संभव हो जाना चाहिए।

Windows पर, आप शायद क्रम अवरोधन करने में detours में देखना चाहता हूँ/निरीक्षण/बेंचमार्किंग उद्देश्यों के लिए विंसॉक एपीआई कॉल को रीडायरेक्ट करें।

यदि आपको वास्तव में बहुत कम स्तर की जानकारी की आवश्यकता नहीं है, तो आप शायद सीधे स्ट्रेस (लिनक्स पर) का उपयोग भी कर सकते हैं और केवल कुछ सिस्टम कॉल का पता लगाने के लिए इसका उपयोग कर सकते हैं, उदाहरण के लिए निम्न पंक्ति पर विचार करें जो केवल कॉल का पता लगाएगा खुला syscall (अतिरिक्त -ओ फ़ाइल पैरामीटर का उपयोग करके आप कोई आउटपुट फ़ाइल के लिए सभी उत्पादन अनुप्रेषित कर सकते हैं):

strace -e trace=open -o results.log

एक अतिरिक्त -v ध्वज में उत्तीर्ण होकर strace के लिए, आप प्राप्त करने के लिए अपने शब्दाडंबर को बढ़ा सकते हैं अतिरिक्त जानकारी (एससीएम के साथ काम करते समय गिट जैसे कि कई छोटी खोल उपयोगिताओं और स्टैंडअलोन टूल्स से बना है, तो आप शायद -f का उपयोग करना भी चाहेंगे फोर्क प्रक्रियाओं का पालन करने के लिए ध्वज)।

तो, आप में रुचि होगी क्या, सभी syscalls कि sockets से जुड़े हुए हैं, अर्थात् है:

  • स्वीकार
  • बाँध
  • कनेक्ट
  • getpeername
  • getsockname
  • getsockopt
  • सुनो
  • recv
  • recvfrom
  • भेज
  • sendto
  • setsockopt
  • बंद
  • सॉकेट
  • socketpair

(शुरुआत में, तो आप शायद ही चाहता हूँ प्रेषण से निपटने में देखो .../recv ... कॉल, यद्यपि)

इस आसान बनाने के लिए, आप भी "नेटवर्क" का उपयोग कर सकते पैरामीटर के रूप में पता लगाने के लिए है, जो सभी नेटवर्क-संबंधी कॉल का पता लगाने जाएगा:

-e ट्रेस = नेटवर्क: सभी नेटवर्क से संबंधित सिस्टम कॉल ट्रेस।

तो, एक इसी strace मंगलाचरण ऐसा दिखाई दे सकता:

strace -v -e trace=accept,bind,connect,getpeername,getsockname,getsockopt,listen,recv,recvfrom,send,sendto setsockopt,shutdown,socket,socketpair -o results.log -f git pull

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

उदाहरण के लिए, जब चल रहा है एक linux खोल में निम्नलिखित: strace -v -o wget.log -e trace=connect,recv,recvfrom,send,sendto wget http://www.google.com

जिसके परिणामस्वरूप लॉग फ़ाइल इस तरह के संदेशों में शामिल हैं:

  • recv (3, "HTTP/1.0 302 मिली \ r \ nLocation: प्रस्तुति "..., 511, एमएसजी_PEEK) = 511
  • sendto (4," \ 24 \ 0 \ 0 \ 0 \ 26 \ 0 \ 1 \ 3^\ 206 * जे \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 "..., 20, 0, {sa_family = AF_NETLINK, pid = 0, समूह = 00000000}, 12) = 20

इन दो सिस्टम कॉल के लिए मैन पेजों को देखते हुए, यह स्पष्ट है कि 511 और क्रमशः 20 स्थानांतरित किए गए बाइट्स की संख्या हैं।आप भी विस्तृत समय जानकारी की जरूरत है, तो आप strace को -टी ध्वज पारित कर सकते हैं:

-टी - प्रिंट समय प्रत्येक syscall में खर्च

इसके अलावा, आप पास करके कुछ आँकड़े प्राप्त कर सकते -सी ध्वज:

-c: प्रत्येक सिस्टम कॉल के लिए समय, कॉल और त्रुटियों की गणना करें और प्रोग्राम पर सारांश की रिपोर्ट करें। लिनक्स पर, यह सिस्टम घड़ी (कर्नेल में चलने वाला सीपीयू समय) दीवार घड़ी के समय से स्वतंत्र दिखाने का प्रयास करता है। अगर -सी का उपयोग -एफ या -एफ (नीचे) के साथ किया जाता है, तो सभी ट्रेस किए गए प्रक्रियाओं के लिए कुल कुल योग रखा जाता है।

आप भी कार्रवाई की वास्तविक डेटा की जांच करने की जरूरत है, तो आप पढ़ने/लिखने विनिर्देशक पर गौर कर सकते हैं:

पढ़ -e = सेट: एक पूर्ण षोडश आधारी और सभी के लिए ASCII डंप प्रदर्शन निर्दिष्ट सेट में सूचीबद्ध फ़ाइल वर्णनकर्ताओं से डेटा पढ़ा गया। उदाहरण के लिए, फ़ाइल डिस्क्रिप्टर 3 और 5 उपयोग -e पढ़ने = 3,5 पर सभी इनपुट गतिविधि देखने के लिए। ध्यान दें कि यह सामान्य से पढ़ने योग्य (2) सिस्टम कॉल का ट्रेसिंग है जो विकल्प -e trace = read द्वारा नियंत्रित होता है। -e लिखें = सेट: निर्दिष्ट सेट में सूचीबद्ध डिस्क्रिप्टर फ़ाइल करने के लिए लिखे गए सभी डेटा का पूर्ण हेक्साडेसिमल और ASCII डंप करें। उदाहरण के लिए, फ़ाइल डिस्क्रिप्टर 3 और 5 उपयोग -e लिखने = 3,5 पर सभी आउटपुट गतिविधि देखने के लिए। ध्यान दें कि यह सामान्य लेखन (2) सिस्टम कॉल का पता लगाने से स्वतंत्र है जिसे विकल्प -e trace = write द्वारा नियंत्रित किया जाता है।

तुम भी तार की अधिकतम लंबाई अनुकूलित कर सकते हैं:

-s strsize: अधिकतम स्ट्रिंग आकार निर्दिष्ट करें मुद्रित करने के लिए (डिफ़ॉल्ट 32 है)। ध्यान दें कि फ़ाइल नाम तार नहीं माना जाता है और हमेशा पूर्ण

में मुद्रित कर रहे हैं या फिर तार हेक्स के रूप में फेंक दिया जा है

-xx: हेक्साडेसिमल स्ट्रिंग प्रारूप में सभी स्ट्रिंग्स प्रिंट।

तो, यह के ज्यादा के लिए strace का उपयोग कर, एक अच्छा संकर दृष्टिकोण की तरह लगता है क्योंकि यह करने के लिए बहुत आसान है, लेकिन अभी भी वहाँ कम स्तर की जानकारी का एक अच्छा राशि उपलब्ध है, यदि आप पाते हैं कि आप अतिरिक्त कम की जरूरत है स्तर की जानकारी, आप strace project on sourceforge के साथ संबंधित फीचर अनुरोधों को दर्ज करने या दर्ज करने पर विचार करना चाह सकते हैं।

हालांकि, इसके बारे में कुछ और सोचना, एक साधारण नेटवर्क यातायात बेंचमार्क को लागू करने के लिए एक कम शामिल और अधिक प्लेटफार्म-अज्ञेय तरीका, क्लाइंट और वास्तविक सर्वर के बीच इंटरमीडिएट परत के कुछ रूपों का उपयोग करना होगा: ए सर्वर जो वास्तविक रूप से वास्तविक सर्वर पर यातायात का विश्लेषण, विश्लेषण और पुनर्निर्देशन कर रहा है।

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

कुछ इस तरह का एक मूल संस्करण शायद आसानी से बस netcat और कुछ शेल स्क्रिप्ट का उपयोग करके एक साथ रखा जा सकता है, और अधिक जटिल संस्करणों लेकिन बजाय पर्ल या अजगर का उपयोग करने से लाभ हो सकता है।

एक सॉक्स सर्वर की एक अजगर कार्यान्वयन के लिए, आप pysocks पर गौर कर सकते हैं।

इसके अलावा, वहाँ अजगर के लिए पाठ्यक्रम twisted की है:

मुड़ एक घटना पर ही आधारित नेटवर्किंग अजगर में लिखा और एमआईटी लाइसेंस के अंतर्गत लाइसेंस इंजन है।

यदि आपको अधिक निम्न स्तर की जानकारी रखने की आवश्यकता है, तो आप शायद वास्तव में सिस्टम कॉल को अवरुद्ध करना चाहते हैं।

आप भी प्रोटोकॉल विशेष दक्षता डेटा की जरूरत है, तो आप tcpdump में देखना चाहते हो सकता है।

5

संभव जवाब SystemTap उपयोग करने के लिए किया जाएगा। उदाहरण स्क्रिप्ट में वहाँ है nettop को प्रदर्शित करता है जो (कुछ) "शीर्ष" जैसी फैशन में नेटवर्क की जानकारी के लिए आवश्यक है, और वहाँ iotime स्क्रिप्ट जो मैं/हे आवश्यक रूप में जानकारी से पता चलता है।

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