결합된 인터페이스를 설정하기 전에 NIC 링 버퍼 크기를 관리하는 시스템 기본 방법은 무엇입니까?

결합된 인터페이스를 설정하기 전에 NIC 링 버퍼 크기를 관리하는 시스템 기본 방법은 무엇입니까?

ethtool을 사용하면 NIC 링 버퍼 크기를 관리하는 것이 간단합니다. 예를 들면 다음과 같습니다.

ethtool -G eth0 rx 4096 tx 4096

(또는 eth0관리해야 하는 인터페이스로 교체하세요.)

현장에서 쉽게 할 수 있습니다.

문제는 결합된 인터페이스의 일부인 모든 슬레이브 인터페이스에서 이 작업을 수행하면 결합이 엉망이 된다는 것입니다. (많은 경우 수집자 ID는 이전처럼 이후에 일치하지 않습니다.) 편집: 이는 예상된 동작이 아니라는 것을 알게 되었습니다. (내가 관찰한 사례에서 왜 이런 일이 발생하는지 자세히 알아보면 업데이트할 수 있습니다.)

RHEL 7에서는 값을 (예를 들어) 로 ETHTOOL_OPTS설정 하여 이를 수행할 수 있습니다./etc/sysconfig/network-scripts/ifcfg-eth0ETHTOOL_OPTS="-G ${DEVICE} rx 4096 tx 4096"Red Hat 기사 보기). (경고: 위에서 언급한 애그리게이터 ID 불일치를 실제로 방지하는지는 테스트하지 않았습니다.)

그러나 Ubuntu 18.04에서는 쉽게 찾을 수 있는 곳이 없습니다.

나는 netplan 문서, systemd 네트워킹 문서 및 networkd-dispatcher를 파헤쳤습니다.

내 동료 중 한 명이 네트워크 스케줄러를 사용하여 솔루션을 생각해 냈습니다.~인 것 같다작동하지만 여전히 경쟁 조건이 관련되어 있는지 확실하지 않습니다.발생하다존재하는 대신 일하기 위해보장하다인터페이스 바인딩을 설정하기 전에 링 버퍼 크기를 설정하십시오. (추후) 아래에 올리겠습니다만, 정답인지는 모르겠습니다. (또한 시스템 문서에는 언급되지 않았습니다.)

질문은 다음과 같습니다.

이러한 인터페이스를 바인딩하기 전에 시작 시 이더넷 인터페이스 링 버퍼 크기를 관리하는 시스템 기본 방법은 무엇입니까?

답변1

Ubuntu 18의 udev 규칙은 다음과 같습니다.

ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="eth*|en*", RUN+="/sbin/ethtool -G $name rx 4096 tx 4096"

이를 넣으면 /etc/udev/rules.d/59-net.ring.rules부팅 프로세스 초기에 적용됩니다.

답변2

매개변수를 설정하는 systemd의 기본 방법은 파일을 사용하는 것입니다 .link(참조:systemd.link 맨페이지하지만 현재 링 버퍼 매개변수를 설정할 수 있는 방법은 없습니다. 내가 아는 한, 이를 수행하는 기본 시스템 방식은 없습니다. 이것은 새로운 systemd가 나오면 바뀔 것입니다.와일드카드 기능 요청RxBufferSize및 옵션으로 게시됩니다 TxBufferSize.

/etc/network/interfaces실제로 구성을 사용하려면 pre-up거기에서 명령을 사용하십시오. systemd-networkd를 사용하는 것보다 이것이 제가 선호하는 것입니다.

장치가 나타날 때 장치와 일치하도록 일부 udev 규칙을 설정하고 거기에서 ethtool을 실행할 수 있습니다. 이는 systemd가 장치에 대한 정보를 배우기 전(그리고 장치에서 작업을 수행하기 전에)을 실행해야 합니다.

서비스가 바인딩된 장치를 설정하기 전과 장치가 표시된 후에 실행되는 시스템 서비스(oneshot을 입력하고 ethtool만 실행)를 설정하고 사용할 수 있습니다. systemd는 적절한 서비스를 찾는 .device데 사용되는 이더넷 장치용 장치를 만듭니다 systemctl list-units | grep sys-subsystem-net(따라서 서비스를 원하는 대로 만들 수 있습니다).

관련 정보