カテゴリー: コンピュータ

コンピュータ

ネットワークトラブル(現在進行形)

去年末に Intel Core i7 8700K が出たタイミングでこれまで使用していたサーバーをリプレースしたのですが、ネットワーク周りのトラブルがずっと続いていてホトホト困っているので対応の履歴を残してみます。

起こっている現象

ある日突然(数時間おきの場合もあれば一週間以上大丈夫な場合もある)社内ネットワークが落ちてしまい、外部接続はおろか内部も接続が切れてしまう。

調べてみると HUB が死んでいるようで、その HUB に繋がっている計算機が接続できなくなっている。

さらに調べてみると、ファイルサーバーや Web サーバーなどを兼務している計算機で NIC が死んでいることがわかった。この計算機の OS は下記のような感じ。Ubuntu 16.04。

neo@matrix2:~$ uname -a
Linux matrix2.XXXX.co.jp 4.13.0-32-generic #35~16.04.1-Ubuntu SMP Thu Jan 25 10:13:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
neo@matrix2:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION=”Ubuntu 16.04.3 LTS”
neo@matrix2:~$

ログを確認すると NIC がリセットされていることがわかる

Feb 6 13:13:11 matrix2 kernel: [80014.946129] e1000e 0000:00:1f.6 enp0s31f6: Reset adapter unexpectedly
Feb 6 13:13:11 matrix2 kernel: [80014.946287] br0: port 1(enp0s31f6) entered disabled state
Feb 6 13:13:15 matrix2 kernel: [80018.988532] e1000e: enp0s31f6 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
Feb 6 13:13:15 matrix2 kernel: [80018.988605] br0: port 1(enp0s31f6) entered blocking state
Feb 6 13:13:15 matrix2 kernel: [80018.988614] br0: port 1(enp0s31f6) entered forwarding state
Feb 6 13:13:52 matrix2 kernel: [80055.906251] e1000e 0000:00:1f.6 enp0s31f6: Reset adapter unexpectedly
Feb 6 13:13:52 matrix2 kernel: [80055.906522] br0: port 1(enp0s31f6) entered disabled state
Feb 6 13:13:56 matrix2 kernel: [80059.956583] e1000e: enp0s31f6 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
Feb 6 13:13:56 matrix2 kernel: [80059.956662] br0: port 1(enp0s31f6) entered blocking state
Feb 6 13:13:56 matrix2 kernel: [80059.956670] br0: port 1(enp0s31f6) entered forwarding state
Feb 6 13:14:46 matrix2 kernel: [80109.922310] e1000e 0000:00:1f.6 enp0s31f6: Reset adapter unexpectedly
Feb 6 13:14:46 matrix2 kernel: [80109.922620] br0: port 1(enp0s31f6) entered disabled state
Feb 6 13:14:50 matrix2 kernel: [80113.984597] e1000e: enp0s31f6 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
Feb 6 13:14:50 matrix2 kernel: [80113.984657] br0: port 1(enp0s31f6) entered blocking state
Feb 6 13:14:50 matrix2 kernel: [80113.984660] br0: port 1(enp0s31f6) entered forwarding state

こういった内容が延々続いている。また、ルーターと ping で疎通確認をすると、最初に Reset adapter unexpectedly が起きた時点で接続が切れているらしいことがわかる。

現時点での解決策

以下の手順を踏むと、しばらくの間症状が出なくなる

  • 問題が起きている PC の電源を完全に落とし、電源ケーブルも抜いて数十秒待った後に起動
  • HUB の電源も一度切って入れなおす

HUB の電源オンオフやマシンの再起動でも一時的には治るが、大抵すぐに同じ問題が起きる。

これは到底解決策とは言えないので、根本的な原因の調査と対応をおこなう必要がある。

調査内容

まずは HUB, NIC, ネットワークケーブルそれぞれの不調を疑ったので、ひとつづつ交換してみる。

  • HUB → 別のメーカー・型番のものに交換しても同じ症状が起きる
  • ネットワークケーブル → 交換しても同じ症状が起きる
  • NIC はオンボードなので、BIOS で殺したうえで USB 接続タイプの NIC を使用してみる → 同じ症状が起きる

次に、マザーボードの不調を疑ったので新たに別のメーカー、型番のものを調達して交換したものの症状は変わらず。

GRUB での ASPM 無効化

