たまにがんばって描いた
あといつものケーキで〜。
定期購読のMagPiのあたらしい号が届いたので、ペラペラめくっていたところ……
唐突にEjectコマンド工作が飛び出してきて声が出ました。
エキセントリックな工作アイデアみたいな5〜6ページのプチ特集に掲載されていたんですが、まあよく10年以上も前のネタを掘り返してきたなあとw
ちなみに、 https://magpi.cc/akkiecd にアクセスすると、raspberrypi.com ではじめて取り上げられたときのLiz執筆の記事にジャンプしました。Magpi短縮URLが作られるのはこれが3つ目ですね。 https://magpi.cc/akkie はMastodonアカウント、 https://magpi.cc/akkieblog はこのブログに飛びます。便利や……。
来ました。
早速組み立てて、同じように接続して通電したところ、パン!という音とともに、ちょっと焦げ臭い匂いがしてきました。やっちゃったぜ。
赤外線受信モジュールの向きが鏡になっていたらしく、新しいモジュールに交換してPicoの方を向くように差し替えて通電したら動作しました。設計ミスりました。よく確認しましょうとかスライドに書いたじゃんかよ〜〜〜〜。
というわけで、そのうちデータだけ修正したRev.2を作ってGithubに放流しようと思います。基板自体はもういらないので、これで使おうと思います。受信モジュールは登録の時しか使わないですからね。
明日はオープンソースカンファレンス 2024 Tokyo/Springです。この記事の物体を展示予定なのでお近くの方はぜひ。
これの続き。
10GbE NICが動くことがわかったので、OSCでデモをしたら映えるかなと思い、会社からNICを借りてきました。適当に余っているIntel X520を連れ出そうとしたら、部長から「そんな古いんじゃ消費電力デカくね?YOUこれ持っていきなよ(意訳)」と、Mellanox ConnectX-4 Lxを授かりました。社内的にはもう箪笥の肥やしになっていたものですが、10GbEどころか25GbEもいけるNICです。はげしい。<写真>
というわけで、これを持ち帰ってカーネルコンパイルを済ませ(mlx5_coreを有効にしました)、動作も確認できました。
手持ちのSolarFlareのカードがiperf3で3Gbps止まりだったのに対して、ConnectX-4は6Gbps==750MB/sを叩き出したので、PCIe 3.0x1が理論値8.0Gbpsなのと、NVMeがシーケンシャル700MB/sくらい出していることを考えると、ちゃんとPi 5のPCIeの性能を使えている感じがしますね。VERY GOOD.
上記のテストはあくまで(10GbEスイッチを介して)自宅サーバーの10GbEとテストした結果です。OSCに持ち込むには対向のマシンが必要ですし、できればコンパクトな方が良いです。
手としては、ラズピッピで前回のブログで使えないと書いた安物PCIe変換をリトライするか、CM4のIOボードでやるかという感じでしたが、カーネルをコンパイルして試した結果、
(1) どちらも共通して、/boot/firmware/cmdline.txtに「pcie_ports=compat pcie_aspm=off」を追加しないと、PCIeのリンクエラーが大量に出てなんかシステムがめちゃくちゃ不安定になったりする
(2) (1)の対策後、安物PCIe変換は動きそうだったのに対して、CM4はやはりダメそう
というわけで、Pi 5と安物PCIe変換のリトライで行く方向にしました。
なお、この間にながいずみさんからMisskey.ioでお声がけいただき、超立派なM.2→PCIe変換とATX電源のセットを譲って頂いたのですが、可搬性の都合から一旦見送りました。OSCが終わってから遊びたい所存。
構成はこんなかんじ。会社から借りてきすぎだろ。
Pi 5の公式電源が、ユーザー会のサンプル1つしかないため、これはNVMeの方に割り当てます。10GbE環境は5V3Aで動かすことになりますが、まあなんか動いたので良しとしつつ、OSはMicroSDカードにして省電力&挿しっぱなしにして現地での設営の手間を削減していきます。
MicroSDカードのOSセットアップは、コンパイル済みの環境に合わせてRPi OS(64-bit)を選択して、コンパイル済みのファイルをコピーして展開しました。
$ tar xzf pi-kernerl-pcie.tgz $ sudo cp boot/firmware/initramfs_2712 boot/firmware/kernel_2712.img /boot/firmware/ $ sudo rsync -a lib/modules/6.1.77-v8-16k+ /lib/modules/ $ sudo reboot
起動してNICが認識しているのを確認したら、nmcliでIPアドレスを適当に固定します。
$ ip a (略) 4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000 link/ether 24:8a:07:XX:XX:Xa brd ff:ff:ff:ff:ff:ff 5: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000 link/ether 24:8a:07:XX:XX:Xb brd ff:ff:ff:ff:ff:ff $ nmcli con NAME UUID TYPE DEVICE Wired connection 1 db957665-1d22-36da-a7ae-2103d0958e43 ethernet eth0 preconfigured e62b271f-03bf-4a79-b9db-8238d6f2b4e3 wifi wlan0 lo 51f50ece-5d00-435e-a865-842930898cd4 loopback lo Wired connection 2 09b5f6c9-5da5-3c17-aecb-1df3dc85f32a ethernet -- Wired connection 3 fcaa7110-709b-3ca6-b07d-9e4c375d1eff ethernet -- $ sudo nmcli con mod "Wired connection 2" ipv4.method manual ipv4.addresses 192.168.10.2/24
もう一台も同じ作業を繰り返して(IPアドレスを適宜変更)構築は完了です。
デスクトップ環境と言いつつ、適当なスイッチングハブがなかったので、10GbE環境へのアクセスのために、USB-LAN変換を2本挿してオンボードのやつとブリッジポートにしました。nmcliでブリッジを作る手順は以下を参考にしました。
# ブリッジつくるやつ $ sudo nmcli con add type bridge ifname br0 $ sudo nmcli con modify bridge-br0 bridge.stp no $ sudo nmcli con modify bridge-br0 ipv4.method auto # ブリッジにぶら下げるやつ $ sudo nmcli con add type bridge-slave ifname eth0 master bridge-br0 $ sudo nmcli con add type bridge-slave ifname eth1 master bridge-br0 $ sudo nmcli con add type bridge-slave ifname eth2 master bridge-br0 # オンボードポートの設定をとばすやつ $ sudo nmcli con del "有線接続 1"
あとはOSCでやる練習も兼ねてKVMも揃える感じで配線。デスクトップ環境はモバイルルーターに接続する感じでやっていくこととして、これの無線経由でワンチャンMacとかからもアクセスできる想定としました。そんなわけで、ひととおり完成です。
片方をサーバーにしておいといて、
akkie@tengbe1:~ $ iperf3 -s
もう片方からテストを実行します。
akkie@tengbe2:~ $ iperf3 -c 192.168.10.1 Connecting to host 192.168.10.1, port 5201 [ 5] local 192.168.10.2 port 60458 connected to 192.168.10.1 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 757 MBytes 6.35 Gbits/sec 1 1.56 MBytes [ 5] 1.00-2.00 sec 758 MBytes 6.35 Gbits/sec 0 1.56 MBytes [ 5] 2.00-3.00 sec 756 MBytes 6.34 Gbits/sec 12 1.56 MBytes [ 5] 3.00-4.00 sec 758 MBytes 6.35 Gbits/sec 8 1.56 MBytes [ 5] 4.00-5.00 sec 760 MBytes 6.38 Gbits/sec 0 1.56 MBytes [ 5] 5.00-6.00 sec 759 MBytes 6.36 Gbits/sec 0 1.56 MBytes [ 5] 6.00-7.00 sec 760 MBytes 6.38 Gbits/sec 0 1.56 MBytes [ 5] 7.00-8.00 sec 759 MBytes 6.36 Gbits/sec 0 1.56 MBytes [ 5] 8.00-9.00 sec 760 MBytes 6.38 Gbits/sec 0 1.56 MBytes [ 5] 9.00-10.00 sec 759 MBytes 6.36 Gbits/sec 0 1.56 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 7.41 GBytes 6.36 Gbits/sec 21 sender [ 5] 0.00-10.00 sec 7.41 GBytes 6.36 Gbits/sec receiver
6.36Gbpsの結果が出ました。は、はええよ。サーバー側の10回の実行結果も6.36Gbpsで合っていますね。MB/sにすると795MB/sなので、まあ早い。
[ ID] Interval Transfer Bitrate [ 5] 0.00-10.00 sec 7.41 GBytes 6.36 Gbits/sec receiver
昨晩環境ができた直後は5Gbps台に落ちる回もあったので、発熱とか電源の兼ね合いもあるともちろんあると思われますが、それでも早いので、感動の性能ですね。
ちなみに、ここで片方のPi 5を手持ちのSolarFlareのカードにすると、やはり3Gbps台に落ちるようだったので、ドライバー的な問題かもしれませんし、だいぶ古いので、まあしょうがないかなという気はします。
というわけで、なんとか動く環境が作れたので、明日はOSCでこれの展示ができそうです。ヨカッタァ。
明日のOSCは去年と同じく浅草です。展示物は10GbEをメインにするので、今年一年回して来たものはいくつか引っ込めの予定です。また、tnishinagaさんがPi 5のJTAGデバッグデモをしに来てくれるそうなので、そちらもお楽しみに。なお、Pi 5のデバッグの話はraspi.jpのほうにも記事を寄稿いただきました。ありがてえありがてえ!
さぁ、機材を荷造りするか……。
昨晩書いたそばからWaveShareのPoE HATが到着したので早速遊びます。
今回買ったのはPi 5対応のPoE HAT(F)と、Pi 4対応のPoE HAT (E)のふたつ。
これ、そもそも買うかずっと迷っていたら、Jeffがレビュー動画を上げていて、使っているスイッチも同じだし、アリかなと思って買ってみた次第。公式がいつまで経っても出さないのが悪い。
(F)の基板裏面。ファンはPi 5のファンコネクタを使わずに独自の電源ピンから電力を供給するため、常時回転になります。ただ、Pi 5の公式ケースのファンと同じサイズのようなので、交換してしまうというのもアリかな?と、ちょっと思ってしまいました。また、12Vの出力ピンも用意されています。
乗せてみたところ。(F)の方には薄型のヒートシンクと固定用のナットとネジが付属しますが、PoEピンが移動したおかげで、なくても大丈夫な雰囲気は感じました。ヒートシンクも今回は一旦不使用で。
USB-C側はスカスカなので、こちらに立てるのはありかもしれません。無精しないで立てろそれはそう。
公式ケースとの相性は×。しょうがないので、いまのところは下のピンクのトレイ部分だけで使っています。常時稼働の予定も無いので、まあ良いでしょう。
動かした様子。写真だとあまり伝わらなさがありますが、LANケーブル1本で動くのって良いですよね。ちなみにこのPi 5向けにPXEブート+NFSルート環境を久々に作ってみたので、ストレージすら積んでいないです。ほんとうにLANケーブル1本。
スイッチはHPE Arubaの2530 8G PoE+を使っているので、管理画面からステータスが見られます。4.5Wほどで動いているようです。
ちなみに、ひとつ前の記事のPCIeボード環境をPoEでまかなおうとしたら、電圧不足なのかうまく起動しませんでした。まあ、さすがに無理やり過切るので、これはやめておきます。
(E)のほう。基板裏面はピンヘッダーのはんだ付け以外何もなくフラットです。貫通のピンソケットが表面に表面実装されていて、後ろから貫くタイプの実装です。
なので、ケースとか既存ヒートシンクがいると、結構干渉しちゃって意外と面倒な子でした。そっかあなるほど。こちらは常時稼働のプランがちょっとあったので、ややミスった感。連結ピンソケットで伸ばしてやる手はありますが、2x2のやつってあるのかな。写真のやつは、無理やり取り付けたら動作したのでOKとした図です。これは多分ヒートシンクをずらしたらいい感じに納まりそう。
2530 8G PoE+スイッチの表示。こちらはUSB SSDを繋いでいるので状況が違いますが、4.7Wほどと出ました。
WaveShareのPoE HATボードでPi 5とかのPoEをやる話でした。PoE良いよね。
Pi 5のPoEに関しては公式が出るまでのつなぎとしては十分アリなのかなと思っています。これ、会社のVPNサーバーに突っ込んじゃおうかな(?)
Pi 4の方は、なんかいい感じの延長ピンソケットを探したいところです。アリエクを探しに行くかあ。
52Piが販売していたP02 PCIe Slot For Raspberry Pi 5 Extension Adapter Boardをポチってみました。
P02 PCIe Slot for Raspberry Pi 5 Extension Adapter Board – 52Pi Store
1月末にポチったら支払いが確定したまま旧正月に入り、旧正月が終わっても発送のはの字もなかったため、定期的にメールで問い合わせたり、Forumに書いたりしたら全部無視され、製品ページにしれっと「発送に1ヶ月かかります」と追記されました(今見たら消えてた)が、その後やっと発送されて届きました。よって、先に言っておくと52Piのサポートはカスでした。ものは良かったんですけどね。おしい。なので、52Pi製品を取り扱っているGeekwormがAliExpressとかAmazonで売り始めたのを買うのがベターのような気がしました。
じつはAliExpressでM.2からPCIスロットに変換するボードというのを1月に300円くらいで仕入れまして、ワンチャンこれで動く可能性に賭けようとしたのですが、どうやら安すぎたらしく認識しなかったり何だりして不安定すぎたので断念していました。絵面は良かったんですけどね。
スロットに切り欠きがなかったので自分で加工したのですが、このときに壊したのかそもそも駄目だったのか。先に刺さるやつでテストすればよかったですね。まあ300円なので別に痛くも痒くもないですが。
GIGAZINEで同じようなボードを買って同じく加工していたようですが、あちらは動作したようですね。
そして本題。パッケージと内容物はこんな感じ。えっと、パッケージに伝票シール直張りで、たまげました。52Pi直販すげえな、たまげました。内容物に問題なかったのでよかったんですけど。中身の方は、ボード、Pi 5を立てる用のネジとナット、PCIe用FPCケーブル、マニュアルとドライバー。ドライバーこそ添付しなくて良くないですか?その気遣いをするなら後述のボードを浮かせるナットが欲しかったです。
Pi 5を乗せたところまで。ポゴピンはPi 5の5VとGNDに接触します。
裏面はFPCコネクター以外何もないこざっぱりとしたようす。
10GbEカードを差し込んで動かしたところ。PCIスロットの分だけ基板を浮かせるためのナットがないため、そのままではだいぶ不格好です。
仕方ないので、手持ちのネジ袋から20mmくらいのナットネジを4つとネジを留める用のナット2つ出して、基板のPCIeスロット側の穴2つと、Pi 5の電源側の穴2つに取り付けました。
これで見かけの方はだいぶ良くなりました。
今回は手持ちのSolarFlareの10GbEカードを動かしてみました。電源は変換ボードのスイッチで内部電源、外部電源を選択できますが、内部電源にして、公式の電源アダプター(※ユーザー会所有のサンプル品)を使いました。一応これで問題なく動きましたが、外部電源を使ったほうがなんとなく安心な説はあるかもしれません。
で、SolarFlareの10GbEカードはカーネルコンパイルが必要なので、ソースを引っ張ってきてコンパイルします。が、なんかrpi-sourceのPi5対応をどうもまだやっていないか、やってたけど壊れているらしく、とにかくrpi-sourceを使って使用中のカーネルのソースコードを引っ張ってくることができないため、ブランチ指定でGithubからcloneする感じのようです。
そのへんの面倒をいい感じにしてくれるコマンドを作っている有志がいるので、これを使わせてもらいました。
https://forums.raspberrypi.com/viewtopic.php?t=343387
ダウンロードしてzipを展開したあと、chmod +x build-kernelで実行権限をつけます。私は-uオプションで一度コンパイルしたあと自分で/usr/src/linuxに移動してmenuconfigをやり直して二度手間になりましたが、多分以下のコマンドでmenuconfigに入ってくれると思います。
$ sudo ./build-kernel --branch rpi-6.1.y -c 5 -j 4 -m
で、menuconfigでSolarFlareのドライバーを有効化してコンパイルしてインストール。そして再起動すると無事10GbEカードが認識しました。(あ、PCIeの有効化の諸々は済ませてあったので省略していますが、52Piのマニュアルを読むなり、NVMeのPi 5での使い方を調べるなりすれば設定できると思います。)
同じ10GbEカード使用のESXiサーバー内のVMとiperf3でベンチマークした結果は3.2Gbpsほどでした。昔CM4でSolarFlareとX520の1:1で試したときは2.7Gbpsほどだったので、500Mbpsくらい早くなったといえば早くなりましたが、いちおうPCIe3.0x1相当のオプションにはしたので、もうちょっと出てもいいような気はしました。また後日試す。試してからブログ書けよそれはそう。
ちなみに、ブートデバイスにしていたUSB SSDをhdparmでシーケンシャルリードさせながらiperf3をしても3.2Gbpsで、SSDも340MB/s出せていたので、帯域を食い合うということはなさそうに見えました。ここももうちょっと試して別途追加でブログってみましょう。
52Piにハラハラさせられながらも、PCIスロットボードを輸入で購入して遊んでみる話でした。びっくりするほど問い合わせが全部スルーされたので、直接買うのは今後ないと思います。
WaveShareでPoE+ボードをポチるなどしているところですが、こちらはすぐに発送されたので問い合わせるまでもなく、まあ、差を感じてしまいますね……。そうそう、PoE+も楽しみにしておるところです。わくてか〜。