Windows server ограничение скорости

Обновлено: 07.07.2024

Кратко, что такое QoS (англ. quality of service «качество обслуживания») — технология предоставления различным классам трафика различных приоритетов в обслуживании, также этим термином в области компьютерных сетей называют вероятность того, что сеть связи соответствует заданному соглашению о трафике, или же, в ряде случаев, неформальное обозначение вероятности прохождения пакета между двумя точками сети.

В работе мы будем использовать PowerShell для настройки политики QoS. Более подробно об используемых командлетах и их параметрах можно ознакомиться Читать

Пройдемся коротко по командлетам PowerShell:

  • Создание новой политики QoS: New-NetQosPolicy -Name "WSUS" .
  • Удаление созданной политики QoS: Remove-NetQosPolicy -Name "WSUS"
  • Изменение созданной политики QoS: Set-NetQosPolicy -Name "WSUS" …
  • Просмотр имеющихся политик QoS: Get-NetQosPolicy

Рассмотрим на примере применения ограничения трафика.

И так у нас имеется WSUS сервер и множество клиентов (рабочих станций) находящихся на других площадках с крайне ограниченными каналами связи. Соответственно клиенты с появлением новых обновлений разом начинают их скачивать и тем самым забивают наш канал по полной. Одним из решений данной проблемы – это ограничить исходящий трафик для удаленных клиентов.

Внимание! Создаваемые политики могут применяться на пользователя или на локальную машину, при этом политика пользователя имеет приоритет. При работе через PowerShell мы будем создавать для локальной машины. Обратите внимание на параметр –NetworkProfile – при создании политик надо правильно выбирать сетевой профиль иначе у вас ничего работать не будет.
Другие важные моменты при работе с политиками, прочтите обязательно: Управление политики QoS и Вопросы и ответы по политики QoS

Запускаем оснастку PowerShell с правами администратора

Ограничим исходящий трафик с сервера исходя из сети клиентов

Т.к. у сервера всего одна роль, то данной командой мы ограничили весь исходящий трафик для указанной сети.

  • Name "WSUS" - задает имя политики
  • IPDstPrefixMatchCondition "10.1.1.0/24" - указываем сеть клиентов (сеть получатель)
  • NetworkProfile Domain - для какого профиля сетевого окружения применяем. Если мы не укажем профиль, то политика будет распространяться на все профиля. Об этом я еще упомяну ниже
  • ThrottleRateActionBitsPerSecond 1MB - устанавливаем ограничения по скорости

Если ролей много, то мы можем расширить условия добавив, например, порт:

  • Name "WSUS 2" - задает имя политики
  • IPProtocolMatchCondition TCP" - указываем протокол
  • IPSrcPortMatchCondition 8530 - указываем порт источника трафика
  • IPDstPrefixMatchCondition "10.1.1.0/24" - указываем сеть клиентов (сеть получатель)
  • ThrottleRateActionBitsPerSecond 1MB - устанавливаем ограниченя по скорости

Еще примеры:

Ограничим скорость скачки файлов с шары сервера Ограничим скорость для конкретного приложения Пример использования: Get-NetQosPolicy - список имеющихся политик QoS Пример использования Set-NetQosPolicy - изменение уже существующей политики QoS Пример использования Remove-NetQosPolicy - удаление существующих политик QoS

А теперь посмотрим настройки в картинках и поэкспериментируем на Windows 10.

В качестве подопытного будем использовать программу iperf3.exe

Настройка через графический интерфейс.
Внимание! Создаваемые политики через графический интерфейс имею по умолчанию сетевой профиль Domain и не предоставляют нам возможности изменить это т.е. работать будет только если машина у нас в домене, а тестирование на этот раз мы проводим на домашнем компьютере.

Запускаем gpedit.msc (Редактор локальной групповой политики) и переходим, как показано на картинке

Редактор локальной групповой политики

Жмем правой кнопкой мыши на выделенном элементе, выбираем «Создать новую политику». Вносим изменения как на картинке, жмем далее и проходим мастер до конца.

Редактор локальной групповой политики
Редактор локальной групповой политики
Редактор локальной групповой политики
Редактор локальной групповой политики
Редактор локальной групповой политики

В данном примере мы урезали скорость для данной программы до 1Мбит/с и как мы знаем - это ограничение распространяется только на отдачу.

iperf3 проверка скорости

Как мы видим ничего у нас не работает, скорость не была ограничена

Запускаем оснастку PowerShell и видим, что политика у нас есть, но NetworkProfile нас имеет значение Domain.

