EN JA
BXE(4)
BXE(4) FreeBSD Kernel Interfaces Manual BXE(4)

名称

bxeBroadcom NetXtreme II Ethernet 10Gb PCIe アダプタドライバ

書式

このドライバをカーネルにコンパイルするためには、次の行を利用者のカーネル設定ファイルに置きます:

device bxe

もう一つの方法として、ブート時にモジュールとしてドライバをロードするためには、次の行を loader.conf(5) に置きます:

if_bxe_load="YES"

解説

bxe ドライバは、10Gb チップの Broadcom NetXtreme II ファミリに基づいた PCIe 10Gb イーサネットアダプタのサポートを行います。ドライバは、ジャンボフレーム、VLAN タグ付け、チェックサムオフロード (IPv4, TCP, UDP, IPv6-TCP, IPv6-UDP)、MSI-X 割り込み、 TCP Segmentation Offload (TSO)、Large Receive Offload (LRO) と Receive Side Steering (RSS) をサポートします。

ハードウェア

bxe ドライバは、下記を含む 10Gb イーサネットコントローラチップの Broadcom NetXtreme II ファミリに基づいた様々な NIC のサポートを行います:

  • Broadcom NetXtreme II BCM57710 10Gb
  • Broadcom NetXtreme II BCM57711 10Gb
  • Broadcom NetXtreme II BCM57711E 10Gb
  • Broadcom NetXtreme II BCM57712 10Gb
  • Broadcom NetXtreme II BCM57712-MF 10Gb
  • Broadcom NetXtreme II BCM57800 10Gb
  • Broadcom NetXtreme II BCM57800-MF 10Gb
  • Broadcom NetXtreme II BCM57810 10Gb
  • Broadcom NetXtreme II BCM57810-MF 10Gb
  • Broadcom NetXtreme II BCM57840 10Gb / 20Gb
  • Broadcom NetXtreme II BCM57840-MF 10Gb

設定

ドライバの振る舞いを調整するるために設定することができる多くの設定パラメータがあります。次のシステムブートの間に影響を受ける loader.conf(5) ファイルによってこれらのパラメータを設定することができます。次のパラメータは、ドライバの ALL インスタンスに影響します。
hw.bxe.debug
DEFAULT = 0
 
ドライバのデフォルトのロギングレベルを設定します。より詳細については、下記の「診断とデバック」セクションを参照してください。
hw.bxe.interrupt_mode
DEFAULT = 2
 
デフォルトの割り込みモードを設定します: 0=IRQ, 1=MSI, 2=MSIX。 MSIX に設定され、割り付けが失敗するなら、ドライバは、ロールバックし、 MSI の割り付けを試みます。 MSI の割り付けが失敗するなら、ドライバは、ロールバックし、固定のレベル IRQ 割り付けを試みます。 IRQ 割り付けが失敗するなら、ドライバのロードは、失敗します。 MSI/MSIX で、ドライバは、さらにデフォルト処理ために、もう 1 つの各キューのためのベクトルを割り付けることを試みます。
hw.bxe.queue_count
DEFAULT = 4
 
早いパスパケット処理のキューのデフォルト番号を設定します。 1 つの MSI/MSIX 割り込みベクトルは、キューごとに割り付けられることに注意してください。
hw.bxe.max_rx_bufs
DEFAULT = 0
 
キューごとに割り付けられる受信バッファの最大数を設定します。ゼロ (0) は、すべてのバッファ記述子のための受信バッファを割り付けることを意味します。デフォルトで、これは、この設定パラメータのための最大値であるキューごとの 4080 のバッファと一致します。
hw.bxe.hc_rx_ticks
DEFAULT = 25
 
受信パスで一体化するホスト割り込みのためにチックの数を設定します。
hw.bxe.hc_tx_ticks
DEFAULT = 50
 
受信パスで一体化するホスト割り込みのためにチックの数を設定します。
hw.bxe.rx_budget
DEFAULT = 0xffffffff
 
割り込みで処理する受信パケットの最大数を設定します。予算 (budget) が到達されるなら、残りの/保留中のパケットは、スケジュールされたタスクキューで処理されます。
hw.bxe.max_aggregation_size
DEFAULT = 32768
 
最大の LRO 集合体のバイトサイズを設定します。ハードウェアが集めるより多くのパケットのより高い値。最大は、65K です。
hw.bxe.mrrs
DEFAULT = -1
 
PCI MRRS を設定する: -1=Auto, 0=128B, 1=256B, 2=512B, 3=1KB
hw.bxe.autogreeen
DEFAULT = 0
 
AutoGrEEEN を設定する: 0=HW_DEFAULT, 1=FORCE_ON, 2=FORCE_OFF
hw.bxe.udp_rss
DEFAULT = 0
 
UDP のための 4 つのタプル (tuple) RSS を有効にする / 無効にする: 0=DISABLED, 1=ENABLED

