CPU1 को eth1 इंटरप्ट के साथ जोड़ा गया है


12

मुझे एक Ubuntu VM मिला है, जो Ubuntu-आधारित Xen XCP के अंदर चल रहा है। यह पीछे एक कस्टम FCGI- आधारित HTTP सेवा होस्ट करता है nginx

पहले सीपीयू कोर से लोड के तहत ab संतृप्त किया जाता है, और बाकी को अंडर-लोड किया जाता है।

में /proc/interruptsमुझे लगता है कि CPU0 किसी अन्य कोर की तुलना में परिमाण अधिक बीच में आता है की एक आदेश में कार्य करता है। उनमें से ज्यादातर से आते हैं eth1

क्या इस वीएम के प्रदर्शन को बेहतर बनाने के लिए मैं कुछ भी कर सकता हूं? क्या संतुलन का एक तरीका अधिक समान रूप से बाधित होता है?


Gory विवरण:

$ uname -a
लिनक्स MYHOST 2.6.38-15-आभासी # 59-Ubuntu एसएमपी शुक्र अप्रैल 27 16:40:18 UTC 2012 i686 i686 i386 GNU / Linux

$ lsb_release -a
कोई एलएसबी मॉड्यूल उपलब्ध नहीं हैं।
वितरक आईडी: उबंटू
विवरण: Ubuntu 11.04
रिलीज़: 11.04
कोडनाम: natty

$ बिल्ली / खरीद / बाधित 
           CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7       
