トップ 最新 追記

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|

2022-05-14 [長年日記]

_ [FreeBSD]sysutils/nut 2.8.0

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/Makefilepre-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のコメントを流し読みしたが…

  • failed to claim USB device: Other errorの出所は、libusb_claim_interface内のlibusb_detach_kernel_driverから
  • failed to detach kernel driver from USB device: Other errorに関しては、libusb_claim_interfaceに失敗した後のlibusb_detach_kernel_driverから
  • libusb_set_auto_detach_kernel_driverしてるコードのコメントだと、driver codeがroooで動いてないとauto_detachなlibusb_claim_interfaceは動かないとあるが、nutの実行権限のdefaultはuucp

要検証だが

  • nutの実行権限をrootにする
    • blazer_usbに-u rootを渡す(試験)
    • /usr/local/etc/nut/ups.confuserパラメータを追加する
      • libusb-1.0で動くが、 built-in defaultと異なるアカウントだと警告が出る Group and/or user account for this driver was customized ('root:uucp') compared to built-in defaults. Fixing socket '/var/db/nut/blazer_usb-BW100T' ownership/access (追試 2022/05/20)
  • auto_detachを外す
    • drivers/libusb1.cからHAVE_LIBUSB_SET_AUTO_DETACH_KERNEL_DRIVERを無効にする
      • auto detach無効状態だと、built-in defaultのuucpアカウントで、device specialにuucp group writableを与えた状態で普通に動く(追試 2022/05/22)

あたりで、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

2022-05-20 [長年日記]

_ [雑記]QSW-M1208-8C購入

家内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ポートスイッチからのリプレースなので、筐体の小型化でラックの棚に空きスペースが出来る予定

QSW-M1208-8C雑感

  • Webインターフェースは、今風の技術で作られていて、マウスオーバーアクションありありでぐりぐり動く感じ
    • VLAN設定は、設定可能項目が少なく簡単だが、制約あり
      • VLAN 1をTagged VLANに出来ない
      • Port PVIDの設定が無い(Untagged VLANの設定と連動している模様)
        • S3300-28Xでは、VLAN設定後に通信できなくてかなり悩んだ記憶が…
  • L2マネージドなので、基本IPパケットを理解しないのは当然なのだが、WebインターフェースがIPv4オンリーの模様
    • 少なくとも、スイッチ自体のIPv6アドレス設定の画面は無い(IPv4についてはDHCP(デフォルト)と手動設定が選べる)
    • 同じQNAPのNASは、IPv6運用が可能なことを考えると釈然としない
      • IPv6オンリーネットワークでは背面のマネージドポートから管理用のIPv4ネットワークを繋げということか?
  • SFP+側のmulti-rateは、100Mはサポートしていない?
    • 10/100/1000のmulti-rate SFPモジュールで 100M full-duplex(100BASE-TX)だと疎通しない(SFP+独立・コンボポートどちらも)
    • SFPモジュールと対向するスイッチは、100BASE-TXで物理層がリンクしていると報告してくるので、SFP+ソケットのMACレイヤー側の問題か?

SFP+回りの件(2022/05/22追記)

  • 10GBASE-T SFP+トランシーバ(10GTek ASF-10G-T)を刺したら、あっさり10BASE-T/100BASE-TX/1000BASE-Tで通信できた
  • 10/100/1000 multi-rateを謳う SFPトランシーバは、1000BASE-Tしか通信出来ない(10BASE-T/100BASE-TXな相手だと通信出来ない/対向側は物理リンク確立を報告している)
    • 当該SFPトランシーバを刺した状態で、起動するとスタックする(01~04 SFP+ポートと 05~08 SFP+/RJ45コンボポートのアクセスランプが点灯してスタック状態になる)
      • 稼働中に挿入では問題は発生しない(当該トランシーバの不良 or SFPトランシーバとの互換性の問題か?)
  • SFP+モジュールを刺した状態で、しばらく経過すると、管理画面へのログイン時の画面遷移の遅延や管理画面の「概要」右上の「システム情報」の更新で不具合発生
    • ログイン時や右上の再読み込みボタンを押した際に読み込んでいます...の状態のままになる
    • システム情報の「MACアドレス」が eeprom_read_errorになる
    • システム情報の「温度」が異常(赤表示)になる
    • システム情報のファン1/2速度の項目が消失する
    • SFP+トランシーバを引き抜いてしばらくすると解消する
      • 起動直後のファン回転数は1500回転前後に対して、SFP+トランシーバ有りだと起動2~3分後にはファン回転数が1750回転に到達、10分後には「システム情報」で不具合が発生している
      • システム情報の閲覧で不具合が生じても通信そのものは正常に見える
      • SFP+トランシーバを外側からUSB扇風機で冷却すると不具合が発生するまでの時間が伸びる?
      • SFP+トランシーバを01~04ポート(SFP+のみ)ではなく、コンボポート側(RJ45も含め未使用ポート)に挿す方が不具合発生までの時間が長い?
      • 状況的には、内部の冷却機構の能力不足による動作不良が疑わしい
        • SFP+DA接続がメインの場合、トランシーバの発熱が無いので、冷却不足には至らないと推定される
        • 用途的にストレージネットワークのコアファブリックとしてSFP+ 12ポート稼働は想定しているはずなので、MACコアファブリック側の発熱自体は設計で許容されているはず…
        • 不具合発生時にSFP+トランシーバがダウンするケースを捕捉。このままだと、実用に耐えない
          • 発生条件の調査後、いったんS3300-28Xに戻して、QSW-M1208-8Cは発熱対策と検証

2022-05-24 [長年日記]

_ [SAD]ごそごそコードを整理中

コード整理に向けた改修アイデア

  • Library@RequireのターゲットがDirectoryだった場合、autoload.nなどを自動で読み込む拡張(ローダーラッパを親Directoryに入れる必要がなくなる/そのための余分なMakefileが削れる)
  • gen_codesを拡張し、buildinfo・環境変数定数のサポート及び定数モジュール生成機構を改修にて、各種の定数シンボルの定義をPackages/init.nから組み込みモジュールへ移行させる
  • Math/Linear/APIモジュールの機能テスト(LinearSolve, SingluarValues, Eigensystem)を実装する
    • 機能テストが完了したら、Legacyなbuiltinを削除する

2022-05-27 [長年日記]

_ [雑記]Mellanox Connect X-4 Lx EN 25Gb購入

鯖の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.confkld_loadmlx5enを追加しておけば、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 | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記