Network(네트워크)

점보프레임(Jumbo Frame)으로 전송속도 높이기(MTU 9000)메타 데이터의 끝으로 건너뛰기

hippo 데브옵스 2022. 6. 26. 01:30

점보프레임(Jumbo Frame)

  • 기본적으로 사용하는 MTU(Maximum Transmission Unit) 값은 1500 바이트
  • 실제 전송시에는 프레임 헤더를 붙이면 18 바이트가 추가되어 기본적으로는 1518 바이트가 됨 → 이더넷 헤더가 18 바이트(Link Layer)
  • 점보프레임은 프레임 크기를 크게 늘려주는 것으로, 9000 바이트까지 MTU를 확장시켜 줌
  • 처음 이더넷 프레임으로 1500 바이트가 사용된 것은 과거 낮은 통신속도와 비교적 높게 발생되었던 에러 비율 때문임 → 데이터를 전송하다가 에러가 발생되면 단지 1500 바이트 부분만 에러를 정정하여 재전송하면 됨
  • 각 프레임은 네트워크 하드웨어와 소프트웨어적으로 프로세싱하는 것이 필요 → 프레임 사이즈가 커진다면 시스템에서 전송하기 위해 사용되는 처리 CPU가 더 줄어듬
  • 9000 바이트 이상으로 커진다면 데이터를 자르는 기준이 적어지므로 빠른 속도로 전달 가능 → 한번에 1500 바이트가 아닌 9000 바이트를 전송
  • 하드웨어 성능은 워낙 좋아졌기 때문에 점보프레임으로 인한 성능 향상은 그리 크지 않음
  • 점보프레임이 2000년대 초에는 어느 정도 효과를 볼 수 있었을지 몰라도 빠르게 발전하는 하드웨어 속도에 비하면 프레임을 나누기 위한 CPU 사용은 적음
  • 점보프레임(Jumbo Frame)을 사용할 때 효율적인 성능 향상를 얻을 수 있는 방법은 좋은 하드웨어를 사용하지 않는 것 → 현재 하드웨어 발전 상황에서는 큰 차이 X
  • 점보프레임을 사용하기 위해서는 스위치, NIC 카드등에서 지원 필요 → 요즘 사용되는 장비들은 대부분 지원


점보프레임이 설정된 패킷을 덤프

  • 데이터 크기가 8920 바이트나 되는 것을 확인 가능

시스템상에서의 설정은 MTU 값을 변경

  • 설정 전에는 MTU가 1500
  • 리눅스의 경우 커널 2.6.17 이상이면 지원됨
  • ip route 명령어를 통해 MTU 확인

    $ ip route get 111.6.0.25
    111.6.0.25 dev bond1  src 111.6.0.30
      cache  mtu 1500 advmss 1460 hoplimit 64

  • ifconfig 명령어를 통해 MTU 확인

    $ ifconfig eth6
    eth6      Link encap:Ethernet  HWaddr [삭제]
            UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
            RX packets:2892 errors:0 dropped:0 overruns:0 frame:0
            TX packets:2728 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:1000
            RX bytes:256450 (250.4 KiB)  TX bytes:2785780 (2.6 MiB)
            Interrupt:32 Memory:d8000000-d8012800

  • ifconfig 명령어를 통해 인터페이스의 MTU를 변경

    $ ifconfig eth6 mtu 9000

  • ip route 명령어를 통해 MTU 확인

    $ ip route get 111.6.0.25
    111.6.0.25 dev bond1  src 111.6.0.30
      cache  mtu 9000 advmss 8960 hoplimit 64

  • ifconfig 명령어를 통해 MTU 확인

    $ ifconfig eth6
    eth6      Link encap:Ethernet  HWaddr [삭제]
            UP BROADCAST RUNNING SLAVE MULTICAST  MTU:9000  Metric:1
            RX packets:2892 errors:0 dropped:0 overruns:0 frame:0
            TX packets:2728 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:1000
            RX bytes:256450 (250.4 KiB)  TX bytes:2785780 (2.6 MiB)
            Interrupt:32 Memory:d8000000-d8012800



tcpdump 명령어로 트래픽을 캡쳐 설정

  • 캡쳐 크기를 늘려줘야 패킷을 캡처할 수 있기에, -s 옵션으로 9000 바이트를 지정
  • tcpdump 명령어는 기본 MTU이 1500임으로 점보 프레임을 패킷 캡처를 위해서는 MTU 9000으로 변경 필요
    $ tcpdump -i bond1 -s 9000 -n -w jumbo.pcap
    tcpdump: listening on bond1, link-type EN10MB (Ethernet), capture size 9000 bytes


tshark 명령어로 프레임 크기 확인

  • 1500 바이트 이상의 크기가 많이 보이는 것을 확인 가능
    $ tshark -i bond1 -e frame.len -Tfields
    9014
    9014
    66
    9014
    9014
    66
    9014
    430
    66
    114
    4210
    66
    114
    9014
    7550
    66
    114
    114
    66
    4210
    9014
    66
    9014
    9014
    66
    6038
    114
    9014
    ^C1947 packets captured


네트워크 인터페이스에 MTU=9000으로 지정

  • CentOS, 레드햇 계열은 /etc/sysconfig/network-script/ifcfg-eth0 파일에 MTU=9000으로 설정 추가 후 네트워크 재실행
    $ vi /etc/sysconfig/network-script/ifcfg-eth0
    # 중략
    # 맨 아래에 추가
    MTU=9000

참고 : http://www.packetinside.com/2012/03/jumbo-frame.html