Перейти к содержимому
Калькуляторы

А знания надо собирать по крупинкам из совершенно разных мест, а в железе, той же циско миллион мануалов как и что сделать. А тюнинг и настройки freebsd для стабильной работы и хорошей производительности в роли пппое браса или роутера, тайна за 7ю печатями(вэб,фс тюнинг не в счет).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

для начала стоило бы поставаить нормальную сетевую карту

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Xeon X3430 @ 2.40GHz

С набортными em-ами dummynet+pf_NAT+ng_netflow спокойно жует 800+320 Mb/s (in+out)

 

И это в 1U корпусе

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Киньте в меня пожалуйста кто нибуть свои изменения в ядре, sysctl.conf и loader.conf для pppoe браса, хоть будет с чего начать вникать. Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Киньте в меня пожалуйста кто нибуть свои изменения в ядре, sysctl.conf и loader.conf для pppoe браса, хоть будет с чего начать вникать. Заранее спасибо.
PPPoE уже не использую, вот мои настройки для шейперной фермы (dummynet+ngnetflow).

 

/boot/loader.conf

ichwd_load="YES"   # .. /etc/rc.conf: watchdogd_enable="YES"
netgraph_load="YES"
dummynet_load="YES"
ng_ipfw_load="YES"
ng_netflow_load="YES"

kern.coredump=0
kern.hz=2000

# Intel network cards
hw.em.rxd=4096
hw.em.txd=4096
hw.em.enable_msi=1
hw.em.rx_int_delay=600
hw.em.tx_int_delay=600
hw.em.rx_abs_int_delay=1000
hw.em.tx_abs_int_delay=1000

# http://lists.freebsd.org/pipermail/freebsd-net/2009-June/022227.html
hw.bge.rxd=512

 

/etc/sysctl.conf

net.inet.ip.fw.verbose=1
net.inet.ip.fw.debug=0  

net.link.ether.inet.log_arp_wrong_iface=0

net.inet.ip.dummynet.io_fast=1
net.inet.ip.fastforwarding=1  
net.inet.ip.redirect=0        

net.inet.ip.fw.dyn_buckets=2048         # default=256
net.inet.ip.dummynet.hash_size=1024     # default=64 

# Drop SYN without RST on closed ports
net.inet.tcp.blackhole=2              
net.inet.udp.blackhole=1              

# Igor Sysoev settings for Intel network cards:
# http://dadv.livejournal.com/49013.html       

dev.em.0.rx_int_delay=600
dev.em.0.tx_int_delay=600
dev.em.0.rx_abs_int_delay=1000
dev.em.0.tx_abs_int_delay=1000
dev.em.0.rx_processing_limit=1024
dev.em.0.rx_kthreads=1

dev.em.1.rx_int_delay=600
dev.em.1.tx_int_delay=600
dev.em.1.rx_abs_int_delay=1000
dev.em.1.tx_abs_int_delay=1000
dev.em.1.rx_processing_limit=1024
dev.em.1.rx_kthreads=1

net.inet.ip.intr_queue_maxlen=400

# Igor Sysoev patch for Broadcom NIC coalescing:
# http://lists.freebsd.org/pipermail/freebsd-net/2009-June/022227.html

dev.bge.0.rx_coal_ticks=500
dev.bge.0.tx_coal_ticks=10000
dev.bge.0.rx_max_coal_bds=64
dev.bge.0.tx_max_coal_bds=128
dev.bge.0.program_coal=1

dev.bge.1.rx_coal_ticks=500
dev.bge.1.tx_coal_ticks=10000
dev.bge.1.rx_max_coal_bds=64
dev.bge.1.tx_max_coal_bds=128
dev.bge.1.program_coal=1

 

/etc/rc.local

# Workaround Intel NIC initialization problems - do it again...
egrep '^dev\.em\.' /etc/sysctl.conf | while read line; do sysctl $line; done