カーネルオプションで ASPM を無効化するとよいという内容が見つかったので、GRUB で ASPM を無効化

/etc/default/grub で設定

GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash pcie_aspm=off”

→ 解決せず。

BIOS での ASPM 無効化

BIOS で ASPM を無効化

→ 解決せず。

TSO 無効化

Reset adapter unexpectedly で Google 先生に聞いてみるといくつかのサイトが引っかかる。

TSO 無効化をするとなおると書いているので試す。

/sbin/ethtool -K enp0s31f6 gso off gro off tso off

起動時に毎回実行する必要があるので、/etc/rc.local にも記述しておく。

→ 解決せず。

NIC のドライバの更新

NIC のドライバを更新してみる。

更新後の環境は以下の通り

neo@matrix2:~/tmp$ ethtool -i enp0s31f6
driver: e1000e
version: 3.2.6-k
firmware-version: 0.2-4
expansion-rom-version:
bus-info: 0000:00:1f.6
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
neo@matrix2:~/tmp$

→ 解決せず。ただ、ドライバが最新になっていないかも?要確認。

(ToDo)disabling enhanced C1 power saving state (C1E) in the BIOS settings

https://superuser.com/questions/1270723/how-to-fix-eth0-detected-hardware-unit-hang-in-debian-9

(ToDo)Update Firmware

neo@matrix2:~/tmp$ lspci -nn -s 00:1f.6 -v
00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection (2) I219-V [8086:15b8]
Subsystem: ASUSTeK Computer Inc. Ethernet Connection (2) I219-V [1043:8672]
Flags: bus master, fast devsel, latency 0, IRQ 134
Memory at df300000 (32-bit, non-prefetchable) [size=128K]
Capabilities:
Kernel driver in use: e1000e
Kernel modules: e1000e

neo@matrix2:~/tmp$

もしかして解決?

再度問題が発生し、サーバーを再起動するとシステムディスクにエラーが発生して正常に起動できない。
コンソールに以下のようなメッセージが延々と出力される。EXT4-fs error ということなのでファイルシステムがおかしいようだが、fsck をしても正常だと言われてしまう。

結局いろいろ試してもこの問題は解決しなかった。ただ、このままだとサーバーが止まったままになってしまうので手持ちの HDD に dd でイメージをコピーしてそちらから起動したところ、何の問題もなく動作するようになった。

システムディスクに使用していた SSD が壊れていたのかもしれないが、ストレージの問題ならイメージのコピー中にエラーが出たりコピーしたイメージが壊れるなど何か問題が起きるような気がするのだがそんな様子もない。(dd の場合、エラーも含めてコピーしてしまうという話はありそう。。。)

この SSD はサーバーリプレース時に新規購入したものなのでまさかこれが壊れるとは思っていなかった。心当たりとしては、システム更新時に最初に使用していたマザーボードを電源周りのトラブル(煙を吹いた!)で交換しているので、その時に SSD にまで何か影響を及ぼしたのかもしれない。

いろいろと釈然としない部分はあるが、ひとまず現在の環境で様子見をしてみる。

コンピュータ

Windows10 上で、タスクバーのサムネイル表示をおこなわないようにする

マウスカーソルをタスクバーのアプリケーションのところに持っていくと、ウィンドウのサムネイルが表示されます。
でも、、、正直サムネイルの中身って似たような内容なので判別できないよっ!!意味ないよっ!!

ってことで、サムネイル表示しないでウィンドウタイトルがリスト表示されるようにします。

以下の二つのコマンドを管理者モードで立ち上げたコマンドプロンプトから実行するだけ。

reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband /v NumThumbnails /t REG_DWORD /reg:32 /d 0
reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v ExtendedUIHoverTime /t REG_DWORD /reg:32 /d 36000

コンピュータ

Windows10 で Caps lock を Ctrl にする

OSインストールのたびにネットの海をさまうことになるので自分用メモ。

以下の内容をhoge.reg とかのファイルに書いてダブルクリック。

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
“Scancode Map”=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00

これで Caps lock が Ctrl になる。元々の Ctrl はそのまま。

コンピュータ

Linux 上で NVIDIA の GPU のファンをコントロールする

ちょっとハマったのでメモ。

Ubuntu で NVIDIA の GPU を、X を使用しない状態(headless)で動かしているときにファンコントロールをする方法。