PowerShell Qos

Теперь мы создадим такую же политику, но и с использованием PowerShell.

Запускаем оснастку PowerShell с правами администратора

PowerShell New-NetQosPolicy

Смотрим, что у нас есть.

PowerShell Get-NetQosPolicy

Т.к. мы не указывали NetworkProfile , то по умолчанию политика применяется теперь на все сетевые профиля.

Как видим, теперь все работает, но все же не так как нам хотелось т.к. скорость на прием у нас упала в разы.

Удаляем все что создали. И создаем политику заново но уже скорость урежем до 10Мбит/с

И теперь у нас все нормально. А в чем тут подвох догадайтесь сами.

А сейчас мы попробуем промаркировать (DSCP/TOS) наш трафик.

WiresharkPortable iperf3 QoS

Как видим и тут все у нас работает. А вот так же промаркировать icmp пакеты ping.exe у нас не получиться, а почему, вопрос остается открытым. И да у ping.exe есть ключ -v, но нужны танцы с бубном.

В данных статье мы рассмотрели лишь малую часть применения QoS т.к. тема очень обширна. Для желающих более детально ознакомиться о QoS рекомендую к прочтению

Network

Как-то раз мне понадобилось по самбе с одного сервера на другой скопировать большой объём данных. Сервер просел по дискам и всё закончилось гневными криками и копирование пришлось отменить. Как же быть? Ограничиваем скорость копирования по сети встроенными средствами Windows. Для ограничения трафика используем QoS.

QoS - quality of service (качество обслуживания). Это технология предоставления различным классам трафика различных приоритетов в обслуживании.

Шейпинг (shaping traffic) - ограничение пропускной способности канала для отдельного узла сети ниже технических возможностей канала. Шейпинг обычно используется как средство ограничения максимального потребления трафика со стороны узла сети.

Первым делом заходим в свойства сетевой карты, которую будем ограничивать. Устанавливаем галку на Qos Packet Scheduler.

qos

Далее открываем консоль Local Group Policy Editor (Редактор локальной групповой политики) или выполняем:

qos

Заходим в Local Computer Policy > Computer Configuration > Windows Settings > Policy-based QoS.

qos

Создаём новую политику, правой кнопкой - Create new policy. Открывается окошко создания политики.

qos

Policy name — указываем любое.

Specify Throttle Rate — вот здесь и будем ограничивать скорость, попробуем 1024 Кб в секунду.

Переключаемся на вкладку Application Name.

qos

Применяем политику для всех приложений — All applications. Переключаемся на вкладку IP Addresses.

qos

Источник я не буду ограничивать - Any source IP Address. А вот получателя буду, в поле Only for the following destination IP address or prefix указываю IP адрес, на который буду закачивать данные. Переключаемся на вкладку Protocol and Ports.

qos

Я собираюсь резать только трафик на самбу. поэтому указываю протокол TCP, и номер порта 445. OK

Собственно, всё готово. Проверяю скорость. Запускаю на копирование массив данных.

mail

Вижу 881 KB/sec на отправителе.

Меняю в политике скорость, указываю 2048 Кб в секунду.

qos

Нажимаю ОК и проверяю скорость.

qos

1,14 MB/sec — скорость подросла. На получателе наблюдаю такую картину нагрузки на сеть в момент изменения политики.

qos

Видно, что нагрузка резко выросла примерно в два раза и составляем 16,5 Мегабит в секунду. Если перевести в Мегабайты, получится 2014 Кб в секунду, почти то, что указали в политике.

Проверим ещё раз как работает изменение скорости копирования налету. Меняю в политике скорость, указываю 4096 Кб в секунду.

qos

Нажимаю ОК и проверяю скорость.

qos

1,54 MB/sec - скорость ещё подросла. На получателе наблюдаю такую картину.

qos

Всё работает как часы, небольшой провал не в счёт. Настройка заняла минимальное время, несколько кликов мышкой и скорость загрузки по самбе ограничена указанными вами значениями.

Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-01

Всем привет сегодня хочу рассказать как производится управление пропускной способностью сетевого интерфейса в Windows. Предположим у вас есть сервер на котором крутится сайтик или какое то приложение доступное по сети, и на этом же сервере в целях экономии у вас например файловая шара и WDS сервер, по умолчанию все процессы имеют одинаковый приоритет, и если кто то начинает хорошо кушать канал, то все другие проседают. С приходом Power Shell 3 версии, появились командлеты которые помогут ограничить отдачу сетевой карты на каждый процесс, ровно столько сколько зададите.

