उबंटू पर कम विलंबता टीसीपी सेटिंग्स


10

मेरे लैब में उबंटू पर चल रहे माप के लिए एक सर्वर है। और सी प्रोग्राम है, जो टीसीपी कनेक्शन के माध्यम से डेटा प्राप्त करता है और जितनी जल्दी हो सके एक उत्तर भेजना चाहिए।

विन्यास

  • CPU: 2 प्रोसेसर x 4 कोर - Intel (R) Xeon (R) CPU E5345 @ 2.33GHz
  • रैम: 12 जीबी
  • NIC: Intel Corporation 80003ES2LAN गिगाबिट ईथरनेट कंट्रोलर / 82546EB गिगाबिट इथरनेट कंट्रोलर
  • नेटवर्क स्विच: सिस्को उत्प्रेरक 2960
  • डेटा जानकारी: डेटा ब्लॉक लगभग आते हैं। प्रत्येक 10 मिलीसेकंड। डेटा ब्लॉक का आकार लगभग है। 1000 बाइट।

पैकेट प्राप्त करते समय नेटवर्क विलंबता बहुत महत्वपूर्ण है (दसियों माइक्रोसेकंड महत्वपूर्ण हैं)। मैंने प्रोग्राम को अधिकतम करने के लिए अनुकूलित किया, लेकिन मुझे उबंटू को ट्विक करने का कोई अनुभव नहीं है।

प्रसंस्करण / पैकेट भेजने की स्थानीय देरी को कम करने के लिए उबंटू में क्या कॉन्फ़िगर किया जा सकता है?


हां, मैं सर्वर का मेक / मॉडल जानना चाहूंगा।
ewwhite

आपको गहरा रास्ता खोदना चाहिए। उच्च आवृत्ति व्यापार के लिए कर्नेल अनुकूलन के बारे में कुछ सामान पढ़ें। Fe एक बिक्री सिस्को पेपर: cisco.com/c/dam/en/us/products/collateral/switches/… इसलिए दोनों तरफ एक सभ्य PCI-E कार्ड प्राप्त करें, कुछ अस्वस्थ को बचाएगा। सबसे अधिक संभावना (इस पर आप कितना समय बिताना चाहते हैं इसके आधार पर) आप अलग-अलग सेटिंग्स के साथ कम से कम कर्नेल को फिर से बनाएंगे, बहुत सारे सामान को हटाकर ubuntu को ज़रूरत है लेकिन आपको नहीं। इसलिए जैसा कि ewwhite ने टिप्पणियों में लिखा था, उबंटू सबसे कम सेटिंग्स के लिए एकदम सही नहीं हो सकता है।
डेनिस नोलटे

सूचीबद्ध हार्डवेयर के साथ, यह 2008 के युग के उपकरण (इंटेल 5300-श्रृंखला सीपीयू) है। इसके बाद, कई विशेष कम विलंबता हार्डवेयर परिवर्तन संभव नहीं थे। मैंने सिस्टम BIOS को उच्च-प्रदर्शन मोड में चलाने और CPU C- स्टेट्स को अक्षम करने के लिए सेट किया था।
इविविट

@ नया, हाँ, आप 2008 के युग के उपकरणों के बारे में सही हैं। मैं आपके सुझावों की कोशिश करूंगा। धन्यवाद!
एलेक्स वी

TCP_NODELAY के लिए इस सॉफ़्टवेयर को ट्विस्ट करने की कोई क्षमता?
मैट

जवाबों:


10

ईमानदारी से, मैं इसके लिए उबंटू का उपयोग नहीं कर रहा हूं ... लेकिन ऐसे विकल्प हैं जो किसी भी लिनक्स संस्करण के लिए लागू किए जा सकते हैं।

आप अपने नेटवर्क स्टैक बफ़र्स को उकसाना चाहते हैं:

net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

यदि एप्लिकेशन डिस्क पर लिख रहा है, तो शायद एक शेड्यूलर / एलेवेटर परिवर्तन आवश्यक होगा (जैसे deadlineएलेवेटर)।

सर्वर स्तर पर, आप सीपीयू गवर्नर और पावर और सीपीयू आवृत्ति प्रबंधन (पी-स्टेट्स, सी-स्टेट्स) को संशोधित कर सकते हैं।

ओएस स्तर पर, आप अपने आवेदन की वास्तविक प्राथमिकता को बदल सकते हैं ( chrt), इंटरप्ट को कम करने के लिए अनुकूलन करते हुए, इसे सीपीयू या सीपीयू के समूह ( taskset) में पिन कर सकते हैं , और किसी भी अनावश्यक सेवाओं या डेमों को रोक सकते हैं।