何も考えないで nvidia-settings を使うとエラーになってしまう。

cluster@cluster:~$ sudo nvidia-settings -a [gpu:0]/GPUFanControlState=1
Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused

ERROR: The control display is undefined; please run `nvidia-settings –help` for usage information.

X を使用しなくてもそのための設定が必要なので nvidia-xconfig を使って設定ファイルを生成する。

sudo nvidia-xconfig -a –cool-bits=31 –allow-empty-initial-configuration
sudo DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -t -q GPUUtilization

そうすると、実行できるようになる。DISPLAY と XAUTHORITY は指定しておく必要があるっぽい。

cluster@cluster:~$ sudo DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -a [gpu:0]/GPUFanControlState=1

Attribute ‘GPUFanControlState’ (cluster:0[gpu:0]) assigned value 1.

cluster@cluster:~$ sudo DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -a [fan:0]/GPUTargetFanSpeed=50

Attribute ‘GPUTargetFanSpeed’ (cluster:0[fan:0]) assigned value 50.

Blender, CG, コンピュータ

オープンソースソフトウェアの醍醐味

最近はエイプリルフールが世間にガッツリ定着してしまって、どこもかしこも嘘だらけでつまんないので逆張りしてガチネタで攻めます。天邪鬼天邪鬼。

ここ一、二年、一般的な CG 屋さん達からも Blender が注目を集めてきていています。最近はそこに Softimage の開発終了のニュースがあったために更に注目を浴びることになっています。

それはそれでいいことですが、Blender を使うということに対して何かいろいろ的外れな言及が多い(というか、そればっか)ので一度自分の意見をまとめてみました。


一番違和感を覚えるのが “無料=お金がかからない” という紹介です。これはもう完全に的外れです。タダだから使うというのは、情熱と時間が有り余って、でもお金がない学生さんならともかく、いい大人(しかもプロ)がそれ基準でものごとを決めるのは “本気!?” と思ってしまいます。正直、発想が貧乏臭いです。

