私たちのアプリケーションが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が呼び出されていないかもしれませんが、ethtool
FreeBSDでコマンドを変更するのは悪い方法です。
一部のログ: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 #
Web検索でドライバに追加できる違いが見つかったので、これを確認しました(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.conf
FreeBSD 12(またはそれ以降のバージョン)のカーネルドライバに設定します。ほぼ常にuname -a
FreeBSD関連の質問を追加するように通知します。