283: 113720624 0 0 0 0 0 0 0 xen-dyn-event eth1
284: 1 0 0 0 0 0 0 0 xen-dyn-event eth0
285: 2254 0 0 3873799 0 0 0 0 xen-dyn-event blkif
286: 23 0 0 0 0 0 0 0 xen-dyn-event hvc_console
287: 492 42 0 0 0 0 0 295324 xen-dyn- घटना xenbus
288: 0 0 0 0 0 0 0 222294 xen-percpu-ipi callfuncsingle7
289: 0 0 0 0 0 0 0 0 xen-percpu-virq debug7
290: 0 0 0 0 0 0 0 151302 xen-percpu-ipi callfunc7
291: 0 0 0 0 0 0 0 3236015 xen-percpu-ipi resched7
292: 0 0 0 0 0 0 0 60064 xen-percpu-ipi spinlock7
293: 0 0 0 0 0 0 0 12355510 xen-percpu-virq टाइमर 7
294: 0 0 0 0 0 0 803174 0 xen-percpu-ipi callfuncsingle6
295: 0 0 0 0 0 0 0 0 xen-percpu-virq debug6
296: 0 0 0 0 0 0 60027 0 xen-percpu-ipi callfunc6
297: 0 0 0 0 0 0 5374762 0 xen-percpu-ipi resched6
298: 0 0 0 0 0 0 64976 0 xen-percpu-ipi spinlock6
299: 0 0 0 0 0 0 15294870 0 xen-percpu-virq टाइमर 6
300: 0 0 0 0 0 264441 0 0 xen-percpu-ipi callfuncsingle5
301: 0 0 0 0 0 0 0 0 xen-percpu-virq debug5
302: 0 0 0 0 0 79324 0 0 xen-percpu-ipi callfunc5
303: 0 0 0 0 0 3468144 0 0 xen-percpu-ipi resched5
304: 0 0 0 0 0 66269 0 0 xen-percpu-ipi spinlock5
305: 0 0 0 0 0 12778464 0 0 xen-percpu-virq टाइमर 5
306: 0 0 0 0 844591 0 0 0 xen-percpu-ipi callfuncsingle4
307: 0 0 0 0 0 0 0 0 xen-percpu-virq debug4
308: 0 0 0 0 75293 0 0 0 xen-percpu-ipi callfunc4
309: 0 0 0 0 3482146 0 0 0 xen-percpu-ipi resched4
310: 0 0 0 0 79312 0 0 0 xen-percpu-ipi spinlock4
311: 0 0 0 0 21642424 0 0 0 xen-percpu-virq टाइमर 4
312: 0 0 0 449141 0 0 0 0 xen-percpu-ipi callfuncsingle3
313: 0 0 0 0 0 0 0 0 xen-percpu-virq debug3
314: 0 0 0 95405 0 0 0 0 xen-percpu-ipi callfunc3
315: 0 0 0 3802992 0 0 0 0 xen-percpu-ipi resched3
316: 0 0 0 76607 0 0 0 0 xen-percpu-ipi spinlock3
317: 0 0 0 16439729 0 0 0 0 xen-percpu-virq टाइमर 3
318: 0 0 876383 0 0 0 0 0 xen-percpu-ipi callfuncsingle2
319: 0 0 0 0 0 0 0 0 xen-percpu-virq debug2
320: 0 0 76416 0 0 0 0 0 xen-percpu-ipi callfunc2
321: 0 0 3422476 0 0 0 0 0 xen-percpu-ipi resched2 है
322: 0 0 69217 0 0 0 0 0 xen-percpu-ipi spinlock2
323: 0 0 10247182 0 0 0 0 0 xen-percpu-virq टाइमर 2
324: 0 393514 0 0 0 0 0 0 xen-percpu-ipi callfuncsingle1
325: 0 0 0 0 0 0 0 0 xen-percpu-virq debug1
326: 0 95773 0 0 0 0 0 0 xen-percpu-ipi callfunc1
327: 0 3551629 0 0 0 0 0 0 xen-percpu-ipi resched1
328: 0 77823 0 0 0 0 0 0 xen-percpu-ipi spinlock1
329: 0 13784021 0 0 0 0 0 0 xen-percpu-virq टाइमर 1
330: 730435 0 0 0 0 0 0 xen-percpu-ipi callfuncsingle0
331: 0 0 0 0 0 0 0 0 xen-percpu-virq debug0
332: 39649 0 0 0 0 0 0 0 xen-percpu-ipi callfunc0
333: 3607120 0 0 0 0 0 0 0 xen-percpu-ipi resched0
334: 348740 0 0 0 0 0 0 0 xen-percpu-ipi spinlock0
335: 89912004 0 0 0 0 0 0 0 xen-percpu-virq टाइमर0
एनएमआई: 0 0 0 0 0 0 0 0 नॉन-मास्केबल इंटरप्ट है
LOC: 0 0 0 0 0 0 0 0 स्थानीय टाइमर में रुकावट आती है
SPU: 0 0 0 0 0 0 0 0 Spurious interrupts
PMI: 0 0 0 0 0 0 0 0 प्रदर्शन निगरानी बाधित होती है
IWI: 0 0 0 0 0 0 0 0 IRQ कार्य में रुकावट आती है
RES: 3607120 3551629 3422476 3802992 3482146 3468144 5374762 3236015 पुनर्निर्धारित अंतराल
CAL: 770084 489287 952799 544546 919884 343765 863201 373596 फंक्शन इंटरप्ट
TLB: 0 0 0 0 0 0 0 0 TLB गोलीबारी
TRM: 0 0 0 0 0 0 0 0 थर्मल घटना में रुकावट आती है
THR: 0 0 0 0 0 0 0 0 थ्रेसहोल्ड APIC बाधित करता है
MCE: 0 0 0 0 0 0 0 0 0 मशीन की जाँच अपवाद हैं
MCP: 0 0 0 0 0 0 0 0 0 मशीन की जाँच पोल
ईआरआर: 0
MIS: 0

बोनस सवाल: क्या इंटरप्ट की संख्या को कम करने का एक तरीका है eth1?
अलेक्जेंडर ग्लैडीश

जवाबों:


10

/proc/irq/283निर्देशिका में देखो । एक smp_affinity_listफाइल है जिसमें दिखाया गया है कि सीपीयू को 283 इंटरप्ट मिलेगा। आपके लिए इस फ़ाइल में संभवतः "0" (और smp_affinityसंभवतः "1" शामिल है)।

आप सीपीयू रेंज को smp_affinity_listफाइल में लिख सकते हैं :