# Bind all kernel threads to CPU cores 0,1 sharing common L2-cache
ps -axo pid,command | egrep '^ +[0-9]+ \[' | while read pid cmd; do cpuset -l 0,1 -p $pid; done

 

Kernel options

cpu I686_CPU        # 32-bit
cpu HAMMER          # 64-bit
options COMPAT_IA32   # 64-bit

ident FREELSD

#=makeoptions DEBUG=-g

options         ALTQ       # Suppress warning messages when PF NAT is used
options         ALTQ_CBQ
options         ALTQ_RED
options         ALTQ_RIO
options         ALTQ_HFSC
options         ALTQ_CDNR
options         ALTQ_PRIQ
options         ALTQ_NOPCC
options         ALTQ_DEBUG

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=999
options         IPFIREWALL_FORWARD
options         IPFIREWALL_DEFAULT_TO_ACCEPT

device          pf              # ..required for pfSync
device          pfsync
device          carp
device          gre

 

Kernel patches (optional)

 

Driver "bge" coalescing

http://lists.freebsd.org/pipermail/freebsd...une/022227.html

 

Intel "em" drivers

http://people.yandex-team.ru/~wawa/

http://www.intel.com/support/network/sb/cs-006120.htm

 

Dummynet crash

http://freebsd.rambler.ru/bsdmail/freebsd-...7/msg01566.html

 

Possible deadlock in routing code

http://www.freebsd.org/cgi/query-pr.cgi?pr=130652

 

/etc/pf.conf

nat_net="10.0.0.0/8"
nat_pool="1.2.3.4"

set limit { states 200000, frags 50000, src-nodes 30000 }
set optimization aggressive
set state-policy if-bound
set block-policy return
set skip on { lo0, vlan1 }

binat on vlan2 from 10.20.30.41 to 1.2.3.41
binat on vlan2 from 10.20.30.42 to 1.2.3.42
# ...and so on...

nat on vlan2 from $nat_net to any -> $nat_pool

По умолчанию pf выключен, NAT делается на Линукс-бордере.

 

Подсчёт трафика на внешних интерфейсах и отправка по netflow

mknetflow() {
        test -n "$netflow_target" || return 1

        iface=$1
        index=$2
        outrule=$3
        inrule=$4 

        rmhook netflow: out$index
        rmhook netflow: iface$index

        $ngctl show netflow: >/dev/null 2>&1 && netflow_created=1

        $ipfw add $inrule netgraph $inrule ip   from any to any via $iface
        $ipfw add $inrule netgraph $inrule icmp from any to any via $iface

        if [ -z "$netflow_created" ]; then
                $ngctl mkpeer  ipfw: netflow  $inrule iface$index
                $ngctl name ipfw:$inrule netflow                 
        else                                                     
                $ngctl connect ipfw: netflow: $inrule iface$index
        fi                                                       
        $ngctl connect ipfw: netflow: $outrule out$index         
        if [ -z "$netflow_created" ]; then                       
                $ngctl mkpeer netflow: ksocket export inet/dgram/udp
                $ngctl msg netflow:export connect inet/$netflow_target
        fi

        $ngctl msg netflow: "setdlt     { iface=$index dlt=12  }"
        $ngctl msg netflow: "setifindex { iface=$index index=100$index }"
}

netflow_target=10.20.1.1

mknetflow vlan2 0 100 101
mknetflow vlan3 1 102 103
# ...and so on...

 

Это не мануал для чайников, а куски из служебного регламента и svn-исходников, поэтому если что-то неясно - спрашивайте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Промучавшись недельку с нг_кар и получив в результате фигу )) подробней

 

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

 

Ilya Evseev огромное спасибо за информацию!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

7.2-STABLE + mpd 4.4 + dummynet

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

HP DL360 G4 2 x Xeon 3.2 Dual Core, 4GB RAM

690Mbit/sec на 500 байтных пакетах Iperf в одну сторону (правда банальный Eth0->Eth1). Делал на Vyatta. Карточки встроенные.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

