FreeBSD 13

ちゃんと新しいものに移っていかないといけないなあ、と思いまして、FreeBSD 13.1-RELEASE を入れてみた。研究室では NAS とかを mount するのに FreeBSD では amd (am-utils) を、Linux と Mac では autofs を使っていたのだけれど、/etc/rc.d/amd が、ない…!

Removed the amd(8) automount daemon. Its functionality is provided by autofs(5)13f7dbe822d5 (Sponsored by The FreeBSD Foundation)

https://www.freebsd.org/releases/13.0R/relnotes/

ほんとだ、なくなってました。autofs のマップ、Linux と同じでええんかな、ぼちぼち試します。

Fediverseなるもの

Twitter がアレな感じになったおかげで Mastodonというのを触ってみたら、Fediverse というのがあるそうで、Wordpress のプラグイン (activitypub) というので接続できるらしい、ということを学んだ。

というわけで、テストテスト。これフォローしてると Mastodon のタイムラインに出たりするのかな。@yasu です。

ThinkPad P14s 買った

ここ数年はレーダーやってるおかげで、出先でFPGA設計をごりごりやることが多いわけですが、いままで使っていた ThinkPad T495 (Ryzen 5 PRO 3500U) だとちょっとパワー不足を感じることも多くて、P14s Gen2 AMD (Ryzen 7 PRO 5840U) というのを買いました。マイクロアーキテクチャが Zen+ から Zen3 ということで、なんだかえらくなった気分です。

で、EDA ツール使うのが目的なので、プリインストールの Windows には目もくれずに Ubuntu 20.04 LTS を入れるわけですが、いくつか忘れてたりしてはまったので、誰かの役に立つかも、ということでメモしておきます。

