ToDo:
2.7.4から2.8.0に上がったところで、OMRON BW100Tとの通信がうまくいかなくなって、しばらくnut-2.7.4_21を使っていたが、原因が分かった
USB通信回りのバックエンドだが、 2.7.4までは libusb-0.1 APIベースの実装、 2.8.0から libusb-0.1 APIと libusb-1.0 APIの両対応になっており、 configureによる自動検出で libusb-1.0 APIが選択されるのだが、 libusb-1.0版だとうまく通信出来ない模様
# /usr/local/libexec/nut/blazer_usb -D -D -D -D -a BW100T Network UPS Tools - Megatec/Q1 protocol USB driver 0.14 (2.8.0) 0.000000 [D3] main_arg: var='driver' val='blazer_usb' 0.000011 [D3] main_arg: var='port' val='auto' 0.000020 [D3] main_arg: var='desc' val='OMRON BW100T' 0.000024 [D3] main_arg: var='vendorid' val='0590' 0.000031 [D3] main_arg: var='productid' val='00d1' 0.000037 [D3] main_arg: var='subdriver' val='ippon' 0.000043 [D3] main_arg: var='default.battery.voltage.high' val='27.0' 0.000048 [D3] main_arg: var='default.battery.voltage.low' val='23.5' 0.000053 [D3] main_arg: var='runtimecal' val='259,100,780,49' 0.000062 [D1] debug level is '4' 0.001502 [D2] Checking device 1 of 1 (0590/00D1) 0.024657 [D2] - VendorID: 0590 0.024667 [D2] - ProductID: 00d1 0.024670 [D2] - Manufacturer: OMRON 0.024673 [D2] - Product: BW100T 0.024676 [D2] - Serial Number: unknown 0.024679 [D2] - Bus: 001 0.024682 [D2] - Device: unknown 0.024685 [D2] - Device release number: 0100 0.024688 [D2] Trying to match device 0.024691 [D3] match_function_regex: matching a device... 0.024704 [D2] Device matches 0.024707 [D2] Reading first configuration descriptor 0.024731 [D3] libusb_kernel_driver_active() returned 1 (driver active) 0.024735 [D2] successfully set kernel driver auto-detach flag 0.024742 [D2] failed to claim USB device: Other error 0.024746 [D1] failed to detach kernel driver from USB device: Other error 0.024749 [D2] failed to claim USB device: Other error 0.024753 [D1] failed to detach kernel driver from USB device: Other error 0.024756 [D2] failed to claim USB device: Other error 0.024758 [D1] failed to detach kernel driver from USB device: Other error 0.024762 [D2] failed to claim USB device: Other error 0.024765 [D1] failed to detach kernel driver from USB device: Other error 0.024771 Can't claim USB device [0590:00d1]@0/0: Other error
libusb-0.1 APIで動く nut-2.7.4に問題は無いので、drivers/libusb0.cを使うべく sysutils/nut/Makefile内の USB_CONFIGURE_WITHの設定をusb=autoから usb=libusb-0.1に変えて、libusb-0.1 APIを要求すると configureに失敗する
原因は、configure scriptでpkgconfからlibusb-0.1 APIのmodule versionを検出する際の 名前に libusbを使っているが、FreeBSD system側に/usr/libdata/pkgconf/libusb-0.1.pcのみが用意されているため
/usr/libdata/pkgconfにsymbolic linkを作るのも他で問題がでる可能性があるので、 sysutils/nut/Makefileにpre-patchターゲットを追加して、pkgconfの参照先を変更
pre-patch: @${REINPLACE_CMD} -i '' -e 's| libusb 2| libusb-0.1 2|' ${WRKSRC}/m4/nut_check_libusb.m4 @${REINPLACE_CMD} -i '' -e 's| libusb 2| libusb-0.1 2|' ${WRKSRC}/configure
一応、libusb-0.1 API版でビルドすると nut-2.8.0でも問題なく動く模様
本来は、libusb-1.0 API版で発生しているfailed to claim USB deviceエラーの原因を調べるのが本道なのだが
# /usr/local/libexec/nut/blazer_usb -D -D -D -D -a BW100T Network UPS Tools - Megatec/Q1 protocol USB driver 0.14 (2.8.0) 0.000000 [D3] main_arg: var='driver' val='blazer_usb' 0.000011 [D3] main_arg: var='port' val='auto' 0.000020 [D3] main_arg: var='desc' val='OMRON BW100T' 0.000024 [D3] main_arg: var='vendorid' val='0590' 0.000031 [D3] main_arg: var='productid' val='00d1' 0.000036 [D3] main_arg: var='subdriver' val='ippon' 0.000042 [D3] main_arg: var='default.battery.voltage.high' val='27.0' 0.000047 [D3] main_arg: var='default.battery.voltage.low' val='23.5' 0.000052 [D3] main_arg: var='runtimecal' val='259,100,780,49' 0.000062 [D1] debug level is '4' 0.001562 [D3] usb_busses=0x800275200 0.001569 [D2] Checking device (0590/00D1) (/dev/usb//dev/ugen1.5) 0.024190 [D2] - VendorID: 0590 0.024200 [D2] - ProductID: 00d1 0.024205 [D2] - Manufacturer: OMRON 0.024208 [D2] - Product: BW100T 0.024211 [D2] - Serial Number: unknown 0.024214 [D2] - Bus: /dev/usb 0.024217 [D2] - Device: /dev/ugen1.5 0.024219 [D2] - Device release number: 0100 0.024223 [D2] Trying to match device 0.024226 [D3] match_function_regex: matching a device... 0.024255 [D2] Device matches 0.024262 [D3] nut_usb_set_altinterface: skipped usb_set_altinterface(udev, 0) 0.024282 Please note that this driver is deprecated and will not receive new development. If it works for managing your devices - fine, but if you are running it to try setting up a new device, please consider the newer nutdrv_qx instead, which should handle all 'Qx' protocol variants for NUT. (Please also report if your device works with this driver, but nutdrv_qx would not actually support it with any subdriver!) 0.024286 [D2] Trying megatec protocol... 0.027187 [D3] send: Q1 0.297257 [D3] read: (100.0 000.0 099.9 047 50.1 27.1 34.9 00101000 0.297300 [D2] Status read in 1 tries 0.297304 Supported UPS detected with megatec protocol 0.299182 [D3] send: F 0.401247 [D3] read: NAK 0.401260 [D2] blazer_rating: short reply 0.401264 [D1] Rating read 1 failed 0.403181 [D3] send: F 0.513253 [D3] read: NAK 0.513264 [D2] blazer_rating: short reply 0.513267 [D1] Rating read 2 failed 0.515185 [D3] send: F 0.625251 [D3] read: NAK 0.625263 [D2] blazer_rating: short reply 0.625267 [D1] Rating read 3 failed 0.625271 Rating information unavailable 0.627186 [D3] send: I 0.729249 [D3] read: NAK 0.729260 [D2] blazer_vendor: short reply 0.729264 [D1] Vendor information read 1 failed 0.731187 [D3] send: I 0.841254 [D3] read: NAK 0.841268 [D2] blazer_vendor: short reply 0.841272 [D1] Vendor information read 2 failed 0.843185 [D3] send: I 0.953244 [D3] read: NAK 0.953257 [D2] blazer_vendor: short reply 0.953261 [D1] Vendor information read 3 failed 0.953266 Vendor information unavailable 0.953286 [D2] battery runtime exponent : 1.545 0.953290 [D2] battery runtime nominal : 259.0 0.953294 [D2] battery runtime estimate : 259.0 0.953298 No charge time specified, using built in default [43200 seconds] 0.953301 No idle load specified, using built in default [10.0 %] 0.955176 [D3] send: Q1 1.217248 [D3] read: (100.0 000.0 099.9 047 50.1 27.1 34.9 00101000 1.217494 [D2] dstate_init: sock /var/db/nut/blazer_usb-BW100T open on fd 8 1.219177 [D3] send: Q1 1.489238 [D3] read: (100.0 000.0 099.9 047 50.1 27.1 35.0 00101000
ざっくり、drivers/libusb1.cのコメントを流し読みしたが…
要検証だが
あたりで、libusb-1.0 API版が動くようになるのでは?
(2022/05/22 追記) nut-2.7がdefault設定で動く環境では、HAVE_LIBUSB_SET_AUTO_DETACH_KERNEL_DRIVERを無効にして動かすのが一番素直な模様
pre-patch: @${REINPLACE_CMD} -i '' -e 's|HAVE_LIBUSB_SET_AUTO_DETACH_KERNEL_DRIVER|__HAVE_LIBUSB_SET_AUTO_DETACH_KERNEL_DRIVER|g' ${WRKSRC}/drivers/libusb1.c
家内LANのコアスイッチ換装用に発注していたQNAP QSW-M1208-8Cが本日、着荷した
現行のコアスイッチは、Netgear S3300-28Xで 1000BASE-Tx24 + 10GBASE-Tx2 + SFP+x2なL3マネージドスイッチで、10GBASE-TなSFP+モジュールを2個導入して、常設で9ポート埋まった状態で運用されている。(サテライトに、1000BASE-T 8portスイッチ有り)
購入したQSW-M1208C-8Cは、SFP+x4 + 10GBASET-T(SFP+コンボ)x8な L2マネージドスイッチ
現行機 S3300-28X導入時は、サーバーとメインデスクトップに10GBASE-T導入を 想定しており、NAS側のインターフェースは1000BASE-T 2/4ポート構成だったので、トランキングで帯域を確保することを前提に機種選定を実施した。 予算を加味した候補Netgear S3300(10G 4ポート)と 10G 8ポートスイッチ(12/16ポートスイッチは些か高すぎたので候補外)から S3300-28Xを選定した。 NASとのトランキング接続運用時は、最大で10G 2ポート + 10BASE-T 1ポート + 1000BASE-T 13ポートの16ポート接続になっていたので、 あながち間違った選択では無かったと思う。
更新のメリットは、スイッチ内部のファブリック容量の増加と NBASE-T(最近の無線LAN基地局やNASが標準で2.5GBASE-Tだったりする)を 含んだ10GbEの12ポート運用及び半導体の世代更新(5~6年経過している)に 伴う発熱低減・ファンノイズ低減である。 一方、マネージドスイッチとしてはL3からL2へのダウングレードとなるが、 VLANとトランキング(NAS 10GbE化前に運用)ぐらいしか使っていないので、 問題無いはず…
10BASE-Tのみな旧式機器は、QSW-M1208-8Cと直接接続出来ない (NBASE-Tサポート世代は、互換性が100BASE-TX以上な機種しか見たことが無い)ので、旧式の小さなスイッチを挟む予定(どこかの時点で機器自体を更新したいが…)
これから、各種初期設定の確認、Tagged VLAN/Port VLANの仕込みと接続性の確認を行ってリプレース実施を予定
さすがに、28ポートスイッチからのリプレースなので、筐体の小型化でラックの棚に空きスペースが出来る予定
コード整理に向けた改修アイデア
鯖の10GBASE-CR(10G SFP+ DA)接続向けに最近再入荷したOLIPSPECで調達
ものは、MCX4121A-ACATで 1/10/25GbE対応の SFP28 dual portのカード
10G SFP+ DAで使うだけなら、Intel X520-DAとか XXV710-DAとかも候補だが、 ノーブランド品が最近安価なX520だとバスがPCIe Gen2 x8なので Gen3 x4で使った際の帯域が気になるのと、Intel NICはSFPにベンダロックがあるとも聴くので、ベンダロック無しのMellanoxを選択(Connext X-4とXXV710だとどちらも25GbE SFP28で小売流通価格もほぼ同じ)
ネット通販系だと既に製造終了なConnect X-3 ENの流通在庫を見かけるが 10GbEまでな上に、新品だとConnext X-4 Lx ENと値段が変わらない罠
Connect X-3や X-2(PCIe Gen2 x8)の中古品は、ヤフオク等で見かけるが出所とコンディションが怪しい割に、新品と大差ない値付けになっているものが多い(不良在庫の新古品の放出だとしても、半値以下でも無ければサポートが付く代理店経由の品が欲しい)
FreeBSD 13.1-STABLEだとdevd->devmatchのコンボで、mlx5_coreドライバの読み込みまでは自動化されていて、挿すだけで認識してくれる
実際に、Ethernetを使うには/etc/rc.confのkld_loadにmlx5enを追加しておけば、network interface mce#が生えてくる
通信自体は普通に動くし、TCPであっさり10Gbit/sec出るあたりは流石…
NETIO - Network Throughput Benchmark, Version 1.33 (C) 1997-2012 Kai Uwe Rommel TCP connection established. Packet size 1k bytes: 746.27 MByte/s Tx, 499.45 MByte/s Rx. Packet size 2k bytes: 1.086 GByte/s Tx, 863.71 MByte/s Rx. Packet size 4k bytes: 1.112 GByte/s Tx, 1.113 GByte/s Rx. Packet size 8k bytes: 1.128 GByte/s Tx, 1.133 GByte/s Rx. Packet size 16k bytes: 1.127 GByte/s Tx, 1.132 GByte/s Rx. Packet size 32k bytes: 1.136 GByte/s Tx, 1.125 GByte/s Rx. Done.
接続経路はMTU 9000な通信路で、MCX4121A-ACAT - 10G SFP+ DA - p28/SFP+ Netgear S3300-28X p26/RJ45 - Cat.6A - X550-T2
MTU1500だと、安定に性能が出ないようで、Connect X-4側のTxもしくは X550-T2側のRxで詰まっているのかなぁ…
NETIO - Network Throughput Benchmark, Version 1.33 (C) 1997-2012 Kai Uwe Rommel TCP connection established. Packet size 1k bytes: 537.65 MByte/s Tx, 490.80 MByte/s Rx. Packet size 2k bytes: 568.66 MByte/s Tx, 848.37 MByte/s Rx. Packet size 4k bytes: 601.07 MByte/s Tx, 930.48 MByte/s Rx. Packet size 8k bytes: 603.51 MByte/s Tx, 936.73 MByte/s Rx. Packet size 16k bytes: 425.26 MByte/s Tx, 784.93 MByte/s Rx. Packet size 32k bytes: 338.73 MByte/s Tx, 904.71 MByte/s Rx. Done.
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記