目次

FreeBSD 12とFolding@homeで新型コロナウイルス解析に参戦する

流行りに乗じて新型コロナと絡めてみたけど、単にFreeBSD 12でFolding@homeを動かそうっていうお話。

以前にもやったことあったなぁ…とサイト内をあさってみたら、ちょうど14年前だった(FreeBSD de Folding@Home)。VIA C3のマシンで運用してた記憶。当時はまだportsがなかったけど、記事書いたのが3月、portsが出来たのが8月のようで、振り返ってみるとちょっとの差だったんだなと中々に感慨深い。

しかしあれから14年か…。

試した環境

インストール

Folding@homeはFreeBSD用バイナリが用意されていないものの、Linux向けのものがLinuxエミュレータ環境で動く。

portsから入れれば何も難しい事はないが、Linux関連のパッケージがガシガシ入るので、気になる人はjailなりbhyveなりに隔離環境を作ってください。

# portsnap biology/linux-foldingathome

専用ユーザーfahclientが追加されるんだけど、2020-03-29現在、ユーザーDBの更新が正しく行われず有効なユーザーとして認識されないので手動で更新する。pwコマンドでfahclientユーザーの情報が表示されればOK。

# pwd_mkdb -p /etc/master.passwd
# pw usershow -n fahclient
fahclient:*:246:246::0:0:Folding@home User:/nonexistent:/usr/sbin/nologin

fahclientユーザーが使えない状態では、「su: unknown login: fahclient」と怒られてサービスとして起動できなかったりする。

Linuxエミュレータの設定

Linuxエミュレータ環境有効化。

# sysrc linux_enable="YES"

/etc/fstabに以下を追加。

linprocfs       /compat/linux/proc      linprocfs       rw              0       0
linsysfs        /compat/linux/sys       linsysfs        rw              0       0
tmpfs           /compat/linux/dev/shm   tmpfs           rw,mode=1777    0       0

ここで再起動するか、自前でカーネルモジュールを読み込む&上記FS類をマウントする。

# reboot
または
# kldload linux64
# mount /compat/linux/proc
# mount /compat/linux/sys
# mount /compat/linux/dev/shm

Folding@homeクライアントの設定

Folding@homeのデフォルトの作業ディレクトリは/var/db/fahclientとなっており、ここに配置した解析プログラムを実行するようになっている。

ZFS環境の場合、通常/var/db以下はexecプロパティがoffでプログラム実行が許可されていない。よってexec=onでFSを作ってしまう。所有者の変更も忘れずに行う事。

もしFS作るのが嫌なら/usr/local/etc/rc.d/fahclientをいじって作業ディレクトリの場所を変更すべし。

# zfs create -o exec=on zroot/ROOT/var/db/fahclient
# chown -R fahclient:fahclient

fahclientの実行ログを見るかぎり、/usr/local/etc/fahclient/以下の所有者も変えた方が良さそう。

# chown -R fahclient:fahclient /usr/local/etc/fahclient/*

必要なら /usr/local/etc/fahclient/config.xml のユーザー名とチーム番号を書き換える。

  <user value="Decomo"/> <!-- Enter your user name here -->
  <team value="11743"/>         <!-- Your team number -->

Folding@homeのデーモン有効化

# sysrc fahclient_enable="YES"

Folding@homeデーモンを起動

# service fahclient start

service fahclient logでズラズラとログが出たり、topでFAHClient/FahCore_xxあたりのプロセスが動いてれば解析が行われている。

トラブルシューティング

アプリケーション起動

デーモンではなく単発アプリケーションとして起動したい場合は、以下のようにする。

# /usr/local/bin/FAHClient --config=/usr/local/etc/fahclient/config.xml

CPU割り当ての最適化

Foldgin@homeはFolding slot単位でWUの割り当てを行うが、標準では1スロットに全CPUスレッドを割り当てる構成となっている。そしてスロットの処理能力に適したWUが割り当てられるっぽいが、多コアCPUの場合これが徒となり、WUが降ってこない原因ともなるようだ。

そんな時は、あえて4スレッド程度のスロットを複数個作った方が、効果的にWUの割り当てが行われるっぽい。

<config>
  ...
  <!-- Folding Slots -->
  <!-- 8C/16TのCPUで4スレッド×4スロットにする -->
  <slot id='0' type='CPU'>
    <cpus v='4'/>
  </slot>
  <slot id='1' type='CPU'>
    <cpus v='4'/>
  </slot>
  <slot id='2' type='CPU'>
    <cpus v='4'/>
  </slot>
  <slot id='3' type='CPU'>
    <cpus v='4'/>
  </slot>
</config>

参考サイト