echo 0-7 | sudo tee /proc/irq/283/smp_affinity_list

या आप एक बिटमास्क लिख सकते हैं, जहां प्रत्येक बिट सीपीयू से मेल खाती है smp_affinity:

printf %x $((2**8-1)) | sudo tee /proc/irq/283/smp_affinity

हालांकि, असमानता का अपना विचार है कि प्रत्येक रुकावट का क्या संबंध होना चाहिए, और यह आपके अपडेट को वापस कर सकता है। इसलिए यह सबसे अच्छा है अगर आप पूरी तरह से असमानता की स्थापना रद्द करते हैं। या कम से कम इसे रोकें और इसे रिबूट पर आने से अक्षम करें।

यदि बगैर किसी असमानता के भी आप smp_affinityरिबूट के बाद 283 को बाधित करने के लिए विषम हो रहे हैं , तो आपको अपने एक स्टार्टअप स्क्रिप्ट में सीपीयू आत्मीयता को मैन्युअल रूप से अपडेट करना होगा।


irqbalanceपहले से ही चल रहा है। शायद यह सही ढंग से कॉन्फ़िगर नहीं है? कैसे करें जांच?
अलेक्जेंडर ग्लैडिश

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

जानकारी के लिए: /proc/irq/283/smp_affinityहै 01अब उस में (कोई भी नहीं है कि सामान इस मशीन पर मेरी जानकारी के अनुसार करने के लिए बदल गया है - तो यह सिस्टम डिफ़ॉल्ट होना चाहिए)।
अलेक्जेंडर ग्लैडिस

क्षमा करें, मैंने अपना उत्तर अपडेट कर दिया है। शायद असंबद्धता अपराधी है। बस इससे छुटकारा मिल जाएगा। मुझे नहीं पता कि डिफ़ॉल्ट क्या माना जाता है, लेकिन अनुभव से मैंने इसे "सभी सीपीयू" के लिए डिफ़ॉल्ट रूप से देखा है।
चुतज ch

अक्षम irqbalance(के माध्यम ENABLED=0से /etc/default/irqbalance) मदद नहीं करता है। रिबूट के बाद irqbalanceहै stop/waiting, लेकिन /proc/irq/283/smp_affinityअभी भी है 01
अलेक्जेंडर ग्लैडीश

2

यदि आपके पास इंटेल एनआईसी का सही मॉडल है तो आप प्रदर्शन में काफी सुधार कर सकते हैं।

पहले पैराग्राफ को उद्धृत करने के लिए:

मल्टीकोर प्रोसेसर और नवीनतम ईथरनेट एडेप्टर (82575, 82576, 82598 और 82599 सहित) टीसीपी अग्रेषण प्रवाह को व्यक्तिगत कोर में निष्पादन प्रवाह असाइन करके अनुकूलित करने की अनुमति देते हैं। डिफ़ॉल्ट रूप से, लिनक्स स्वचालित रूप से प्रोसेसर कोर को इंटरप्ट करता है। वर्तमान में इंटरप्ट को स्वचालित रूप से असाइन करने के लिए दो तरीके मौजूद हैं, एक इंकबर्न आईआरक्यू बैलेंसर और यूजर स्पेस में आईआरक्यू बैलेंस डेमॉन। दोनों ट्रेडऑफ़ प्रदान करते हैं जो CPU उपयोग को कम कर सकते हैं लेकिन आईपी अग्रेषण दरों को अधिकतम नहीं करते हैं। ऑप्टिमल थ्रूपुट को विशेष रूप से प्रोसेसर कोर को ईथरनेट एडेप्टर की कतारों को मैन्युअल रूप से पिन करके प्राप्त किया जा सकता है।