Хочу отметить что работает это только на исходящем трафике

В моем примере у нас есть файловая щара по протоколу SMB и компьютер куда мы скачиваем контент

Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-02

Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-02

Начинаем закачку, видим что скорость копирования 120 мб в секунду, довольно неплохо, кушается весь гигабитный канал

Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-03

Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-03

Для решения поставленной задачи мы можем использовать встроенные средства, в частности Windows QOS Packet Scheduler. Данный функционал позволяет нам приоритизировать и лимитировать трафик, гарантирую что одни процесс не будет потреблять все доступные ресурсы.

Для начала проверим имеются ли уже какие-либо политики, которые могут конфликтовать или переопределить нашу политику

Далее мы создаем новую политику, которая будет применяться к SMB трафику и лимитировать его до 10MB/s

New-NetQosPolicy -Name "FileCopy" -SMB -ThrottleRateActionBitsPerSecond 10MB

Проверим приминилось ли правило командой

Видим, что правило появилось и действует.

Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-05

Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-05

Видим скорость копирования упала до 10 мб в секунду.

Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-04

Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-04

Чтобы поменять текущую политику воспользуемся командой

Set-NetQosPolicy -Name "FileCopy" -ThrottleRateActionBitsPerSecond 20MB

Если задавать без упоминания кб или мб, то цифры считаются в байтах

Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-06

Как ограничить пропускную способность сетевой карты в Windows Server 2012 R2 средствами Power Shell-06

Для того чтобы удалить политику воспользуемся вот такой командой

Вот такая вот встроенная и полезная функция Windows для управление и ограничения отдачи вашей сетевой карты.

В процессе централизованной раздачи клиентам System Center 2012 R2 Configuration Manager (SCCM) очередной порции обновлений с сервера с ролью Software Update Point (SUP)столкнулись с ситуацией пиковой загрузки на канале передачи данных - участка с низкой пропускной способностью на канале между структурными подразделениями и площадкой, на которой был расположен сервер SCCM. По графику отдачи трафика на сервере SCCM было хорошо видно, что исходящий трафик “упёрся” в границу того самого “узкого места на канале. Разумеется таких ситуаций чаще всего можно избежать заранее настраивая приоритизацию трафика на разных уровнях, начиная с сетевого оборудования. Но что делать, если по какой-то причине проблема возникла прямо здесь и прямо сейчас, а доступа к сетевому оборудованию нет. То есть фактически нужно как-то оперативно “задушить” трафик отдачи обновлений Windows Update на определённый момент времени средствами Windows. Простое и эффективное решение подсказал автор заметки Ограничиваем аппетиты WSUS-а .

В качестве решения предлагается ограничение общей пропускной способности (в байтах) веб-сервера IIS. За это отвечает параметр maxGlobalBandwidth в разделе конфигурации IIS - system.applicationHost/webLimits .

Чтобы запросить текущие значения параметров в указанном разделе конфигурации IIS с помощью утилиты командной строки appcmd.exe выполним:

В полученном ответе мы увидим, что значение по умолчанию для интересующего нас параметра параметра – 4294967295:

Предположим, нам нужно уменьшить полосу пропускания трафика IIS до 20 Mbit/s. Рассчитаем необходимое значение параметра в байтах: (20 * 1024 * 1024)/8 = 2 621 440 байт.

Выполним команду установки рассчитанного значения:

Туже самую настройку можно выполнить и через консоль IIS Manager, перейдя на уровне веб-сервера в раздел Management > Configuration Editor

image

В поле Section из выпадающего дерева элементов конфигурации выберем system.applicationHost/webLimits , зададим значение интересующего нас параметра maxGlobalBandwidth и нажмём в правом меню действий Apply, чтобы изменения вступили в силу.

image

Результат сможем наблюдать сразу же. В нашем случае с настройками IIS по умолчанию отдача трафика клиентам была на пределе возможностей “узкого места” в сети, что вызывало ряд вытекающих проблем для пользователей находящихся в “задушенном” сегменте сети.

image

Сразу после применения рассчитанного нами параметра ситуация изменилась на глазах…

image

Таким образом критическая ситуация загрузки канала была ликвидирована.

У такого подхода к ограничению трафика в отличии от классического использования QoS есть преимущество в том, что в случае необходимости изменения пропускной способности по какому-то заданному расписанию, можно прибегнуть к помощи планировщика заданий Windows, запуская из него в нужное время вышеприведённую команду настройки IIS.

Читайте также: