Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

4.2. 진단

참고

이 섹션에서는 패킷 드롭인 탭(커널 경로) 인터페이스를 검사합니다. 사용자 datapath의 vhost 사용자 인터페이스에서 패킷이 삭제되는 경우 https://access.redhat.com/solutions/3381011을 참조하십시오.

TX는 인스턴스의 vCPU와 하이퍼바이저의 다른 프로세스 간의 간섭으로 인해 발생합니다. 탭 인터페이스의 TX 큐는 인스턴스가 패킷을 가져올 수 없는 동안 잠시 동안 패킷을 저장할 수 있는 버퍼입니다. 이 문제는 인스턴스의 CPU가 오랜 시간 동안 실행되지 않거나 정지되지 않는 경우 발생합니다.

TUN/TAP 장치는 하나의 엔드가 커널 네트워크 인터페이스이고, 다른 쪽 끝은 사용자 공간 파일 설명자입니다.

TUN/TAP 인터페이스는 다음 두 가지 모드 중 하나로 실행할 수 있습니다.

  • 탭 모드는 L2 헤더가 있는 L2 이더넷 프레임을 장치에 제공하며 사용자 공간으로부터 동일한 값을 수신할 것으로 예상합니다. 이 모드는 VM에 사용됩니다.
  • tun 모드에서는 L3 헤더가 있는 L3 IP 패킷을 장치에 제공하며 사용자 공간으로부터 동일한 데이터가 수신될 것으로 예상합니다. 이 모드는 주로 VPN 클라이언트에 사용됩니다.

KVM 네트워킹에서 사용자 공간 파일 설명자는 qemu-kvm 프로세스에서 소유합니다. 탭(하이퍼바이저 관점에서 TX)으로 전송되는 프레임은 qemu-kvm 내에서 L2 프레임으로 이루어집니다. 그러면 가상 네트워크 인터페이스(VM 관점에서 RX)로 수신한 네트워크 패킷이 VM의 가상 네트워크 장치에 해당 프레임을 제공할 수 있습니다.

TUN/TAP의 주요 개념은 하이퍼바이저에서의 전송 방향이 가상 머신에 대한 수신 방향이라는 것입니다. 이는 반대 방향과 동일합니다. 하이퍼바이저에 대한 수신은 가상 머신에서 전송하는 것과 동일합니다.

virtio-net 장치에 패킷의 "링 버퍼"는 없습니다. 즉, VM이 수신되지 않거나(전체적으로는) 수신되지 않기 때문에 TUN/TAP 장치의 TX 대기열이 채워지면 새 패킷이 갈 곳이 없으며 하이퍼바이저는 탭에서 TX 손실을 볼 수 있습니다.

TUN/TAP에서 TX 손실을 확인한 경우 물리적 NIC에서 손실을 중지하도록 RX 링 버퍼를 늘리는 것과 유사하게 TUN/TAP의 탭 txqueuelen 을 늘립니다.

그러나 VM은 수신 시 "slow" 및 "bursty"라고 가정합니다. VM이 항상 충분히 빨리 실행되지 않거나 전혀 수신되지 않으면 TX 큐 길이 조정이 도움이 되지 않습니다. VM이 실행되고 있지 않거나 수신하는 이유를 확인해야 합니다.

VM 패킷 처리 성능을 개선하려면 다음 단계를 완료합니다.

  • 하이퍼바이저에서 virtio-net 멀티 큐 를 활성화합니다.
  • VM 내부의 차이점 코어에서 여러 가상 장치 인터럽트를 분산합니다.

이 내용은 KVM의 libvirt 도메인 사양에 설명되어 있으며 RHEL KVM 하이퍼바이저에서 virsh edit 를 사용하여 수행할 수 있습니다.

Red Hat OpenStack Platform에서 virtio-net 멀티 큐 를 구성할 수 없는 경우, 소프트웨어를 사용하여 여러 CPU 코어의 부하를 분산하도록 VM 내에서 RPS를 구성하는 것이 좋습니다. 자세한 내용은 kernel-doc 패키지의 scaling.txt 를 참조하거나 RHEL 제품 문서의 RPS 섹션을 참조하십시오.

4.2.1. 해결방법

대기 시간이 길어지고 다른 단점에 따라 약간의 동결을 완화하려면 TX 대기열을 늘리십시오.

일시적으로 txqueuelen 을 늘리려면 다음 명령을 사용하십시오.

/sbin/ip link set tap<uuid> txqueuelen <new queue length>

txqueulen 을 영구적으로 늘리려면 udev 규칙을 만듭니다.

cat <<'EOF'>/etc/udev/rules.d/71-net-txqueuelen.rules
SUBSYSTEM=="net", ACTION=="add", KERNEL=="tap*", ATTR{tx_queue_len}="10000"
EOF

udev를 다시 로드하거나 시스템을 재부팅한 후 새 탭 인터페이스는 대기열 길이가 10000으로 표시됩니다. 예를 들어 다음과 같습니다.

[root@overcloud-compute-0 ~]# ip link ls | grep tap
29: tap122be807-cd: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 5505
qdisc pfifo_fast master qbr122be807-cd state UNKNOWN mode DEFAULT
group default qlen 10000