[freebsd] Re: [freebsd] Re: [freebsd] Re: [freebsd] nmbclusters и автотюннинг

2013-07-19 Пенетрантность Oleksandr V. Typlyns'kyi
Yesterday Jul 19, 2013 at 14:55 greenh wrote:

> Я так понял, что он сам тюнится исходя из  kern.ipc.maxsockets и прочая..

 Вот тут есть ссылка на патч и ревизии current:
 http://lists.freebsd.org/pipermail/freebsd-stable/2013-July/074129.html

 Ребята из iXsystems хотели MFC этого до 9.2, но не разрешили:
 http://lists.freebsd.org/pipermail/freebsd-stable/2013-July/074232.html

-- 
WNGS-RIPE


Re: [freebsd] nmbclusters и автотюннинг

2013-07-19 Пенетрантность Anton Yuzhaninov

On 07/19/13 15:41, greenh wrote:

Дамы и господа, подскажите плз
До меня дошли слухи, что  nmbclusters уже нет нужды настраивать, т.к. его
допилили до автотюнинга. Насколько это правда?


В current есть автотюнинг - на основе объема RAM.

Но по моему опыту пользы от лимита nmbclusters к сожалению мало.

Если в nmbclusters поставить маленькое значение, то когда кластера закончится с 
большой вероятностьсю получится зависшая система (с процессами висящими в 
состоянии zoneli*). Некоторые разработчики утверждают что система зависать в 
такой ситуации не должно, но на практике - зависает.


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


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


Если MFC в 9-ку еще не сделали - просто напишите в loader.conf что то вида
kern.ipc.nmbclusters=2097152

Причем надежды, что когда то такое поведение изменится практически нет.

Если немножко углубиться в детали - в ядре память может аллоцироваться либо с 
флагом M_NOWAIT либо M_WAITOK


M_NOWAIT означает, что malloc совсем не должен блокироваться и если память с 
первой попытки не удалось аллоцировать - возвращает NULL. Применяется в 
обработчиках прерываний и других местах, где нельзя блокироваться. Может иногда 
возвращать NULL, даже если свободная память еще есть.


M_WAITOK - никогда не возвращает NULL - если памяти нет, то просто блокируется - 
надолго (пока не появится свободная память), иногда на вечно (пока не нажмут 
конпку reset).


В сетевом стеке в большинстве мест как раз используется M_WAITOK со всеми 
вытекающими последствиями.


В идеале для сетевого стека нужен работающий M_TRYWAIT - можно блокироваться, но 
не на вечно, а на некоторое ограниченное время. Но сейчас такого нет (#define 
M_TRYWAIT M_WAITOK).


Основной аргумент разработчиков против реализации M_TRYWAIT - если его 
реализовать так, что он будет блокировать на ограниченное время, тогда malloc(9) 
и все что вокруг него (UMA) все таки будет в некоторых случаях возвращать NULL. 
Тогда syscall в котором это произошло, например write(2) или read(2) должно 
будет вернуть ошибку ENOBUFS, а в мире очень много софта, который никак не 
обрабатывает ошибки возвращаемые syscall-ами. И лучше иногда виснуть, чем ломать 
работу криво написанных приложений (которые пока работают).


Ну и когда не нужно проверять, что malloc вернул NULL это удобно (для 
программиста), поэтому M_WAITOK используют везде, где его можно использовать.


[freebsd] Re: [freebsd] Re: [freebsd] nmbclusters и автотюннинг

2013-07-19 Пенетрантность greenh
Я так понял, что он сам тюнится исходя из  kern.ipc.maxsockets и прочая..


19 июля 2013 г., 14:45 пользователь Sayetsky Anton написал:

> releng/9.1 - неправда. По крайней мере, с дефолтными настройками.
>


[freebsd] Re: [freebsd] nmbclusters и автотюннинг

2013-07-19 Пенетрантность Sayetsky Anton
releng/9.1 - неправда. По крайней мере, с дефолтными настройками.


[freebsd] nmbclusters и автотюннинг

2013-07-19 Пенетрантность greenh
Дамы и господа, подскажите плз
До меня дошли слухи, что  nmbclusters уже нет нужды настраивать, т.к. его
допилили до автотюнинга. Насколько это правда?