आईपी ​​अग्रेषण के लिए, एक प्रेषित / प्राप्त कतार जोड़ी को एक ही प्रोसेसर कोर का उपयोग करना चाहिए और विभिन्न कोर के बीच किसी भी कैश सिंक्रनाइज़ेशन को कम करना चाहिए। यह ट्रांसफ़ॉर्म असाइन करके और विशिष्ट कोर को इंटरप्ट प्राप्त करके किया जा सकता है। लिनक्स कर्नेल 2.6.27 से शुरू होकर, 82575, 82576, 82598, और 82599 पर कई कतारों का उपयोग किया जा सकता है। इसके अतिरिक्त, विस्तारित मैसेजिंग सिग्नलेड इंटरप्ट्स (MSI-X) में कई ट्रांसमिशन कतारें सक्षम की गईं। MSI-X एक बड़ी संख्या में रुकावटों का समर्थन करता है, जिनका उपयोग किया जा सकता है, जो महीन-दाने वाले नियंत्रण और विशिष्ट CPU के लिए व्यवधान को लक्षित करने की अनुमति देता है।

देखें: Intel® 82575/82576 या 82598/82599 ईथरनेट नियंत्रक का उपयोग करके प्रोसेसर कोर को इंटरप्ट करना


2

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

स्रोत, ऊपर जुड़ा हुआ, लिनक्स संगोष्ठी से है और मैं आपको एसएमपी आईआरक्यू एफिनिटी पर युगल पैराग्राफ के माध्यम से पढ़ने की सलाह देता हूं क्योंकि यह आपको इस पोस्ट की तुलना में अधिक प्रभावी रूप से मनाएगा।

क्यों?

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

वैकल्पिक रूप से, जब IRQ संतुलित होता है, तो यह विभिन्न CPU द्वारा लगातार संभाला जाने वाले रुकावट को नियत कर सकता है, तो नए CPU कोर में संभवत: कैश में व्यवधान हैंडलर फ़ंक्शन नहीं होगा, और मुख्य से उचित हैंडलर प्राप्त करने के लिए एक लंबे समय की आवश्यकता होगी स्मृति।

अपवाद : यदि आप शायद ही कभी रुकावट का उपयोग कर रहे हों, तो पर्याप्त समय बीत जाता है, कैश अन्य कार्यों को करने से अधिक हो जाता है, जिसका अर्थ है कि आपके पास उस इंटरफ़ेस पर आने वाला डेटा बीच-बीच में लंबे समय तक रहता है ... तो आप इन लाभों को नहीं देखेंगे। जब आप उच्च आवृत्ति पर एक प्रक्रिया का उपयोग करते हैं तो वे होते हैं।

निष्कर्ष

यदि आपका व्यवधान बहुत बार आता है तो केवल उस अवरोध को एक विशिष्ट CPU द्वारा नियंत्रित किया जाना चाहिए। यह कॉन्फ़िगरेशन में रहता है

 /proc/'IRQ number'/smp_affinity

या

/proc/irq/'IRQ number'/smp_affinity

ऊपर दिए गए स्रोत से एसएमपी आईआरक्यू एफिनिटी सेक्शन में अंतिम पैराग्राफ देखें , इसमें निर्देश हैं।

वैकल्पिक रूप से

यदि आप नेटवर्क को इसके लिए अनुमति देते हैं या हर पैकेट के बदले पैकेट की एक बड़ी मात्रा में पैकेट प्राप्त करने के बाद या ध्वज को बदलने के लिए अनुमति देता है, तो आप आवृत्ति को बदल सकते हैं, जो कि एमटीयू आकार (जंबो फ्रेम) को बढ़ाकर बाधित होता है। समय समाप्त हो जाता है, इसलिए एक निश्चित समय के बाद व्यवधान बढ़ाएं। समय विकल्प के साथ सावधानी बरतें क्योंकि समय समाप्त होने से पहले आपके बफर का आकार पूर्ण हो सकता है। यह एथलेटूल का उपयोग करके किया जा सकता है जो लिंक किए गए स्रोत में उल्लिखित है।

यह उत्तर उस लंबाई के करीब आ रहा है जिस पर लोग इसे नहीं पढ़ते हैं इसलिए मैं ज्यादा विस्तार में नहीं जाऊंगा, लेकिन आपकी स्थिति के आधार पर कई समाधान हैं ... स्रोत की जांच करें :)

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