~AreEnn
~R4SAS
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest8889
HackerMan
Most2
Nausicaa
Ruskoye_911
Vort
acetone_
anon3
b3t4f4c3
fidoid_
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
tensor
un
weko_
whothefuckami
weko
[21:41:48] <orignal> weko а как у у тебя было в тестовой сети?
weko
Я разный буфер смотрел
Vort
я получил дополнительную информацию по поводу проблемы с тормозящими пингами локалхост туннелей на фоне раздачи торрентов
Vort
для её воспроизведения не обязателен торрент и не обязательна нагрузка именно на UDP. достаточно iperf3 -c запроса на какой-то внешний сервер
Vort
в результате добавления отладочного вывода к i2pd я обнаружил, что пакеты по локалхосту передаются довольно быстро, даже на фоне нагрузки внешней сети
Vort
однако i2pd по какой-то причине при внешней нагрузке начинает тормозить с ответами на локалхост запросы
Vort
вот я подготовил вырезки из логов. по ссылке данные двух пингов - при параллельной нагрузке iperf3 и без неё:
tetrimer
Общая очередь на обработку?
Vort
tetrimer: это были только запущенные узлы. у них нагрузки было минимум. там нечего было полсекунды обрабатывать
Vort
проблема, похоже, оказалась "с краю":
Vort
тормоза добавляются где-то между SSU2Server::HandleReceivedFrom и SSU2Server::ProcessNextPacket
orignal
Vort эти тормоза называются очередью между тредами )))
Vort
orignal: тред может быть занят какой-то фигнёй и ждать долгое время, мешая обрабатывать пакеты
Vort
реальной нагрузки у него быть не могло
Vort
бага вылазит сразу же после запуска узлов, когда у них ещё почти нету транзита
Vort
ну и потом тоже, понятное дело
onon1
Может там какая работа с диском?
Vort
это первая моя мысль
orignal
он не был занят он просто не получал процессор
Vort
вторая - что где-то опять какой-то flush забыт
Vort
orignal: крайне маловерятно. полсекунды блин. иногда дольше
orignal
да но машина то у тебя была занята
orignal
если проц полностью забит то запросто
orignal
насчет flush да погсмотрю
Vort
не полностью. говорю же - 50% где-то свободно
orignal
возможно
Vort
придурошная нагрузка от Tor, кстати, ядро процессора не упирает - она размазана по всем ядрам
Vort
проще сейчас скрин загрузки CPU сделать :)
Vort
orignal: вот так у меня круглые сутки: paste.i2pd.xyz/?0937b42a3d02ddd9#7wEBpP9HE4WUkY8wssnGSgh2mhc4TYwSeaeW3WAeAXd5
orignal
тут дело не в ядре
orignal
планироващик работает много сложнее
orignal
Transit Tunnels: 64452
orignal
блять
Vort
Transit Tunnels: 54153
Vort
ага
onon1
И вправду, я думал всё уже
orignal
упертые дятлы я смортрю
orignal
Transit Tunnels: 71706
onon
Давай, может, всё таки подумай над идеей не учитывать пустые туннели в лимитах...
orignal
я как раз с дедом об этом час говорю
onon
Насколько сложнее будет атакующему создавать туннели, и отправлять в них по 1 пакету, чем просто генерить пустые?
orignal
ему придется держать весь пакет ключей тогда
orignal
и прогонять 1K через них каждый раз
Vort
а я пока что уточнил место тормозов: между "GetService().post(std::bind(&SSU2Server::HandleReceivedPacket, this, packet));" и, собственно, "SSU2Server::HandleReceivedPacket"
Vort
теперь надо смотреть что блокирует поток
Vort
я там видел какие-то мьютексы
orignal
ха
orignal
ты все верно нашел
orignal
там вместо очереди поток запросов на io_service
orignal
и на каждлый запрос очередь
orignal
*мьютекс
orignal
надо переделать
orignal
на самом деле по уму там должна быть выборка пакетов из буфера
orignal
сразу много одним post
Vort
я пока что не пойму, какой именно код может тупить по несколько секунд
Vort
то есть вот где-то тупо стоит ожидание
orignal
почему ты не думаешь что код просто не вызывается?
onon1
Лось, там дед раздаёт рисёрч по итупи, пишет что в личку скинет, я у мего попросил, что-то не отвечает, можешь попросить, что бы скинул, мне интересно.
orignal
нет в том месте нет никаокго ожидания
Vort
мьютексы мьютексами, но они же накрывают какой-то код, который должен тупить
onon1
Скажи ему что я свой.
Vort
если код под мьютексом тупить не будет, то и мьютекс не будет
onon
О все, скинул
orignal
как ему скинут спрошу
orignal
Vort еще раз если код не тупит а просто не испоняется
Vort
"<~orignal> почему ты не думаешь что код просто не вызывается?" я хз как буст работает, но если ему сказали перекинуть в другой тред, но не вижу причин этого не сделать, кроме как если тот тред чем-то занят
orignal
мьютексы же просто вставляеют в список задач и убирают
orignal
он не так делает
orignal
он ставит в список задач
Vort
а другой тред выгребает, да?
orignal
а вот список задач может тупо расти и тот тред который их выполняет не справяется
orignal
другой тред их исполняет
Vort
так вот в том и суть - он может не справляться только если будет ждать. внутри задачи я имею в виду!
Vort
то есть, в тред попадает какая-то задача с ожиданием внутри и всё встаёт
orignal
так на тот тред который стаялет это не оказывает влияеия
orignal
естественно
orignal
но таких задач быть не должно
orignal
в этом треде все асихроннок
Vort
вот. значит, надо все задачи проверять
Vort
можно вообще для каждой задачи в лог писать время начала и время конца
orignal
да нету ттам ожиданий
Vort
я видел ) но хз насколько это большое ожидание
orignal
этот тред обрабатывает весь трафик
Vort
тем важнее починить
orignal
я думаю там просто очередь из заданий вырастает
orignal
что починить?
Vort
ожидание внутри треда. ну для начала это надо доказать )
orignal
а если там нет ожидания?
Vort
я сейчас покажу, что я находил. только когда найду ещё раз
orignal
а просто не справляется
Vort
orignal: значит, будет доказательство, что нету ожидания :)
orignal
ну иши ))
Vort
говорю же - узлы были без нагрузки
Vort
ага
orignal
мысль появлась
orignal
мне про это давно R4SAS говорил
orignal
что под виндой UDP send не мгновенный
Vort
да я сейчас, наверно, все задачи из треда буду оборачивать логами
orignal
думаю проблема там
orignal
и потому именно у тебя что винда
orignal
и потому нет ее с NTCP2
orignal
потому что там async_send
Vort
даже если это и так, нужны пруфы. наугад чинить такую гадость нельзя - если "убежит", будет плохо
Vort
таймеры тоже в этом треде обрабатываются что ли?
orignal
да
Vort
m_TerminationTimer, m_CleanupTimer, ...
orignal
все что на io_service этом
Vort
ок, пихаю логи дальше
Vort
всё что GetService ().post я проверил. там тормозов не нашёл
Vort
теперь таймеры буду проверять
Anonymous
orignal: why do you use 8 spaces for indentation?
Vort
tabs are not spaces
Anonymous
If you were to use just 2, that'd mean 4x more characters can fit, and is more readable than >79c
Anonymous
Vort: they consist of spaces
Anonymous
I guess you can just change it
Vort
and you can tune your IDE/editor to use whatever amount of spaces you want for them
Anonymous
ohnevermind
Anonymous
In Vi it's OK
Anonymous
Less is stupid
Anonymous
less -x2
Anonymous
sorry lol I'm stupid
Anonymous
tabs are awesome
Vort
orignal: ну вот. SSU2Server::HandleResendTimer finished, duration = 306
Vort
это миллисекунды
Vort
то есть, треть секунды в таймере просидели
Vort
всё остальное ждёт
orignal
ну это пачку выкинули
orignal
а что в этом не так?
orignal
идея вообще заключается в том что все операции с SSU2 делаются в одном треде кроме получения пакетов
orignal
что дает право не ставить мьютексы
Vort
"<~orignal> а что в этом не так?" - то, что 306мс на такую задачу - это очень дохрена
orignal
сколько там сессиий?
Vort
сотня
orignal
да что то многовато
orignal
моя гиптореза насчет send имеет под собой основания
Vort
где-то тред засыпает внутри этой функции
Vort
ну вот надо понять, где именно теперь
orignal
там только на send может
orignal
но тогда я скажу что винда это все таки мастдай
`
А я гаварил, что венда торт
`
А линух для мальчикофф
`
Пересел на венду - лишился девственности. Как ещё пруфы?
`
)00
`
weko, вот так вот.
weko
Чего
weko
#tRU
Vort
вообще-то в комментах функции написано This function is used to send a datagram to the specified remote endpoint. The function call will block until the data has been sent successfully or an error occurs.
Vort
но я всё равно буду проверять
onon1
Так надо не ждать, а ехать дальше
onon1
А отправил, не отправил - потом разберёмся
orignal
вообще то для UDP она должна заврещшаться мгоновенно
orignal
под юниксом всегда так
orignal
отправлять асинхронного датараммы это моветон
Vort
так надо разбираться, почему она тупит. только вначале перепроверю
orignal
не ну если это так то это просто ебануться
onon1
Что, и ноут свой выкинешь со злости?
Vort
я кстати проверял вообще другой программой - делал локалхостовые UDP пинги во время такой же нагрузки - никаких проблем не было
Vort
так что нормально сделать можно. только покопаться надо
orignal
нет придется #ifdef WIN32 вызывать асинхронно
Vort
надо погуглить про эту проблему
orignal
да нет асихронный send сделать можно конечер
onon
А потом ловить новые баги...
orignal
но это ж глупость
Vort
не ну если функция синхронная, то ждать от неё мгновенного выполнения только потому что так в линуксе - это тоже не совсем ок
orignal
ну понимаешь тут какое дело
orignal
я i2pd писал как умел и только под лиункс
orignal
винда появилась позднее
weko
объясните кратко в чём дело
weko
что меня аж кавычка пинганул тут
onon
Говорят винда - говно...
weko
да вроде и так понятно
onon
Вызов функции отправки пакетов завешивает весь тред, пока ядро не ответит
onon
А отвечает оно ой как не сразу
onon
Кстати, майор работает.
weko
да, я написал ацетону, он починил
onon
Слава Ацетону
orignal
weko суть что UDP send под виндой подвисает
weko
acetone тебя тут все ждут))
Vort
orignal: onon: weko: может это и не send_to виноват
orignal
а он еще живуой?
weko
orignal: да
orignal
Vort а там больше ничего нету
weko
однако не активен у нас тут
orignal
вот же ж ... девопс
Vort
SSU2Server::Send _не_ висит...
orignal
а что же тогда?
Vort
а вот надо искать, что
orignal
так может они суммарно дают
orignal
каждый по отдельности меньше миллисекунды
Vort
0мс+1мс
orignal
по хорошему надо микросекунды бы замерять
Vort
в [] таймстампы миллисекундные
Vort
[334742026] LOCATION 13 | SSU2Server::HandleResendTimer started
Vort
[334742262] LOCATION 0 | SSU2Server::Send started
Vort
что-то сожрало 236 мс ещё до вызова send`а
Vort
я наверно туплю
Vort
там же два Send`а
Vort
а я поставил вывод только в один из них
Vort
сейчас и во второй воткну
onon
Давайте сделаем бан роутера при сильном превышении "нормальной нагрузки", нормальную нагрузку будем определять как среднюю по остальным роутерам...
orignal
там же просто итератор
Vort
говорю же - не везде поставил вывод. исправляю
weko
атаки продолжаются?
Vort
пока я исправляю своё логирование, погуглил про UDP в винду и кое что вспомнил
Vort
в винде*
orignal
weko ну вот сегодня у меня 78K тоннелей было
weko
пиздец
onon1
А уменя позавчера 230к
weko
джависты что думают?
Vort
orignal: насколько я понимаю, в винде можно сделать неблокирующие сокеты. они не будут асинхронными - но будут плевать ошибку в тех случаях, когда блокирующий должен заблокироваться
Vort
короч я на 99% уверен что именно это и надо сделать
Vort
перевести сокет в неблокирующий режим
orignal
так везде можно
Vort
ну и всё. будет как в линуксе
orignal
они в asio и так неблокирующие
Vort
тогда дальше копать надо
orignal
onon1 ты че лимит в миллион поставил?))
onon1
Ну да
Vort
я просто думаю, что они могут быть асинхронные, но блокирующие
orignal
<degs> stackoverflow.com/questions/70717081/high-udp-communication-latency-because-of-audio-rendering-windows-c
orignal
во
orignal
насколько я знаю asio вегда открывает как неблокирущий
acetone
weko: orignal: что-то стряслось? почему все ждут?)
Vort
10-15мс. хе. тут секунды...
weko
acetone: когда к нам вернёшься!
orignal
не знаю
orignal
что то все тебя спрашивают ))
onon1
Ацетон, спасибо, что починил майора сайт
onon1
Как без рук был.
acetone
onon1: веко маякнул)
orignal
Vort суть в том что проблема видимо есть
acetone
orignal: славное было время на зоне, вспоминаю порой!)
acetone
сидел по 16 часов в ирке
weko
acetone: повысь лимит на роутерах
weko
по туннелям
weko
хы)
orignal
ну да а теперь у тебя клеймо девопс ))
orignal
acetone ага обновись до транка и повысь лимит транзитов до 100K
acetone
weko: сейчас зайду на сервер, говори чего кого менять, я уже плохо помню
Vort
так не только лимит важен. вообще обновлять надо узел
weko
limits.transitunnels
acetone
Vort: здравствуй! Раз в месяц-два захожу накатывать новую версию i2pd на сервере
orignal
но в страх только 64K
acetone
благо, р4сас еще собирает под Debian 10!
Vort
:)
weko
65535 поставь если не последний коммит у тебя
weko
всё равно хватать не будет но лучше так
acetone
weko: сделал
weko
ну и вебконсоли чтобы не рестартать
orignal
слушайте так может это как раз onon1 и забивает сеть тоннелями?))
orignal
не ну там бы жеалтельно собрать чтобы баги пофиксить
onon
Черт, меня спалилию
acetone
weko: ага, дело говоришь. Роутер стоит 2.50.2, так что обновляться тоже не на что (из готового)
orignal
из транка надо
orignal
вот откуда такое количество тразитов в принципе
weko
постепенно увеличивается количество
orignal
мне кажется столько во всей сети нет
weko
явно кто то вручную меняет
orignal
и что то мне подсказывает кто ))
weko
а мне что-то подсказывает, что мы знаем под какими никами заходил данный персонаж
acetone
orignal: нашел у себя виртуалку с deb10 и достаточным кол-вом ресурсов для сборки. Собираю транк
orignal
ага
relaybot
13mittwerkz: ого ацетон тут
weko
acetone: ответь в лс пожалуйста
orignal
могу собранный дать для 10
onon1
Ацетон, чтобы нормально работало, там нужно ещё изменения в коде сделать.
onon1
А так не будет нормально работать под нагрузкой.
relaybot
13mittwerkz: acetone почему ты так редко появляешься?
orignal
работает же
relaybot
13mittwerkz: здесь
Vort
таки подтверждаю, что это Send тупит: paste.i2pd.xyz/?d19cd4112b8d604b#F37FigSkziszgT75G34xetNo6FKuZ1zQkHRQ18ecG3LK
Vort
теперь попробую понять, почему
acetone
orignal: о, будет супер) у меня до сих пор не собрался еще
acetone
как выйдет Debian 13, надо будет собраться с силами на обновление
orignal
ты качать будешь долььше чем соерется
acetone
orignal: все, собрался)
acetone
тысячи чертей, собрал с дебагом. совсем все позабыл)
orignal
ну а чем мешает дебаг?>
orignal
у меня все с дебагом
orignal
без дебага только если для собрки не хваатет памяти
Vort
cpu больше жрать будет скорее всего
orignal
столько же
acetone
все, сейчас буду рестартоваться)
Vort
такс. добавил socket.non_blocking (true); посмотрю, что из этого выйдет
onon
А жабоводы под виндой какие функции дёргают?
onon
Может у них такая же проблема?
Vort
а там абстракции скорее всего
weko
У жабоводов это делает джавамашина
Vort
надо в саму java лезть чтобы понять
orignal
дак это
orignal
переделать на асихронные не проблема
Vort
orignal: короч я думаю, надо переделывать SSU2 или на неблокирующие или на асинхронные
orignal
так переделай для пробы
Vort
и это же не просто вызовы поменять, надо иметь нормальную логику для ситуаций, когда система перегружена
Vort
я переделал на non_blocking
Vort
сейчас проверяю
orignal
лучше на async_send
Vort
чем лучше?
onon
чем non_blocking, очевидно же
orignal
тем что твой non_blocking будет кидать ошибку
Vort
в общем, с non-blocking бага нету. ничего не залипает
Vort
а вот как переделать на async - я пока что не знаю
orignal
так ты проверь результат sendto
Vort
ну я понимаю, что он _может_ кидать и иногда будет. но у меня пока что пинг просто стал нормальным и всё
Vort
я не агитирую за non-blocking
Vort
не против проверить и async
Vort
просто ещё не разбирался с ним
orignal
заменить на async_sendto
orignal
но там надо буфер сохранять
Vort
так коллбек же наверно надо?
Vort
ну вот...
orignal
коллбэк можно пустой
orignal
давай я попробую поставить non_blocking
orignal
разумеется через boost::asio
Vort
так я уже ставил, уже проверил
Vort
лучше скажи, что именно для async надо
Vort
"<~orignal> но там надо буфер сохранять"
Vort
вот это я хз как
orignal
ты boost::asio испльзовал?
Vort
да
Vort
boost::asio::ip::udp::socket& SSU2Server::OpenSocket (const boost::asio::ip::udp::endpoint& localEndpoint)
Vort
после socket.set_option (boost::asio::socket_base::send_buffer_size (SSU2_SOCKET_SEND_BUFFER_SIZE));
Vort
socket.non_blocking (true);
Vort
и всё
orignal
отлично
orignal
теперь все таки сделай проверку результата sendto
Vort
надо и async протестировать
weko
продолжаю тему python и i2p, я думаю что основная проблема будет не в ресурсах CPU, а RAM ... пока не знаю насколько.
orignal
ксттаи есть же
orignal
SSU2: Send exception
Vort
ну да
Vort
наверно поэтому у меня ничего и не сдохло
orignal
а в логах нету?
Vort
ну я debug логи не включал
Vort
просто проверил, что пинги не тупят и всё
orignal
там error будет
orignal
предлагаю non_blocking под #ifdef win32 сделать
Vort
не нашёл Send exception
Vort
но это не значит, что его не будет
Vort
кстати так просто на async перейти не получилось
orignal
m_SocketV4.send_to (bufs, to, 0, ec);
Vort
там 4 параметр не ошибка, а какой-то токен
orignal
он тебе этот ec поставит
Vort
так что даже не компилируется
orignal
ну понятное длео
orignal
главная проблема там буфера
orignal
так что давай сделай с #ifdef и коммить
Vort
знаю, что сделаю. возьму чистый код, воткну туда non_blocking и поставлю на основной узел
orignal
да
orignal
хуже не станет в любом случае
Vort
уж там то вылезет ошибка под нагрузкой
Vort
если она вообще умеет это делать
orignal
но для UDP слать асихронно бы не хотелось
Vort
ну нормальный non-blocking - это тоже годится. надо делать перепосылки при ошибке
orignal
для UDP то зачем?
Vort
а вот такой половинчатый, что забиваем на ошибки - это хз
orignal
перепосылки этот как раз надо асинхронно
orignal
я считаю что для UDP правильно если мы забиваем на ошибки
Vort
если мы знаем, что нифига не послалось, то не надо это обходными путями выяснять
orignal
другое дело что если их много надо завершать сессию
orignal
возможно
Vort
но вполне вероятно что такой вариант случается раз в год
Vort
а если ещё и буфер побольше поставить...
weko
раз в год и палка стреляет ))
Vort
сейчас она стреляет каждую минуту... )
weko
я к тому, что всё равно нельзя оставлять
weko
что бы там не было )
Vort
если можно снизить шанс косяка в 100000 раз, то это вполне стоит сделать
Vort
а идеальный вариант - это я всегда поддерживаю. но обычно он - в будущем
weko
надо если есть баг его фиксить полностью
weko
Vort: ну вот записать надо тогда
orignal
давай PR короче
onon1
А можно пофиксить симптом, и в коде дабавить TODO =)
Vort
orignal: так, может, и в линуксе бывают такие же зависания?
Vort
чем в линуксе помешает non-blocking?
Vort
по логике, если он и так не блокируется, то хуже не станет :)
orignal
не будет ли жор проца
Vort
потестировать стоит
weko
проще проверить
Vort
вот и я сейчас тестировать буду. перезагружаю узел
Vort
пока что ексепшенов не вижу
Vort
у меня подозрение, что blocking может вообще не использовать весь буфер
Vort
то есть, тормоза, возможно, были из-за переполнения буфера размером в 1 пакет
orignal
да вполне
orignal
так что давай PR
Vort
так надо линуксы проверить
Vort
может и там лучше будет
Vort
можно сделать PR для всех платформ, затем проверить линукс и если станет хуже - воткнуть ifdef
orignal
да. давай так и сделаем
orignal
вмержил
orignal
счас проверим
weko
так может лучше сначала провенрить а потом сливать?
Vort
блин ) ну это же моя везучесть. полезли ексепшены )
Vort
[28/Feb/2024:18:58:56 +0200]@172/error - SSU2: Send exception: Операция на незаблокированном сокете не может быть завершена немедленно to 217.155.203.186:54122
Vort
но я всё равно продолжаю тест
Vort
лог потом только чистить придётся
Vort
узел, кстати, работает нормально
Vort
NTCP2 ( 2367 ) SSU2 ( 2354 )
Vort
так что вполне можно просто заткнуть ошибку пока что
onon1
А релиз скоро?
orignal
надо деда спросить когда у них
onon1
Если время есть, лучше бы сделать обработчик, если нет, TODO =)
orignal
weko ну откатим если что
orignal
и что должен делать этот обработчик?
onon1
Перепосылоать
Vort
пока что единственный побочный эффект - загаженный лог )
orignal
пееросылать это значит асихронная отправка
orignal
что медленно
Vort
интересно, что ексепшены идут волнами
Vort
вот сейчас 3 минуты нет ни одного
orignal
завсит от загрузки твоей сети значит
Vort
так я делал тест с iperf3, полностью канал упирал - не было ексепшенов
Vort
сейчас забит процентов на 60 - иногда лезут
Vort
скорее всего, дело в загрузке CPU
onon
Что дольше, попытаться переотправить тот же пакет, или пересобрать его, пока другие отправляются?
Vort
и, может, это можно вылечить большим буфером. надо будет и это проверять
orignal
да проверь поставь в 1 мег
Vort
4 поставлю. уже ставил. и посмотрю, уменьшится ли количество ексепшенов
orignal
работает под лиукнсом нормально
onon
Под нагрузкой проверял?
orignal
на той машине большая нагрука именно на SSU
Vort
а вот это важно
Vort
If no buffer space is available within the transport system to hold the data to be transmitted, sendto will block unless the socket has been placed in a nonblocking mode.
orignal
то есть таки размер буфера
Vort
вот сейчас на 4 мегах тестирую
Vort
за 5 минут аптайма не вылезло. жду дальше
onon1
Я же говорил, ацетон нагрузку держать не будет.
orignal
так это я отвалился
orignal
а не он
Vort
интересно. сейчас у меня на узле заметно больше Sent:, чем раньше
orignal
ну логично
Vort
допустим, Transit 1600 Recv 1800 Sent 2000
orignal
потому что тред не тормозит
Vort
а раньше так не было. получается, ssu2 у меня был конкретно поломан
orignal
у меня всегда Sent было больше
Vort
кстати, 40 минут аптайма - ни одного ексепшена. смотрю дальше
Vort
это на 4 меговых буферах
orignal
отлично
orignal
но надо только начиная с O ставить
Vort
можешь как-то узнать, при каких значениях буферов бывают креши?
Vort
чтобы понимать, какие варианты доступны
orignal
дело не крэшах
Vort
ну... можно и в цикле ставить, как я предлагал, но всё же
orignal
а в памяти
orignal
ты ставишь когда по 4мега
orignal
это +8 к потребляемой памяти
Vort
так ты ж говорил что может ексепшен кинуть при установке большого буфера. или не может?
Vort
надо оба фактора учесть
orignal
так проверять
orignal
там же можно код ошибки передавать
Vort
про память согласен - вопрос в том, сколько не жалко
orignal
ну если кто то ставит X значит ему не жалко
orignal
а L наоброт жалко
Vort
ну и надо понизить уровень лога для эксепшена "Операция на незаблокированном сокете не может быть завершена немедленно"
Vort
он нужен, но не как error
Vort
может, warn
Vort
"<~orignal> но надо только начиная с O ставить" можно начать с такого варианта, а потом подкручивать значения при необходимости
orignal
да можно просто info
Vort
так сколько для X стоит ставить? 1,2,4 мега?
onon
Через 5 лет будем чинить проблему больших задержек из-за переполнения буфера, никто и не вспомнит, зачем буфер увеличивали.
Vort
это же UDP, тут переполнение не из-за перегрузки сети, как я понимаю
Vort
а из-за тормозов внутри операционки
Vort
короч я не думаю, что будет хуже, чем сейчас
orignal
для X 4
orignal
для L 128 K
orignal
остальные промежутоные
onon1
Под нагрузкой сыпет ошибками на стандартном буфере
orignal
мы на работе ставим буфера 4M но это только для мультикаста
Vort
или просто по лимиту bandwidth. + защита от бешеных значений
Vort
будет место на 1 секунду лага
Vort
onon1: линукс? какой флаг/скорость?
onon1
XR (2167.23 KiB/s)
orignal
Vort минимум 128K максимум 4M остальное пропроциальнально bandwidth
onon1
Debian
onon1
212992
Vort
значит, когда не сыпало, то узел лагал. понятно
orignal
ага давайте буфер поднимать
orignal
вводим две контанты MIN и MIAX
Vort
"минимум 128K максимум 4M остальное пропроциальнально bandwidth" хороший вариант
orignal
все что P и выше 4M
orignal
L всегда 128K
Vort
подозреваю, что когда другие узлы заметят, что мой узел уже не глючит, то быстренько его в лимит упрут )
orignal
так у меня все упелись
onon1
На 1703936 байтах ексепшены, вроде сыпать перестал. Но это пока не точно.
orignal
это почти 2 мега
Vort
onon1: стала ли на узел выше нагрузка с non-blocking + новым буфером, чем была до этого?
onon1
Пока различий не вижу
Vort
у меня чуть выше трафик и чуть выше загрузка CPU. видимо, раньше перепосылки SSU2 лагали, "экономя" CPU
Vort
ещё у меня до этого были "шипы" на графике коннектов. теперь нету. но это не точно
Vort
кажется, что узел "мягче" работает. возможно, эффект confirmation bias )
onon1
Вот уже пол часа нету ошибок с буфером 1,7 продолжаю наблюдение.
Vort
у меня полтора часа нету на буфере 4М
onon1
Я пытаюсь нащупать нижнее значение
onon1
На 16 метрах тоже ошибок нет.
onon1
Но опять же, нагрузка не максимальная.
Vort
для максимальной нагрузки может понадобиться несколько дней аптайма и несколько пережитых волн атак
Vort
я заметил, что другие узлы "прилипают" к моему, заметив, что он держит атаку
Vort
опять же не точно
Vort
наверно из-за долго висящих сессий
onon1
Я пока разницы на узлах "с" и "без" особо не вижу.
Vort
речь о non+blocking + большой буфер?
onon1
Да
onon1
Может ещё разгонится, нужно больше времени. Через сутки более реальные результаты будут.
onon1
Может на линуксах этот эффект не столь значителен.
Vort
а может и не в ОС дело. у меня же комп постоянно нагружен
Vort
вот и лезут всякие баги
orignal
ну так что рещили сколько ставим минимум?
Vort
это вообще очень со многим софтом на моём компе так
onon
Хм, попробую наверное собрать на слабой машинке.
orignal
а я на P4
Vort
orignal: да нормальный вариант 128к минимум
Vort
совместим с нынешним состоянием )
Vort
а для более скоростных узлов уже идут эксперименты )
orignal
у меня есть лучше идея
orignal
сделать параметр в конфиген
Vort
вообще, мне кажется, что надо решить, какой мы позволяем максимальный лаг
Vort
orignal: дефолтное значение _очень_ нужно
Vort
а переопределить конфигом особо прошаренным юзерам - это можно
Vort
дефолтное динамическое то есть
Vort
в зависимости от буквы
orignal
от bandwidth на самом деле
Vort
ну да
Vort
просто я к тому, что надо и дефолт и переопределение
orignal
uint64_t GetBandwidthLimit () const { return m_BandwidthLimit; };
orignal
даже функция есть
onon1
1703936 похоже мало для Х
orignal
а сколько надо? таки 4M?
onon1
Может тогда заодно и TCP "разогнать"? Сделать опцию в конфиге, кто на отдельном сервере разворачивает, включит...
onon1
Я пока увеличил ещё в 2 раза до 3,4 пока тестирую.
orignal
неее с TCP нельзя
orignal
там же на каждую сессиб свой сокет
onon1
Почему?
orignal
это много памяти надо
Vort
с TCP 4 тыщи коннектов да 4 мегабайта - это будет 16 гигов RAM жрать. наверно )
Vort
не проверял :D
orignal
да и не надо там столько
Vort
а вот те шипы коннектов, о которых я говорил и которых теперь нету: paste.i2pd.xyz/?a1f0021b984948ac#uRNm3t23Z1SdZpP4CLsZuyEdmw3eFizAy6CCdT8DwhP
Vort
я и раньше замечал, как у меня из-за раздач торрентов отваливались SSU2 и они же видимо переходили в NTCP2 сразу же
Vort
скорее всего, это и создавало шипы на графике
orignal
я счас дегса озадачил
onon1
tcp_tw_reuse интересная опция...
orignal
у нас бывали жалобы на задержки фида по мультикасту
orignal
мы все валили на рыночные спайки
onon
3,4 тоже не хватает. Попробую 4
orignal
старб сразу 16 не мучайся ))
onon1
на 16 пока не видел ошибок
onon
Роутер настроил мне 52 входящих и 63 исходящих туннеля....
orignal
в одном деситнейшине?
orignal
ну я же вчера объяснял почему
onon
Я просто думал их больше 16 не будет
orignal
нельзя задать больше 16
orignal
но если у тебя 16 то в какой то момент будет 32
orignal
потому что перестраиваются
onon
Когда туннель testFailed он перестраивается
onon
А потом он возвращается в строй
orignal
нет
onon
У меня да
orignal
он еще одного теста ждем
orignal
если второй раз не зафелился то возвращается
onon
=)
onon
Ну я заметил такую закономерность, может в коде оно не так.
onon
А, тогда всё правильно, у меня они просто не фейлятся.
onon
Поймал интересное исключение SSU2: Send exception: Invalid argument to 0.0.0.0:0
orignal
а ну это старая проблема
orignal
откуда оно берется пока не понтяно
onon
Акакеры акакуют
orignal
неее это где то проверка не стоит
orignal
дед говорит у них буфер в 256K
onon
Дед прав, проблема bufferbloat начала появляться, когда в свичи и хабы начали пихать буфер больше метра.
onon
Но там были медленные процы...
onon
А у нас, вроде, быстрые?
onon
Или не всегда?
onon
Я тут подумал, если у нас 3к активных коннектов, и они нам одновременно пришлют по 1КБ, получится 3 метра?
onon
На 4 метрах также периодически высыпает ошибки
onon
Не знаю, следствие ли это атаки туннелями
onon
Количество туннелей растет, ошибки в лог сыплются.
onon
Поднял до 5.
orignal
мне кажется выше 1M поднимать не стоит