一年間私を悩ませ続けた問題が、ようやく一区切りつきました。MacとReadyNAS 104のやりとりが異常に遅いというものです。速度がよくて10MB/sしか出ない。対応後、Readで60MB/sまで改善しました。
環境と症状
Macの環境は以下。
- Mac mini 2012, MacBook Air 2013 11インチ
- OSX 10.11.6 (追記:Sierra(10.12.4)でも確認)
- 有線LAN、ギガビットイーサネット環境、無線は切っている
ReadyNAS 104のファームウェアは6.5.0。
症状として、MacとReadyNASの通信が10MB/sしか出ない。プロトコルはSMB。AFPを使うと、Readで50MB/s、Writeで30MB/s出る。また、Windowsでは無線のクライアントでも20MB/s以上でるので、通信環境の問題ではない(ルータ周りのLANケーブルがすべてCat.5e以上であることを確認、ケーブル交換なども実施したが、改善せず)。したがって、Mac、あるいはReadyNASのMacに関する設定の問題と考えられる。
ちなみに「MacでSamba, NASの接続が遅い時の対処法まとめ - wp.bmemo.pw」で紹介されている「net.inet.tcp.delayed_ack=0」でTCP遅延ACKのオフと、ReadyNAS側の設定として「ReadyNas に Finder でアクセスした時に表示が遅い時の対処法」の設定方法も実施済み。私の場合は残念ながらあまり変わりませんでした。。。
プロトコルの確認
まず大切なことは、AFPで通信しているのか、SMBで通信しているのかということです。現在のMacはSMBを優先するようになっているはずなので、特に意識しなければSMBでしょう。Finderの共有を見れば、SMBでマウントされているかどうかわかると思います(下図)。
SMBとAFPでの速度差
このとき、私の環境ではRead/Write共に10MB/s程度しか出ませんでした(下図)。
これは耐えられないほど遅い速度ではありませんが、有線LANであるメリットをまるで感じさせない速度でもあります。実際、Windowsマシンからは20MB/s以上の速度が「無線で」出ました。明らかに問題があります。
そこで、MacではレガシーとされるAFPで接続すると、速度が劇的に改善されました(下図)。
Readが50MB/s、Writeが30MB/s出ています。激速ではありませんが、有線LANの恩恵を受けた速度ではないでしょうか。
ではAFP接続にすればよいのではないかというと、AFP接続にした場合、どういうわけか、Finderでのファイルのリスト表示が著しく遅くなりました。SMBでも遅いのですが、AFPはちょっと信じ難いほど遅い。10以上ファイルがあると待たされる。100もファイルがあれば、10秒以上待たされる。これはちょっと実用的でない。
また、AFPは既にAppleからレガシーとされ、開発もストップしており、いつ切られてもおかしくない状態です。SMBを使うほうが無難なのです。
SMBとAFPについて
状況を整理します。まず現在のMacでの標準はSMBです。しかし、速度が出ません。AFPにすると、最大速度は確かに早くなりますが、Finderでの表示が耐え難いほど遅くなりました。また、AFPはレガシーであり、開発がストップしています。SMBを使うことが望ましいとされています。
レガシーのAFPならばともかく、なぜ推奨のSMBでこんなことになっているかと言うと、MacにおけるSMBの実装に独自の拡張があるためという説が有力です。Mac同士であれば問題ないのですが、ReadyNASのように汎用的なサードパーティーのデバイスが絡むと話がややこしくなる。これは悪い意味でAppleらしい状況です。
SMBが推奨となったのはもう何年も前なのですけれど、この問題はいまだに解決しておらず、AFPのほうが速度が速いという理由で、いまなおAFPを使い続けている人もいます。まぁ、Appleからしてみれば自社製品ではないネットワークストレージを使ってくれるなということなのかもしれませんが、けったいな話です。
対応
この問題は、私をずっと悩ませてきました。SMBもAFPも一長一短ではありますが、SMBが推奨されるプロトコルであること、リスト表示がAFPより速いこと、10MB/sは遅いが耐えられないほどではないことを勘案して、SMBを使っていました。
しかしやはり使っているとどうにも遅さが気になります。やりきれない。他の人の動作報告を見れば、MacとReadyNAS 104でも50MB/sくらい出ているものがある。10MB/sはいくらなんでも遅すぎる。100BASE-T並ではないか。無線のWindowsマシンのほうが快適とは何事か。
というわけで一念発起し、ちょっと頑張って調べました。色々試したところ、「Mac OS X 10.11.5 slow data transfer - Synology Forum」にある方法で効果がありました。それは、/etc/nsmb.confに以下の内容を記述することです。
[default]
signing_required=no
システムファイルなので、ターミナルからsudo権限で編集する必要があります。編集後は再起動。コマンドで書き込みする場合は以下でどうぞ。
sudo -s
echo "[default]" > /etc/nsmb.conf
echo signing_required=no >> /etc/nsmb.conf
reboot
再起動後、速度が劇的に改善しました(下図)。
Readが60MB/s、Writeが40MB/s、心なしかAFPの時より速いくらいですね。よく理解していませんが、signing_required=noとは「SMB のセキュリティ署名の必要性」に関することでしょうか?中間者攻撃対策としてセキュリティ上必要とされるようですが、我が家のLAN内でのやりとりなので、まぁよいでしょう。
(追記)「新・OS X ハッキング! (184) NASのアクセス速度を改善する | マイナビニュース」にて本件の解説がされました。「パケット署名」だそうです。つまりSMBの仕様か。
これまでずっと悩まされ、Macだから仕方ないのかなとさえ思っていたのですが、なんとか速度が出るようになり、たいへんハッピーです。4GBのOSイメージが1分でコピーできました。嬉しいことです。macOS Sierraにアップグレードしたら、きっとまた対応しなくてはならないのでしょうけれど。
なお、「Slow file sharing on Mac using SMB - Synology Forum」によれば、/etc/nsmb.confではなく「~/Library/Preferences/nsmb.conf 」に上記の内容を書き込むとしていました。しかし、当該ファイルが見つからなかったので、/etc/nsmb.confを作成しました。~/Library以下で編集するほうがMac的には行儀がよさそうなので、こちらを試してみてもよいかもしれません。/etc/以下はOSのアップデートで書き換えられそうですしねぇ…。
それにしても、調べていて不思議だったのは、人によっては特に何もせずとも50MB/sくらい速度が出る人もいるようであったことです。パケット署名の処理による速度低下が原因ということであれば、MacでReadyNAS 104を使う場合、パケット署名の無効化をしないと速度は10MB/s程度になってしまうように思うのですが…。
コメント