はっきり断言しておくと、Blender を使うことでお金がかからないとか安く作品を作ることができるということは全くありません。自分達が割くリソースの内容と、その投入先が市販ソフトウェアを使う場合と異なるというだけです。そもそもソフトウェア代なんて人件費に比べたら誤差みたいなもので、それが高いというのは(ry

繰り返すと、投資の質と投資先が異なるというだけです。

市販ソフトウェアは既にある程度実績があって商品としてパッケージングされたものをお金を払って使うものです。それに対し、オープンソースソフトウェア(特に発展途上なもの)はそこにあるものを自分の力で使えるようにするという努力が必要になります。

例えて言うなら、市販ソフトウェアを使うのがコンビニ弁当を買って食べるということだとするとオープンソースソフトウェアは山や海に行って、自分で食材を集めて調理するようなものです。材料そのものにはお金はかからないかもしれないですが、そのかわりに現地に行く労力や食材を育てたり狩りをするためのスキルが必要になります。

そのためのスキルを身につけるには相応以上のコストを払う必要があります。Blender を使おうかと言っている人で、そういったコストを払う覚悟がある人はどれくらいいるんでしょうか?かなり疑問です。

また、無料だからという理由で飛びつくのも、それを吹聴するのも自分の首を締める行為にしかなりません。無料で制作ができる=自分たちの仕事をするためにかかるコストが安いですよというメッセージに受け取られ、結果的に映像制作をするということの価値を下げることに繋がります。それがみんなが求めている未来なのでしょうか?

大事なのは、”無料だから使う”ではなく、”使いたい使い方があるから使う”、そういう発想で道具を選ぶことです。これは極々当たり前のことですね。でも、”無料”の二文字の前にはそういう判断ができなくなる人が多いようです。

そして、Blender を始めとしたオープンソースツールを使用すること、ひいてはオープンソースソフトウェアのコミュニティに参加することの醍醐味はもっと別のところにあります。

開発力があればオープンソースソフトの開発に携って、自分達の力でソフトウェアをより良くすることができます。これは最もコアなかかわり方と言えます。

開発力が無い人は指をくわえて見ているだけか?というとそんなことはありません。
自分たちが欲しいと思ったら、自分で足りない部分を補っていけばいいのです。日本語マニュアルが欲しかったら自分が翻訳してみる、アーティストであれば自分の作った作品を公開してみる。これもコミュニティに参加するためのアプローチの一つです。
極端な話、インストールが難しいソフトウェアであればインストールマニュアルを作るというのも貴重な(そして、とても感謝される)貢献になります。

こういった、自分ができるアクションを起こすことで世界中の Blender チームの一員になるとができ、また、世界中の Blender チームを自分たちの一員にできるのです。そうなれば、世界中の開発者、研究者、アーティストと協力して新しい価値を生み出すことができるようになります。

そのためのコストは決して小さいものではありませんが、それ以上に得られるものがあります。

「ウチは CG をつくる会社だから関係ないよ」という意見もあるかもしれません。でも、考えてください。コミュニティの一員になることで、特定のベンダの呪縛から逃れることができます。SIGGRAPH で発表された、あの会社の使っていた技術がすぐに手元に届きます。しかも、開発者と直にディスカッションできます。自分が欲しいと思った表現方法を提案して賛同者を募ることもできますし、資金援助することで自分達が使っているツールを直接的により良くすることもできます。

これらの可能性を、今掛けているのと同等かそれ以下のコストで実現できる可能性を秘めているのが Blender であり、オープンソースコミュニティなのです。

無料だから使うっていう貧乏臭い発想より、こっちの方が断然ワクワクしませんか?

自分たちの手で未来を切り拓きましょうよ。

コンピュータ

iTunesのデータをNASに置きたい

新しい iTunes が OSX 10.8 でサポートしていないということで Windows で iTunes を使えるようにするついでに NAS 上に iPhone のバックアップデータやらライブラリやらを置くようにしたのでその作業メモ。

Twitter であーでもないこーでもないとグダグダ呟いていたらいろいと御助言頂けた @takmiz 君、@kaoru さん、@cokeraita さん、@AItoiI さんたちには大感謝です!!

実作業

基本は、”放牧82日~iTunesのバックアップ保存場所変更方法(windows vista)~” の記事をそのまま実行しただけですw

ちょっと違うのが、元記事ではドライブ内のパスにリンクをはっているものを NAS 上のパスに直接リンクをはってしまったところです。こうすることで、NAS 上に iTunes のデータを置くことができます。私のようにメイン PC がノートで、SSD を使っているために容量に余裕が無い人なんかはこのような形で運用できると結構嬉しいのではないでしょうか。

iTunes で厄介なのが、iPhone などのバックアップデータを置く場所と音楽などのライブラリを置く場所が別々になっていることです。しかも一見するとどこにあるのか全くわかりません。普段意識させないのはいいんですが、完全に隠されると困ります 🙁

とグチは置いておいて、ググってファイルのありかを見つけたら二つともリンクをはります。

iTunes ディレクトリのリンクをはる

mklink /d C:\Users\chiyama\Music \\NAS01\home\chiyama\Music\iTunes

Backup ディレクトリのリンクをはる

mklink /d “C:\Users\chiyama\AppData\Roaming\Apple Computer\MobileSync\Backup” “\\NAS01\home\chiyama\Library\Application Support\MobileSync\Backup”

この二つでOK。ユーザー名とかパスは適宜読み替えてください。

mklink は何故か普通のコマンドとはオプションが逆で、

mklink /d “リンク先” “リンク元”

となっています。このコマンドを作った人のセンスを疑いますね 🙁

コンピュータ

infraBench 公開しました

クライアントPCから見た社内インフラのパフォーマンスを計測するためのツール、infraBench を公開しました。

。。。と言っても、フレームワークとプラグイン一本しかまだ登録されていないですが(汗。

社内のインフラのパフォーマンスって案外定量的に計測されておらず、計測されていたとしても各社独自の方法で行われているので、客観的に早いのか遅いのか、快適なのかそうでないのかを知る術がほとんどなかったりします。

また、インフラの計測といっても非常に多岐に渡り、スループットやレイテンシ、トラフィック、などなどいろいろな計測方法やツールがあります。しかし、これらの情報を適度にミックスしながら比較し、現場の「遅い」という体感を数値に表すのは至難の業です。

infraBench を使うことで多角的なベンチマークを手軽に行う環境を構築し、更に他の環境と比較することでどこに問題があのかをより簡単に把握することができる環境構築を目指します。

その環境を構築するためにも、実際に使ってベンチマークを取って頂ける方や、プラグインを開発して頂ける方の協力が必要です。よろしくおねがいします。

つかいかた

現状、githubで公開しています。 git pull した後に config.txt を必要に応じて書き換えて infraBench.py を実行するだけです。計測結果の表示は全く整形していないのでまだ非常に見づらいです。

config.txt のかきかた

config.txt は一行毎に実行するベンチマークの命令を記述します。

サンプルで登録されているものはこのようになっています。


fileStat(path = './tmp/1k'   , size = 1024   , count = 10)
fileStat(path = './tmp/10k'  , size = 10240  , count = 10)
fileStat(path = './tmp/100k' , size = 102400 , count = 10)
fileStat(path = './tmp/1000k', size = 1024000, count = 10)

filestat がプラグインの名前、そのあとの () で囲われた部分がこのプラグインを実行するときの引数になります。
この引数の内容はプラグイン毎に異なります。

この例では、fileStat プラグインが4回呼び出され、それぞれカレントディレクトリの下に 1KB/10KB/100KB/1MB のファイルを 10 個づつ作り、それぞれのファイルの情報を取得するのにかかった時間と CPU サイクル数を計測します。

プラグインアーキテクチャ

infraBench は非常に単純なプラグインアーキテクチャを採用し、ほとんど手間無く機能を追加することができるようになっています。

プラグインで必要な関数は 3 つで、 preProcess(), process(), postProcess() になります。
infraBench は実行の際、config.txt で指定された実行順序に preProcess() を全て実行し、次に process()、最後に postProcess() を実行します。

各関数はargs と valuesという引数を二つ取り、args は config.txt で設定された値を辞書として取ります。values は infraBench 全体で蓄積していく値のブロックを取ります。
各関数は必要に応じて値の追加や既存の値の加工、削除などを行ってその結果を返り値として返します。これにより、 infraBench 全体ではあたかもプラグインというノードを直列に繋いだノードのようなふるまいになり、最後の処理が終った時の返り値に全ての情報が入っていることになります。

詳しくは modules/fileStat.py を読んでみれば何をすべきなのかわかります。

さいごに

infraBench は基本になる骨組はできているものの、必要なプラグインは全く整っていない状態です。ぜひとも一緒に機能を増やし、より手軽に社内ネットワークの状況を把握できる環境を構築していきましょう!!ご協力おねがいします。

3ds max, コンピュータ

PyMax

3ds max のスクリプト言語としては maxScript があるのですが、これがまたどうにもこうにもアレな感じで、しかも max 以外では使うことができないので頑張って勉強をして覚えるのもためらってしまうという方が多いかと思います。というか、私もその一人です。

某所で maxScript の記事を書かせて頂いている身でこんなことを言うのは何なんですが、、、、ソレハサテオキ。

そんな maxScripter の希望の星として、max で Python が使える Py3dsMax というのが Blur Studio から公開されています。。。。。というか、正確には公開されていました。何故か2月以降公開が取りやめになってしまっていて、開発者は”もうすぐ公開するよ~”といいつつ音沙汰が無い状態です。

これではさすがに Py3dsMax ベースで仕事をすることはできないので、一念発起して自分で作ってしまいました。名づけて PyMax!!どうも某社のインハウス実装と同じ名前らしいという情報も小耳に挟んだものの、気にしない(笑。

見ての通り、Pythonスクリプトを文字列として渡してやると計算結果が maxScript のオブジェクト値として返ってきます。ぐれいと!!

今のところ __pymax__ という謎のパラメータに計算結果を代入してやらないと値の取得ができないのですが、これは回避することができそうです。

PyMaxは、公開したらどれくらいの方が開発に参加して頂けるのでしょうか?それによってはオープンソース化も考えています。一人で抱え込んでいても仕方ないですしね。興味のある方、ご連絡お待ちしています 🙂

CG, コンピュータ

ギョーカイ対応ストップウォッチアプリ

映像の仕事をしていると、アニメーションやエフェクトのタイミングをストップウォッチで計測して映像作りに生かしたくなるときが多々あります。

そして、映像の仕事で使うとなると普通のストップウォッチはもちろん、24fps や 30fps、果ては 29.97fps 換算で時間を計りたくなるのが人情というものです(笑

そこで見つけたのが Mac OSX のダッシュボードで使えるストップウォッチ Widget。これはもう、私の要望を120% 余す事無く完璧に叶えてくれています。Mac ユーザーなら即インストールすべし!!です。