URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 75071
[ Назад ]

Исходное сообщение
"Оптимизация FreeBSD для работы в роли сетевого экрана"

Отправлено kostil , 09-Июл-07 00:08 
поднял на стареньком компе FreeBSD (AMD K6-2 300MHZ 64MB) собрал ядро со следующими параметрами:
options         IPFIREWALL              
options         IPDIVERT                
options         DUMMYNET                
options         TCP_DROP_SYNFIN        
options         IPFIREWALL_VERBOSE      
options         IPFIREWALL_VERBOSE_LIMIT=10    
options         IPFIREWALL_FORWARD      

поставил две сетевушки, одна смотрит в домашнюю сеть, вторая в приватную. в ipfw в данный момент порядка 100 строк с правилами.
проблема в следующем
когда я начинаю копировать какой нибудь файл из одной подсети в другую, то скорость не поднимается выше 3Мбайт хотя по суте, при 100Mbit соединение должна быть хотя бы 7-9Мбайт, и при этом top показывает что процессор занят практически на 100% прирываниями
CPU states:  3.5% user,  0.0% nice,  2.7% system,  92.3% interrupt, 1.5% idle

сетевухи стояли самые простые, на риалтековских чипах, поменял их на Intel PWLA8390MT, стало конечно немного лучше (скорость теперь поднимается до 6Мбайт) но все же хотелось бы что бы сетка работала шустрее.

можно ли устранить эту проблему програмными средствами? если да, то каким образом? или же все таки нужно менять аппаратную чать?


Содержание

Сообщения в этом обсуждении
"Оптимизация FreeBSD для работы в роли сетевого экрана"
Отправлено Shane , 09-Июл-07 01:37 
>поднял на стареньком компе FreeBSD (AMD K6-2 300MHZ 64MB) собрал ядро со
>следующими параметрами:
>options         IPFIREWALL
>options         IPDIVERT
>options         DUMMYNET
>options         TCP_DROP_SYNFIN
>options         IPFIREWALL_VERBOSE
>options         IPFIREWALL_VERBOSE_LIMIT=10
>options         IPFIREWALL_FORWARD
>

Попробуй отключить VERBOSE и DUMMYNET (если не используется) и включить device polling (man 4 polling).


"Оптимизация FreeBSD для работы в роли сетевого экрана"
Отправлено kostil , 11-Июл-07 09:07 
>>поднял на стареньком компе FreeBSD (AMD K6-2 300MHZ 64MB) собрал ядро со
>>следующими параметрами:
>>options         IPFIREWALL
>>options         IPDIVERT
>>options         DUMMYNET
>>options         TCP_DROP_SYNFIN
>>options         IPFIREWALL_VERBOSE
>>options         IPFIREWALL_VERBOSE_LIMIT=10
>>options         IPFIREWALL_FORWARD
>>
>
>Попробуй отключить VERBOSE и DUMMYNET (если не используется) и включить device polling
>(man 4 polling).


DUMMYNET оставил, т.к. использую эту функцию. убрал VERBOSE скорость сразу увеличилась до 6Mbyte/s.

разобрался с polling

собрал ядро со следующими опциями:

options DEVICE_POLLING
options HZ=1000

настроил polling следующим образом:

sysctl kern.polling.enable=1
sysctl kern.polling.user_frac=10

теперь скорость поднимается до 11Mbyte/s! и при этом система остается жива а не замерает как раньше:)

большое спасибо Shane.


"Оптимизация FreeBSD для работы в роли сетевого экрана"
Отправлено butcher , 12-Июл-07 00:38 
>DUMMYNET оставил, т.к. использую эту функцию. убрал VERBOSE скорость сразу увеличилась до
>6Mbyte/s.

На самом деле IPFIREWALL_VERBOSE не может никак влиять на производительность.
Указание этой опции влияет только на то, что значение переменной net.inet.ip.fw.verbose по-умолчанию будет единица, а не ноль.

ЗЫ. Это так, для истории, чтобы не вводить в заблуждение тех, кто может прочитать этот тред.


"Оптимизация FreeBSD для работы в роли сетевого экрана"
Отправлено Hammer , 15-Июл-07 23:34 
>>поднял на стареньком компе FreeBSD (AMD K6-2 300MHZ 64MB) собрал ядро со
>>следующими параметрами:
>>options         IPFIREWALL
>>options         IPDIVERT
>>options         DUMMYNET
>>options         TCP_DROP_SYNFIN
>>options         IPFIREWALL_VERBOSE
>>options         IPFIREWALL_VERBOSE_LIMIT=10
>>options         IPFIREWALL_FORWARD
>>
>
>Попробуй отключить VERBOSE и DUMMYNET (если не используется) и включить device polling
>(man 4 polling).

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


"Оптимизация FreeBSD для работы в роли сетевого экрана"
Отправлено Andrey , 11-Июл-07 10:44 
NATD работает через IPDIVERT.
Такая связка не очень быстро работает на старых машинках с последними ядрами.

Если есть желание добиться максимальной скорости при минимальной нагрузке, то импользуй pf. В pf nat реализован на уровне ядра. Работает очень быстро!


"Оптимизация FreeBSD для работы в роли сетевого экрана"
Отправлено guest , 14-Июл-07 20:05 
AMD-K6 500MHz 32MB

Опции ядра те же, только без dummynet. Оба if на RealTek 100Mbit. Тот же предел в 3MB/s.
Попробовал включить polling, в итоге вообще не вижу разницы, разве что теперь постоянно ~11% уходит на прерывания (при HZ=1000), т.е. только минус в итоге. user_frac что 10, что дефолтный 50 - толку тоже ноль, машина фактически только сетью и занята.
Используется ipfw+natd. Правил пустяк, вся суть которых в выходе из одной сети в другую через один ip этой машины, закрытая схема стены, т.е. только выход с dynamic rules.

Одно только: узнал, что kern.polling.enable is deprecated ;)

Что в моем случае можно подкрутить? Может я не до конца разрулил polling? Или мой единственный шанс выбросить RealTek? :( Просто эти же карточки, когда-то показывали довольно неплохие скоростя ~6-7MB/s.