start

逸般の誤家庭で40GbEはじめますた その3(構築編)

機材が揃ったので、サーバ/クライアント直結40GBASE-SR4ネットワークを構築する。

ネットワーク概略図を示す。

(2020-03-07 追記)

FreeBSDのL2ブリッジif_bridgeはジャイアントロックを使った実装が原因でボトルネックとなるようだ。実際、うちの環境ではブリッジなしでは30Gbpsを超えるのに対し、ブリッジを使うと12~13Gbpsで頭打ちとなる。

クライアントとサーバを40GBASE-SR4で直結し、サーバで40GbEのI/Fと1GbEのI/Fをブリッジする。こうすることで、40GbE対応スイッチがなくとも、40GbEによる高速化の恩恵を受けつつ既存の1000BASE-Tネットワークとの相互運用が実現できる。当然ながら、サーバが落ちてるとクライアントのネットワークも使えなくなってしまうが、うちでは常時稼働させてるので殆ど問題ない。いざって時はクライアントを従来通り1000BASE-Tで繋げばいいだけだし、そこは割り切る。

40GbEといっても恐るるなかれ、ネットワークカードは何の変哲もないPCI-Expressカードだ。ビデオカード等を取り付ける要領でマシンにNICを挿し、ドライバをインストールすればよい。

FreeBSD(サーバ側)では/boot/loader.confに以下の1行を追加し再起動すると、mlxen0/mlxen1というネットワークデバイスが生えてくる。

mlx4en_load="YES"

40GbEと1GbEのブリッジは/etc/rc.confに以下の設定を追加する。このサーバではsshやSambaなどのサービスを提供しているので、igb0のIPアドレスをbridge0に付け替える。ブリッジにIPアドレスを振る場合は、必ずブリッジそのもの(ここではbridge0)に対して行う。ブリッジメンバ(ここではigb0)に振ると、一見動いているように見えてブロードキャストは到達するのにユニキャストは到達しない、といった非常に分かりにくい問題を誘発することになる。

cloned_interfaces="bridge0"
ifconfig_bridge0="ether XX:YY:ZZ:00:00:01 addm igb0 addm mlxen0 up"
ifconfig_bridge0_alias0="inet 192.168.0.1 netmask 255.255.255.0"
ifconfig_igb0="up"
ifconfig_mlxen0="up"

うまくブリッジが出来上がればifconfigが↓こんな感じになる。bhyve用のブリッジも兼用してるのでtapも刺さってるのは無視してくだしあ。

$ ifconfig bridge0
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        description: vm-public
        ether XX:YY:ZZ:00:00:01
        inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
        nd6 options=9<PERFORMNUD,IFDISABLED>
        groups: bridge vm-switch viid-4c918@
        id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
        root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
        member: tap1 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 8 priority 128 path cost 2000000
        member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 7 priority 128 path cost 2000000
        member: mlxen0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 4 priority 128 path cost 500
        member: igb0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 1 priority 128 path cost 2000000

Windows(クライアント側)はふつーのEthernet設定の要領で、ConnectX-3のネットワークプロパティでIPアドレス等を設定してやればよい。サーバ側の設定が問題なければ、今までと同じように通信が行えるはず。

最後にSambaでファイルコピーを行ったGIF動画を貼っておく。サーバのSSD(Intel DC S3500シリーズ)の速度がボトルネックとなり10Gb/秒にも満たないが、素敵な速さだ。

逸般の誤家庭で40GbEはじめますた その2(購入編)

家のネットワークを10GBEにするつもりが結局40Gbeにすることになったのが前回。機材は以下のものを購入した。

機材 型番 購入先
Mellanox ConnectX-3 Pro EN MCX314A-BCCT ヤフオク
10Gtek 40GBASE-SR4 QSFP+ Transceiver for MMF AMQ10-SR4-M1 10Gtek
10Gtek MPOメス-メス Type-B OM3 MMFコード 20m OM3-MPO-12MPO-20M 10Gtek

NICはヤフオクでたまたま安いのが出ていたので迷わずお買い上げ。40GBASE-SR4 QSFP+トランシーバとMPOパッチコードは10Gtekから購入。MPOコードはコネクタのオスメスやらコードの極性やらがややこしい。なので10Gtekに質問メール投げたら、すぐさま適切な回答と共に「見積もる?」と来たもんだ。どういうわけか直販サイトよりも安かったので、そのままお買い上げ。

今回の注文で中華の勢いとエネルギーを垣間見た気がする。こちらが日本人客だと判明すれば、わざわざ宛名にさん付けしてくるし(日本からそれなりに注文あるんだろうね)、小口注文でも親身に対応、特注品も1つから作ってくれてそれでいて安い。そりゃ日本は負けちゃうよねーっていう…。割と本気で危機感を覚えますた。

