IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2024/04/12
~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+relaybot
DUHOVKIN
Leopold
Most2
Nausicaa
Vort
Xeha
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob_afk
poriori_
profetikla
soos
un
weko
whothefuckami_
orignal if (slowTunnel && (int)v.size () < (num/2+1))
orignal v.push_back (slowTunnel);
orignal короче если быстрых тоннелей набирается меньше половины лизсета то добавляется медленный
onon И ты эти две строчки два дня писал?
orignal нет они там всегда были
orignal я просто счас посмотрел
onon Ясно, тогда можно приступать к U роутерам.
orignal тоннели да посмотрб чтобы не было U-U пиров
onon Сначала просто чередование сделать, а потом уже пропосал.
orignal естественно
Vort Потестировал я алгоритм CC от onon более тщательно, на этот раз с графиками.
Vort Получились вот такие выводы:
Vort 1. Разрастания очередей, от которых алгоритм должен был защитить, никуда не делись (горбы на графиках).
Vort 2. При этом, добавились тормоза - алгоритм может по минуте держать низкое значение окна без видимых причин.
Vort 3. Иногда, правда, регуляция выглядит правильной. Но, как минимум в некоторых случаях, это просто эффект от искусственного ограничения скорости, маскирующего проблемы алгоритма.
onon Ох уж эти любители черрипикинга...
onon 1. Этот алгоритм действительно намеренно создаёт очередь. Один раз, при быстром старте и попытке определения BDP. Как только он определяет перегрузку, ср��зу дрейнит и после дрейна включает BDP.
onon Во всех остальных случаях это не мы создаём очередь, а какой-то кубик, перегружающий наш туннель.
onon 2. Это правда, у меня в тестах так же большую часть времени работает на минимальной скорости. И во всех случаях это срабатывает защита от перегрузки, когда RTT неожиданно резко подскакивает.
onon Я намеренно добавил ограничения скорости для тестов. Вот рядовой случай: шлю я в туннель равномерно 10кб/с пинги 800-900 всё касиво, и вдруг резко получаю RTT 2622-2741-2313
onon Естественно, у меня срабатывает защита, я сбрасываю скорость.
onon Но так как уже минимум, так и продолжаю слать 10 кб/с, и через 2 сек RTT возвращается к нормальным значениям
onon Вот, как думаешь, это мои пакеты так перегрузили туннель или кто?
onon Если бы ты добавил вывод BW, графики стали бы понятнее.
onon2 У этого алгоритма есть пока один случай, когда он может сильно перегрузить туннель. Это после быстрого старта, когда включается дрэйн, и отключается защита.
onon2 Если в этот момент кто-то ещё будет перегружать туннель, мы всё равно будем туда слать пакеты с постоянной скоростью.
Vort "намеренно создаёт очередь. Один раз, при быстром старте" предлагаю посчитать количество горбов на первом графике
Vort "<onon> Ох уж эти любители черрипикинга..." я провёл 5 полноценных тестов и 1 короткий, нормально графики выглядели только один раз - по последней моей ссылке
Vort "<onon> Естественно, у меня срабатывает защита, я сбрасываю скорость." - я говорю и всё время говорил только про глобальный лимит, выше которого алгоритм не даёт поднять скорость в принципе
onon2 Вот тебе новая версия, над которой сейчас работаю, та уже не актуальна.
onon2 Тодними лимит как тебе нравится
Vort "<onon> Вот, как думаешь, это мои пакеты так перегрузили туннель или кто?" - похожий эффект проявляется при смене туннеля
onon2 Погоди, что-то не то я походу скинул
Vort "<onon2> Тодними лимит как тебе нравится" - я считаю, что его вообще быть не должно, как нету сейчас в алгоритме основной ветки
onon2 Ну так это я для своих тестов делал
onon2 Вообще, возможность ограничить скорость полезна
Vort так если тесты успешны, то стоит лимит убрать. если неуспешны, то думать, как сделать алгоритм, не зависящий от лимита
Vort мне кажется, что этот алгоритм без лимита будет глючить ещё больше, чем сейчас
Vort то есть, это мешает сделать полноценное сравнение с нынешней версией
onon2 Вывод BW сможешь сделать?
onon2 Потому что там скорость регулируется не совсем через окно
Vort если ты про те значения, которые код считает, то я помню, они какую-то херню показывали, поэтому я их не учитывал
Vort они мне на локалхосте килобайты/сек выдавали, при том что реально упиралось в глобальный лимит полмега/сек
Vort короч если скажешь, какую переменную выводить, то добавлю. но для начала стоит перепроверить адекватность расчётов
onon Да, там расчеты были неадекватные
onon Да в общем в плейнтестах и остаются сейчас неадекватные
onon Я пока не переделал.
Vort ок, перепроверю
Vort так есть переменная, которую можно на график сразу вывести?
Vort просто из iperf3 нормально данные я не вытащу
Vort он показывает через задницу
onon Есть но локальная, можешь сделать глобальной
onon int bw = 1000000 * 1.73 / m_PacingTime;
Vort и вообще я там какие-то адские глюки с новым кодом наблюдал
Vort "<onon> Есть " - этого достаточно
Vort я могу просто m_PacingTime залогировать
Vort а дальше вывернуть его как надо при обработке
onon Можно и так
Vort а окно же от PacingTime считается?
Vort просто в чём тогда отличие будет?
Vort сейчас сам гляну
onon Ну так через RTT считается
onon Если большой RTT окно будет больше
Vort а, всё, понял
Vort надо значит и окно и bw выводить
onon Что логично при нормальной работе, но плохо при заторах
onon Поэтому я там пока сделал искусственный лимит в 6000RTT
onon "<onon> Вот, как думаешь, это мои пакеты так перегрузили туннель или кто?" - похожий эффект проявляется при смене туннеля - ну так при смене туннеля, он пытается разогнаться снова
Vort так ты даже if (freshTunnel) убрал O_o
Vort и это только наши смены, а есть ещё смены той стороны
Vort а тьфу, прошу прощения, не убрал, а просто не добавил
onon Именно
onon Я пока не переносил на последний транк
Vort boost::posix_time::milliseconds(m_RTT*2) - так у меня не соберётся. надо к int привести
Vort ну это я сам сейчас сделаю
Vort onon: новая версия вообще зависла нахрен. может, конечно, я поломал логированием, но маловероятно
Vort ResendTimer timeout каждую секунду и всё, на протяжении нескольких минут
onon Должен каждые две секунды
onon Ну так с лизсетами что-то
Vort так он ничего не перепосылал, похоже
Vort до зависания были "Streaming: packet 73 was not ACKed, resend"
Vort а потом просто таймер и таймер
onon Хмм, такое может быть если RTT улетел в небеса
Vort логи нужны или просто дальше пробовать график получить (вдруг повезёт)?
onon Рестартуй
Vort ок
Vort второй тест получился не показательный - на тормозные туннели попал. разве что горб посредине можно пронаблюдать:
Vort третий тест тоже медленно пошёл. наверно надо узел будет перегружать, чтобы побыстрее туннель выбрался
onon Это от времени суток зависит
onon Когда все туннели перегружены
Vort хз. рейт нормальный, транзитный трафик нормальный. наверно просто не везёт
Vort обычные скорости (по данным алгоритма) сейчас получаются 6-18 KB/s
Vort через X узлы до 50 KB/s получилось разогнаться
Vort похоже, что это не сеть перегружена, а алгоритм стал осторожнее. но я ещё буду пробовать - может попаду на скоростной туннель
Vort и это я на 1 хопе тестирую, кстати (1+1/1+1)
onon Конкретно этот вариант на коротких туннелях не тестировал, не могу ничего сказать. Другие варианты на коротких туннелях работали хуже чем на длинных.
onon Но бывает через 6 рандомных 1мб/сек жмёт на минимальном ртт
onon А так да, обычно около 12кб/с
Vort лимит же 700КБ, так что 1 не может (не должно) быть
Vort в общем, сейчас "повезло" и один раз проскочила нормальная скорость, попробую графики сделать
onon Где такой лимит в 700
onon Я что-то наверно накосячил?
onon MAX_STREAM_SPEED = 2000000; // in bytes/sec
Vort у меня так на локалхосте было: PacTime=2640 bw=655kb/s
onon Это может на старой версии?
Vort хотя в реальности локалхост может около 15 мегабайт/сек выдать
Vort короч я вначале график сейчас сделаю
onon Если на этой, значит математика кривая
onon Там с интами и округлением проблемы, я не переделывал ещё.
Vort вот на реальной сети тоже на 140 секунде упёрло в 600 KB
Vort можешь сам на локалхосте проверить
Vort вероятно, идёт упор в разрешение таймера
Vort вот я что нагуглил: "Evidently when wait is called with very small duration of 500 uSecs or lower the processor delays the thread scheduling by atleast 1 millisec."
Vort на iOS, похоже, тоже есть такая же особенность: stackoverflow.com/questions/25967760/boost-deadline-timer-expires-not-accurate-in-ios
Vort поэтому я и говорил, что по одному пакету слать не стоит
Vort и поэтому предполагал, что новый алгоритм в принципе не сможет дать высокую скорость
Vort хоть десятки мегабайт/секунду, наблюдаемые на локалхосте, в реальной сети будут не скоро, такой тест хорошо позволяет проявить недоработки алгоритма
onon2 Херня, только что разогнал до 1 мбайта/с через 1 хоп.
onon2 Больше чем 1.1мб действительно разгоняться не хочет.
onon2 1.2 пока максимум
onon2 Ну проц, действительно немного напрягается на таких скоростях
onon2 В любом случае, 1 мбайт/с с минимальным пингом лучше, чем нынешний кривой кубик
onon2 Если упираемся в лимит по таймеру - будем слать небольшими пачками по 2-3 пакета.
Vort я сделал ещё один тест. да, скорее всего, _пока что_ упора в таймер нету. просто где-то что-то клинит
onon2 В коде одну цифру поменять
Vort вот первый локалхостовый тест ^
Vort вот второй ^. сейчас ещё разок прогоню
Vort заодно проверил - в CPU упора нету, тестовые узлы где-то по проценту CPU потребляют
onon2 RTT маленький, часто сбрасывает туннель не дожидаясь АСКа. Может сделать минимальную константу...
onon2 если не получили АСК за время стд::макс(100мс, 2*РТТ); Меняем туннель
onon2 Может ещё и сверху ограничить
Vort я проблему со сбросами из-за превышения RTO видел и с нынешним алгоритмом. поэтому и добавил MIN_RTO
Vort меня больше удивляет именно заклинивание:
Vort то есть, хоть иногда 2000 KB/s и проскакивает, алгоритм склонен залипать на PacTime=2640 bw=655kb/s
onon2 Да это просто я от балды быстрый старт сделал. m_PacingTime -= m_PacingTime / (m_ChangePacingTime);
onon2 Там когда уже инкремент большой делится на большое число, и округляется до нуля
onon2 Просто математику переделывать нужно, на более точную
onon2 В плейнтестах такая же фигня, а то и похуже.
onon2 Там скорее всего где-то деление на ноль выскакивает.
Vort ок, понятно. но хоть в данном случае проблем с таймерами не было, на более высоких скоростях они вполне могут вылезти, а ограничиваться 700 килобайтами - это явное ухудшение по сравнению с тем, что есть сейчас
onon2 Ну так я и не предлагаю ЭТО вставлять в код.
onon2 Это просто демонстрация, как примерно должно всё работать.
Vort ну особенность в том, что для проверки, как оно работает, ценно иметь возможность упереться локалхостовым тестом в возможности процессора
Vort я это по многим программам знаю - только идёт упор по CPU - уйма багов вылазят
Vort ну и подозреваю, что этот лимит также "срезает" некоторые горбы
Vort то есть, для оценки, насколько хорошо алгоритм борется с горбами, лимита быть не должно
onon2 Ну подыми, тесты же для того и нужны
onon2 Сделай 1мкс
orignal так че будем поднмать лимит окна?
onon Нет
orignal ну ладно
orignal а то у меня у госткойна все время 128
onon U узлы починяй
onon Ну локально себе можешь и поднять
onon Хуже не станет
orignal это починю
orignal чтобы следущий за U не был U
onon И чтоб концом не был U
orignal а чем он плох на конце исходящего?
onon Мы не знаем что на конце входящего
orignal знаеми
orignal там то всегда R
orignal причем ipv4
onon В любом случае плохо. Потому что каждый коннект будет через интродьюсера с каждым клиентом. А если только в середине, тольк один раз при построении туннеля
orignal почему?
onon Ну вот я сервер, у меня конец U, все кто хочет на мой сервис попасть, будут ломиться через интродьюсера
orignal U же всегда будет делать исходящие
orignal U у тебя только на исходящих
onon А, ну значит я буду медленно коннектится к каждому клиенту
orignal а почему меделнно?
orignal скорее всего ты вообще будешь по NTCP2
onon Да, что-то я не так посчитал, но всё равно мне что-то не нравится
orignal вот кстати да
orignal когда выбираем пару проверять лиз есои есть в базе не U ли он