«Причесываем трафик — динамический шейпер на Linux Linux*» и «Cmd codepage»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
Нет описания правки
 
imported>Vix
Нет описания правки
 
Строка 1: Строка 1:
Предположим у вас есть домашняя сеть (или не домашняя, а сеть небольшого офиса) с выходом в интернет через не очень скоростной канал.<br>
[https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/chcp.mspx?mfr=true Взято тут]
А пользователей — много, и каждый хочет что-то скачивать, да с максимальной скоростью. Вот тут перед нами встатет задача, как максимально эффективно распределить наш интернет-канал между пользователями так, чтобы они не мешали друг другу.<br>
В этой статье я опишу, как можно решить такую задачу с помощью Linux-сервера.


Сформулируем, что же мы хотим получить в результате:<br>
'''Chcp'''
1. Чтобы канал поровну делился между пользователями.<br>
Displays the number of the active console code page, or changes the console's active console code page. Used without parameters, chcp displays the number of the active console code page.
2. Чтобы канал зря не простаивал.<br>
'''Syntax'''
3. Чтобы онлайн-игры, ssh и telnet не «лагали» даже при полной загрузке канала, например торрентами.<br>
chcp [nnn]
Top of pageTop of page
'''Parameters'''
nnn : Specifies the code page. The following table lists each code page supported and its country/region or language:
'''Code page Country/region or language'''
437
United States
850
Multilingual (Latin I)
852
Slavic (Latin II)
855
Cyrillic (Russian)
857
Turkish
860
Portuguese
861
Icelandic
863
Canadian-French
865
Nordic
866
Russian
869
Modern Greek
/? : Displays help at the command prompt.
Top of pageTop of page
'''Remarks'''
Only the original equipment manufacturer (OEM) code page installed with Windows XP appears correctly in a command prompt window that uses Raster fonts. Other code pages appear correctly in full-screen mode or command prompt windows that use TrueType fonts.
You do not need to prepare code pages, as in MS-DOS.
Programs that you start after you assign a new code page use the new code page, however, programs (except Cmd.exe) that you started before assigning the new code page use the original code page.
Top of pageTop of page
'''Examples'''
To view the active code page setting, type:
chcp
A message similar to the following appears:
Active code page: 437
To change the active code page to 850 (Multilingual), type:
chcp 850
If the specified code page is invalid, the following error message appears:
Invalid code page
Top of pageTop of page
Formatting legend
Format Meaning
Italic
Information that the user must supply
Bold
Elements that the user must type exactly as shown
Ellipsis (...)
Parameter that can be repeated several times in a command line
Between brackets ([])
Optional items
Between braces ({}); choices separated by pipe (|). Example: {even|odd}
Set of choices from which the user must choose only one
Courier font
Code or program output
Country
Device
Devicehigh
Mode
Command-line reference A-Z


Top of pageTop of page


Если интернетом будут одновременно пользоваться 10 пользователей — каждый получит в свое распоряжение 1/10 часть канала, если в данный момент активен только один пользователь — он будет использовать весь канал сам.<br>
Добиться этого можно используя планировщик пакетов HTB, который входит в ядро linux начиная с версии 2.4.20.<br>
<br>
Можно конфигурировать шейпер с помощью команды tc, но для более удобной и наглядной настройки я рекомендую скачать скрипт [http://www.nixtech.ru/datatrans/linux/shaiper/htb.init-v0.8.5 htb.init.] Они использует для конфигурации htb набор конфигурационных файлов, именуемых так, что при сортировке по алфавиту их имена позволяют визуально представить себе дерево классов шейпера и удобно его редактировать.
* '''Внимание - в скрипте выставите пути в соответствии с вашими настройками!'''<br>
Предположим, что у нас на сервере есть интерфейс eth0, через который мы подключены к интернет, и eth1, который «смотрит» в локальную сеть.<br>


Управлять можно только исходящим из интерфейса трафиком, поэтому для eth0 будут правила для upload трафика пользователей, а для — eth1 — download трафика.<br>
Manage Your Profile |Legal |Contact Us
 
© 2015 Microsoft Corporation. All rights reserved. Contact Us |Terms of Use |Trademarks |Privacy & Cookies
По умолчанию конфигурационные файлы htb.init находятся в /etc/htb/. Для начала напишем правила шейпинга для upload трафика, они у нас будут простые.<br>
Создаем файл с именем eth0 (интерейс «смотрящий» в интернет), в него напищем следующие строки:<br>
DEFAULT=20
R2Q=1
 
Параметр DEFAULT задает номер класса, к которому будет относиться трафик «по умолчанию» — обычно это класс с минимальным приоритетом. Параметр R2Q влияет на работу алгоритма разделения канала и зависит от ширины канала. Я подбирал его значение эмпирическим путем, для моего исходящего канала в 2 Mbit.<br>
 
Далее, создадим файл eth0-2.full2MBit, для класса включающего в себя весь доступный интернет-канал. Имя файла состоит из имени интерфейса и id класса, после точки идет смысловое имя класса, используется как комментарий и системой игнорируется.<br>
RATE=2Mbit
CEIL=2Mbit
 
RATE — это наша гарантированная полоса, CEIL — максимальная полоса. Так как у меня канал с гарантированной максимальной полосой в 2 Mbit, то эти параметры у меня равны.<br>
 
Теперь мы создадим по одному файлу для каждого класса трафика, который у нас будет. Я у себя создал отдельные классы для ssh трафика, а так же трафика игр World Of Warcraft и Counter Strike, хотя вы можете сделать для всего высокоприоритетного трафика один класс.<br>
 
Пример для ssh — создаем файл eth0-2:10.ssh. В имени файла через двоеточие указан id родительского класса 2 и id текущего класса — 10. Идентификаторы для класса вы можете выбирать произвольно.<br>
# class for outgoing ssh
RATE=128Kbit
CEIL=2Mbit
RULE=*:22
PRIO=1
BURST=100Kb
 
В параметре RATE указана гарантированная полоса для этого класса, в CEIL — максимальная. Мы выделяем для ssh 128 KBit (как минимум) и разрешаем ему загрузить весь канал (я закачивать файлы по sftp). PRIO задает приоритет класса трафика (1- максимальный, чем больше число — тем меньш приоритет). BURST задает максимальный объем трафика, который будет передан на максимальной скорости перед тем, как перейти к передаче данных из дургих классов. Установив этот параметр в достаточно высокое значение мы добиваемся того, что трафик ssh будет передан с минимальными задержками.
RULE задает правило, по которому будет отбираться трафик в этот класс.
Формат — RULE=[[saddr[/prefix]][:port[/mask]],][daddr[/prefix]][:port[/mask]]
Обратите внимание на запятую! RULE=*:22 обозначает трафик, у которого порт назначения 22, а RULE=*:22, обозначает трафик, у которого исходящий порт — 22.
 
Создадим так же классы для других видов трафика, и класс для трафика «по умолчанию» с id 20 (мы указали вначале что именно в класс номер 20 надо направлять трафик «по умолчанию»). В нем укажем используемую дисциплину разделения канала LEAF=sfq, для того чтобы upload поровну делился между TCP сессиями разных пользователей.
 
Для eth1 правила будут почти такие же, только с учетом что общая ширина канала — 100 Mbit, мы ведь хотим чтобы можно было обращаться к локальным ресурсам сервера на полной скорости, для интернет-трафика выделен отдельный класс на 2 MBit, у которого как потомки добавлены классы отдельных пользователей, разделение по классам я делал по IP адресам. Для каждого пользователя можно указать максимальную и гарантированную скорость, а так же приоритет.
 
После правки конфигурации перезапускаем htb.init:
/etc/init.d/htb.init restart
И правила шейпинга трафика сразу же вступают в силу.
 
В процессе состевления правил обычно возникает необходимость как-то визуализировать трафик, в целях отладки и мониторинга, поэтому решил написать плагин для системы мониторинга серверов munin, который бы визуализировал распределение по классам HTB трафика. Выводить решил загрузку только классов-листьев дерева, так как именно они обычно несут смысловую нагрузку.
Скачать плагин вы можете из официального репозитория плагинов munin, называется он qos_, просто скопируйте его в папку плагинов munin /usr/share/munin/plugins/ и в папке используемых плагинов /etc/munin/plugins сделайте на него символическую ссылку вида qos_eth1, где eth1 — имя интерфейса, на котором нужно мониторить загрузку.<br>
В файле конфигурации плагинов можно добавить следущее:<br>
[qos_eth1]
env.ignore_queue1_10 yes
env.label_name1_31 Viperet
env.label_name1_32 Cornet
 
Параметр env.ignore_queue позволяет не отображать на графике состояние класса с указанным id, а параметр env.label_name — задать человекопонятную метку для класса на графике.
 
В итоге должно получиться что то такое:<br>
/sbin/tc qdisc del dev eth1 root
/sbin/tc qdisc add dev eth1 root handle 1 htb default 20 r2q 1
/sbin/tc qdisc del dev eth0 root
/sbin/tc qdisc add dev eth0 root handle 1 htb default 20 r2q 1
/sbin/tc qdisc del dev tun0 root
/sbin/tc qdisc add dev tun0 root handle 1 htb default 20 r2q 1
/sbin/tc class add dev eth1 parent 1: classid 1:2 htb rate 100Mbit
/sbin/tc class add dev eth1 parent 1:2 classid 1:10 htb rate 100Mbit
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.0.5 classid 1:10
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.0.6 classid 1:10
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.0.9 classid 1:10
/sbin/tc class add dev eth1 parent 1:2 classid 1:20 htb rate 2Mbit ceil 2Mbit
/sbin/tc class add dev eth1 parent 1:20 classid 1:21 htb rate 36Kbit ceil 0.5Mbit burst 100Kb prio 1
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip sport 22 0xffff classid 1:21
/sbin/tc class add dev eth1 parent 1:20 classid 1:30 htb rate 1000Kbit ceil 2000Kbit prio 5
/sbin/tc qdisc add dev eth1 parent 1:30 handle 30 sfq perturb 10
/sbin/tc class add dev eth1 parent 1:30 classid 1:31 htb rate 100Kbit ceil 0.5Mbit prio 5
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.0.101 classid 1:31
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.0.100 classid 1:31
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.0.99 classid 1:31
/sbin/tc class add dev eth1 parent 1:30 classid 1:52 htb rate 100Kbit ceil 0.5Mbit prio 5
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.0.22 classid 1:52
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.0.27 classid 1:52
/sbin/tc class add dev eth1 parent 1:30 classid 1:60 htb rate 100Kbit ceil 1Mbit prio 5
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 192.168.0.0/24 classid 1:60
/sbin/tc class add dev eth0 parent 1: classid 1:2 htb rate 2Mbit ceil 2Mbit
/sbin/tc class add dev eth0 parent 1:2 classid 1:10 htb rate 128Kbit ceil 2Mbit burst 100Kb prio 1
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dport 22 0xffff classid 1:10
/sbin/tc class add dev eth0 parent 1:2 classid 1:10 htb rate 512Kbit ceil 1Mbit burst 100Kb prio 1
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dport 1194 0xffff classid 1:10
/sbin/tc class add dev eth0 parent 1:2 classid 1:20 htb rate 50Kbit ceil 2Mbit prio 5
/sbin/tc qdisc add dev eth0 parent 1:20 handle 20 sfq perturb 10
/sbin/tc class add dev tun0 parent 1: classid 1:2 htb rate 0.5Mbit ceil 1Mbit
 
Хочу заметить, что у меня несколько нетипичная ситуация, два интернет канала на 2 и 1 Mbit, и для каждого пользователя ограничение в 2 Mbit скорости загрузки, поэтому на графике видно, что если активен один пользователь — его скорость урезается на 2 Mbit, а если несколько — суммарная скорость может достигать и трех. На таком достаточно «тесном» канале работают более 20 человек, и вполне комфортно себя чувствуют, не мешая друг другу.<br>
Эта картинка с реально действующего сервера, и она обновляется каждые 5 минут и отображает актуальную картину загрузки канала.
 
* [http://www.nixtech.ru/datatrans/linux/shaiper/htb.tar.gz примеры конфигурационных файлов]
 
* [http://habrahabr.ru/post/60095/ взято тут...]
<hr>
* [http://rudenko.net.ua/?p=253 Настройка шейпера HTB на офисном маршрутизаторе на базе Linux при помощи htb.init]
* [http://wiki.enchtex.info/howto/htb Ограничение скорости HTB.init]

Текущая версия от 22:16, 8 января 2015

Взято тут

Chcp Displays the number of the active console code page, or changes the console's active console code page. Used without parameters, chcp displays the number of the active console code page. Syntax

chcp [nnn]

Top of pageTop of page Parameters nnn : Specifies the code page. The following table lists each code page supported and its country/region or language: Code page Country/region or language

437

United States

850

Multilingual (Latin I)

852

Slavic (Latin II)

855

Cyrillic (Russian)

857

Turkish

860

Portuguese

861

Icelandic

863

Canadian-French

865

Nordic

866

Russian

869

Modern Greek

/? : Displays help at the command prompt.

Top of pageTop of page Remarks • Only the original equipment manufacturer (OEM) code page installed with Windows XP appears correctly in a command prompt window that uses Raster fonts. Other code pages appear correctly in full-screen mode or command prompt windows that use TrueType fonts. • You do not need to prepare code pages, as in MS-DOS. • Programs that you start after you assign a new code page use the new code page, however, programs (except Cmd.exe) that you started before assigning the new code page use the original code page. Top of pageTop of page Examples To view the active code page setting, type:

chcp

A message similar to the following appears:

Active code page: 437

To change the active code page to 850 (Multilingual), type:

chcp 850

If the specified code page is invalid, the following error message appears:

Invalid code page
Top of pageTop of page
Formatting legend
Format	Meaning
Italic

Information that the user must supply

Bold

Elements that the user must type exactly as shown

Ellipsis (...)

Parameter that can be repeated several times in a command line

Between brackets ([])
Optional items
Between braces ({}); choices separated by pipe (|). Example: {even|odd}

Set of choices from which the user must choose only one

Courier font
Code or program output
Country
Device
Devicehigh
Mode

Command-line reference A-Z

Top of pageTop of page


Manage Your Profile |Legal |Contact Us © 2015 Microsoft Corporation. All rights reserved. Contact Us |Terms of Use |Trademarks |Privacy & Cookies