고쳐 쓰다:

고쳐 쓰다:

우리 애플리케이션이 FreeBSD 12에서 더 나은 성능을 얻을 수 있도록 NIC를 구성해야 합니다. 시스템은 FreeBSD 12.0-RELEASE-p3 GENERIC amd64

먼저 Linux 시스템용 솔루션을 보여드리고 싶습니다. 다중 대기열 NIC에 16개의 RX 및 16개의 TX 대기열을 설정하려면 명령을 적용합니다 ethtool -L ens786f1 combined 16. 우리는 FreeBSD 시스템에 대한 대체 요청을 찾고 있습니다.

FreeBSD에서는 네트워크 카드가 ixl드라이버에 의해 구동됩니다. override_qs_enable, override_nrxqs및 같은 동일한 작업을 수행해야 하는 일부 커널 변수를 찾았습니다 override_ntxqs.맨페이지). 이를 설정하는 명령은 sysctl dev.ixl.1.iflib.override_qs_enable="1"etc 와 유사합니다( 다른 시스템에서 다른 인터페이스를 가진 동일한 장치입니다) ens786f1.ixl1

시작할 때마다 이러한 변수를 설정하고 싶습니다. 매뉴얼 페이지에는 ixl드라이버가 로드되기 전에(로더를 사용하여) 시작 시 이러한 변수를 설정해야 한다고 나와 있으므로 /boot/loader.conf이전에는 파일이 비어 있었기 때문에 다음과 같이 설정 라인을 추가했습니다.

#Setup NIC#
dev.ixl.1.iflib.override_qs_enable="1"
dev.ixl.1.iflib.override_nrxqs="16"
dev.ixl.1.iflib.override_ntxqs="16"

/boot/defaults/loader.conf포함이 /boot/loader.conf사용되므로 loader_conf_files내 부팅 파일이 실행되어야 합니다. 하지만 재부팅하고 보기 변수를 사용하면 sysctl변수는 기본값(0)이고 보기에서는 dmesg장치가 원하는 방식으로 설정되지 않습니다(여전히 8개의 RX 및 8개의 TX 대기열이 표시됨).

아마도 /boot/loader.conf가 호출되지 않았을 수도 있고, ethtoolFreeBSD에서 명령을 바꾸는 것은 단지 나쁜 접근 방식일 수도 있습니다.

일부 로그:Pastebin.com/YGTxqxdx


(파일에도 저장됨)을 사용하여 변수 설정을 시도했지만 kenv재부팅 후 옵션이 저장되지 않는 것 같습니다.


며칠 간의 조사 끝에 NIC를 새로 설정/편집하려면 기존 VF를 사용해야 할 수도 있다는 사실을 알아냈습니다 iovctl. 을 호출하면 iovctl -S -d ixl1매개변수가 있습니다 num-queues. 이 구성에 경험이 있는 사람이 있습니까?


문제는 로더에 있습니다. 로더가 GRUB에서 잘못 설정되었습니다. 그러나 동일한 드라이버를 사용하여 여러 RX/TX 대기열을 설정하는 데 도움이 필요한 경우 아래 답변은 매우 좋은 정보 세트입니다.

답변1

바라보다kern.ipc.somaxconn의 설정을 지속되게 만드는 방법은 무엇입니까?

따옴표를 제거하십시오."

dev.ixl.1.iflib.override_qs_enable=1
dev.ixl.1.iflib.override_nrxqs=16
dev.ixl.1.iflib.override_ntxqs=16

또는 로 /etc/rc.d/sysctl start테스트service sysctl restart

고쳐 쓰다:

이전 버전의 FreeBSD에서는 일반적으로 hw.ixl.max_queues.를 설정했지만 ixl 드라이버는 FreeBSD 12에서 iflib를 사용하도록 변경된 것 같습니다.

sysctl -d dev.ixl운전자가 실제로 사용하고 있음을 확인할 수 있는 경우iflib

dev.ixl.1.iflib.override_qs_enable: permit #txq != #rxq
dev.ixl.1.iflib.override_nrxqs: # of rxqs to use, 0 => use default #
dev.ixl.1.iflib.override_ntxqs: # of txqs to use, 0 => use default #

웹 검색을 통해 드라이버에 추가할 수 있는 차이점을 찾을 수 있었기 때문에 이를 확인했습니다(rS335338: ixl(4): iflib를 사용하도록 업데이트).

현재 설정이 기본값입니다.

dev.ixl.1.iflib.override_qs_enable: 0
dev.ixl.1.iflib.override_nrxqs: 0
dev.ixl.1.iflib.override_ntxqs: 0

그러면 대기열 수가 코어 수(이 경우 8개)로 설정되어야 합니다. 이것iflib매뉴얼 페이지에는 이러한 항목을 설정해야 한다고 명시되어 있습니다.앞으로드라이버를 로드합니다. Sysctl을 다시 시작하면 도움이 되지 않습니다. 다시 시작하기만 하면 됩니다.

그런 다음 다음을 설정해야 합니다 /boot/loader.conf.

dev.ixl.1.iflib.override_qs_enable=1
dev.ixl.1.iflib.override_nrxqs=16
dev.ixl.1.iflib.override_ntxqs=16

이 옵션을 설정한 후에는 재부팅하고 및 dmesg | grep ^ixl를 사용하여 확인 해야 합니다 sysctl dev.ixl.1.iflib.

현재 출력은 dmesg다음과 같습니다.

ixl0: pxm cpus: 8 queue msgs: 128 admincnt: 1
ixl0: using 8 rx queues 8 tx queues

ixl1: pxm cpus: 8 queue msgs: 128 admincnt: 1
ixl1: using 8 rx queues 8 tx queues

당신은 이 모든 일을 이전에 해봤지만 아무 소용이 없다고 주장합니다.

버그 리포트를 보면버그 230465 - ixl: 네트워크 매핑 모드에서 작동하지 않습니다.하지만 우리는 확인을 받았어요제프 파이퍼.찰스 곤살베스그것이 그에게 효과가 있다는 추가 확인.

이는 FreeBSD의 매우 일반적인 설정이며 일반적으로 작동합니다. 같은 항상할 수 있다오프로드 차량 운전자인데, 위 확인 내용에 따르면 그렇지는 않은 것 같습니다. ixl 카드가 없어서 안타깝게도 아무것도 확인할 수 없습니다.

당신 kenv도 언급했지요. 그리고제프 파이퍼설정할 수 있는지 확인하세요. 하지만 kenv이 작업은 커널의 정적 드라이버가 아닌 드라이버 모듈을 사용할 때만 수행 할 수 있다는 점에 유의하세요 !

따라서 위 내용을 바탕으로 "ShouldWork(tm)"라고 주장하고 loader.confFreeBSD 12(또는 그 이후 버전)의 커널 드라이버에 설정하겠습니다. 거의 항상 uname -aFreeBSD 관련 질문을 추가하라는 알림을 제공합니다.

관련 정보