キューの数と受信バッファを修正するとき、特に注意しなければなりません。 FreeBSD は、 mbuf(9) 割り付けの最大数に制限されています。バッファの割り付けが失敗するなら、インタフェースの初期化は、失敗し、インタフェースは、使用可能になりません。ドライバは、バッファの割り付けのために最善を尽くします。それは、すべてか、または努力なしです。

sysctl(8) を使用して、 mbuf(9) の割り付けの制限を調整することができ、次のように netstat(1) で現在の使用法を見ることができます:

# netstat -m 
# sysctl kern.ipc.nmbclusters 
# sysctl kern.ipc.nmbclusters=<#>

動的にデフォルトの設定を上書きするためにインスタンスごとに設定することができる追加の設定パラメータがあります。下記の '#' は、ドライバのインスタンス / インタフェースのユニット番号と置き換えなければなりません:

dev.bxe.#.debug
DEFAULT = 0
 
ドライバのインスタンスのデフォルトのロギングレベルを設定します。詳細については、上記の hw.bxe.debug と下記の「診断とデバッグ」セクションを参照してください。
dev.bxe.#.rx_budget
DEFAULT = 0xffffffff
 
ドライバのインスタンスのための割り込みで処理する受信パケットの最大数を設定します。より詳細については、上記の hw.bxe.rx_budget を参照してください。

追加の項目は、 ifconfig(8) を使用して設定することができます:

MTU - Maximum Transmission Unit
DEFAULT = 1500
 
RANGE = 46-9184
 
# ifconfig bxe# mtu <n>
Promiscuous Mode
DEFAULT = OFF
 
# ifconfig bxe# [ promisc | -promisc ]
Rx/Tx Checksum Offload
DEFAULT = RX/TX CSUM ON
 
Rx と Tx の設定は、依存していないことに注意してください。
 
# ifconfig bxe# [ rxcsum | -rxcsum | txcsum | -txcsum ]
TSO - TCP Segmentation Offload
DEFAULT = ON
 
# ifconfig bxe# [ tso | -tso | tso6 | -tso6 ]
LRO - TCP Large Receive Offload
DEFAULT = ON
 
# ifconfig bxe# [ lro | -lro ]

診断とデバッグ

sysctl(8) を通して bxe によって公開された多くの統計値があります。

デフォルトのドライバの設定をダンプするためには:

# sysctl -a | grep hw.bxe

すべてのインスタンスの設定と詳細な統計値をダンプするためには:

# sysctl -a | grep dev.bxe

(ドライバにインスタンス / インタフェースのユニット番号で '#' を置き換え) 単一のインスタンスのための情報をダンプするためには:

# sysctl -a | grep dev.bxe.#

単一のインスタンスのすべてのキューのための情報をダンプするためには:

# sysctl -a | grep dev.bxe.#.queue

(キュー番号で追加の '#' を置き換え) 単一のインスタンスの単一のキューに対する情報をダンプするためには:

# sysctl -a | grep dev.bxe.#.queue.#

bxe ドライバには、システムログに大量のデバッグメッセージをダンプする能力があります。 hw.bxe.debug sysctl(8) でロギングのデフォルトのレベルを設定することができます。ダンプされているあまりにも多くのログ記録の結果となるかもしれないので、この設定には注意してください。このパラメータがデフォルトのパラメータであるので、すべてのインスタンスに影響し、ドライバのタイミングを劇的に変更します。デバッグを援助するよりよい選択肢は、 dev.bxe.#.debug sysctl(8) で特定のインスタンスのデバッグレベルを動的に変更することです。これによって、利用者は、まとめてさまざまなデバッググループのログ記録のオン/オフを切り替えることができます。

切り替えることができるさまざまなデバッググループは、次の通りです:

DBG_LOAD   0x00000001 /* ロードしアンロードします */ 
DBG_INTR   0x00000002 /* 割り込み処理       */ 
DBG_SP     0x00000004 /* slowpath 処理      */ 
DBG_STATS  0x00000008 /* stat 更新          */ 
DBG_TX     0x00000010 /* パケット送信       */ 
DBG_RX     0x00000020 /* パケット受信       */ 
DBG_PHY    0x00000040 /* phy/link 処理      */ 
DBG_IOCTL  0x00000080 /* ioctl 処理         */ 
DBG_MBUF   0x00000100 /* mbuf 情報のダンプ  */ 
DBG_REGS   0x00000200 /* レジスタのアクセス */ 
DBG_LRO    0x00000400 /* lro 処理           */ 
DBG_ASSERT 0x80000000 /* デバッグのアサート */ 
DBG_ALL    0xFFFFFFFF /* flying monkeys     */

例えば、bxe0 で受信パスの問題をデバッグするためには:

# sysctl dev.bxe.0.debug=0x22

終了するとき、ログ記録の裏打ちをオフにします:

# sysctl dev.bxe.0.debug=0

歴史

bxe デバイスドライバは、 FreeBSD 9.0 ではじめて登場しました。

作者

bxe ドライバは、 Eric Davis <edavis@broadcom.com>, David Christensen <davidch@broadcom.com>と Gary Zambrano <zambrano@broadcom.com>によって書かれました。
April 29, 2012 FreeBSD