トップ回答者
レジストリ値の変更について

質問
-
①レジストリ値LanmanServer¥Parameters¥TreatHostAsStableStorage
②レジストリ値LanmanServer¥Parameters¥MaxThreadsPerQueue
③レジストリ値LanmanServer¥Parameters¥MaxMpxCt(not applicable SMB2 clients)
上記について質問があります。
ファイルサーバを構築しサーバOS側で①「TreatHostAsStableStorage」レジストリはデフォルトでは0になっていますが1を設定することにより
クライアントからの書き込みフラッシュ要求を受け入れることになる?
そもそもクライアントからの書き込みフラッシュ要求とはなんでしょうか?
②「MaxThreadsPerQueue」
同時要求を処理するために使用できるスレッド数と書いてありますがクライアント側からの同時接続数と考えていいでしょうか?
上記値は通常では20ですが64に変更することにより同時要求するために使用できるスレッドは64になるとういう認識で間違いないでしょうか?
③「MaxMpxCt(not applicable SMB2 clients)」
複数のクライアントがサーバーへの同時接続数と考えてよいでしょうか?
単位はインスタンス数?
デフォルトでは50に設定されていますが、複数インスタンスを生成する場合50の既定値より大きくする場合があると記載されていますが推奨値などありますでしょうか?
★クライアントOSはWindows10proを導入予定です。
以上よろしくお願いいたします。
回答
-
TreatHostAsStableStorage は 1にするとクライアントからの SMB の書き込みフラッシュ要求を無視します。「書き込みフラッシュ要求」はローカル ディスクでいえば書き込みキャッシュのフラッシュ要求に相当する動作で、サーバー側のキャッシュにあるデータをサーバーのディスクに書き込むリクエストです。クライアント側は書き込みセッションが終了するごとにフラッシュ要求することで、一連の書き込みが間違いなくディスクに保存されるように指示できます。これを無効にすると、クライアントの要求に関わらずサーバーが任意のタイミングで書き込むまでデータはキャッシュ上に残ったままになるため、ファイル サーバーのパフォーマンスは上がりますが耐障害性 (ex. 停電時) が下がります。基本的には 0 (有効) で運用します。
MaxThreadsPerQueue は Server サービス自体のワーカー スレッド数の上限を設定します。「ファイル共有の仕組み – Server サービスと Workstation サービス –」に詳しい解説があります。これを増やせばすべてのクライアントからの同時接続数の合計は増えますが、その数を直接指定する設定ではありません。
MaxMpxCt は 1 クライアントからの要求を同時に処理する上限です。特定のクライアントからの要求が (何らかの事情で) 大量に行われ、他のクライアントが接続できなくなるのを防ぐためのリミット設定ですね。
ファイル サーバーのチューニングについては「Performance Tuning Guidelines for Windows Server 2012 R2」「Performance Tuning Guidelines for Windows Server 2012」(リンク先 Word 文書) などが参考になると思いますが、 Web 検索すると日本語での情報も色々と見つかります。ご参考まで。
hebikuzure
- 編集済み Hebikuzure aka Murachi AkiraMVP 2016年8月26日 7:44
- 回答としてマーク にゃんころげ 2016年8月27日 15:34
- 回答としてマークされていない にゃんころげ 2016年8月27日 15:34
- 回答の候補に設定 佐伯玲 2016年8月29日 5:07
- 回答としてマーク 佐伯玲 2016年9月8日 8:33
-
SMB と CIFS の関係については以下の記事が良くまとまっていますので、参考にしてください。
この記事にあるように CISF は基本的に SMB 1.0 と同等で、フラッシュ命令は SMB 1.0 から存在しています。
TreatHostAsStableStorage を 1 にするという事は「書き込みフラッシュ要求を無視する」ですから、『1に設定すればクライアントの一連の書き込みが間違いなくディスクに保存されるようにサーバ側で指示できるとのことですね』というのは逆です。0 になっている (既定値) ことで、クライアントから間違いなくサーバーのディスクへの書き込みを実施できます。1 にするとクライアントからの書き込み要求が無視され、サーバー (Server サービス) が独自のタイミング (ex. キャッシュが一杯になった場合) でディスクに書き込みます。
『ファイル サーバーのパフォーマンスは上がるとの事でしたので0で設定したいと考えております』と書かれていますが、その認識は間違っていて、1 にすればクライアントからのフラッシュ要求に関わらずサーバーが最適化されたタイミングでディスク書き込みできますので、(ディスク I/O には時間がかかりますから) その方がサーバーのパフォーマンスは上がります。
これらの点は最初のコメントでもそのような書いていますが、内容をちゃんと読まれていないのでしょうか。または書いてあることが理解できないのでしょうか。書いてあることが十分理解できないのであれば、下手にレジストリなど触らず既定値のまま利用されることをお勧めします。どうしてもチューニングしたいのであれば、お金を出してちゃんとした専門家に依頼しましょう。
MaxThreadsPerQueue はサーバーの Server サービスのワーカー スレッド数の上限を調整します (これも最初のコメントで書いています)。Workstation サービスはクライアント側 (SMB リクエストを出す側) のサービスなので、この値とは直接には関係ありません。またここでどうして NFS が出てくるのか理解できませんが、NFS は SMB とは異なる仕組みです。
またワーカースレッドを増やすという事はそれだけサーバー側のリソースが必要となりますので、安易に極端に大きい数字を設定すると、別の問題を生じる可能性があります。動作の意味を十分に理解できないのであれば、紹介した資料に書かれている程度の変更で済ませるか、またはそもそも変更しないことをお勧めします。
MaxMpxCt についても先に書いたように、「1クライアントからの要求 (リクエスト) を同時処理する数の上限」です。クライアントでリクエストを発生させているプロセスがいくつあるか、それが何かということとは無関係です。
返信の内容を拝見する限り、私の最初のコメントの内容を十分に理解した上での返信とは思えず、失礼な言い方になりますがネットワークや SMB プロトコルについての基本的な理解が不足されており、レジストリ設定によるチューニングのような作業を独力で適切に行うスキルに欠けておられるように見受けられます。上でも書きましたが、下手に設定変更をするとかえってトラブルを招く危険性もあるので、既定値のまま利用されるか専門家に依頼するかされた方が良いように思います。
※ちなみに『VMにwindowsServer OS 2012R2DateCenterを入れて130名ほどが業務で使うシステムを構築する予定』と書かれていますが、そもそもその業務システムのパフォーマンスはクライアントからの SMB アクセスの性能に大きく依存するのでしょうか。そうでなければいくら SMB のチューニングをしても何の意味もありません。一般的に業務システムの場合、データベースのチューニングや、SMB より下の TCP/IP レベルでのチューニングが有効である場合が多いように思うのですが。
hebikuzure
- 編集済み Hebikuzure aka Murachi AkiraMVP 2016年8月28日 5:59
- 回答の候補に設定 佐伯玲 2016年8月29日 5:07
- 回答としてマーク 佐伯玲 2016年9月8日 8:33
すべての返信
-
TreatHostAsStableStorage は 1にするとクライアントからの SMB の書き込みフラッシュ要求を無視します。「書き込みフラッシュ要求」はローカル ディスクでいえば書き込みキャッシュのフラッシュ要求に相当する動作で、サーバー側のキャッシュにあるデータをサーバーのディスクに書き込むリクエストです。クライアント側は書き込みセッションが終了するごとにフラッシュ要求することで、一連の書き込みが間違いなくディスクに保存されるように指示できます。これを無効にすると、クライアントの要求に関わらずサーバーが任意のタイミングで書き込むまでデータはキャッシュ上に残ったままになるため、ファイル サーバーのパフォーマンスは上がりますが耐障害性 (ex. 停電時) が下がります。基本的には 0 (有効) で運用します。
MaxThreadsPerQueue は Server サービス自体のワーカー スレッド数の上限を設定します。「ファイル共有の仕組み – Server サービスと Workstation サービス –」に詳しい解説があります。これを増やせばすべてのクライアントからの同時接続数の合計は増えますが、その数を直接指定する設定ではありません。
MaxMpxCt は 1 クライアントからの要求を同時に処理する上限です。特定のクライアントからの要求が (何らかの事情で) 大量に行われ、他のクライアントが接続できなくなるのを防ぐためのリミット設定ですね。
ファイル サーバーのチューニングについては「Performance Tuning Guidelines for Windows Server 2012 R2」「Performance Tuning Guidelines for Windows Server 2012」(リンク先 Word 文書) などが参考になると思いますが、 Web 検索すると日本語での情報も色々と見つかります。ご参考まで。
hebikuzure
- 編集済み Hebikuzure aka Murachi AkiraMVP 2016年8月26日 7:44
- 回答としてマーク にゃんころげ 2016年8月27日 15:34
- 回答としてマークされていない にゃんころげ 2016年8月27日 15:34
- 回答の候補に設定 佐伯玲 2016年8月29日 5:07
- 回答としてマーク 佐伯玲 2016年9月8日 8:33
-
Hebikuzure様
ご回答ありがとうございます。
今回VMにwindowsServer OS 2012R2DateCenterを入れて130名ほどが業務で使うシステムを構築する予定です。
TreatHostAsStableStorage についてはSMBプロトコルでの書き込みフラッシュ要求ということですね。つまり仮想メモリにスワップしてるみたいなニュアンスですかね?因みにプロトコルをCIFSにしても要件は同じことで設定できるのでしょうか?サーバー側のキャッシュにあるデータをサーバーのディスクに書き込むリクエストとの事なので1に設定するのがベターなんでしょうか?ちなみにですがファイルサーバにアクセスするクライアント数は100名前後ですなので1に設定すればクライアントの一連の書き込みが間違いなくディスクに保存されるようにサーバ側で指示できるとのことですね?基本的には0で運用ですが0で設定するとライアントの一連の書き込みが間違いなくディスクに保存されるようにサーバ側で指示ができなくなるというでしょうか?しかしながら0でも無効にしなければ値を0で設定すればクライアントからの SMB の書き込みフラッシュ要求を無視せずクライアントの要求に関わらずサーバーが任意のタイミングで書き込むまでデータはキャッシュ上に残ったままになるため、ファイル サーバーのパフォーマンスは上がるとの事でしたので0で設定したいと考えております。
MaxThreadsPerQueue につてですがサーバ側、クライアント側でのservicesでWorkstationサービスが自動で起動していることが前提条件になりますでしょうか?NFSはSMBプロトコルを私使用してNFSにアクセスしデータをやりとりする認識です。 この値を最大値 65535設定すればユーザはたくさんのスレッドが利用できるのでQosで遅延が発生しないと考えております。
MaxMpxCt なのですがこれはタスクマネージャーを起動したときのexeのインスタン値も含まれるのでしょうか?もしタスクのプロセスすべてのインスタンスが含まれるのであれば最大に設定しておくことでほかのクライアントが接続できなくなるとういうことは回避できそうですね。
ご回答いただけると幸いです。
Windowsは設定がすごく細かいので困っていました・・・ありがとうございます。
-
SMB と CIFS の関係については以下の記事が良くまとまっていますので、参考にしてください。
この記事にあるように CISF は基本的に SMB 1.0 と同等で、フラッシュ命令は SMB 1.0 から存在しています。
TreatHostAsStableStorage を 1 にするという事は「書き込みフラッシュ要求を無視する」ですから、『1に設定すればクライアントの一連の書き込みが間違いなくディスクに保存されるようにサーバ側で指示できるとのことですね』というのは逆です。0 になっている (既定値) ことで、クライアントから間違いなくサーバーのディスクへの書き込みを実施できます。1 にするとクライアントからの書き込み要求が無視され、サーバー (Server サービス) が独自のタイミング (ex. キャッシュが一杯になった場合) でディスクに書き込みます。
『ファイル サーバーのパフォーマンスは上がるとの事でしたので0で設定したいと考えております』と書かれていますが、その認識は間違っていて、1 にすればクライアントからのフラッシュ要求に関わらずサーバーが最適化されたタイミングでディスク書き込みできますので、(ディスク I/O には時間がかかりますから) その方がサーバーのパフォーマンスは上がります。
これらの点は最初のコメントでもそのような書いていますが、内容をちゃんと読まれていないのでしょうか。または書いてあることが理解できないのでしょうか。書いてあることが十分理解できないのであれば、下手にレジストリなど触らず既定値のまま利用されることをお勧めします。どうしてもチューニングしたいのであれば、お金を出してちゃんとした専門家に依頼しましょう。
MaxThreadsPerQueue はサーバーの Server サービスのワーカー スレッド数の上限を調整します (これも最初のコメントで書いています)。Workstation サービスはクライアント側 (SMB リクエストを出す側) のサービスなので、この値とは直接には関係ありません。またここでどうして NFS が出てくるのか理解できませんが、NFS は SMB とは異なる仕組みです。
またワーカースレッドを増やすという事はそれだけサーバー側のリソースが必要となりますので、安易に極端に大きい数字を設定すると、別の問題を生じる可能性があります。動作の意味を十分に理解できないのであれば、紹介した資料に書かれている程度の変更で済ませるか、またはそもそも変更しないことをお勧めします。
MaxMpxCt についても先に書いたように、「1クライアントからの要求 (リクエスト) を同時処理する数の上限」です。クライアントでリクエストを発生させているプロセスがいくつあるか、それが何かということとは無関係です。
返信の内容を拝見する限り、私の最初のコメントの内容を十分に理解した上での返信とは思えず、失礼な言い方になりますがネットワークや SMB プロトコルについての基本的な理解が不足されており、レジストリ設定によるチューニングのような作業を独力で適切に行うスキルに欠けておられるように見受けられます。上でも書きましたが、下手に設定変更をするとかえってトラブルを招く危険性もあるので、既定値のまま利用されるか専門家に依頼するかされた方が良いように思います。
※ちなみに『VMにwindowsServer OS 2012R2DateCenterを入れて130名ほどが業務で使うシステムを構築する予定』と書かれていますが、そもそもその業務システムのパフォーマンスはクライアントからの SMB アクセスの性能に大きく依存するのでしょうか。そうでなければいくら SMB のチューニングをしても何の意味もありません。一般的に業務システムの場合、データベースのチューニングや、SMB より下の TCP/IP レベルでのチューニングが有効である場合が多いように思うのですが。
hebikuzure
- 編集済み Hebikuzure aka Murachi AkiraMVP 2016年8月28日 5:59
- 回答の候補に設定 佐伯玲 2016年8月29日 5:07
- 回答としてマーク 佐伯玲 2016年9月8日 8:33