Имеется FreeBSD 4.11-RELEASE-p10
ipfw show|grep pipe|wc -l
3289Железо - iP4-3GHz, em0 (гигабитный интел) polling.
в моменты нагрузки железяка очень начинает тормозить, есть ли что в системе по этому поводу чтобы подтюнить?
Тормозит на сетевом уровне - пинги на нее увеличиваются до 200мсек от машин которые в pipe'ах не прописаны, сами пайпы начинают врать, где 256кбит - имеем реально ~90-100kbit...
В ядре:
options HZ=200пробовал ставить HZ=2000, после чего часы начинают отставать в системе, толку - ноль.
как быть?
идей ни у кого не будет?
>идей ни у кого не будет?Подобная проблема решилась у меня "вычёсыванием" файрволла, использованием tables и mask src-ip mask dst-ip при конфигурации pipe's. rc.firewall в студию - подскажу по возможности.
>>идей ни у кого не будет?
>
>Подобная проблема решилась у меня "вычёсыванием" файрволла, использованием tables и mask src-ip
>mask dst-ip при конфигурации pipe's. rc.firewall в студию -
>подскажу по возможности.
ситуация такая, написан биллинг с заточкой для зарезки скоростей по IP для каждого пользователя, соотв. получился трабл - ~3200+ правил с pipe'ами.
Вчера просчитал, с пару часов посидел, повыгребал и получил в итоге ~800 вместо ~3200 за счет mask dst-ip 0x000000ff для x.x.x.x/24.Хочу у тебя спросить - введение таблиц поможет ли для увеличения скорости? Сколько одна таблица может содержать записей? Я так понимаю это фича ipfw2 ?
спасибо!
>ситуация такая, написан биллинг с заточкой для зарезки скоростей по IP для
>каждого пользователя, соотв. получился трабл - ~3200+ правил с pipe'ами.
>Вчера просчитал, с пару часов посидел, повыгребал и получил в итоге ~800
>вместо ~3200 за счет mask dst-ip 0x000000ff для x.x.x.x/24.
>
>Хочу у тебя спросить - введение таблиц поможет ли для увеличения скорости?
>Сколько одна таблица может содержать записей? Я так понимаю это фича
>ipfw2 ?
>спасибо!В моём случае таблицы существенно разгрузили "нарезающую" машину.
В одной из таблиц около 1000 записей - работает.
Фича соответственно ipfw2.
>В моём случае таблицы существенно разгрузили "нарезающую" машину.
>В одной из таблиц около 1000 записей - работает.
>Фича соответственно ipfw2.
спасибо,
можешь дать пример и таблицы и правила для таблицы?обязательно попробую на таблицы перейти, о результатах отпишусь!
Кстати, dst-ip/src-ip тоже надо в ff ставить при использовании table?
Тогда прошу уточнить - сколько различных тарифов надо обслуживать, занимается ли роутингом твоя машина или только шейпит.
>Тогда прошу уточнить - сколько различных тарифов надо обслуживать, занимается ли роутингом
>твоя машина или только шейпит.
роутит, шейпит, ~200 vpn подключений постоянно и даже маленькая bgp сессия ;) ну и ospfd даже крутится, а ещё ipnat :D
Еще с сотню VLAN'ов и ~50+ trafd висит, и периодически с 'ng' интерфейсов ng_ipacctd собирает статистику и скармливает mysql (этот уже на другом хосте).Вот такой вот монстрик.
>>Тогда прошу уточнить - сколько различных тарифов надо обслуживать, занимается ли роутингом
>>твоя машина или только шейпит.
>роутит, шейпит, ~200 vpn подключений постоянно и даже маленькая bgp сессия ;)
>ну и ospfd даже крутится, а ещё ipnat :D
>Еще с сотню VLAN'ов и ~50+ trafd висит, и периодически с 'ng'
>интерфейсов ng_ipacctd собирает статистику и скармливает mysql (этот уже на другом
>хосте).
>
>Вот такой вот монстрик.А не проще ль шейпер вынести на отдельный бридж? В своё время у меня тоже на одной тачке всё крутилось, пока проц под сотню не загрузился. Потом я разделил мясо и мух - роутер роутит, бридж шейпит , интеловские гиговые карточки, и эта конструкция 200Мбит прожёвывает без напрягу с запасом. Шейпер на бридже организован так: несколько файлов с IP-шками, перловый скрипт их заталкивает в таблицы, ipfw жуёт таблицы (одно правило на несколько сотен IP). Если надо - к понедельнику скину в один файл и скрипт и правила ipfw, повешу линк.
Извиняюсь, запахался.Пример файла с IP-шками приводить нет смысла - просто по IP-шке на сторчку.
Пример скрипта на перле, заталкивающего IP-шки в таблицы:#!/usr/bin/perl
local $ipfw="/sbin/ipfw -q";
system ("$ipfw table 0 flush");
open(ONE, "</usr/tables/list1.txt");
while(<ONE>){
chomp $_;
if (!/^#/) {
system ("$ipfw table 0 add $_\n");
}
}
close(ONE);
system ("$ipfw table 1 flush");
open(LV, "</usr/tables/lvonlylist.txt");
while(<TWO>){
chomp $_;
if (!/^#/) {
system ("$ipfw table 1 add $_\n");
}
}
close(TWO);
... итд, сколько таблиц надо. Скритп также отслеживает строки комментов, начинающиеся с #
и на них не реагирует.Пример куска rc.firewall
if1="em0"
if2="em1"
...
${fwcmd} add 20000 pipe 10 ip from any to table\(1\) in via ${if1}
${fwcmd} add 20010 pipe 20 ip from table\(1\) to any in via ${if2}
...
${fwcmd} pipe 10 config mask dst-ip 0x000000ff bw 128Kbit/s
${fwcmd} pipe 20 config mask src-ip 0x000000ff bw 128Kbit/sМожешь разобраться с пропусканием пакетов через интерфейсы по-своему,
поскольку у тебя роутер шейпит, но если будешь делать "нарезающий" бридж, то лучше так,
поскольку бридж обрабатывает только конструкции типа in via ${if1} и абсолютно забивает на out via ${if1}