blog.stackframe.dev

[systemd-networkd] 점보 프레임 설정하기

인터넷 단에서는 점보 프레임 지원이 열악한 관계로 아무리 MTU 9000으로 설정하고 패킷을 보내도 강제로 분할되거나 심하면 드롭되어 버린다. 이로인해 점보 프레임 설정으로 인한 장점이 없어지고 오히려 성능이 하락한다. 하지만 로컬 네트워크라면 직접 점보 프레임을 지원하는 장치로 구성하면 되기 때문에 성능 이득을 볼 수 있다.

systemd-networkd에서 점보 프레임 MTU를 설정하는 방법은 최대 3가지가 있다. 물리적 장치라면 .link 혹은 .network 설정파일 안의 [Link] 섹션에 MTUBytes=9000 옵션을 넣으면 된다. 만약 .netdev 설정파일로 만들어진 가상 장치의 MTU를 설정하고 싶다면 물리적 장치와 동일하게 해당 .netdev 파일의 [Link] 섹션에 MTUBytes=9000 옵션을 추가하는 것도 가능하다. 참고로 TUN과 TAP 가상장치는 .netdev 파일에서 설정할 수 없고 이 가상장치에 대한 .network 파일에서 설정해야 한다.

...

[Link]
MTUBytes=9000

...

.link 설정은 따로 변경한 것이 없다면 모든 장치가 systemd의 기본 설정인 /usr/lib/systemd/network/99-default.link를 사용하게 된다. 이 파일을 수정하거나 drop-in 설정을 넣는다면 다른 장치들에도 영향을 미치기 때문에 단일 인터페이스만 점보 프레임을 설정하고 싶다면 아예 해당 장치를 위한 .link 설정을 만들어야 한다. 물론 이렇게하면 99-default.link 설정은 적용되지 않기 때문에 장치 이름이나 MAC 주소가 변동될 가능성이 있으므로 조심해야 한다. 그래서 나는 MTU 설정만을 위해 .link를 손대는건 추천하지 않는다. 참고로 설정파일의 순서는 파일 이름의 사전식이므로 99-default.link 보다 앞에 오는 이름으로 만들어야 해당 설정이 사용된다. (e.g. 98-ethernet.link)

위의 .link 대신 .network 설정을 만지는게 편리할 것이다. .network은 기본적으로 모든 장치에 적용되는 설정이 없으며 보통 한가지 장치나 동일한 장치 타입에 대해 설정하므로 MTU를 설정하기에 적절하다. 점보 프레임을 설정할 장치의 .network 파일을 수정하거나 이 장치만을 위한 .network 파일을 만들어서 위의 옵션을 추가하면 된다. 이 설정의 순서도 사전식이므로 파일 이름을 적절하게 정해야 한다.

가상 장치를 .netdev로 만들어서 사용하고 있다면 이 파일에 옵션을 넣는 것도 괜찮다.

설정 후 systemd-networkd를 재시작하면 MTU 값이 9000으로 바뀌었을 것이다.

$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc fq_codel state UP mode DEFAULT group default qlen 1000

참고로 networkctl 명령을 사용하면 현재 인터페이스의 상태와 어떤 .link, .network 설정이 사용되고 있는지 확인할 수 있다:

$ networkctl status eth0
● 2: eth0
                 Link File: /etc/systemd/network/98-ethwlan.link
              Network File: /etc/systemd/network/eth.network
                      Type: ether
                     State: routable (configured)
                      Path: pci-0000:07:00.0
                    Driver: r8169
                    Vendor: Realtek Semiconductor Co., Ltd.

댓글