จัมโบ้เฟรมระหว่าง KVM guest และ host?


11

ฉันกำลังพยายามใช้ MTU ขนาด 9000 ไบต์สำหรับการสื่อสารที่เก็บข้อมูลระหว่างผู้เข้าร่วม KVM และระบบโฮสต์ โฮสต์มีบริดจ์ ( br1) พร้อม MTU 9000 ไบต์:

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

แขกมีอินเตอร์เฟสที่เชื่อมต่อกับบริดจ์นี้ซึ่งมี MTU 9000 ไบต์:

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

ฉันสามารถ ping จากโฮสต์ถึงแขกได้:

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

แต่ถ้าฉันเพิ่มขนาด ping packet เกิน 1490 bytes ฉันจะไม่เชื่อมต่ออีกต่อไป:

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

การติดตามแพ็คเก็ตแสดงให้เห็นว่าแพ็คเก็ตเหล่านี้ไม่เคยไปถึงแขก ทุกสิ่งที่ฉันได้อ่านบ่งชี้ว่าทั้งอินเทอร์เฟซบริดจ์ Linux และvirtioเครือข่ายไดรฟ์สนับสนุนเฟรมจัมโบ้ทั้งหมด แต่แน่ใจว่าดูเหมือนปัญหา MTU สำหรับฉัน

ฉันขาดอะไรบางอย่างที่ชัดเจนจริง ๆ ?

ปรับปรุง

แสดงฝั่งโฮสต์ของอินเทอร์เฟซผู้เยี่ยมชม:

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

MTU บนอินเตอร์เฟส tun สำหรับ VM บนโฮสต์คืออะไร
mgorven

นั่นคือ 9000 ไบต์ ฉันได้อัปเดตคำถามด้วยผลลัพธ์ของbrctlและip addr showสำหรับอินเทอร์เฟซนั้น
larsks

ระบบโฮสต์คืออะไร?
Michael Hampton

Arch Linux พร้อม Linux 3.6.10 (x86_64), qemu-kvm 1.2.0, libvirt 1.0.1
larsks

คำตอบ:


7

ขณะนี้เป็นปัญหาของ MTU ปรากฎว่าไม่มีส่วนเกี่ยวข้องกับการตั้งค่า MTU ในอุปกรณ์คอมโพเนนต์ใด ๆ ดังที่ฉันแสดงให้เห็นในคำถามเดิม host bridge, host tun interface และ guest interface มีการตั้งค่า MTU เดียวกัน (9000 bytes)

ปัญหาที่แท้จริงคือปัญหาการกำหนดค่า libvirt / kvm โดยค่าเริ่มต้น libvirt ไม่ได้ใช้virtioอุปกรณ์ ขาดการกำหนดค่าที่ชัดเจนที่คุณท้ายด้วย RealTek RTL-8139 NIC เสมือนนี้ NIC ไม่สนับสนุนเฟรมจัมโบ้

ในการใช้virtioอุปกรณ์คุณจะต้องระบุรูปแบบที่ชัดเจน เมื่อใช้virt-install:

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

หรือหลังจากข้อเท็จจริงโดยการเพิ่ม<model>แท็กให้กับ<interface>องค์ประกอบที่เหมาะสมในโดเมน XML:

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

เมื่อมีการเปลี่ยนแปลงเกิดขึ้นทุกอย่างทำงานได้ตามที่ต้องการ


0

สำหรับ MTU ที่มีขนาดใหญ่กว่าในการทำงานสแต็กทั้งหมดจะต้องมี MTU สูงกว่าซึ่งรวมถึงแขก tapdevs และ NIC ทางกายภาพที่สะพานเชื่อมต่ออยู่ (ถ้าคุณมีพันธบัตรและ vlans ระหว่างทาง - เช่นกัน)


คุณรู้หรือไม่ว่าตัวอย่างที่เฉพาะเจาะจงเช่น GigaEthernet และอื่น ๆ นี่จะเป็นผลของการเจรจาอัตโนมัติหรือไม่ โพสต์นี้อาจซ้ำซ้อน: google.com/…
ArrowInTree

ไม่ต้องทำด้วยตนเองสแต็กทั้งหมดตั้งค่าเป็น MTU สูงสุดขององค์ประกอบใด ๆ ที่กำหนด
dyasny

ใช่ฉันรู้แล้ว ที่ได้รับการบันทึกไว้อย่างดีทั่วสถานที่ อย่างที่คุณเห็นจากคำถามแขกรับเชิญ tapdevs และสะพานทุกคนมี MTU ที่สูงกว่า คุณเห็นอะไรผิดพลาดในตัวอย่างที่ฉันให้หรือไม่
larsks

เพื่อใช้การตั้งค่า MTU ที่ไม่ใช่ค่าเริ่มต้นทุกอย่างจะต้องเป็นไปตาม MTU ที่ไม่ใช่ค่าเริ่มต้น นั่นจากบนลงล่างควรเป็นแขก NIC, แตะ, สะพาน, eth (+ vlan + พันธบัตร) ใต้สะพานและแน่นอนว่าพอร์ตสวิทช์ ฉันได้ทดสอบเพียงไม่กี่นาทีที่ผ่านมาและมันทำงานได้อย่างสมบูรณ์แบบบน RHEL กับ kvm
dyasny

ใช่และฉันคิดว่าฉันแสดงให้เห็นอย่างชัดเจนในคำถามถึงคุณค่าของทุกส่วนของสแต็ก คุณเห็นข้อมูลที่ขาดหายไปหรือสิ่งที่ไม่ได้กำหนดค่าอย่างถูกต้องหรือไม่?
larsks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.