केवीएम अतिथि और मेजबान के बीच जंबो फ्रेम?


11

मैं KVM मेहमानों और होस्ट सिस्टम के बीच भंडारण संचार के लिए 9000 बाइट MTU को लागू करने का प्रयास कर रहा हूं। होस्ट में एक पुल है ( br1) 9000 बाइट MTU के साथ:

host# ip link show br1
8: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP 
    link/ether fe:54:00:50:f3:55 brd ff:ff:ff:ff:ff:ff
    inet 172.16.64.1/24 brd 172.16.64.255 scope global br1
    inet6 fe80::21b:21ff:fe0e:ee39/64 scope link 
       valid_lft forever preferred_lft forever

अतिथियों के पास इस पुल से जुड़ा एक इंटरफ़ेस है जिसमें 9000 बाइट MTU है:

guest# ip addr show eth2
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:50:f3:55 brd ff:ff:ff:ff:ff:ff
    inet 172.16.64.10/24 brd 172.16.64.255 scope global eth2
    inet6 fe80::5054:ff:fe50:f355/64 scope link 
       valid_lft forever preferred_lft forever

मैं मेजबान से अतिथि के लिए पिंग कर सकता हूं:

host# ping -c4 172.16.64.10
PING 172.16.64.10 (172.16.64.10) 56(84) bytes of data.
64 bytes from 172.16.64.10: icmp_seq=1 ttl=64 time=1.15 ms
64 bytes from 172.16.64.10: icmp_seq=2 ttl=64 time=0.558 ms
64 bytes from 172.16.64.10: icmp_seq=3 ttl=64 time=0.566 ms
64 bytes from 172.16.64.10: icmp_seq=4 ttl=64 time=0.631 ms

--- 172.16.64.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.558/0.727/1.153/0.247 ms

लेकिन अगर मैं 1490 बाइट्स से परे पिंग पैकेट का आकार बढ़ाता हूं, तो मेरे पास कनेक्टिविटी नहीं है:

host# ping -c4 -s 1491 172.16.64.10
PING 172.16.64.10 (172.16.64.10) 1491(1519) bytes of data.

--- 172.16.64.10 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3000ms

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

क्या मुझे कुछ स्पष्ट याद आ रहा है?

अपडेट करें

अतिथि इंटरफ़ेस का होस्ट-साइड दिखाना:

host# brctl show
bridge name bridge id       STP enabled interfaces
br1     8000.fe540050f355   no      vnet2

host# ip addr show vnet2
11: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast master br1 state UNKNOWN qlen 500
    link/ether fe:54:00:50:f3:55 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe50:f355/64 scope link 
       valid_lft forever preferred_lft forever

होस्ट पर VM के लिए ट्यून इंटरफ़ेस पर MTU क्या है?
मोर्गन डे

वह भी 9000 बाइट्स; मैंने उस इंटरफ़ेस के आउटपुट brctlऔर उसके साथ प्रश्न को अपडेट किया ip addr showहै।
लार्क्स

बिल्कुल मेजबान प्रणाली क्या है?
माइकल हैम्पटन

आर्क लिनक्स, लिनक्स के साथ 3.6.10 (x86_64), qemu-kvm 1.2.0, libvirt 1.0.1।
लार्क्स

जवाबों:


7

जबकि यह एक एमटीयू समस्या थी, यह पता चला है कि इसका किसी भी घटक उपकरणों पर एमटीयू सेटिंग्स से कोई लेना-देना नहीं था। जैसा कि मैंने मूल प्रश्न में दिखाया है, होस्ट ब्रिज, होस्ट ट्यून इंटरफ़ेस और गेस्ट इंटरफ़ेस सभी में एक ही एमटीयू सेटिंग (9000 बाइट्स) थी।

वास्तविक समस्या एक libvirt / kvm कॉन्फ़िगरेशन समस्या थी। डिफ़ॉल्ट रूप से, libvirt उपकरणों का उपयोग नहीं करता virtioहै। एक स्पष्ट कॉन्फ़िगरेशन को अनुपस्थित करें जो आप RealTek RTL-8139 NIC के साथ समाप्त करते हैं। यह वर्चुअल एनआईसी जंबो फ्रेम का समर्थन नहीं करता है

virtioउपकरणों का उपयोग करने के लिए , आपको एक स्पष्ट मॉडल निर्दिष्ट करने की आवश्यकता है। उपयोग करते समय virt-install:

virt-install ... -w bridge=br1,model=virtio

या डोमेन एक्सएमएल में <model>उपयुक्त <interface>तत्व के लिए एक टैग जोड़कर तथ्य के बाद :

<interface type="bridge">
  <model type="virtio"/>
  <source bridge="br1"/>
  <target dev="vnet2"/>
</interface>

जगह में इस परिवर्तन के साथ, सब कुछ इरादा के अनुसार काम करता है।


0

काम करने के लिए बड़े MTU के लिए, पूरे स्टैक में उच्च MTU होना चाहिए, जिसमें मेहमान, टैपदेव और भौतिक NIC शामिल हैं जो पुल से जुड़ा हुआ है (यदि आपके पास रास्ते में बांड और vlans हैं - तो वे भी)


क्या आपको पता है कि विशिष्ट उदाहरण, जैसे गिगा ईथरनेट और उससे आगे, जहां यह ऑटो-वार्ता का परिणाम होगा? यह पोस्ट शायद एक डुप्लिकेट है: google.com/…
ArrowInTree

नहीं, मैन्युअल रूप से किया जाना है, सभी स्टैक किसी भी घटक के उच्चतम MTU के लिए सेट है
dyasny

हाँ, मुझे लगता है कि; जो सभी जगह अच्छी तरह से प्रलेखित है। जैसा कि आप सवाल से देख सकते हैं, मेहमान, टैपदेव और पुल सभी में उच्च एमटीयू है। क्या आपने मेरे द्वारा दिए गए उदाहरणों में कुछ गलत देखा है?
लार्क्स

गैर-डिफ़ॉल्ट MTU सेटिंग्स का उपयोग करने के लिए, सब कुछ गैर-डिफ़ॉल्ट MTU का पालन करना चाहिए। कि, ऊपर से नीचे तक, पुल के नीचे अतिथि एनआईसी, नल, पुल, एथ (+ वलान + बंधन) और निश्चित रूप से स्विच पोर्ट होना चाहिए। मैंने कुछ मिनट पहले ही इसका परीक्षण किया है और यह RHEL पर kvm के साथ पूरी तरह से काम करता है
dyasny

ठीक है, और मुझे लगता है कि मैंने स्पष्ट रूप से स्टैक के सभी हिस्सों में मूल्य को दर्शाया है। क्या आपको या तो कोई गुम सूचना या कुछ ऐसी चीज़ दिखाई देती है जो सही तरीके से कॉन्फ़िगर नहीं है?
लार्क्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.