для начала стоило бы поставаить нормальную сетевую карту

Intel 82574L вродде бы нее уродливая...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Смотрю на mpd4.4 и думаю... этож какой конфиг будет и .links при 100 вланах по 100 ng ... судя по

Подскажите, пожалуйста, как правильно настроить mpd4 как pppoe-сервер на 24-х vlan-ах FreeBSD 6.2-STABLE? При том что примерное количество одновременных pppoe-сессий составляет около 300, но количество одновременных сессий на каждом vlan-е неизвесто? Нашёл пример схожей задачи:

default:

load server1

load server2

load server3

...

pppoe_standard:

set ccp yes mpp-e40

set ccp yes mpp-e128

set ccp yes mpp-stateless

set pppoe service "*"

set pppoe disable originate

set pppoe enable incoming

...

server1:

new -i ng1 pppoe1 pppoe1

set ipcp ranges x.x.x.x/32 y.y.y.y/24

load pppoe_standard

server2:

new -i ng2 pppoe2 pppoe2

set ipcp ranges x.x.x.x/32 y.y.y.y/24

load pppoe_standard

server3:

new -i ng3 pppoe3 pppoe3

set ipcp ranges x.x.x.x/32 y.y.y.y/24

load pppoe_standard

...

mpd.links file:

pppoe1:

set link type pppoe

set pppoe iface vlan0

pppoe2:

set link type pppoe

set pppoe iface vlan1

pppoe3:

set link type pppoe

set pppoe iface vlan2

 

Но, как я понимаю, мне надо прописывать фиксированное количество ng-интерфейсов на каждый vlan? Если я буду исходить из количества, например, 50 сессий на vlan, то суммарно их должно быть 50*24 = 1200. Нормально ли это? Не вылезут ли бока у FreeBSD/mpd?

Я пробовал создавать интерфейсы по типу ngAABB, где AA - номер vlan-а, а BB- "порядковый" номер клиента на vlan-е. Так интерфейсов получилось 2500 (хотя реально требуется 300), и созадавались они с минуту. Вот теперь переживаю как это будет функционировать, ведь проверить можно только в продакшене. :(

В моем случае это 10000 интерфейсов ... Есть какие готовые средства автоматизации этого дела, скрипты мож какие ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

по одной записи на влан

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Значит или мне не так объяснили или я не так понял, что вполне вероятно ))

Допустим,пример влан 1-100 , в каждом в пике может быть до 100 пппое сессий активных, что писать в mpd.conf , mpd.links , при пптп оно выглядит крайне просто, а тут получается надо завести в mpd.conf 10000 ng , а потом в mpd.links на каждую сотню ng определить влан ? Или можно завести как то проще?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прокладку надо рихтовать. mp4 свободно держит до 8000 интерфейсов ( думаю у меня бы и 32000 заработало со временем, было бы желание ).

