ethtool을 사용하면 NIC 링 버퍼 크기를 관리하는 것이 간단합니다. 예를 들면 다음과 같습니다.
ethtool -G eth0 rx 4096 tx 4096
(또는 eth0
관리해야 하는 인터페이스로 교체하세요.)
현장에서 쉽게 할 수 있습니다.
문제는 결합된 인터페이스의 일부인 모든 슬레이브 인터페이스에서 이 작업을 수행하면 결합이 엉망이 된다는 것입니다. (많은 경우 수집자 ID는 이전처럼 이후에 일치하지 않습니다.) 편집: 이는 예상된 동작이 아니라는 것을 알게 되었습니다. (내가 관찰한 사례에서 왜 이런 일이 발생하는지 자세히 알아보면 업데이트할 수 있습니다.)
RHEL 7에서는 값을 (예를 들어) 로 ETHTOOL_OPTS
설정 하여 이를 수행할 수 있습니다./etc/sysconfig/network-scripts/ifcfg-eth0
ETHTOOL_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
(따라서 서비스를 원하는 대로 만들 수 있습니다).