Управление памятью в сетевой подсистеме и ядре FreeBSD в целом

Jan 31, 2012 23:59

Эта статья будет полезна системным администраторам и программистам, работающим в ядре FreeBSD. Осмыслив изложенное здесь, можно понять, почему же бывает паника по kmem, что такое состояние keglim/zoneli, как читать непонятные циферки в выводе vmstat -m / vmstat -z, и что же такое эти самые mbuf и nmbclusters. Программистам, приступающим к работе не ( Read more... )

объяснение, freebsd

Leave a comment

Comments 20

swizard February 5 2012, 21:27:07 UTC
Спасибо огромное, крайне интересно.

А accf_http весь запрос тоже по mbuf-cluster-ам раскладывает, или там по-другому память выделяется?

Reply

nuclight February 5 2012, 21:34:48 UTC
По ним, только он не раскидывает, а читает то, что система туда уже положила.

Reply


ext_1033425 February 8 2012, 08:26:17 UTC
Как раз по теме, вот сегодня на одном из своих серверов поимел такую картину, и как и описано в статье по SSH не зайти, исчерпались mbuf ( ... )

Reply

nuclight February 8 2012, 19:56:20 UTC
Однозначно увеличивать размеры. Вот тут товарищ dadv из комментов выше на нагруженном сервере с mpd вообще 900 Мб отводит под них, например (смотреть по нагрузке и размерам ОЗУ, конечно). А динамические правила ни при чем, они не в mbuf, да.

Reply

ext_1033425 February 9 2012, 08:20:50 UTC
Спасибо. Увеличил nmbclusters до 262144, стало гораздо легче, сейчас подключу эти параметры к cacti и буду отслеживать. Вопрос в догонку, объясни плс в двух словах что есть "mbuf+clusters out of packet secondary zone in use", что это за вторая зона?

PS: Еще раз спасибо за статью, очень помогла в понимании проблемы.

Reply

nuclight April 27 2012, 00:00:44 UTC
> Вопрос в догонку, объясни плс в двух словах что есть "mbuf+clusters out of packet secondary zone in use", что это за вторая зона?

Ну, это зона с именем mbuf_packet в vmstat -z, код в netstat -m, который показывает циферки, считает их из значений счетчиков зон так:

printf("%ju/%ju/%ju mbufs in use (current/cache/total)\n",
mbuf_count + packet_count, mbuf_free + packet_free,
mbuf_count + packet_count + mbuf_free + packet_free);

printf("%ju/%ju/%ju/%ju mbuf clusters in use "
"(current/cache/total/max)\n",
cluster_count - packet_free, cluster_free + packet_free,
cluster_count + cluster_free, cluster_limit);

printf("%ju/%ju mbuf+clusters out of packet secondary zone in use "
"(current/cache)\n",
packet_count, packet_free);
Оттуда аллокейтит функция m_getcl(), возвращающая сразу mbuf с прицепленным к нему кластером (ман сообщает, что она эффективнее раздельного выделения ввиду возможности сделать это без лишнего перелочивания). ( ... )

Reply


(The comment has been removed)

ext_862972 February 15 2012, 08:03:28 UTC
Можно товарища сразу в наш уютненький срачик на наге позвать, чо уж :)

Reply

(The comment has been removed)

nuclight April 26 2012, 23:30:38 UTC
Срачик этот я ваш полистал, но где-то до 50 страницы, потом утомило. Местами дельные замечания по сетевизмам попадались, я их себе в todo утаскивал (на wiki.freebsd.org еще пока не попало), но это как жемчужины в куче навоза. Там что-то более конструктивное после той страницы встречалось ( ... )

Reply


Leave a comment

Up