distributed.netな日々:2017年6月

2017年6月4日:【OGR-28】Japan Celeron Users Groupさんを抜きました

6月2日に、Final Tear ZチームはJapan Celeron Users GroupさんをOGR-28で抜くことができました。2016年11月16日に抜かれたのですが、約半年で抜き返すことができました。わいわい。それにしても、もう。Japan Celeron Users Groupさんとの付き合いも随分と長くなりまして、もう10数年にもなりますかね。これからもお互い頑張りましょう!(と勝手にまとめる

ちなみに、6月2日時点ではFinal Tear Zは12,022,345 Gnodesを解析済みでした。世界順位は131位です。半年前は136位でしたから、JCUGさんもFTZもちょっとだけ順位をあげてきてますね。

一方、プロジェクト全体は6月3日時点で42,276,453,836 Gnodesが解析済み。全体に対しては35.48%です。プロジェクト開始からの経過はちょうど1200日。三年とちょっと経ったわけですね。単純計算ではあと6年ほどで完了する見込みということになります。意外と早く終わりそうですね。

2017年6月20日:dnetcが1CPUで動いてた

dnetcを動かしているPC達を運用監視したらどうかなと思い立ちまして、はてなの提供するMackerelを使ってみました。これ、最近評判いいですよね。

で、早速エージェントをダウンロードしてきてPC達にインストールして監視してみたんですが、FreeBSDで動いてるサーバ機のCPU稼働率が50%しかないということに気がつきました。は?topコマンドで観察したらちゃんと100%になってるのに。

last pid: 78486;  load averages:  1.19,  1.21,  1.38   up 40+00:12:58  22:21:12
45 processes:  2 running, 43 sleeping
CPU:  0.0% user, 50.0% nice,  0.0% system,  0.0% interrupt, 50.0% idle
Mem: 45M Active, 7976K Inact, 270M Wired, 10M Cache, 405M Buf, 3493M Free
Swap: 3852M Total, 462M Used, 3390M Free, 11% Inuse

  PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME    WCPU COMMAND
78358 shigekazu     1 123   20 11400K  8252K CPU0    0  18:12 100.00% dnetc

このPCは2コアなので、おそらく1コアしか使わないようになってしまっているのでしょう。topコマンドに-Pオプションを付けてみたところ、確かにそうなってました。

last pid: 78489;  load averages:  1.14,  1.19,  1.38   up 40+00:13:13  22:21:27
45 processes:  2 running, 43 sleeping
CPU 0:  0.0% user, 14.5% nice,  0.0% system,  0.0% interrupt, 85.5% idle
CPU 1:  0.0% user, 85.5% nice,  0.0% system,  0.0% interrupt, 14.5% idle
Mem: 45M Active, 8008K Inact, 270M Wired, 10M Cache, 12M Buf, 3493M Free
Swap: 3852M Total, 462M Used, 3390M Free, 11% Inuse

  PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME    WCPU COMMAND
78358 shigekazu     1 123   20 11400K  8252K CPU0    0  18:28  99.85% dnetc

まずは疑うのはdnetcの設定です。コア数はauto detectになっていたのですが手動で2コアを明示してdnetcを再起動。が、やっぱり1コア分しか使われない。dnetcのログを見てる限りはちゃんと2スレッド起動してるんですけどねぇ。

しばらく考えて、なんとなくfileコマンドでdnetcを調べてみたところ

$ file dnetc
dnetc: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), statically linked, for FreeBSD 8.2, stripped

こんなことになってました。使用してるOSはFreeBSD 10.3ですので、全然バージョンが合ってないですね。それが原因とも思いにくいのですが、念のためにdistributed.net Client DownloadsからFreeBSD 10.x/AMD64用のdnetcをダウンロードしてきたところ、無事に2コアが使われるようになりました。

last pid: 78198;  load averages:  2.00,  2.00,  2.00   up 39+23:42:13  21:50:27
43 processes:  3 running, 40 sleeping
CPU 0:  0.0% user,  100% nice,  0.0% system,  0.0% interrupt,  0.0% idle
CPU 1:  0.0% user,  100% nice,  0.0% system,  0.0% interrupt,  0.0% idle
Mem: 18M Active, 3323M Inact, 348M Wired, 51M Cache, 404M Buf, 85M Free
Swap: 3852M Total, 16M Used, 3836M Free

  PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME    WCPU COMMAND
33727 root          1 123   20 14800K  4852K RUN     0  93.0H 100.00% dnetc
33728 root          1 123   20 14800K  4712K CPU1    1  93.0H 100.00% dnetc

うーん、なんなんでしょうね。FreeBSD 8.xから10.xの間でマルチスレッドに関するAPIの変更でもあったんでしょうか。まさかなぁとは思いますが、自分にとっての問題は解決したのでとりあえずよしとします。

あー、それにしてもこれまで数ヶ月間ずっと1コア遊んでたってのはもったいないなぁ。悔しい。