आप कुछ सुझाव भी देख सकते हैं: 2 लिनक्स मेजबानों के बीच विलंबता का निवारण कैसे करें

हार्डवेयर या नेटवर्किंग उपकरण को शामिल किए बिना अधिक विशिष्ट प्राप्त करना मुश्किल है।


3
यह वास्तव में धार्मिक बहस के लिए उपयुक्त स्थान नहीं है। इसे कहीं और ले जाएं, जैसे कि चैट।
माइकल हैम्पटन

1
@ मिचेल हैम्पटन सवाल से संबंधित चर्चा में दिलचस्प लिंक थे: Red Hat Realtime Tuning Guide
एलेक्स वी।

6

यदि आप उच्च प्रदर्शन के मार्ग पर जा रहे हैं, तो आमतौर पर आप जितनी संभव हो उतनी कम (अन्य) प्रक्रियाओं को चलाना चाहेंगे क्योंकि वे आपके आवेदन में हस्तक्षेप करेंगे।

शास्त्रीय UNIX ऑपरेटिंग सिस्टम की तरह, Linux को कई अनुप्रयोगों को एक उचित तरीके से चलाने के लिए डिज़ाइन किया गया है और संसाधन भुखमरी को रोकने की कोशिश करता है और आप विपरीत के लिए लक्ष्य करेंगे, आपके आवेदन को छोड़कर बाकी सब को भूखा रखें। ओएस स्तर पर सरल कदम आपके आवेदन के अच्छे स्तर और वास्तविक समय प्राथमिकता को बदल रहे हैं, अनुसूचक को बदल रहे हैं या एक वास्तविक समय कर्नेल के लिए जा रहे हैं ।

टीसीपी / आईपी को आमतौर पर कनेक्शन की बूंदों को रोकने और बैंडविड्थ के कुशल उपयोग को उपलब्ध करने के लिए ट्यून किया जाता है। एक बहुत तेज़ लिंक से सबसे कम विलंबता को संभव करने के लिए, ए कनेक्शन से उच्चतम बैंडविड्थ संभव होने के बजाय जहां कुछ मध्यवर्ती लिंक अधिक विवश हैं, आप नेटवर्क स्टैक के ट्यूनिंग को समायोजित करने जा रहे हैं।

 sysctl -a 

आपको कर्नेल सेटिंग दिखाएगा जो आप ट्यून कर सकते हैं। सेटिंग्स इस बात पर निर्भर करती हैं कि आप IPv4 या IPv6 का उपयोग कर रहे हैं या नहीं और वास्तव में आप पहले से ही अपने आवेदन में क्या करते हैं:

  • net.ipv4.tcp_window_scaling=1 RFC 1323 - IPV4 टीसीपी विंडो के आकार का समर्थन 64K से बड़ा - आमतौर पर उच्च बैंडविड्थ नेटवर्क पर आवश्यक है
  • net.ipv4.tcp_reordering=3 एक IPV4 पैकेट को अधिकतम टीसीपी पैकेट स्ट्रीम में बिना टीसीपी के पैकेट के नुकसान और धीमी शुरुआत में जाने के लिए फिर से चालू किया जा सकता है।
  • net.ipv4.tcp_low_latency=1उच्चतर थ्रूपुट पर कम विलंबता को वरीयता देने का इरादा; सेटिंग = 1 IPV4 टीसीपी प्रीकेयू प्रोसेसिंग को अक्षम करता है
  • net.ipv4.tcp_sack=0 1 पर सेट करना IPV4 के लिए चयनात्मक पावती को सक्षम करता है, जिसके लिए tcp_timestamps सक्षम करने की आवश्यकता होती है और कुछ पैकेट ओवरहेड जोड़ता है, जिसकी आपको पैलेटलॉस का अनुभव नहीं होने पर आवश्यकता नहीं है
  • net.ipv4.tcp_timestamps=0 केवल उन मामलों में सलाह दी जाती है जहां बोरी की आवश्यकता होती है।
  • net.ipv4.tcp_fastopen=1 प्रारंभिक SYN पैकेट में डेटा भेजने में सक्षम करें।

अधिकांश अगर सभी कर्नेल स्रोत में बेहतर दस्तावेज नहीं हैं ।

आप निश्चित रूप से कच्चे टीसीपी कोड को कोड कर सकते हैं और मोटे तौर पर कर्नेल टीसीपी / आईपी स्टैक को पूरी तरह से पास कर सकते हैं।

अक्सर उच्च ट्यून किए गए सिस्टम एक विश्वसनीय नेटवर्क में चलते हैं और उनके स्थानीय (iptables) फ़ायरवॉल अक्षम होंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.