2014-03-13 5 views
1

3 개의 QEMU-KVM VM이 Ubuntu 호스트에서 실행 중입니다. 각 VM은 하나의 virt-io NIC을 가지고 호스트 OS의 br0 브리지로 연결됩니다. 모든 NIC의 MTU는 1500으로 구성됩니다.이 플랫폼은 메시지 큐 기반 응용 프로그램을 실행합니다. 하나의 VM은 생성자이고 하나의 VM은 메시지 대기열 서버이고 마지막 VM은 소비자입니다.QEMU-KVM 게스트 OS가 MTU 설정을 고려하지 않습니다.

문제점 : 게스트 VM이 사용 중일 때 메시지 큐 서버 VM은 실제로 2k, 4k 또는 5k 크기의 패킷을 보낼 수 있습니다. NIC의 MTU 값인 1500을 초과합니다! 리눅스 IP 스택이 전송하기 전에 IP 프레임을 MTU 크기보다 작게 잘라야한다는 것을 알고 있습니다. 바쁜 때이 VM이 큰 패킷을 보내는 이유는 무엇입니까? 다음은

플랫폼의 아키텍처 : MTU는 1500 크기로 패킷을 전송,

다음
[w2: celery caller (message queue producer) ] 
    | (messages in TCP) 
    V 
[w3: rabbitmq server] 
    | (messages in TCP) 
    V 
[w4: celeryd (message queue consumer)] 

화면이 W3에서 캡처> 2000 screen captured at w3

다음

화면이 W4에서 캡처는 MTU는 1500입니다 크기가 2000보다 큰 패킷을 수신함 enter image description here

답변

2

감사합니다. 지금 답변을 찾았습니다.

게스트 OS의 virtio-NIC는 TCP Segmentation Offload (TSO)를 지원하며 기본적으로 활성화되어 있습니다. NIC의 TSO 기능은 TCP 계층에서 프레임 세분화를 수행하지 않으며 세그먼트 화는 NIC 드라이버 또는 하드웨어에 의해 오프라인으로 수행됩니다. TSO는 큰 패킷을 전송할 때 성능 향상을 위해 TCP 송신자 프로그램의 작업 번호를 오프로드합니다. NIC 드라이버는이 모드에서 큰 패킷을 수신하고 작은 페이로드, IP 헤더 및 TCP 헤더로 세그먼트 화합니다. 이 오프로드 처리의 이점은 드라이버가 세그먼테이션 동안 하드웨어를 잘 사용하거나 헤더 skb 버퍼를 재사용 할 수 있다는 것입니다.

아래는 그 송신 기능에

Atheros NIC driver source

TSO 기능을 지원하는 드라이버 코드, 그것은 버퍼의 플래그 & SKB_GSO_TCPV4를 전송 확인 atl1c_tso_csum()를 호출합니다. 버퍼에 SKB_GSO_TCPV4 플래그가 포함되어 있으면이를 분할하고 IP 헤더를 추가하고 TCP 헤더를 추가하십시오.

virtio NIC는 TSO 기능을 지원하지만, virtio NIC 패킷은 호스트 OS로 전송됩니다. 그것의 운전사 tx funciton는 전체 패킷을 발송하고 더 높은 네트워크 대역폭을 달성한다.

참고 : 게스트 VM에서 TSO 플래그를 끄면 tcpdump에 큰 패킷이 표시되지 않습니다.

$ethtool -k eth0 
Offload parameters for eth0: 
rx-checksumming: on 
tx-checksumming: on 
scatter-gather: on 
tcp-segmentation-offload: off 
udp-fragmentation-offload: on 
generic-segmentation-offload: on 
generic-receive-offload: on 
large-receive-offload: off 
rx-vlan-offload: off 
tx-vlan-offload: off 
ntuple-filters: off 
receive-hashing: off 
$ethtool -K eth0 tso off 
$ 

참조 2 : https://blogs.gnome.org/markmc/category/virtio/

+1

TSO = TCP 분할 오프로드가 아닌 오프라인 여기에 명령입니다. – osgx

+0

언젠가 같은 문제에 직면했습니다. http://stackoverflow.com/questions/2350985/length-of-captured-packets-more-than-mtu – kumar