- Windows server 2012 ограничение скорости
- Windows server 2012 ограничение скорости
- Способы ограничения скорости копирования по сети в Windows
- Настройка групповой политики QoS в Windows
- Управление политиками QoS Windows средствами PowerShell
- Set-SmbBandwidthLimit: управление пропускной способностью для SMB трафика из PowerShell
- Ограничение скорости передачи файлов в Robocopy – ключ /IPG
- Управление шейпингом трафика с помощью сторонних утилит
Windows server 2012 ограничение скорости
Всем привет сегодня хочу рассказать как производится управление пропускной способностью сетевого интерфейса в Windows. Предположим у вас есть сервер на котором крутится сайтик или какое то приложение доступное по сети, и на этом же сервере в целях экономии у вас например файловая шара и WDS сервер, по умолчанию все процессы имеют одинаковый приоритет, и если кто то начинает хорошо кушать канал, то все другие проседают. С приходом Power Shell 3 версии, появились командлеты которые помогут ограничить отдачу сетевой карты на каждый процесс, ровно столько сколько зададите.
В моем примере у нас есть файловая щара по протоколу SMB и компьютер куда мы скачиваем контент
Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-02
Начинаем закачку, видим что скорость копирования 120 мб в секунду, довольно неплохо, кушается весь гигабитный канал
Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-03
Для решения поставленной задачи мы можем использовать встроенные средства, в частности Windows QOS Packet Scheduler. Данный функционал позволяет нам приоритизировать и лимитировать трафик, гарантирую что одни процесс не будет потреблять все доступные ресурсы.
Для начала проверим имеются ли уже какие-либо политики, которые могут конфликтовать или переопределить нашу политику
Далее мы создаем новую политику, которая будет применяться к SMB трафику и лимитировать его до 10MB/s
Проверим приминилось ли правило командой
Видим, что правило появилось и действует.
Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-05
Видим скорость копирования упала до 10 мб в секунду.
Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-04
Чтобы поменять текущую политику воспользуемся командой
Если задавать без упоминания кб или мб, то цифры считаются в байтах
Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-06
Для того чтобы удалить политику воспользуемся вот такой командой
Вот такая вот встроенная и полезная функция Windows для управление и ограничения отдачи вашей сетевой карты.
Windows server 2012 ограничение скорости
Дано файловый сервер server 2012 r2 |
Сообщение оказалось полезным? Поблагодарите автора, нажав ссылку Полезное сообщение чуть ниже.
можно ли как нибудь ограничить каждому потоку определенную скорость соединения |
Сообщение оказалось полезным? Поблагодарите автора, нажав ссылку Полезное сообщение чуть ниже.
Это сообщение посчитали полезным следующие участники:
Inbound TCP throughput level | Максимальная скорость передачи |
0 | 64 Кб |
1 | 256 Кб |
2 | 1 Мб |
3 | 16 Мб |
Управление политиками QoS Windows средствами PowerShell
Для создания и управления политиками QoS можно использовать PowerShell. Например, чтобы создать политику QoS, ограничивающую пропускную способность для SMB (файлового) трафика, используйте команду:
New-NetQosPolicy -Name «SMBRestrictFileCopySpeed» -SMB -ThrottleRateActionBitsPerSecond 10MB
Чтобы вывести список примененных политик QoS на компьютере, выполните команду:
Get-NetQosPolicy
Чтобы изменить, или удалить политику QoS, используются соответственно командлеты Set-NetQosPolicy и Remove-NetQosPolicy .
Remove-NetQosPolicy -Name SMBRestrictFileCopySpeed
Set-SmbBandwidthLimit: управление пропускной способностью для SMB трафика из PowerShell
Командлет Set-SmbBandwidthLimit позволяет ограничить скорость передачи данных по SMB протоколу. Сначала нужно установить компонент Windows Server SMB Bandwidth Limit с помощью PowerShell:
Add-WindowsFeature -Name FS-SMBBW
Или можно установить его из графического Server Manager (Add Windows Feature -> SMB Bandwidth Limit).
Обычно данный модуль применяется для ограничения скорости для Hyper-V Live Migration. Например, следующая команда ограничить скорость миграции виртуальных машин до 100 Мбайт/сек.
Set-SmbBandwidthLimit -Category LiveMigration -BytesPerSecond 100MB
Вы также можете указать -Category Default для ограничения обычного трафика для передачи файлов по протоколу SMB.
Set-SmbBandwidthLimit -Category Default -BytesPerSecond 10MB
Ограничение скорости передачи файлов в Robocopy – ключ /IPG
При использовании robocopy вы также можете использовать специальный ключ, позволяющий ограничения скорости копирования/перемещения файлов по сети. Для этого используется ключ /ipg (Inter packet Gap). Этот ключ выставляет интервал между пакетами в миллисекундах и используется для снижения нагрузки на сеть при копировании по низкоскоростным каналам. Robocopy передает данные по сети блоками по 64 КБ, и таким образом, зная пропускную способность вашего канала, можно рассчитать нужное значение для /ipg , исходя из требований к ограничению скорости передачи.
Если вы не хотите углубляться в формулы, то можете использовать уже готовый калькулятор Robocopy IPG Calclator: http://www.zeda.nl/index.php/en/robocopyipgcalculator-en-2
Управление шейпингом трафика с помощью сторонних утилит
Из платных вариантов самым популярным решением для ограничения пропускной способности в Windows в зависимости от порта, приложения, назначения является программы NetLimiter, а из бесплатных TMeter Free.
Также можно отменить:
- Glasswire – также включается в себя файервол и сетевой мониторинг;
- NetBalancer – сетевой мониторинг и возможность настраивать правила для трафика;
- cFosSpeed – может задать приоритет трафика для определенных приложений;
- Net Peeker – как и Glasswire имеет функцию файервола и возможность задавать приоритеты для трафика.
С задачей ограничения скорости передачи данных по сети отлично справляются QoS политики Windows, поэтому если перед вами стоит такая задача, то политики QoS должны быть рассмотрены в первую очередь. К тому же как и любые политики, они могут быть настроены на уровне всего домена через консоль gpmc.msc.
Стороннее ПО более функционально и имеет графический интерфейс, но в большинстве случаев это платные программы.
Здрасьте !
Тема интересная, но приведите пожалуйста рабочий пример, как ограничить скорость по smb на клиентских машинах. Что-то у меня не прокатывает, указываю скорость порт, применяю политику и что скачивание что закачка идут на максималках.
И как я понял, Пош управляет только политиками созданными с помощью него же?!
Добрый день. Вы применяете политики к объектам компьютера или пользователя?
В статье есть рабочий пример.
Сразу отвечая на Ваш второй вопрос про PowerShell: тот командлет ограничивает скорость передачи по SMB, но в основном он применяется для ограничений лайв миграции Hyper-V
Вроде разобрался. Получается что через политику только исходящий трафик можно настроить ? Входящий только в адвансед по пунктам и то для всего трафика. Или ставить на сервер SMB Bandwith Limit.
Да, совершенно верно. Через QoS политики ограничивается исходящий трафик. А через advanced можно частично ограничить входящий.
Спасибо ! вроде понятно все.
К примеру мне нужно ограничить скачивание с сервера по smb на определенные подсети. Я создаю политику QoS, где указываю порт назначения 445 и подсети назначения (кстати можно ли их через запятую ? нада попробовать), скорость на какую резать. И применяю эту политику ну там по WMI фильру к серверам. Так правильно будет или можно и так <> ??
Да, всё верно. Думаю это вполне рабочий и правильный подход. На счёт можно ли через запятую — не уверен, под рукой документации нет.
Если сходу не получится, то поэкспериментируйте с параметрами политики, всё должно заработать.
Спасибо еще раз .
Реализовывал сие еще года два назад.
Шейпил CIFS на канале между локациями.
Потом убрали и реализовали на cisco.
Есть в подчинении большая, распределенная сеть часто бывает необходимо распространить файлы на ПК, чаще всего дистрибутивы.
Использую PS-скрипт в котором провожу копирование c SMB ресурса с ограничением по скорости через Bits.
function CopyBitsCheck <
param ($path_From, $path_To, $FileNameFrom, $FileNameTo)
[bool]$inNeedCopy = $true
[bool]$bInError = $false
if ( [string]::IsNullOrEmpty($FileNameTo) )
$infullNetPath = $(Join-Path $path_From $FileNameFrom)
$infullLocalPath = $(Join-Path $path_To $FileNameTo)
if (-not $(Test-Path $path_To)) <
New-Item -Path $path_To -type directory -Force | Out-Null
>
if (Test-Path $infullNetPath) <
# доступен сетевой файл
if (Test-Path $infullLocalPath ) <
# есть локальный файл
If ( (Get-Item -Path $infullNetPath).lastWriteTime -ne (Get-Item -Path $infullLocalPath).lastWriteTime ) <
# сверяем по дате локальный и сетевой, если не совпадают
Write-Log «File $infullLocalPath exist. Date/time not compare. Need copy.» $Log
>
else <
$inNeedCopy = $false
Write-Log «File $infullLocalPath exist. Date/time compare.» $Log
>
>
if ( $inNeedCopy ) <
# Задаем политику Bits
if (! (Test-Path $RegBitsRootKey) ) <
New-Item –Path $RegBitsRootKey | Out-Null
>
New-ItemProperty -Path $RegBitsRootKey -Name ‘EnableBITSMaxBandwidth’ -PropertyType DWord -Value ‘00000001’ -Force| Out-Null
New-ItemProperty -Path $RegBitsRootKey -Name ‘MaxTransferRateOnSchedule’ -PropertyType DWord -Value $BitsSpeedWorkHours -Force| Out-Null
New-ItemProperty -Path $RegBitsRootKey -Name ‘MaxBandwidthValidFrom’ -PropertyType DWord -Value ‘8’ -Force| Out-Null
New-ItemProperty -Path $RegBitsRootKey -Name ‘MaxBandwidthValidTo’ -PropertyType DWord -Value ’22’ -Force| Out-Null # Скорость
New-ItemProperty -Path $RegBitsRootKey -Name ‘UseSystemMaximum’ -PropertyType DWord -Value ‘1’ -Force| Out-Null
New-ItemProperty -Path $RegBitsRootKey -Name ‘MaxTransferRateOffSchedule’ -PropertyType DWord -Value ‘0’ -Force| Out-Null
Restart-Service bits
Write-Log «Start copy from $infullNetPath to $infullLocalPath.» $Log
# Проверяем, есть ли задания Bits запущенное при прошлом запуске скрипта
$JobTransfer = Get-BitsTransfer |Where-Object <$PSItem.DisplayName -eq $FileNameFrom>
if ( [string]::IsNullOrEmpty($JobTransfer) ) <
# Нет задания. Запускаем асинхронно (с дозакачкой) с нормальным приоритетом с именем = имени файла.
$JobTransfer = Start-BitsTransfer -Source $infullNetPath -Destination $path_To -Priority Normal -Asynchronous -DisplayName $FileNameFrom
>
while ( $JobTransfer.jobstate.tostring() -ne ‘Transferred’ ) <
$Percent = «<0:n1>«-f ( ($JobTransfer.bytesTransferred/$JobTransfer.bytesTotal)*100 )
$NewBytesTransferred = $JobTransfer.bytesTransferred
if (![string]::IsNullOrEmpty($OldBytesTransferred) ) <
$Speed = «<0:n2>» -f $( ($NewBytesTransferred-$OldBytesTransferred)*8/1024/300) # Высчитываем сколько скачали за 5 минут байт, переводим в биты, килобиты, и делим на 300 сек, чтобы получить Kb/s
> else <
$Speed = «None»
>
Write-Log «Transfer $($FileNameFrom): status — $($JobTransfer.jobstate.tostring()), $Percent % complete, speed — $Speed Kb/s.» $Log
$OldBytesTransferred = $NewBytesTransferred
Start-Sleep 300
>
Complete-BitsTransfer -BitsJob $JobTransfer
If (-not ( Test-Path $infullLocalPath )) <
$bInError = $true
$ErrorMessage = «Bits-Transfer error»
>
>
> else <
$bInError = $true
$ErrorMessage = $error[0].Exception.Message
>
if ( $bInError ) <
Write-Log «Copy not complete. Error: $($ErrorMessage) Exit.» $Log
>
Remove-ItemProperty –Path $RegBitsRootKey -name ‘EnableBITSMaxBandwidth’
Remove-ItemProperty –Path $RegBitsRootKey -name ‘MaxTransferRateOnSchedule’
Remove-ItemProperty –Path $RegBitsRootKey -name ‘MaxBandwidthValidFrom’
Remove-ItemProperty –Path $RegBitsRootKey -name ‘MaxBandwidthValidTo’
Remove-ItemProperty –Path $RegBitsRootKey -name ‘UseSystemMaximum’
Remove-ItemProperty –Path $RegBitsRootKey -name ‘MaxTransferRateOffSchedule’
На ПК задана политика для включения бранчкеша в режиме распределенного кеша. Т.к. ПК W10 Pro, то бренчкеш работает только для файлов полученным через http (WSUS + PS-скрипты). Поэтому в планах сделать ресурс с дистрибутивами доступным через IIS с включенным бранкешем.
В итоге будет в идеальном случае: файл в удаленный офис где находятся несколько ПК скачивается 1 раз, при скачивании используется ограничение по скорости в разные часы. Если соседний ПК будет качать такой же файл, то ему его отдаст ПК находящийся в этом офисе.