こんにちは!イーゴリです。
例えば、Robocopyでオンプレミス環境からAWSや他の環境へデーターを移行する場合、帯域幅を制限しないとネットワークアダプターが一気にすべての帯域幅を利用してしまい、業務に影響が発生する可能性が高いので、Windowsでいくつかのネットワーク帯域幅(アウトバウンド帯域幅)を制限する方法を紹介致します。
この記事では3つの方法を紹介致しますが、下記のどれか1つの方法を使えば良いです。
- WindowsのGUI で QoS ポリシーを管理する方法
- PowerShellでWindowsのQoSポリシーを設定する方法
- PowerShellのSet-SmbBandwidthLimitでSMBトラフィックを制限する方法
Robocopyを使用する場合、帯域幅を制限する/IPGオプションがありますが、下記の記事に書いてある通り、/mt パラメーターを /ipg および /efsraw パラメーターと共に使用することはできませんし、他の理由もあり、/ipgオプションを使っておりません。
WindowsのGUI で QoS ポリシーを管理する方法
TCP/IPはQoSポリシーでネットワークの帯域幅を制限できますので、まずはこの方法から紹介致します。
gpedit.mscで ローカルグループポリシーエディター を開きます。
[コンピューターの構成] > [Windows の設定] > [ポリシーベースの QoS] > [新規ポリシーの作成]をクリックします。
下記の画面通り設定致します。
ポリシー名及びスロット率は環境の要件によって設定し、[次へ]をクリックします。
私の場合、8MBpsを設定しました(8*8=64Mbps)。
環境の要件によって設定し続けます。私の場合、すべてのソフトがTCP/UDPを使用し、すべてのポートやIPに対して制限速度を設定するという条件があるため、下記の通り設定致しました。Robocopyの場合、Robocopyのみに対し、制限を設定してもよいですが、今回はRobocopy専用のEC2で設定を適用しているため、Robocopy以外何もないので、下記以外の設定は不要です。
上記画面の「完了」ボタンを押す前に実際のネットワークパフォーマンスを見ます。
「完了」ボタンを押した後で、下記のネットワークパフォーマンスになりました。
QoS設定を無効化することができないため、削除します。その後、パフォーマンスを見ます。
受信 TCP トラフィック は、受信側の TCP 帯域幅の消費を制御しますが、QoS ポリシーは、送信 TCP および UDP トラフィックに影響します。
なおかつ、下記の選択肢しかありませんので、使い道が少ないため、受信 TCP トラフィックの設定はほぼ使わないです。
受信スループット レベル | 最大値 |
---|---|
0 | 64 KB |
1 | 256 KB |
2 | 1 MB |
3 | 16 MB |
PowerShellでWindowsのQoSポリシーを設定する方法
PoweShellを使用したい場合、下記のコマンドを使用できます。
ポリシーを作成するためには下記のコマンドで設定致します。 ※「10MB」の代わりに必要な設定値を設定します。
コマンド:
New-NetQosPolicy -Name "SMBRestrictFileCopySpeed" -SMB -ThrottleRateActionBitsPerSecond 10MB
出力結果:
Name : SMBRestrictFileCopySpeed Owner : Group Policy (Machine) NetworkProfile : All Precedence : 127 Template : SMB JobObject : ThrottleRate : 10.486 MBits/sec
下記のコマンドでステータスを確認することができます。
Get-NetQosPolicy
Name : SMBRestrictFileCopySpeed Owner : Group Policy (Machine) NetworkProfile : All Precedence : 127 Template : SMB JobObject : ThrottleRate : 10.486 MBits/sec
下記コマンドで設定したポリシーを削除することができます。
Remove-NetQosPolicy -Name SMBRestrictFileCopySpeed
確認 この操作を実行しますか? Remove-NetQosPolicy -Name SMBRestrictFileCopySpeed -Store GPO:localhost [Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"):
PowerShellのSet-SmbBandwidthLimitでSMBトラフィックを制限する方法
下記の方法を使用するために、SMBプロトコルで使用する帯域を制限する機能をインストールする必要があります。
インストールコマンド:
Add-WindowsFeature -Name FS-SMBBW
下記のコマンドでSMBトラフィックのファイル転送の速度制限を設定します。
※10MBの代わりに必要な設定値を設定します。
Set-SmbBandwidthLimit -Category Default -BytesPerSecond 10MB
余談ですが、Hyper-V Live Migration用のトラフィック制限も似たような方法で制限することができます。
Set-SmbBandwidthLimit -Category LiveMigration -BytesPerSecond 10MB
下記のコマンドですべてのSMBトラフィック制限の設定の削除ができます。
Remove-SmbBandwidthLimit
詳しくは下記の記事をご参考ください。
以上、御一読ありがとうございました。
本田 イーゴリ (記事一覧)
カスタマーサクセス部
・2024 Japan AWS Top Engineers (Security)
・AWS SAP, DOP, SCS, DBS, SAA, DVA, CLF
・Azure AZ-900
・EC-Council CCSE
趣味:日本国内旅行(47都道府県制覇)・ドライブ・音楽