閑話休題。

購入の時系列としては、先にNICで落札から3日で到着。トランシーバとケーブルは中国からの発送にもかかわらず、輸送期間含め5日で到着。送料20ドルのFedEx扱いで、発送の翌日には国内に入り、その翌日には配達されて現代の物流マジパネェっす。

届いた機材たちはこんな感じ。ケーブルは検査証も入っててしっかりしてるねー。

本プロジェクト開始までは名前すら知らなかったMPOコードを初めて手にしたけど、思いの外取り回しが良くてビックリ。その辺のUTPケーブルより細くて軽く、STPケーブルよりしなやかでええじゃないか。といっても、最小曲げ半径は銅線より劣るはずなので、調子に乗ってはいかん。

次でいよいよ40GBASE-SR4ネットワークを構築していく。



逸般の誤家庭で40GbEはじめますた その1(構想編)

自宅ネットワークを40GBASE-SR4で40GbE化しますた。その顛末を全3回くらいでお届け。

かねてより宅内ネットワークの10GbE化を目論んでいたものの、次の理由で二の足を踏んでいた。

  1. メインマシンがMacBook Proのため10GbE対応NICの選択肢が極めて限られる
  2. 10GbE対応スイッチが高い
  3. 消費電力が高い
  4. 割安なAquantiaの10GbE NICのFreeBSD用ドライバがない

(2021-07-20 追記)

Aquantia NICのFreeBSD用ドライバは2019年6月にリリースされ、現在はports/packagesで提供されている。

一般のご家庭向け40GbE対応スイッチも徐々に増えてきた。

MacBook Proで10GbEを使うにはThunderboltに頼らざるを得ない。となると対応製品はAKiTiO Thunder2 10G Network AdapterSonnet Twin 10G Ethernet Thunderbolt 2 Adapterくらいしかなく、値段が高い上に潰しもきかない。Thunderbolt→PCI Expressエンクロージャと汎用NICを使う手もあるが、同じく高価だしイマイチ筋が悪い。

10GbE対応スイッチも安くなってきたとはいえ、10GBASE-T×2ポートの単機能スイッチングハブで2万円後半~は個人的にはまだ高い。せめて5ポートで1.5万円くらいじゃないと話にならん。それに加えて、逸般の誤家庭 一般のご家庭での使用を考えた場合、消費電力の高さに、発熱の多さからのファン騒音も悩ましい。

そんなこんなで4~5年ほど悶々としていた。

ひと月ほど前、某掲示板で10GBASE-SRが割とお手軽に導入できることを知る。光ファイバー方式は機器的にもお値段的にも敷居が高そうな印象があったが、調べてみると思いのほか安い。NICはサーバ抜き取り品やリファービッシュ品が5000円程度で流通してるし、光ケーブルも1mで1000円、20mで2000円程と家電量販店で売ってるUTPケーブルと大差ない値段で買えることが分かった。現状、10GBASE-SRは10GBASE-Tより低消費電力というのも好都合だ。

スイッチがお高い問題は残ったままだけど、メインマシン-サーバ兼NAS間が速くなれば当面は事足りる。DAC (Direct Attach Cable)やAOC (Active Optical Cable)を使うとSFP+分のお金が浮いて嬉しかったりするものの、今回は15mほど引き回す必要があり、またそれらは汎用性に欠けるので不採用。メインマシンとサーバを10GBASE-SRで直結し、サーバで10GbEと既存の1000BASE-TでL2ブリッジを作れば、単体のスイッチを用意せずとも既存ネットワーク構成を活かしつつ高速化の恩恵を受けられそうな予感。

MacBook Pro用の10GbE NICはどうしたかって?。そもそもMacとはもうオサラバして、Windowsな自作デスクトップにメイン環境を移行済みなのである。というか、そうしたからこそ、宅内ネットワーク高速化に着手できたというのが実際のところ。Macを捨てたポエムは別途書く。多分。

大まかな構想が固まったところで、次は機材選定だ。必要なのは以下の3点である。

  • SFP+搭載の10GbE NIC
  • 10GBASE-SR用SFP+トランシーバ
  • LC-LCマルチモードファイバー

注意すべきはSFP+モジュールのベンダーロックイン。ロックが掛かってるとNICとトランシーバは純正品の組み合わせでしか動かず残念な事になる。もっとも、ロックイン対応の互換トランシーバーも売ってるんですけども。今回は関係ないがスイッチ側で掛かってる事もあるので要注意。

ロックインやドライバ状況を鑑みて、NICはMellanox ConnectX-3以降、SFP+トランシーバは10Gtekの互換品を使うことにした。ConnectXシリーズは中古品の流通量が多く、機能も豊富で、FreeBSD対応ドライバがあり、ベンダーロックインもなく紛うことなき神NICなのだ。10Gtekはあまり聞き慣れない会社だが、格安ネットワーク機器中華ベンダーとしてそれなりに実績があるようだ。実は別件で同社の10GBASE-T NICとDACを使った事があるが、特に問題なく使えたってのも採用理由の1つ。ケーブルも10Gtekに決定。

