поправки к "100-200 тысяч соединений" для FreeBSD 7 ( i386 и amd64 )

MZ zuborg at advancedhosters.com
Mon Jun 2 15:49:21 MSD 2008


В пн, 02/06/2008 в 14:55 +0400, Alexey V. Karagodov пишет:
> On 02.06.2008, at 14:13, MZ wrote:
> 
> > В вс, 01/06/2008 в 05:09 +0400, Alexey V. Karagodov пишет:
> >> Keywords: freebsd tcp optimization tune speed socket mbuf sendfile  
> >> sysctl
> >> From: Сысоев Игорь Владимирович <http:// 
> >> www.sysoev.ru>
> >> Date: Mon, 1 Oct 2007 14:31:37 +0000 (UTC)
> >> Subject: FreeBSD для обслуживания 100-200 тысяч  
> >> соединений
> >
> >
> >> ######## /usr/src/sys/i386/conf/CUSTOM
> >>
> >>
> >> include GENERIC
> > сложно скопировать и почистить ? чем  
> > инклудить весь мусор
> >
> >
> >> device pf
> >> device pflog
> >> device pfsync
> >> device carp
> >>
> >>
> >> options ALTQ
> >> options ALTQ_CBQ
> >> options ALTQ_RED
> >> options ALTQ_RIO
> >> options ALTQ_HFSC
> >> options ALTQ_CDNR
> >> options ALTQ_PRIQ
> >> options ALTQ_NOPCC
> >>
> >>
> >> #options QUOTA
> >> options IPSEC
> > оригинально, [GIANT] поддержку квот  
> > выключили но ipsec оставляем, для
> > чего ?
> да, для этих примеров надо было  
> почистить файлики, согласен
> кстати, если IPSEC не использовать,  
> ничего плохого не будет?
> кроме потребления памяти
Будет, особенно если на ядрах версии <= 6.x компилить просто IPSEC
вместо FAST_IPSEC.


> >
> >
> >> #options IPSEC_FILTERGIF
> >> device crypto
> >> device cryptodev
> >>
> >>
> >> options DEVICE_POLLING
> >> #options HZ=1000
> >>
> >>
> >> #options SCHED_ULE
> >>
> >>
> >> options KVA_PAGES=512
> >>
> >>
> >> options VM_KMEM_SIZE=1073741824
> >> options VM_KMEM_SIZE_MAX=1073741824
> >>
> >>
> >> options PANIC_REBOOT_WAIT_TIME=60
> >>
> >>
> >> ident CUSTOM
> >>
> >>
> >>
> >>
> >> ######## /boot/loader.conf
> >> verbose_loading="YES"
> >> loader_logo="beastie"
> >> #ng_ether_load="YES"
> >> #linux_load="YES"
> >> accf_data_load="YES"
> >> accf_http_load="YES"
> > а в ядро добабавить сразу нельзя ?
> не всегда нужно. работает точно также
> или нет?
В случае именно с accept-фильтрами не знаю, а вот с другими драйверами
наблюдал проблемы если они были загружены модулями, например с tap(4).

> >> net.inet.tcp.syncache.hashsize=1024
> >> net.inet.tcp.syncache.bucketlimit=100
> >> net.inet.tcp.tcbhashsize=4096
> >> kern.ipc.nsfbufs=10240
> >
> > тут
> >> vm.kmem_size=1G
> > без options KVA_PAGES=512 на i386 будет паника
> это я вроде включал в конфиг ядра i386
Да, но давать советы по увеличению kmem до 1Г не предупреждая что этого
нельзя делать на GENERIC ядре....

> >
> >> vm.kmem_size_max=1G
> >>
> >>
> >> ######## /etc/sysctl.conf
> >> net.inet.tcp.blackhole=1
> >> net.inet.udp.blackhole=1
> >
> >
> >> kern.ipc.nmbclusters=262144
> > Зачем такой гемор, ограничения на  
> > полгига при ядерной памяти на гиг ?
> > Потом подымай если что..
> > Ставим kern.ipc.nmbclusters=0 в /boot/loader.conf и все  
> > работает.
> что здесь означает 0 ?
Отсутствие ограничений на размер зоны. Причем установка sysctl-а
kern.ipc.nmbclusters в loader.conf влияет и на другие sysctl-ы, в
отличие от смены этого sysctl после загрузки ядра.


> >
> >> kern.ipc.somaxconn=4096
> >> kern.ipc.maxsockets=204800
> >> kern.maxfiles=204800
> >> kern.maxfilesperproc=200000
> >> net.inet.ip.portrange.first=1024
> >> net.inet.ip.portrange.last=65535
> >> net.inet.ip.portrange.randomized=0
> >> net.inet.tcp.recvspace=8192
> >
> >> net.inet.tcp.sendspace=16384
> > Зачем юзеру спешить что-то качать,  
> > пусть понаблюдает как картинки одна
> > за одной возникают на странице.  
> > Особенно если он на другом континенте.
> > Или сервер досят сразу после  
> > загрузки ? Впечатление что автор не  
> > нашел
> > другого способа избежать паники от  
> > нехватки ядерной памяти.
> приступ паранойи был, вот и уменьшил
> сколько рекомендуете поставить? сенд -  
> 256К или 512К ? страницы у нас в среднем  
> такие
128K в самый раз. Это чтоб быстро работало. Чтоб не падало в панику от
нехватки памяти надо смотреть куда она девается и там уже чинить.


> >> net.inet.tcp.maxtcptw=40960
> >> net.inet.tcp.msl=30000
> >> net.inet.tcp.syncookies=1
> >> net.inet.tcp.nolocaltimewait=1
> >> net.inet.tcp.fast_finwait2_recycle=1
> >>
> >>
> >>
> >>
> >> ######## после всех мытарств, работа  
> >> системы весьма порадовала.
> > Для трафика до двухсот мегабит в  
> > принципе сойдут и такие настройки.
> ваши рекомендации? пол гигабита,  
> гигабит, 5, 10 гигабит
Скажем так, гигабит на ваших рекомендация если и потянет то очень
специфичного трафика, вот что я имел ввиду. Для того что-бы разгнать
сервер до 1Г надо другие настройки (в каждом случае свои)

> >
> >> ######## комменты только приветствуются.
> >> ######## огромное пожелание к Игорю  
> >> включить сей опус с поправками и
> >> комментариями (кои лично меня ОЧЕНЬ  
> >> интересуют) в документацию на
> >> своём сайте.
> >
> >
> >> ######## данные конфиги являются  
> >> результатом печального опыта. если не
> >> указывать vm.kmem_size_max, ядру нехватит  
> >> памяти, для всей этой
> >> красоты.
> > Ядру надо увеличивать память, не  
> > вопрос. Как и уменьшать её лишнее
> > потребление. Но не банальным же  
> > уменьшением tcp-буфера.
> если "почистить" GENERIC, то много памяти  
> не выиграешь. по сравнению с тем  
> гимором, который можно получить
> что там такого ужасного есть в GENERIC?  
> debug_symbols ? лучше пусть будут
Причем тут память занимаемая кодом. Чистка ядра нужна не для того чтобы
освободить память занимаемую драйвером, а чтобы снизить нагрузку от
вызова кода который все равно не используется, например квоты, или
ipsec, или драйвера usb.
И уж в корне неверно уменьшать потребление памяти через уменьшение
буферов tcp, разве что сервер жестко досят и по другому никак. Это тоже
самое что уменьшить в апаче MaxClients до 100 чтоб сервер не свопило (а
некоторые ещё и советуют KeepAlive отключать, жесть)


> >
> >> ######## успехов
> >
> 


More information about the nginx-ru mailing list