2021年4月、前に使ってたNASメーカーに何やらかんやらありまして、
急きょ!!
いや、ほんとに急きょ別メーカーのNASを購入しました。
購入したのはSynologyのDS720+です。
せっかく買ったのでレビューやってみようかなと考えたわけですが、今回はSSDキャッシュに絞って調べてきました。 キャッシュのオン/オフ、前に使ってた機種との比較なんかをやります。
全体的な使用感とか何故この機種を選んだかみたいなのは機会があれば。
あ、先にお断りを。
偉そうにNASのレビューなんかしようとしてますが、僕はネットワークに詳しいわけでもNASを使いこなしてるわけでもありません。
なんかよく分からんけど自分なりにNASを使ってる人が、自分にできる範囲内で使用感やらテストを行っているだけなので、いかほど他人の参考になるかは皆目不明です。
ベンチマークも妥当な取り方してるか分からないので、それを承知で読んでください。
SSDキャッシュへの期待!
SSDキャッシュとは、M.2 NVMeのSSDを追加で載せることで、高速なSSDをキャッシュとして機能させ、ランダムアクセスの読み書きを飛躍的に向上させようというものです。
(調べたら2.5インチのSSDでもキャッシュにできるみたいだけど今回は除外)
前に使ってたQNAPはPCI-Eの拡張カードにM.2スロットがあってキャッシュを載せる、みたいな仕組みでしたが(僕が使ってた機種は)、SynologyのNASはPlusシリーズなら最下位機種のDS220+を除いて全てデフォルトでM.2スロットがあるようです。
今回買ったDS720+には2基のM.2スロットがありました。
僕のNASの用途は主にWebのテスト環境なので、SSDキャッシュは非常に効果が高いような気がしています。 ワクワク。
Synology NASのSSDキャッシュの仕様
SynologyのNASには、「読み書きキャッシュ」「読み取り専用キャッシュ」の2種類があって、いきなり手が止まってしまいました。
字面だけ見ると「読み取り専用キャッシュ」の方はREADだけ高速化されそうに見えますが、読み書き共に高速化されるような記載があって訳が分かりません。
というわけで、この2つのモードについて、
何がどう違うのか。
どちらを選べばいいのか。
をまずは調べます。
以下の操作は「ストレージマネージャ」から行っています。
読み書きキャッシュの仕様
まず「読み書きキャッシュ」の方なんですが、NAS上で確認できる説明は日本語が怪しいので公式サイトを見てみました。
[読み取り/書き込みキャッシュ] は 2 台から 12 台の SSD から構成できるほか、RAID 1、RAID 5、または RAID 6 のキャッシュ RAID タイプに設定することで、それがマウントされているストレージ スペースのランダム読み書き速度を向上させることができます。
これまた分かるような分からんような…。
比較は後でやります。
読み書きキャッシュの制約
上の説明で「2台から12台のSSD」とあった通り、読み書きキャッシュは、
SSDを2枚載せないと選択すらできません。
なので当然キャッシュ構築時もSSDを2枚とも選択しないと次へ進めません。
つまり、読み書きキャッシュで運用しようとしている場合はSSDを2枚買う必要がある、ということです。
読み取り専用キャッシュの仕様
公式サイトの説明は次の通り。
[読み取り専用キャッシュ] は 1 台から 12 台の SSD で構成できるほか、RAID 0 のキャッシュ RAID タイプに設定することで、それがマウントされているストレージ スペースのランダム読み取り速度を向上させることができます。
読み取り専用キャッシュにはSSD枚数の制約がないので、1枚だけ載せる場合には必然的にこちらを選ぶことになります。
あと、NAS上の説明文では「読み書き速度」と記載されていましたが、こちらでは「読み取り速度」としか書いていません。
うーん…。
読み書きキャッシュと読み取り専用キャッシュの違い
公式サイトの注意書きを読むとなんとなくイメージできそうです。
SSD 読み取り専用キャッシュは、ボリュームからデータのコピーを保存します。 したがって、読み取り専用キャッシュがクラッシュしたとしても、データは消失しません。
つまり、読み書きキャッシュの方は「データのコピーではなくオリジナルをキャッシュに置いていて、キャッシュがクラッシュするとデータを消失するよ」と。
SSD の読み書きキャッシュが劣化した場合、自動保護メカニズムが有効化されます。 これは、新しい IO のキャッシュを停止し、SSD から HDD に既存の新しいデータの書き込み (すなわち、同期) を開始します。 データの同期が完了したら、読み書きキャッシュがクラッシュしたとしてもデータは消失しません。
つまり、読み書きキャッシュは「キャッシュが物理的に?劣化してきたらHDDにデータを戻すけど、その前にクラッシュしたらデータは消失しますよ」と。
通常の状況では、SSD の読み書きキャッシュは、まだ HDD と同期していない新しいデータを含んでいます。 ストレージ マネージャからキャッシュを削除するまでは、(たとえシステムの電源がオフになっている場合であっても) Synology NASから SSD を取り外さないでください。 そうでないと、ボリュームがクラッシュすることがあります。
つまり、読み書きキャッシュは「HDDにないオリジナルのデータを含んでいるので、電源オフ時だろうがキャッシュを解除しないままSSDを外すとデータを消失しますよ」と。
なるほど。
まとめると、
- 読み書きキャッシュは高速な拡張ボリュームのような感じで、取り扱いに注意が必要
- ただし、その性質上、保存もSSD上で行われるので書き込み速度も向上
みたいな感じでしょうか。
読み取り専用キャッシュでファイルを保存した場合は、SSD上のデータを更新→HDDに保存→再度SSD上にキャッシュ、みたいな感じになるのかしら。
どちらを選ぶべきか
選択基準は「NASを何に使うのか」ではないかと思います。
キャッシュは「いろいろなファイルを何度も使う」場合に効果を発揮するはずで、シーケンシャルに関してはデフォルトでオフになっているくらいです。
(ストレージマネージャの「構成」から「シーケンシャルI/Oは省略する」のチェックを外すと有効化)
なので写真や動画をパラパラ見たり、バックアップの保存先として使うような用途では、そもそもキャッシュが不要なのではないかと。
ランダムアクセスが頻発する用途の場合はキャッシュが有用で、読み書き性能だけを見るなら「読み書きキャッシュ」が上位互換。 あとは「読み書きキャッシュ」の取り扱いに関するリスクと、読み込み/書き込みの頻度によってどっちを選ぶか、みたいな感じでしょうか。
OSとかゲームとか、静的なデータやライブラリみたいな細々したデータを大量に読み込む場合は読み取り専用キャッシュが適してそう。 WordPressとかもほとんど静的なPHPだと思うので、ここに該当しそう。
複数のファイルを頻繁に更新するようなケースでは読み書きキャッシュが向いてそう。 Nuxt.jsはページのファイルやコンポーネント、プラグイン、自作モジュール、ビルド時の中間ファイルと、それなりに書き換えが発生するので読み書きキャッシュ向き?
選択基準としては次のような感じになるのかしら?
- リスクが怖いなら読み取り専用キャッシュ
- 書き込み頻度が多いなら読み書きキャッシュ
- 少しでもパフォーマンスを上げたいなら読み書きキャッシュ
- それ以外なら読み取り専用キャッシュ
僕はUSBのHDDにバックアップしつつ、読み書きキャッシュで運用することにしました。
SSDはどれを選ぶべきか
公式の互換リストにあるものをオススメします。
リストにないもの買ったら動きませんでした…。
DS720+で使えるM.2 SSD
公式のリストを見ると、該当機種が21台。
そのうちSeagateの「IronWolf 510」の8機種は日本での取り扱いなし?
型番で検索するとSynologyの互換リストが一番上に出てくるくらいでした。
Intelの1機種も入手難。
Samsungは10機種ありますが、新型が出ているせいか、2021年4月現在は半分以上が入手難。
日本Amazonで入手しやすいものに絞っていくと、
メーカー | シリーズ | 容量 | 値段 |
---|---|---|---|
Synology | SNV3400 | 800GB | 41,295 |
Synology | SNV3400 | 400GB | 23,134 |
Samsung | 970 PRO | 1TB | 36,510 |
Samsung | 970 EVO Plus | 2TB | 36,848 |
Samsung | 970 EVO Plus | 1TB | 18,970 |
Samsung | 970 EVO Plus | 500GB | 11,494 |
たった6機種しかありませんでした。
で、これをギガバイト単価で安い順に並べるとこう↓なります。
メーカー | シリーズ | 容量 | 値段 | GB単価 |
---|---|---|---|---|
Samsung | 970 EVO Plus | 2TB | 36848 | 18 |
Samsung | 970 EVO Plus | 1TB | 18970 | 19 |
Samsung | 970 EVO Plus | 500GB | 11494 | 23 |
Samsung | 970 PRO | 1TB | 36510 | 36 |
Synology | SNV3400 | 800GB | 41295 | 52 |
Synology | SNV3400 | 400GB | 23134 | 58 |
純正たっけーーーーー!!!
それでも純正にしといた方がいいよ
何故かというとですね、バイト単価と入手性のいいWestern DigitalのSSDを買ったら認識してくれなかったからです。 メモリの相性不良なら分かるんですが、SSDで起こるとは…。
試したのはRed SA500 NASの1TB。
キャッシュ構築画面でこの↓ように表示されました。
SSDが認識されてる時はこんな↓表記になるので、認識してくれてないですね。
予算的に純正買う余裕はなかったのでSamsungにしようとしましたが、確か発熱が凄かった気がするのと、干渉せずに載せられるヒートシンクが分からなかったのと、また相性出たらめんどくさいのとで、しゃーなしに純正の400GBを購入。
完全に予算オーバー…。
SSDの取り付け方
DS720+では、SSDを取り付ける場所はNASの底面にあります。
写真の右側をひっかけて蓋を外します。
画像は下側のスロットにがSSDが装着済み、上側が未装着です。
この状態で起動すると「キャッシュデバイス2」のみ認識されるので、上側がスロット1、下側がスロット2のようです。
2だけに挿していても問題なさそうでしたが、気になる人は要注意。
SSDはチップが載っている方が上向きに、端子部分を写真の右におくのが正しい向きのようです。
差し込み口に切り欠きがあるので向きは間違えにくいと思いますが、WDは切り欠きが2箇所あったりとちょっと迷いました。
(もしかして表裏を逆にしたら認識した…?)
画像右側に端子の差し込み口があります。
切り欠きの位置を合わせてSSDを挿します。
端子の金色の部分が見えるか見えないかくらいまで挿します。 けっこう深いです。
反対側にはパチンと止めるピンがあるので、
ちょっとグッと入れてパチンと装着。
ハマらない場合はたぶん端子側の差し込みが甘いです。
無事にパチンとしたら蓋を戻して終了です。
SSDキャッシュの設定
NASにログインし、ストレージマネージャを開きます。
ストレージマネージャは確かデスクトップにあったと思うんですけど、もしなかった場合は左上の「メインメニュー」をクリックすると見つかると思います。
ストレージマネージャを開いたら、左メニュー一番下の「SSDキャッシュ」を開きます。
SSDが正しく認識されているか
「SSDキャッシュ」を開いてこの↓ように表示されていれば少なくとも1台は正しく認識されているはず。
この↓ように「有効なSSDがないため…」となっている場合は、SSDを正しく取り付けられていないか、互換性のないSSDの可能性があります。
キャッシュモードの選択
「SSDキャッシュ」画面内左上の「作成」ボタンを押すと、キャッシュモードの選択画面が出ます。
「読み書きキャッシュ」はSSDを2台以上積んだ場合のみ選択できます。
どちらを選ぶかは上で書いた説明を見て、自分に合うものを選んでください。 なるべくリスクを負いたくないなら「読み取り専用キャッシュ」の方がいいかもしれない。
デバイスの選択
キャッシュに使うデバイスを選択します。
「読み書きキャッシュ」の場合は2台以上のデバイスを選択するまで先に進めません。
「読み取り専用キャッシュ」の場合は1台選択でも次へ進めますが、余ったもう1台でもうひとつキャッシュを作るということはできなさそうだったので、全部選んでいいんじゃないかと思います。
RAIDモードの選択
「読み書きキャッシュ」の場合のみ、RAIDモードを選択します。
DS720+は2台までしかSSDを詰めないのでRAID1しか選択できません。 上位機種では最大12台まで詰めるようなので、RAID5と6は上位機種用なんでしょうたぶん。
何故キャッシュにRAID設定があるかですが、「読み書きキャッシュ」はキャッシュというより「拡張ボリューム」のような挙動っぽいので、データを守るためなんだと思います。
キャッシュサイズの設定
キャッシュに割り当てる容量を指定します。
画像は400GのSSD2枚を「読み書きキャッシュ」でRAID1にしているので、半分のサイズが表示されています。
「読み取り専用キャッシュ」の場合は倍の容量になります。
デフォルトで最大サイズが表示されていますが、それ以下にするメリットは…あるんですかね。 分かんないです。
以上です。
最終決定画面で「SSDの中身全部消すけどいいかい?」みたいなの聞かれるので同意してください。
キャッシュの有無でのベンチマーク比較
CrystalDiskMarkでキャッシュの有無、キャッシュモードの違いによる差、ついでにリンクアグリゲーションでの速度差を調べてみました。
参考比較として前に使っていたQNAPのスコアも載せます。
まずは標準状態
まずは基準となる「キャッシュなし」「リンクアグリゲーションなし」でのスコアです。
1GbEの理論値が128MB/sなので、上3つはほぼ限界まで出てますね。
あ、僕はCrystalDiskMarkの項目それぞれにどういう特徴があるのか知らないので各自で判断してください。 シーケンシャルとランダムアクセスくらいしか違いが分かってないです。
読み取り専用キャッシュを有効化
SSDを2台とも読み取り専用キャッシュと設定しました。
標準状態のスコア↓に対して、
結果はこう↓。
…へ?
読み書きキャッシュを有効化
読み書きキャッシュ、RAID1に設定しました。
標準状態のスコア↓に対して、
結果はこう↓。
…ハァ??
……。
動かなかったWDのSSDと合わせて6万円近くかけたわけですが、ベンチマークの結果を見るに、
効果なしッ!!
何故こんなことになったかですが、ちょっと記憶がおぼろげですが、最初にベンチマーク回した後に「キャッシュアドバイザー」でヒット率を見たところ28%だか29%だったんですね確か。
(キャッシュを再生成しても再起動しても初期状態に戻せないっぽくてもう確認できない)
ベンチマークプログラムがダミーデータを毎回新規に生成するせいで、ほとんどキャッシュが機能してなかった可能性あるよね?
あるある、うんうん、きっとそう。
というわけで次の実験へ進みます。
おまけ:リンクアグリゲーションを有効化
ネットワークインターフェイスから2本の1GbEのLANを2本に束ねるリンクアグリゲーションとかいうのがあるらしく、さっそく試してみました。
標準状態のスコア↓に対して、
結果はこう↓。
……。
これについては僕がうまく設定できていない可能性が高いです。
リンクアグリゲーションモードを「負荷分散機能」「ダイナミックリンクアグリゲーション」「バランスXOR」「アクティブ/スタンバイ」と試してみましたが、表記が「2000 Mbps」になったのが「負荷分散機能」「バランスXOR」の2つだけで、両方ともベンチのスコアはほとんど変わりませんでした。
(残りの2つも念のためやったけど同様)
スイッチはNETGEARのXS508Mを使ってて、これがリンクアグリゲーション非対応なのかな?
スイッチのランプを見ても2本目はあまりチカチカしてなかったです。
ネットワークの知識すっからかんなのでどこがどうなのか全然分かりません。 すいません。
上がらないどころかむしろ下がってる点については、同じ設定でもベンチ取るごとに10%程度の誤差が見られたので、下がってはないんだと思いますたぶん。
おまけ:QNAP TS-453Beの速度
QNAPのTS-453Beに、純正拡張カードのQXG-10G1Tを挿して10GbEにしたやつです。
標準状態のスコア↓に対して、
結果はこう↓。
10GbEだけあってシーケンシャルはかなり速くなってますね。
ランダムはDS720+の方が1.5倍くらい速いですが、CPUとメモリが速いおかげ?
シーケンシャルが速いのってどうなんですかね。
大容量データを移す際は短時間で済んだのでありがたかったですけど、頻繁にやることじゃないし、フルHDの動画見るくらいなら普通に速度足りてるっぽいし、どうなんだ?
(4Kカメラは持ってないので試すデータがない)
ベンチマーク追試
よくよく考えてみたらキャッシュなしの時点で1GbEのほぼ限界まで出ているのでキャッシュを入れようが高速化するわけがないですよね。
というわけで追試です。
前回のベンチマークでランダム4Kの「Q1T1」のスコアが異常に低かった点に注目して、間の「Q2T1」~「Q16T1」の4つを測定しました。
Qは「キュー」のことらしく「キューに入れる」のキューでいいのかな。 軽く調べてみたんですが、増やしたり減らしたりすると「何がどう変わるのか」は分かりませんでした。
少なくともベンチマークの1項目なので「スコアが高ければ高速である」という前提で評価します。 間違ってたらごめんなさい。
キャッシュなしのスコア
SSDキャッシュなしでのスコアです。
読み取り専用キャッシュ400Gでのスコア
読み取り専用キャッシュを搭載量の半分の400Gに設定したスコアです。
何故か下がりました。
原因がちょっと分からないんですが、400Gの設定の仕方が「400Gを2枚装着しているところ、400Gに設定」でして、最大容量ではなく中途半端な容量をしてるんですね。 もしかするとこれが原因かもしれないです。
1枚外してベンチにかければすぐに原因は切り分けられるんですが、外すのめんどくせーのでやめました。
読み取り専用キャッシュ800Gでのスコア
読み取り専用キャッシュを最大容量の800Gに設定したスコアです。
全体的にちょこっと上がったかなという感じ。
読み書きキャッシュ400Gでのスコア
読み書きキャッシュRAID1でのスコアです。
微差なので微妙なとこですけど、どっちかというと下がり気味ですよね。
特に唯一書き込み性能が上がるモードなのに書き込み性能は全てキャッシュなし未満のスコアです。
(誤差の範囲内ですが)
ふぅ……。
あまりうまいベンチマークじゃなかったんですかね。
この結果からだけから見ると、読み書きキャッシュはあまり意味なし。 読み取り専用キャッシュに全容量割り当てるのが比較的マシという結果です。
上手な測定方法あったら教えてください。
ウェブサイトのビルド時間を計測
ベンチマークではキャッシュが活かせないのでは?という疑問点を解消すべく、ウェブサイトのビルド時間を計測してみます。
計測したのはこのサイトのデータです。 Nuxt.jsというフレームワークで作っていて、かなりの数のファイルを読み込んでビルドするので、恐ろしくキャッシュを有効活用できそうな気がします!
生成ページは650ページ。
これのビルド時間、出力時間(generate)をそれぞれのオプションで計測してみました。
どこでキャッシュに乗るか分からないので、キャッシュ利用時はビルド・出力ともに2回計測しています。
Nuxt.js(Vue.js?)側のキャッシュの問題があるので、条件を揃えるために、事前に一度ビルドと出力をしています。
計測結果
縦軸に各状況、横軸は時間(秒)。 時間なので少ない方が速いです。
計測結果から言えそうなこと
ビルド時間はキャッシュの有無で7%ほど、1回目と2回目で15%ほど縮まっています。 キャッシュの効果があると言ってよさそう。
読み書きキャッシュと読み取り専用キャッシュの差はあるとは言いにくい結果ですね。 中間ファイルを生成するのでWRITE性能も重要なんじゃないかと思ったんですが。
出力(generate)時間についてはキャッシュの影響はほぼなさそうです。
出力時間が変わらないのは、先にビルドするせいで全部がキャッシュに載ってるせいかと思ったんですが、それだとキャッシュなしの出力時間が増えてないのがおかしいので関係なさそう。
総合的には、効果はあるにはあるけどコスパ的に考えるとどうなんでしょうね…。
事前ビルドにかかった時間
SynologyのNASになって初めてのビルドだったので、Nuxt.js側のキャッシュ?がない状態でのビルドとなります。
結果、ビルドに63秒、出力に160秒かかっています。
Nuxt.jsのキャッシュは出力時間を大幅に減らせているっぽいです。
おまけ:QNAPとの比較
先ほどのグラフにQNAPのTS-453Beの時間を追加しました。
これは非常に満足のいく結果でした。 ビルド時間、出力時間ともに大幅減です。
なんでこんなことになったかというと、DS720+とTS-453Beの性能がけっこう違うんですね。
項目 | DS720+ | TS-453Be |
---|---|---|
CPU | Celeron J4125 | Celeron J3455 |
CPU性能 | 2.70GHz(4コア) | 2.30GHz(4コア) |
メモリ規格 | DDR4-2666 | DDR3-1866 |
メモリ容量 | 10GB | 16GB |
SSDキャッシュのコスパは悲しい結果でしたが、総合的にはかなり性能アップしたんじゃないでしょうか。
ディスク2台で高性能CPUにメモリ、10GbE対応、HDDの代わりにSSD、が開発環境としては最強なのかな?
まとめ
今回実験した範囲でSSDキャッシュの効果をまとめると、
- ベンチマークではあまり効果が見られなかった
- Nuxt.jsのビルド時間をいくらか減らす効果があった
- Nuxt.jsの出力時間を減らす効果は見られなかった
- 今回のテストでは読み書きキャッシュと読み取り専用キャッシュの性能差はあまり見られなかった
ほんとはHDDじゃなくてSSDにした場合のベンチマークも比較で取りたかったんですが、
予算オーバー過ぎるんじゃヴォケぇ!!
次があったらね、キャッシュに回す予算を本体SSDに回しますね僕は。