なお、ConnectX-3の前期種のConnectX-2は中古相場がかなり安いが、サポートが終了しておりWindows 10用ドライバが提供されていないため非推奨。一応、インボックスドライバやWindows 8.1用ドライバで使えるらしいので、とにかく価格重視ということなら選択肢として無くはないってところ。

そんな感じでConnectX-3の調査をしていると、40GbE対応の製品があるではありませんか。値段は10G対応品よりは高いけど十分に手が届く範囲だった。トランシーバーとケーブルも同様な感じ。となれば欲が出てくるのが人の常。スイッチの入手性は10GbE以上に絶望的だが、マシン間直結なら最早10GbEに拘ることもなくね…?ってなもんで、40GbEへと舵を切ったのである…。

基本方針はそのままにEthernet規格が40GBASE-SR4となり、必要な機材は次のようになった。

  • 40GbE対応のConnectX-3
  • 40GBASE-SR4用QSFPトランシーバ
  • MPO-12マルチモードファイバ(OM3以上)

それぞれ10GbEで選定した機材の40GbE対応版を買えばよい。続きは購入編にて。

iTunesでファイルのリンクが切れた曲をリストアップする方法

マシン移行などでiTunesライブラリを移動した際、ファイルが行方不明となり曲とのリンクが切れることがある。曲名の先頭にビックリマークが付く忌まわしきアレ。

アルバム単位でごっそりリンク切れしてくれれば分かりやすいが、数万曲あるうちの数曲とかだと実に厄介だ。リンク切れ曲を一挙にリストアップする方法を探してたら、海外フォーラムで実に巧妙な方法が紹介されていた。備忘録と困っている人のために画像付きでリストアップ方法を解説する。

iTunesメニューのファイル→新規→プレイリストをクリックし、新規プレイリストを作る。名前なんでもいいんだけど、分かりやすく「ファイルがある曲」とでもしておく。

iTunesの左ペイン→ライブラリ→曲をクリックし、Ctrl+A (Command+A)で全曲を選択する。そして任意の曲の上で右クリック→プレイリストに追加で、先ほどの「ファイルがある曲」を選ぶ。

プレイリストへ曲を追加する際、iTunesはファイルの有無を確認しているそうだ。今回は全曲なので、追加が終わるまで結構待たされる。その間、プログレスバーとかは出ずiTunesが固まった状態になるが、お茶でも飲みつつ辛抱強く待つ。処理が終わればiTunesが再び操作できるようになる。

リンク切れファイルがあれば、この段階でライブラリの曲数とプレイリストの曲数に差が出る。

続いて「ファイルがない曲」を探し出すスマートプレイリストを作る。

iTunesメニューのファイル→新規→スマートプレイリストをクリックし、以下の条件で「ファイルがない曲」リストを作る。

  • 次のルールに一致 → ✅チェック
    • 対象メディア:ミュージック
  • 「プレイリストが」「ファイルがある曲」「ではない」
  • 上限 → チェックしない
  • チェックマークのある項目だけ選択する → ☐チェックしない
  • ライブアップデート → ✅チェック

「ファイルがない曲」スマートプレイリストに、リンク切れ曲が列挙されていることを確認する。

上図ではビックリマークの有無が混在しているが、実際は全てリンク切れの曲である。通常のプレイリストと違い、スマートプレイリストでは曲を再生する時にファイルの有無チェックが行われるそうな。

あとは地道にリンク切れファイルを選択しなおすだけ(´・ω・`)

FreeBSDでmake.confのWITHOUT_MODULEが使えなくなっていた

FreeBSD 11.2-RELEASE-p7でwww/apache24をビルドしようとしたら、下記のエラーが出て処理が止まってしまった。

===>>> Port directory: /usr/ports/www/apache24

        ===>>> This port is marked IGNORE
        ===>>> : Error from apache.mk. WITH(OUT)_MODULES has been removed, use www_apache24_(UN)SET


        ===>>> If you are sure you can build it, remove the
               IGNORE line in the Makefile and try again.

Apacheだけではなく、他のportsでも出るものがあるようだ。

原因はというと、/etc/make.conf内のWITHOUT_MODULE, WITH_MODULEの記述。どうやら、これらオプションは/etc/src.confの方に書くようになったらしい。make.confからsrc.confに移動したら無事makeが通るようになった。

このオプションはカーネル構築に効くもののようなので、いっそ消してしまってもさほど問題ないかもしれない。

  • start.txt
  • 最終更新: 2022-07-27 15:26
  • by Decomo