まず WiFi ですが、Realtek の WiFi 6 なチップが載っており、標準のカーネルではサポートされません。ありがたいことに GitHub で公開されている (https://github.com/lwfinger/rtw89) ので、説明の通りにインストールしました。ドライバ署名はできましたが、なんだかうまくロードできず、結局 BIOS で Secure Boot をオフにしてしまいました、くやしい。

Suspend/Resume は、これも BIOS で Sleep mode を Linux (suspend to RAM) にしてやらないとダメでした。あと、/etc/systemd/logind.conf で HandleLidSwitch とか HandleLidSwitchExternalPower とかを suspend にして、ちゃんと動くようになりました、このあたりはわりとハマった・・・

そんなものですかねえ、あと、裏蓋開けてメモリ増設したり SSD 交換したら、ネジが1本入らなくなってしまった・・・なんで? まあ、しっかりした作りなのであまり問題なさそうですし、あんまり開けたり閉めたりしないほうがよさそうなので、しばらくこのままいきます。Vivado とかがどれくらい速くなるかは、ま、そのうち。

さいきんのお仕事

なんか気がつくと blog もすっかり放置なので、たまには最近やってることでも書いておこうと思いました。そういえば沖縄にきて10年ですし。

本業はあいかわらず計算機アーキテクチャというか、custom computing とか reconfigurable computing とよばれることをやっているつもりです。すごく簡単に説明すると、みんなが同じハードウェアのコンピュータを使うんじゃなくて、やりたいことに応じたハードウェアをぱっとその場で手に入れて、より高速でより省電力なシステムを実現する、みたいな研究です。

これ、学生時代にやり始めたころはわりとぶっ飛んでる部分もあったのですが、最近はスパコンの人たちもちょっとずつこっちに流れてきて、そうすると、僕ひとりと学生さん数名でやってる研究室では、予算規模とか実装能力で全然太刀打ちできないので、さすがにしんどいなーと思ったり、まあ僕は僕で他の人のできないところを攻めればいいかーっていうことで、高速データ通信のハードウェアをごりごりいじってみたりしています。もちろん市販の製品を使うので、ものすごい新規性があったりするわけじゃないのですけれども、中身を理解してなくても使えてみんなそうやってるものを深く掘り下げて理解するの、めちゃめちゃ楽しいしそれがないと始まらない楽しい(あるいは、まわりの追随を許さない)こともいろいろあるなーと思っています。

あと、最近は学科のえらい先生にお誘いいただいて、短波海洋レーダーというのをはじめました。僕は無線とか全然わからないのですが、FPGAならちょっとだけわかるので、それでレーダーの送受信機を作っています。1台目は新潟大の屋上に設置した24MHz帯のレーダーで、こちらは新潟大の学生さんのオペレートで新潟の海を見ています。波長12m なのですが、まあ、アンテナはでかい。めっちゃでかい。

沖縄にちょっと来る前に納豆菌のゲノム読むプロジェクトのお手伝いをさせていただいたのですけれど、「まだ人類の他の誰も手にしたことのないデータ」が自分の Mac に入っている、ってめちゃめちゃ面白いな、ってそのときに思いました。納豆、毎日食べてる人は僕以外にも1億人くらいはいそうだけど、納豆菌のゲノム配列ならおれのMacに入ってるぜ、っていう人はそれまでたぶん、ミツ○ンとかタカ○フーズの研究の人で、配列はあるけど社外秘、みたいな感じだったんだと思いますが、それをオープンな形で、しかも当時出たばかりの NGS で読んでいくの、めちゃめちゃ興奮しました。ただ、あの頃の NGS は長いリードがとれないから納豆菌のリピート配列を越えられなかったんじゃ・・・(そのあと鎌田先生が僕のホネをひろってくれました、PacBio のシーケンサすごい。)

あ、それで、すっかり話がそれましたが、昨年から今年にかけては新しく 13.5MHz 帯のレーダーを作らせていただく機会を得ました。静岡は御前崎に設置で、年末は海辺でヘルメットに作業着安全靴着用でひたすらアンテナ組み立てておりました (立てたのは主に学生さんたちです、すごいよみんな。) 御前崎からだと駿河湾のほぼ全域が見える、という目論見ですが、いろいろの事情で送受信機の調整と検査は年明けに延びてしまって、今回はそのために教員二人だけで出張。連日延々といろいろ直したり測定したり議論したりデバッグしたり。

デジタルフィルタもフーリエ変換も交流回路も電波もなにもかも、学生時代に全然わからなくて避けて通ってきたことなんですけども、ちゃんとやっときゃよかった、という気持ちでいっぱいになりつつちょっとずつ勉強していく日々です。めっちゃたのしい。

学生の皆さんは「これ全然わかんないし、なんの役に立つんだよ!」っていうこと、けっこうたくさんあると思うんですよね、でもできれば踏ん張ってほしいし、少なくとも「こういうことがあるのか・・・」ということは覚えておいてほしい、それさえ知ってれば、必要になったときに、なんとかなるんだ、たとえ学生時代に単位が取れなかったとしても!

あと、素粒子とかは全然わかりませんが、CERN でご活躍の先生にお声がけいただいて、加速器のデータ収集システムとかもちょっと始めています。物理ぜんぜんわかんないんですけど、僕がちょっとだけできる計算システムの設計技術が、人類が新たに手に入れる知識の手助けになるのとか、めっちゃかっこいいじゃないですか。

生物も海洋も物理も全然わかんないんですけど、

最高のエンジニアリングの先にある新たな人類の地平線、みたいなの最高にクールだし、そういうのをずっと見ていきたいなあ、というのが、最近ちょっと考えていることです。

ThinkPad x61 のファン

ThinkPad x61 をしばらく家でサーバとして使っていたのだけれど、起動時に Fan error が出るようになってしまった。ファンは回っているし、Esc 連打で起動するのだけど、さすがに10年を超えているし、別の機材に役目を交代させました。

で、サーバとして使っている間はずっとフタ閉じてたのですが、久しぶりに引っ張り出してみるとキーボードも本体の作りもしっかりしてるし、やっぱり捨てるにはもったいないので、とりあえず Fan error だけでもなんとかしようと。

あけてみると、外から見えているヒートシンクのところとは別に、パームレストの下、PCカードスロットの右に小さいファンがついていて、これが固着している模様。なお、その隣はモデム (!) と WiFi/Bluetooth モジュールです。もう一つ PCI っぽいなにかが出ているのは、WiMax 用のスロットな模様。

非常に薄いファンなのですが、外して眺めると、3箇所金属のツメでとまっていたので、ラジオペンチの先でぐいっとやると、あきました。ファンの羽根の部分もえいやっと引き抜いたら、抜けた。

で、軸受けのところにシリコンオイルを軽く挿したら、ファンが指で軽く回るようになりました。電源を入れたときにも回る模様。その日は Fan error 消えなかったのですが、後日ちゃんと消えました、しばらく子供用にでも使おうと思います。

Ultra96v2 にファンをつけた

新しい Ultra96v2, ファンレスになって静かだわー って思ってたけど、かなり熱くなりますね。ファンをつけるための電源は出ているので、つけましょう。回路図をみると、ファンは 5V なので、いつも使っているNidecの F310R-05LLC にしました。

用意したものは以下の通りです。

– ファン (Nidec F310R-05LLC)
– M2.6の六角スペーサー (20mmだけどたぶん25mmくらいがよい)
– 3mm x 16mm のトラスタッピングねじ (ファン固定用)

基板の4隅のネジを外して一旦ヒートシンクから外してハンダ付けします。TP25が5V, TP26がGNDです。

もともとついているスペーサーだとちょっと短いので、手元にあった 20mm の M2.6 スペーサーに付け替えました。ネジが長いので、ヒートシンクから基板側に飛び出していますが、基板に接触はしていないことを確認しています。自分で交換する時は気をつけましょう。なお、F310Rをつける場合、20mm でもまだちょっと短いです。

3mm x 16mm のトラスタッピングねじで、ヒートシンクの溝の部分にファンを固定します。

下から上、ヒートシンクに向かって吹き付ける向きでつけています。スペーサが短いので、机とファンの間の隙間はネジの頭の分くらいになってしまいましたが、ファンなしと比べると各段に冷えています。やったー!

Alveo U50のHBM

ひきつづきAlveo U50を動かすお話です。以前、FixstarsさんのところでU50のXDMAを動かした記事 を拝見して、同じように UltraRAM を接続して Core i3-6100 + DDR4-2133 Dual channelで動かしてみたら、こんな感じでした。

Write Performance 
** Average BW = 8388608, 10296.580078
Readback and Compare
** Average BW = 8388608, 4462.804199
Read Performance
** Average BW = 8388608, 9191.814453

Fixstars さんの POWER8 なホストでは 12GB/s とか出ているので、この差は CPU パワーだったりメモリシステムだったりするのでしょうか。単に DMA 転送しているだけだと CPU 使用率がスカスカで、すぐクロックが下がって DMA まで遅くなってしまうので、裏で yes > /dev/null してクロック周波数を維持しています (本当はちゃんとクロック周波数のコントロールを設定すればいいのですが。)

それで、HBM を XDMA に接続するのはなんとなくめんどくさそうで二の足を踏んでいたのですが、そろそろ本気出さないといけない感じになってきましたので、とりあえずやってみることにしました。方針としては、

  • あとで並列アクセスをする気がするので、とりあえず HBM IP コアの global addressing の機能はつかわない
  • とりあえず 1ch、512MB だけ動かす
  • HBM reference clock (100MHz) は SYSCLK3  (BC18, BB18) から
  • それ以外のクロックは SYSCLK2 (G16, G17) と、それで駆動する MMCM から
  • HBM IP の AXI インタフェイスは MMCM で 450MHz を作ってそれで駆動

ということにしました。いろいろと紆余曲折があって、今日も半日くらい使ったのですが、ブロックデザイン全体・HBM IP のチャネルの設定・アドレスマップは以下のようになっています。


CLK100 とか RST100_N はブロックデザインの外側の RTL で、CMC_CLK から作っています。アドレスマップをみると unmapped slaves があるので、あれ、と思う方もいらっしゃるかもしれませんが、global addressing を切ってしまうと、8つあるメモリチャネル (512MB) を半分ずつにした 256MB の (pseudo channel に対応した) 領域が 16あるAXIインタフェイスと1:1の関係になるようで、SAXI_00 だけでは正しく動作しませんでした。転送速度を UltraRAM のときと同じように測定すると、

Write Performance
** Average BW = 536870912, 10075.326172
Readback and Compare
** Average BW = 536870912, 4533.174316
Read Performance
** Average BW = 536870912, 9016.518555

ということで、ひとまずバンド幅はちゃんと出ているようですが、AXI Interconnect を性能側に振った設定にして、出力の register slice などを on にしないとタイミングが meet しなかったので、左右両スタックの HBM をこのまま 16ch + 16ch で AXI interconnect に直結するのはちょっと性能的に厳しそうで (AXI interconnect のポート数の制約もあるし) 、やはり global addressing を利用するのが賢いのかなあ、という気がしています。

Alveo U50のUART

Alveo U50 を使うことになって、ちょっとずついろいろ試しているのですが、ようやく Alveo U50 Getting Started に掲載されている Vivado 用の XDC ファイルが更新され、U50 SFP (Production版) のファイルになりました。

以前公開されていた U50DD (ES版) の XDC ファイルは中身がだめだめだったのですが、今回はわりとちゃんとしているようです。PCIe 関係などは XDC がなくてもボードファイルをのぞけばピン配置などがわかったのですが、XDC ファイルにはそれ以外の情報も掲載されていて、たとえば、

# Bank 65 and 68 FPGA UART Interface 0/1/2 to DMB-01 (User selectable Baud) 
#    FPGA_UART0/1/2_RXD  Input from DBM-01 UART to FPGA 
#    FPGA_UART0/1/2_TXD  Output from FPGA to DBM-01 UART 

とあって、どうやらプログラミングケーブルを経由して UART が使えるようです。

で、3つ使える、とあるのですが、試してみたところ使えるのは 0, 1 のみで、2 は未接続な感じです。プログラミングケーブルに搭載されているのは FT4232 で、4ポートの UART ポートがあるのですが、これはどうやら

  1. JTAG
  2. (未接続?)
  3. FPGA_UART0
  4. FPGA_UART1

というふうに接続されているようです。1. の JTAG ポートは、はじめ /dev/ttyUSBx として見えているのですが、Vivado や xsdb などで接続すると消えてしまうので、JTAG ポートということなのでしょう。

なお、プログラミングケーブルには「使わない」と書かれている MicroUSB ポートがもうひとつあるのですが、こちらに接続するとやはり FT4232 が現れます。Vivado の Hardware Manager でのぞいてみると、ARM DAP が現れますので、こちらはサテライトコントローラのMSP432と、その UART ポートが接続されていそうです。

MacPorts で gnutls

研究室の環境もぼちぼちMojaveにアップデートしつつあるのですが、Emacs + Wanderlust でメールを読もうとしたらいきなりクラッシュ。なんでかー、と思って backtrace を眺めたらどうやら IMAP で STARTTLS しようとして、 gnutls-cli を呼んだところで落ちている。Ivy Bridge とか Haswell な Mac だとダメで、いまどきの新しい Mac なら問題ないようだ。つまり、SSEx だとかその手のやつですよね。

というわけで、
% gnutls-cli –startls-proto=imap my.mail.server
としたら本当に落ちるじゃありませんか。しかも Illegal instruction だと…

で、どうやら gnutls の問題じゃなくて、GMP の問題らしい: http://lfsbookja.osdn.jp/7.10/chapter06/gmp.html

MacPorts の枠組みの中でなんとかならんかなー、と思った結果、GMP に core2 という variant があるので、これを使えば Core2 アーキテクチャまでの最適化しかしない、ということで、とりあえず解決。よかった… (まあ GMP でごりごり、みたいなことはしないので、いいか)

FreeBSD + LDAP + tcsh

SunOS4と386BSDでUnixを使い始めて20年ちかく、csh/tcshを使ってきたのですが、研究室の環境をFreeBSD 10.2に更新してから、ctrl+cでシェルが死ぬ、という問題が起こるようになりました。入力しかけのコマンドをキャンセルしたいときとかにもつい押しますし、これすげー困りますよ。

それでちょっと検索してみると、

といったように、どうやらうちの研究室固有の問題ではないということに気づきました。こまったこまった。

ということを Facebook に書いたら、学生時代の研究室の先輩方に「おまえまだ tcsh 使ってんのかよはやく zsh にしろよ」といわれまして、つい乗り換えてしまったのですが、root とかはデフォルトの csh のままなわけでして、難しい作業やってるときにシェルが死ぬと集中力きれて困るわけで。

それで、新しい端末をセットアップしていたときに、ports に nss-pam-ldapd というのが入っていることに気づいて、これを使ってみたら ctrl+c おしても平気。nss_ldap や pam_ldap の派生プロジェクトだそうです。

これにてどうやら解決です。めでたい。