netch80: (Default)
[personal profile] netch80
Никакие способности софта держанию нагрузки не работают, если поток поступает быстрее, чем приёмный процесс вообще способен его принять. Если регулировки потока нет и должны всё принимать, система будет неустойчива и будет выходить в турбулентный режим при переполнении некоторого уровня нагрузки. И неважно, Erlang это или что-то другое: или есть механизм ограничения приёма, потока, или система идёт вразнос.

Жизнерадостное игнорирование этого фактора - основная причина неадекватного поведения наших ранних версий.

А один общий mailbox процесса на все случаи приводит к тому, что управление потоком надо или делать через порты (в частности, выводя толстые потоки в TCP/SCTP/etc., даже если взаимодействуют ноды в кластере), или уметь явно говорить отправителю остановиться. Если бы было несколько очередей, с возможностью настройки каждой из них - можно было бы делать умнее; но сейчас - любое решение получается некорректным.

А существующие костыли закономерно повторяют старые добрые методы работы с очередями, реализованные в маршрутизаторах, начиная с Cisco. Только вот и они не помогают, когда процесс задумался непонятно о чём, а во входной очереди у него 730 тысяч сообщений. Здесь не кран надо менять, а всю систему.

Хочу много очередей с политиками. Размер очереди, простой дроп при заполнении, RED, GRED и так далее. Интересно, NIF'ами это можно сделать? Так, чтобы работало между нодами?

Date: 2012-05-01 10:27 am (UTC)
From: [identity profile] dadv.livejournal.com
В mpd - в том, который работает PPPoE/L2TP/etc. сервером - есть просто механизм управления входящей нагрузкой, отшибающий входящие коннекты с выдачей в лог "Daemon overloaded, ignoring request". Для этого у него как раз очередь с GRED, в которую помещаются как входящие, так и внутренние сообщения между подсистемами и пока заполненность этой очереди ниже определенного порога, принимаются все внешние сообщения (10). При заполненности очереди выше второй константы, все внешние сообщения отбиваются (60), между ними вероятность отбить линейно растёт. Длина самой очереди 8129.

Данные константы плохо работают, когда высокий темп входящих сообщений - норма. Но константы можно и потюнить. Соответствующий код с константами "зашит" в src/ppp.h (макросы SETOVERLOAD(q) и OVERLOAD()).

Profile

netch80: (Default)
netch80

January 2026

S M T W T F S
    1 23
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 7th, 2026 11:12 pm
Powered by Dreamwidth Studios