конфиги в непакованном виде меньше пол-мега. Аптаймы почти год. ( я раз в год стараюсь проводить профилактику или апгрейд ).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прочитав десятки веток разных форумов (больше по mpd4 pppoe в роли сервера не нашел, по mpd5 полно, но оно у меня и так есть)) в голове получилась каша и полнейшее непонимание куда вписывать вланы(и что вообще вписывать в .links), на мпд5 создал просто в mpd.conf bundle template на каждый влан и готово, а в мпд4 даже в conf.sample нету примера для pppoe сервера (

Если не затруднит, опишите или дайте пример, как правильно сделать pppoe сервер на mpd4 на много вланов(как должны выглядеть mpd.conf и mpd.links), заранее спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня при обновлении с 7.x до 8.1-RC1 возник такой глюк:

dymmynet_load="YES" в /boot/loader.conf теперь молча игнорируется.

Если сделать "kldload dummynet", то он загружается и работает.

Вроде бы мелочь, но неприятная.

 

UPD. Оказывается, теперь полагается писать dummynet_enabled="YES" в /etc/rc.conf.

Изменено пользователем Ilya Evseev

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня начались такие же проблемы с bge как у инициатора темы (тоже сервер HP только G5). Когда трафик приближается к 80 М/b появляются ошибки на интерфейсе, и без ifconfig down && up никак не убираются.

15.08.10 появились изменения в драйвере http://www.freebsd.org/cgi/cvsweb.cgi/src/...ev/bge/if_bge.c

Обновился, но не помогло :-(((

Есть ещё варианты пока покупается и едет карта Intel :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По быстрому переделал патчик под 8.0\9.0 может и пригодится кому.

--- if_bge.c.org		2010-03-30 21:08:20.000000000 +0400
+++ if_bge.c	2010-03-30 21:10:07.000000000 +0400
@@ -483,8 +483,18 @@
DRIVER_MODULE(miibus, bge, miibus_driver, miibus_devclass, 0, 0);

static int bge_allow_asf = 1;
+static int bge_rxd = BGE_SSLOTS;
+static int bge_rx_coal_ticks = 150;
+static int bge_tx_coal_ticks = 150;
+static int bge_rx_max_coal_bds = 10;
+static int bge_tx_max_coal_bds = 10;

TUNABLE_INT("hw.bge.allow_asf", &bge_allow_asf);
+TUNABLE_INT("hw.bge.rxd", &bge_rxd);
+TUNABLE_INT("hw.bge.rx_int_delay", &bge_rx_coal_ticks);
+TUNABLE_INT("hw.bge.tx_int_delay", &bge_tx_coal_ticks);
+TUNABLE_INT("hw.bge.rx_coal_desc", &bge_rx_max_coal_bds);
+TUNABLE_INT("hw.bge.tx_coal_desc", &bge_tx_max_coal_bds);

SYSCTL_NODE(_hw, OID_AUTO, bge, CTLFLAG_RD, 0, "BGE driver parameters");
SYSCTL_INT(_hw_bge, OID_AUTO, allow_asf, CTLFLAG_RD, &bge_allow_asf, 0,
@@ -1027,7 +1037,7 @@

	bzero(sc->bge_ldata.bge_rx_std_ring, BGE_STD_RX_RING_SZ);
	sc->bge_std = 0;
-	   for (i = 0; i < BGE_SSLOTS; i++) {
+	   for (i = 0; i < bge_rxd; i++) {
			if ((error = bge_newbuf_std(sc, i)) != 0)
					return (error);
			BGE_INC(sc->bge_std, BGE_STD_RX_RING_CNT);
@@ -2787,10 +2797,10 @@

	/* Set default tuneable values. */
	sc->bge_stat_ticks = BGE_TICKS_PER_SEC;
-	   sc->bge_rx_coal_ticks = 150;
-	   sc->bge_tx_coal_ticks = 150;
-	   sc->bge_rx_max_coal_bds = 10;
-	   sc->bge_tx_max_coal_bds = 10;
+		sc->bge_rx_coal_ticks = bge_rx_coal_ticks;
+		sc->bge_tx_coal_ticks = bge_tx_coal_ticks;
+		sc->bge_rx_max_coal_bds = bge_rx_max_coal_bds;
+		sc->bge_tx_max_coal_bds = bge_tx_max_coal_bds;

	/* Set up ifnet structure */
	ifp = sc->bge_ifp = if_alloc(IFT_ETHER);<!--c2--></div><!--ec2-->

 

И в 8.2-STABLE и в 9.0-CURRENT изменились исходники if_bge.c, в результате чего вышеприведённый патч уже не накладывается. Я руками подправил по аналогии, но там не только номера строк поменялись, но и имя одной константы, так что я совсем не уверен в правильности своих действий ибо не специалист я в таких делах. В результате наложения нижеприведённого патча в 9.0-CURRENT amd64 ядро у меня скомпилилось, но крутилки не появились :(. Может есть у кого решение?

Спасибо.

 

--- if_bge.c.org        2011-04-25 19:10:28.000000000 +0300
+++ if_bge.c    2011-04-25 19:19:56.000000000 +0300
@@ -501,8 +501,18 @@
DRIVER_MODULE(miibus, bge, miibus_driver, miibus_devclass, 0, 0);

static int bge_allow_asf = 1;
+static int bge_rxd = BGE_STD_RX_RING_CNT;
+static int bge_rx_coal_ticks = 150;
+static int bge_tx_coal_ticks = 150;
+static int bge_rx_max_coal_bds = 10;
+static int bge_tx_max_coal_bds = 10;

TUNABLE_INT("hw.bge.allow_asf", &bge_allow_asf);
+TUNABLE_INT("hw.bge.rxd", &bge_rxd);
+TUNABLE_INT("hw.bge.rx_int_delay", &bge_rx_coal_ticks);
+TUNABLE_INT("hw.bge.tx_int_delay", &bge_tx_coal_ticks);
+TUNABLE_INT("hw.bge.rx_coal_desc", &bge_rx_max_coal_bds);
+TUNABLE_INT("hw.bge.tx_coal_desc", &bge_tx_max_coal_bds);

SYSCTL_NODE(_hw, OID_AUTO, bge, CTLFLAG_RD, 0, "BGE driver parameters");
SYSCTL_INT(_hw_bge, OID_AUTO, allow_asf, CTLFLAG_RD, &bge_allow_asf, 0,
@@ -1084,7 +1094,7 @@

       bzero(sc->bge_ldata.bge_rx_std_ring, BGE_STD_RX_RING_SZ);
       sc->bge_std = 0;
-       for (i = 0; i < BGE_STD_RX_RING_CNT; i++) {
+  for (i = 0; i < bge_rxd; i++) {
               if ((error = bge_newbuf_std(sc, i)) != 0)
                       return (error);
               BGE_INC(sc->bge_std, BGE_STD_RX_RING_CNT);
@@ -3035,10 +3045,10 @@

       /* Set default tuneable values. */
       sc->bge_stat_ticks = BGE_TICKS_PER_SEC;
-       sc->bge_rx_coal_ticks = 150;
-       sc->bge_tx_coal_ticks = 150;
-       sc->bge_rx_max_coal_bds = 10;
-       sc->bge_tx_max_coal_bds = 10;
+  sc->bge_rx_coal_ticks = bge_rx_coal_ticks;
+  sc->bge_tx_coal_ticks = bge_tx_coal_ticks;
+  sc->bge_rx_max_coal_bds = bge_rx_max_coal_bds;
+  sc->bge_tx_max_coal_bds = bge_tx_max_coal_bds;

       /* Initialize checksum features to use. */
       sc->bge_csum_features = BGE_CSUM_FEATURES;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я поступил проще. Т.к. значения на практике всё равно никогда через /boot/loader.conf не меняются,

прописал их прямо в код bge_attach() вместо старых священных цифирей:

--- if_bge.c.orig       2011-01-10 22:55:30.000000000 +0300
+++ if_bge.c.new        2011-04-28 18:27:18.000000000 +0400
@@ -3028,10 +3028,10 @@

       /* Set default tuneable values. */
       sc->bge_stat_ticks = BGE_TICKS_PER_SEC;
-       sc->bge_rx_coal_ticks = 150;
-       sc->bge_tx_coal_ticks = 150;
-       sc->bge_rx_max_coal_bds = 10;
-       sc->bge_tx_max_coal_bds = 10;
+       sc->bge_rx_coal_ticks = 500;
+       sc->bge_tx_coal_ticks = 10000;
+       sc->bge_rx_max_coal_bds = 64;
+       sc->bge_tx_max_coal_bds = 128;

       /* Initialize checksum features to use. */
       sc->bge_csum_features = BGE_CSUM_FEATURES;

BGE_TICKS_PER_SEC уже установлено в максимум, поэтому оставлено без изменений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.