Ivan Rostovikov Опубликовано 12 октября, 2009 (изменено) Такой вопрос: Ведь TBF "безклассовая"... но точная и простая. Можно ли заставить TBF шейпить только то, что хочется с помощь iptables -j MARK ? Нашел в сети пример: tc qdisc add dev eth0 root handle 1: prio tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 40kbit buffer 1600 limit 3000 tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate 80kbit buffer 1600 limit 3000 tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 192.168.100.3/24 flowid 1:1 Но не уверен. и не совсем понимаю как оно работает. Изменено 12 октября, 2009 пользователем Ivan Rostovikov Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 12 октября, 2009 (изменено) Вы так говорите, как будто HTB не подходит для шейпинга и не является совокупностью тех же token bucket. Кроме того, пример некорректен. Во-первых, к prio нельзя присоединять краевые дисциплины. TBF можно повесить только на parent queue. Во-вторых, u32 не использует для классификации метки iptables и в данном случае засаживает весь трафик в parent queue, т.е. никакого per user шейпинга не будет. Изменено 12 октября, 2009 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DemYaN Опубликовано 12 октября, 2009 те как-это нельзя вешать дисциплины ? prio такой же classful как и htb Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan Rostovikov Опубликовано 12 октября, 2009 Ну... да этот: >tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 192.168.100.3/24 flowid 1:1 пример с фильтром не совсем корректен. Тут нет марков. Суть - не в нем дело, а в том можно ли как таковые TC фильтры (по марку например) применять для TBF. Почему TBF ? - он меньше грузит процессор и точнее. Т.к. нет проблем с квантум при сильном разбросе скоростей. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 12 октября, 2009 Действительно классовая, но не думаю, что она даст какой-то выигрыш по сравнению с htb. Правило с tc filter, тем не менее, неправильное. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 12 октября, 2009 (изменено) Суть - не в нем дело, а в том можно ли как таковые TC фильтры (по марку например) применять для TBF.Почему TBF ? - он меньше грузит процессор и точнее. Т.к. нет проблем с квантум при сильном разбросе скоростей. Проблемы с quantum решаются установкой quantum 1500 для всех классов и скоростей. Для классификации лучше вместо marks использовать flow filter: tc filter add dev eth0 flow map key src addend -192.168.0.0 divisor 256 Изменено 12 октября, 2009 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
КузярБ Опубликовано 12 октября, 2009 Действительно классовая, но не думаю, что она даст какой-то выигрыш по сравнению с htb. Правило с tc filter, тем не менее, неправильное. Классовая то она классовая, да вот только разблюдовка по классам в ней осуществляется по TOS полю и никак иначе. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DemYaN Опубликовано 12 октября, 2009 Действительно классовая, но не думаю, что она даст какой-то выигрыш по сравнению с htb. Правило с tc filter, тем не менее, неправильное.Классовая то она классовая, да вот только разблюдовка по классам в ней осуществляется по TOS полю и никак иначе. WTF? priomap "If you do not provide tc filters to classify traffic", the PRIO qdisc looks at the TC_PRIO priority to decide how to enqueue traffic. The kernel assigns each packet a TC_PRIO priority, based on TOS flags or socket options passed by the application. The TC_PRIO is decided based on the TOS Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 13 октября, 2009 (изменено) Но я все равно не вижу причин устраивать в Linux некий аналог dummynet при наличии классовой дисциплины HTB. Хотя сравнить эти конфигурации под нагрузкой было бы интересно. Изменено 13 октября, 2009 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
КузярБ Опубликовано 13 октября, 2009 Действительно классовая, но не думаю, что она даст какой-то выигрыш по сравнению с htb. Правило с tc filter, тем не менее, неправильное.Классовая то она классовая, да вот только разблюдовка по классам в ней осуществляется по TOS полю и никак иначе. WTF? priomap "If you do not provide tc filters to classify traffic", the PRIO qdisc looks at the TC_PRIO priority to decide how to enqueue traffic. The kernel assigns each packet a TC_PRIO priority, based on TOS flags or socket options passed by the application. The TC_PRIO is decided based on the TOS Да, проглядел, фильтры можно использовать. Вот только в исходном примере нескладно получится - из сетки 192.168.100.3/24 оно пойдет в первый класс, а все остальное будет раскидано в соответствии с TOS, в т.ч. туда же в первый класс. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan Rostovikov Опубликовано 13 октября, 2009 (изменено) Боюсь меня не совсем верно поняли, и пример был неудачный. А суть такова: Ведь TBF работает на весь интерфейс сразу. А мне нужно пропускать через нее только маркированый трафик. Вот я и спрашиваю можно ли повесить TBF на единственый листок prio ? Лиш для того, что бы использовать фильтр по маркеру... tc qdisc add dev ppp0 root handle 1: prio bands 1 priomap 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1tc qdisc add dev ppp0 parent 1:1 handle 10: tbf rate 40kbit buffer 1600 limit 3000 tc filter add dev ppp0 parent 1: protocol ip prio 1 handle 1 fw classid 1:1 iptables -t mangle -A FORWARD -s 10.0.0.0/8 -j MARK --set-mark 1 Изменено 13 октября, 2009 пользователем Ivan Rostovikov Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DemYaN Опубликовано 13 октября, 2009 ну, как минимум нужно две очереди, иначе куда прикажете деваться трафику который не с меткой 1? нужно пробовать, что-то вроде такого: tc qdisc add dev ppp0 root handle 1: prio bands 2 priomap 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 tc qdisc add dev ppp0 parent 1:1 handle 10: tbf rate 40kbit buffer 1600 limit 3000 tc qdisc add dev ppp0 parent 1:2 handle 11: bfifo tc filter add dev ppp0 parent 1: protocol ip prio 1 handle 1 fw classid 1:1 tc filter add dev ppp0 parent 1: protocol ip u32 match u32 0 0 classid 1:2 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan Rostovikov Опубликовано 14 октября, 2009 Понял Вас. Но почему Вы для остального трафика предложили bfifo, а нет pfifo_fast ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...