Как сузить канал передачи данных ?

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ciber SLasH
Сообщения: 11

Как сузить канал передачи данных ?

Сообщение Ciber SLasH »

Есть такая проблемка...
У меня стоит Linux Mandrake 10.0 в VMware, которая в WinXP.
В Линухе настроен Apache. Из под форточек я тестирую php-скрипты, расположенные в Линухе.
Загвоздка вся в том, что мне нужно имитировать интернет, т.е. сузить канал передачи до скорости "плохенького" dial-up'а.
А то, если тестить в форточках, то всё грузится мгновенно, а в интернете много возникает побочных эффектов, которые открываются только при низкой скорости загрузки.

Прочёл в одном мануале, что iproute2 может справится и был приведён пример команд:
tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 10mbit

tc class add dev $DEV parent 1: classid 1:1 cbq rate 512kbit \
allot 1500 prio 5 bounded isolated

tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip dst 195.96.96.97 flowid 1:1     
     
Первая строка -- назначает базовую дисциплину на заданный интерфейс и сообщает ядру, что пропускная способность интерфейса составляет 10 Мбит/сек. Если вы установите неверное значение, то особого вреда не будет, однако, всегда стремитесь устанавливать верные значения, это повысит точность вычислений.

Вторая строка создает класс с полосой пропускания 512 Кбит/сек. Подробное описание CBQ содержит раздел Дисциплины обработки очередей для управления пропускной способностью.

Последняя строка говорит о том, какой трафик должен формироваться классом, определенным выше. Трафик, не подпадающий под заданное в фильтре условие, НЕ ОГРАНИЧИВАЕТСЯ! Более сложные примеры назначения условий (подсети, порт отправителя, порт адресата), вы найдете в разделе Наиболее употребимые способы фильтрации.

Мне нужно к примеру ограничить трафик на интерфейсе eth0 к 3кб/с...
Пишу команду:
tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 3kbps
для уверенности ещё и это:

tc class add dev eth0 parent 1: classid 1:1 cbq rate 3kbps \
allot 1500 prio 5 bounded isolated

tc filter add dev eth0 parent 1: protocol ip prio 16 u32 \
match ip dst 192.168.93.0 flowid 1:1

где: 192.168.93.0 -- адрес сети VMnet1

Перезагружаю Linux -- и никакого результата, всё как грузилось мгновенно, так и грузится. :(

Не подскажите как побороть проблему?
Спасибо сказали:
Аватара пользователя
Angel_13th
Сообщения: 1164
Статус: ...-oo=ll=oo-...
ОС: Gentoo

Re: Как сузить канал передачи данных ?

Сообщение Angel_13th »

Все дело в том что после перезагрузки все твои установки сбрасываются, что бы и при загрузке выставлялись такие же настройки надо прописать эти команды в файл стартовых скриптов. А после того как ты сделал все работает согласно твоим установкам если ты все правильно установил.
WorkStation Ubuntu 10.10 on Fujitsu-Siemens Amilo Pro 3545
Спасибо сказали:
Ciber SLasH
Сообщения: 11

Re: Как сузить канал передачи данных ?

Сообщение Ciber SLasH »

Я пробовал без перезагрузки. Выполнил команды и проверил как грузится сайт -- никаких изменений.
Я что-то так и не понял где сохраняется то, что я ввёл в командах? т.е. где конфиги этого "iproute2" ? Нашёл какие-то файлы в /etc/iproute2/ но там ничего нет, одни комментарии и файлики очень маленькие (обычно конфиги большие)...
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Как сузить канал передачи данных ?

Сообщение sash-kan »

(Ciber SLasH @ Воскресенье, 26 Июня 2005, 12:24) писал(а):где конфиги этого "iproute2" ?

это, собственно, не совсем iproute. это tc (traffic control).
действующие правила "хранятся" в опер. памяти.
чтобы они действовали при загрузке, их надо явно включить в какой-нибудь стартовый скрипт.
в debian, например, есть пакет shaper, который при установке записывает такой скрипт в /etc/init.d
скрипт понимает стандартные "демонические" команды start, stop, restart и т.д.
а что, собственно, нужно делать, он читает из /etc/default/shaper и /etc/shaper (все подробно расписано внутри самого скрипта).
как дело обстоит в других дистрибутивах, не знаю, но в описании пакета сказано, что источником послужил http://sourceforge.net/projects/cbqinit/

для твоего случая:
попробуй такую командочку:
# tc qdisc add dev eth0 root handle 1: htb && tc class add dev eth0 parent 1: classid 1:0 htb rate 3kbps ceil 3kbps burst 5k
(man tc-htb, man tc, man tc-*)

посмотреть, как оно установилось можно командами (сравни их вывод до установки дисциплины и после):
# tc qdisc show dev eth0
# tc class show dev eth0
удалить:
# tc qdisc del dev eth0 handle 1: root htb

обрати внимание на увеличение время прохождения icmp-отклика (установлена дисциплина с 5kbit):

Код: Выделить всё

alex@debian2:~$ ping -s 600 -c 10 -i 0.2 -w 20 10.10.1.1
PING 10.18.14.175 (10.18.14.175) 600(628) bytes of data.
608 bytes from 10.18.14.175: icmp_seq=1 ttl=64 time=29.7 ms
608 bytes from 10.18.14.175: icmp_seq=2 ttl=64 time=53.6 ms
608 bytes from 10.18.14.175: icmp_seq=3 ttl=64 time=33.2 ms
608 bytes from 10.18.14.175: icmp_seq=4 ttl=64 time=41.2 ms
608 bytes from 10.18.14.175: icmp_seq=5 ttl=64 time=32.9 ms
608 bytes from 10.18.14.175: icmp_seq=6 ttl=64 time=27.4 ms
608 bytes from 10.18.14.175: icmp_seq=7 ttl=64 time=2709 ms
608 bytes from 10.18.14.175: icmp_seq=8 ttl=64 time=2497 ms
608 bytes from 10.18.14.175: icmp_seq=9 ttl=64 time=2314 ms
608 bytes from 10.18.14.175: icmp_seq=10 ttl=64 time=5497 ms


Sash Kan добавил в 29.06.2005 14:43

Для Ciber SLasH:
предупреждаю - я не гуру по вопросам сетевого тюнинга! (:
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: