AlKov Posted March 23, 2021 Posted March 23, 2021 Странная проблема на FreeBSD 11.1-RELEASE #0 r321309, mpd5.8, PPPoE - не поднимает более 500 сессий.. kern.ipc.maxpipekva: 267767808 net.graph.maxdgram: 8388608 net.graph.maxdata: 65536 net.graph.maxalloc: 65536 net.graph.recvspace: 8388608 kern.ipc.maxsockbuf: 83886080 В конфиге mpd set link max-children 5000 Чертовщина какая-то.. На древней машине с FreeBSD 9.0 и mpd5.6 с теми же конфигами без проблем взлетают 800 и более. Вставить ник Quote
vlad11 Posted March 23, 2021 Posted March 23, 2021 Это нетграф. Там при числе примерно 530 узлов текстовый формат сменяется бинарным. Я репортил этот баг, только недавно пофиксили. И, кстати, FreeBSD 9.0 и 11.1 давно EOL Вставить ник Quote
AlKov Posted March 23, 2021 Author Posted March 23, 2021 @vlad11, т.е. другого решения, как переход на FreeBSD 12.2 и выше не существует? Кстати, а на FreeBSD 12.0-RELEASE-p13 сей баг тоже существует? У меня на ней тоже mpd живет, но там более 450 сессий пока нет. Но в перспективе, возможно и перевалит за 500.. Вставить ник Quote
vlad11 Posted March 23, 2021 Posted March 23, 2021 Вы можете попытаться сделать бэкпорт на свою версию. 54 минуты назад, AlKov сказал: Кстати, а на FreeBSD 12.0-RELEASE-p13 сей баг тоже существует? Ну, посмотрите версию src. Патч от 8 февраля 2021 года. Вставить ник Quote
Ivan_83 Posted March 24, 2021 Posted March 24, 2021 https://reviews.freebsd.org/D23840 скорее всего ляжет без портирования, в нетграче редко что то меняется. Ну или банально ручками case NGM_BINARY2ASCII: { int bufSize = 20 * 1024; /* XXX hard coded constant */ поменять 20 на 256 :) Вставить ник Quote
AlKov Posted March 24, 2021 Author Posted March 24, 2021 Брэк, господа! :-) Это 9 часов назад, vlad11 сказал: Вы можете попытаться сделать бэкпорт на свою версию. и это 9 часов назад, vlad11 сказал: Ну, посмотрите версию src. и это 5 часов назад, Ivan_83 сказал: Ну или банально ручками увы, не мой уровень.. Если возможно, как-нибудь попроще? В первом случае переустановка ОС на Release 12.2 (October, 2020) решит проблему, или этот баг и там есть? Во втором случае (с FreeBSD 12.0-RELEASE-p13), переустановка крайне нежелательна (машинка уже в продакшен). freebsd-update поможет? Или в ней этот баг отсутствует? Как убедиться, подскажите пожалуйста. Вставить ник Quote
AlKov Posted March 24, 2021 Author Posted March 24, 2021 А все-таки, однозначно ли это в netgraph-е проблема? 13 часов назад, Ivan_83 сказал: в нетграче редко что то меняется. Может какую-то системную переменную ОСеписатели кастрировали? Что-то связанное с количеством интерфейсов, например? А в самом netgraph-е можно что-либо "покрутить", не залезая в ядро? Вставить ник Quote
Ivan_83 Posted March 24, 2021 Posted March 24, 2021 13 часов назад, AlKov сказал: увы, не мой уровень.. Если возможно, как-нибудь попроще? Пригласите специалиста :) 13 часов назад, AlKov сказал: В первом случае переустановка ОС на Release 12.2 (October, 2020) решит проблему, или этот баг и там есть? Во втором случае (с FreeBSD 12.0-RELEASE-p13), переустановка крайне нежелательна (машинка уже в продакшен). freebsd-update поможет? Очевидно что нет, ибо только зафиксили, оно в main и скорее всего в 13 портировали, в 12 - хз, если да, то не сильно вероятно что оно бинарниками уже есть. 6 часов назад, AlKov сказал: Может какую-то системную переменную ОСеписатели кастрировали? Что-то связанное с количеством интерфейсов, например? А в самом netgraph-е можно что-либо "покрутить", не залезая в ядро? Почитайте хотя бы с переводчиком, дали же ссылку на описание проблемы и решения (в виде патча). Вставить ник Quote
AlKov Posted March 25, 2021 Author Posted March 25, 2021 12 часов назад, Ivan_83 сказал: Пригласите специалиста :) "Пригласил" (себя любимого), другие не идут.. :-) 12 часов назад, Ivan_83 сказал: Почитайте хотя бы с переводчиком, дали же ссылку на описание проблемы и решения (в виде патча). Почитал. И "с" и "без".. Дело в том, что еще с самого начала у меня появились сомнения в том, что мы обсуждаем одну и ту же проблему. Проявление проблемы, описанное в багрепорте, не совпадает с тем, что наблюдается в моем случае. У меня нет ни kernel panic, нет даже падения mpd, вообще ничего явно криминального нет! Все как бы работает! Я бы вообще не заметил проблемы, если бы не знал, что к mpd должно подключиться около 800 клиентов, а в реале подключается только 500. Далее.. Сравниваем блоки в файле ng_base.c, предлагаемые для изменения с двух NAS-ов: 1. с древнего на FreeBSD 9.0 и mpd5.6, который 800 соединений держит и не кашляет. case NGM_BINARY2ASCII: { int bufSize = 20 * 1024; /* XXX hard coded constant */ ..... } else { if ((error = ng_unparse(argstype, (u_char *)binary->data, ascii->data, bufSize)) != 0) { NG_FREE_MSG(resp); break; } 2. со свежепоставленной FreeBSD 12.2 -... дублировать не имеет смысла - один-в-один (не целиком, конечно же, только то, что предлагается исправить). Однако, древний не кашляет без этого патча!. К сожалению, не смог посмотреть на FreeBSD 11.1 (где все началось). К моменту появления желания взглянуть, ее уже не существовало - снес и поставил 12.2. 12.2 еще не тестировал, пока не все готово. Но есть очень сильные подозрения, что грабли будут лежать там же.. Вот отсюда и истекают все мои "глупые предположения".. Или они все же действительно глупые? Растолкуйте пожалуйста, если не сложно. P.S. Глянул в предлагаемые для патча блоки ng_base.c на FreeBSD 12.0-RELEASE-p13 - аналогично древнему с 9-ки. P.P.S. Решил все-таки пропатчить модуль на свежей системе. Есть вопрос - я правильно понимаю, что без пересборки ядра не обойтись? Давно не занимался подобной "ерундой", забыл уже, что и как оно делается.. :-) Вставить ник Quote
No_name Posted March 25, 2021 Posted March 25, 2021 5 часов назад, AlKov сказал: P.P.S. Решил все-таки пропатчить модуль на свежей системе. Есть вопрос - я правильно понимаю, что без пересборки ядра не обойтись? Надо пересобирать. Вставить ник Quote
AlKov Posted March 25, 2021 Author Posted March 25, 2021 1 час назад, No_name сказал: Надо пересобирать. А если так - #cd /usr/src/sys/modules/netgraph #patch ... #make obj && make depend && make && make install Вроде как все собралось и mpd модуль загрузил # kldstat Id Refs Address Size Name 1 22 0xffffffff80200000 227ad00 kernel 2 1 0xffffffff82722000 7268 ioat.ko 3 1 0xffffffff8272a000 2150 ng_socket.ko 4 4 0xffffffff8272d000 9bd0 netgraph.ko 5 1 0xffffffff82737000 3070 ng_mppc.ko 6 1 0xffffffff8273b000 1e3 rc4.ko 7 1 0xffffffff8273c000 1770 ng_ether.ko 8 1 0xffffffff8273e000 4368 ng_pppoe.ko 9 1 0xffffffff82743000 1860 uhid.ko 10 1 0xffffffff82745000 2908 ums.ko Единственно пока не пойму, почему не загружен ng_car.ko.. Или он потом загрузится, когда авторизуется хотя бы один клиент и получит параметры шейпера? Вставить ник Quote
Ivan_83 Posted March 25, 2021 Posted March 25, 2021 12 часов назад, AlKov сказал: Но есть очень сильные подозрения, что грабли будут лежать там же.. vmstat -z Ещё можно посмотреть, но если будут - будем дальше копать. 12 часов назад, AlKov сказал: P.S. Глянул в предлагаемые для патча блоки ng_base.c на FreeBSD 12.0-RELEASE-p13 - аналогично древнему с 9-ки. Достаточно было в гит посмотреть чтобы увидеть около нулевую активность в нетграфе за последние годы :) Максимум пару модулей добавили и мелочь правили. 12 часов назад, AlKov сказал: P.P.S. Решил все-таки пропатчить модуль на свежей системе. Есть вопрос - я правильно понимаю, что без пересборки ядра не обойтись? Давно не занимался подобной "ерундой", забыл уже, что и как оно делается.. :-) Прямо подвиг :) Я обычно http://www.netlab.linkpc.net/download/software/os_cfg/FBSD/13/base/root/bin/fbsd_fast_update.sh запускаю и оно мне само всё пересобирает и переустанавливает, в зависимости от машины и актуальности содержимого ccache занимает нынче от 4 минут до ...примерно часа, хуже на райзенах не было пока, не считая моментов апгрейда с 12 на 13, когда там кросскомпилятор собирается а ccache грохнут. Это у меня такая рутинная штука, вот взбрело мне в голову обновить систему, я исходники проапгрейдил и скрипт запустил, пока по инету капашился - уже готово. http://www.netlab.linkpc.net/download/software/os_cfg/FBSD/13/base/root/bin/clean_system.sh эта штука вычищает старый мусор после обновления, но её нельзя юзать отдельно от предыдущего скрипта и его зависимостей, потом что оно выставляет время последней модификации на одно и тоже всем файлам перед установкой, а этот скрипт ищет всё что старее, и на обычной системе он снесёт нахрен что попало :) Соседний скрипт для портов - на время не смотрит, он по базе чекает все файлы на предмет их принадлежности к установленным портам. 5 часов назад, AlKov сказал: Единственно пока не пойму, почему не загружен ng_car.ko.. kldload ng_car в помощь :) Вставить ник Quote
AlKov Posted March 26, 2021 Author Posted March 26, 2021 12 часов назад, Ivan_83 сказал: vmstat -z Ещё можно посмотреть, но если будут - будем дальше копать. А что конкретно там смотреть? 12 часов назад, Ivan_83 сказал: Прямо подвиг :) Нууу.. Кому и кобыла невеста! (с) дворник Тихон. :-) P.S. Немного оффтопа.. Ну вот объясните, пожалуйста мне тупому, как дальше работать, если с каждым обновлением ОС, предыдущие версии объявляются в EOL с закрытием доступа к дистрибутивам, а в новых версиях ломают все, до чего могут только дотянуться! Вот небольшой примерчик (Вас, Ivan_83, кстати касается ;-) ). Беру отсюда пример конфига loader.conf для 12-й фри.. Вбиваю параметр - hw.igb.rx_process_limit="4096" и.. Догадайтесь с трех раз! Да-да! Именно так - sysctl: unknown oid 'hw.igb.rx_process_limit' В 11-й фре есть такая буква в этом слове, в 12-й - немА! И, возвращаясь к теме, после этого начинаем искать пропажу под фонарем, только потому, что там светлее! Вставить ник Quote
No_name Posted March 26, 2021 Posted March 26, 2021 3 часа назад, AlKov сказал: Ну вот объясните, пожалуйста мне тупому, как дальше работать, если с каждым обновлением ОС, предыдущие версии объявляются в EOL с закрытием доступа к дистрибутивам Они сюда переезжают. Вставить ник Quote
AlKov Posted March 26, 2021 Author Posted March 26, 2021 2 часа назад, No_name сказал: Они сюда переезжают. А с портами как быть? Заниматься онанизмом с svn, или.. ? Вставить ник Quote
No_name Posted March 26, 2021 Posted March 26, 2021 Ох уж эти порты... Ну онанизм он так и так ручной :) Ну тут каждый сам для себея решает как быть дальше. Я под свою старую версию биллинга мускул с сороцов собрал и норм, дальше работает. Ну а что еще делать... Вставить ник Quote
Ivan_83 Posted March 26, 2021 Posted March 26, 2021 13 часов назад, AlKov сказал: А что конкретно там смотреть? Столбик FAIL. 13 часов назад, AlKov сказал: Ну вот объясните, пожалуйста мне тупому, как дальше работать, если с каждым обновлением ОС, предыдущие версии объявляются в EOL с закрытием доступа к дистрибутивам, а в новых версиях ломают все, до чего могут только дотянуться! Вот небольшой примерчик (Вас, Ivan_83, кстати касается ;-) ). Беру отсюда пример конфига loader.conf для 12-й фри.. Вбиваю параметр - hw.igb.rx_process_limit="4096" и.. Догадайтесь с трех раз! Да-да! Именно так - sysctl: unknown oid 'hw.igb.rx_process_limit' 1. Зачем вам дистрибутив старья? 2. Изменения происходят потому что есть развитие. В данном случае люди избавлялись от кода который дублируется в куче дров и вынесли его в iflib. Честно говоря я у себя до сих пор тоже это в конфигах не переправил, лень и отсутствие необходимости. 3. Вы этим пользуетесь на сервере, куда два раза в год заглядываете, а у меня дома всё на фре, и десктопы и коди и сервер - думаете я не знаю про изменения?) Но в целом ситуация такая: или ты в курсе каждый день/неделю/месяц или раз в 1-2-5 лет тебе нужно капитально всё переучивать/переделывать. Поймите, это не конечный продукт, это платформа, для более или менее (админов) разработчиков. Хотите стабильности - вам ближе к PFSence и прочим дистрам для конечных юзеров. 8 часов назад, AlKov сказал: Заниматься онанизмом с svn, или.. ? Уже на git. Порты в ближайшее время официально смигрируют, но зеркало на гитхубе уже очень актуальное. Сама система на гит переехала как раз перед НГ. Вставить ник Quote
vlad11 Posted March 26, 2021 Posted March 26, 2021 17 часов назад, AlKov сказал: А что конкретно там смотреть? Нууу.. Кому и кобыла невеста! (с) дворник Тихон. :-) P.S. Немного оффтопа.. Ну вот объясните, пожалуйста мне тупому, как дальше работать, если с каждым обновлением ОС, предыдущие версии объявляются в EOL с закрытием доступа к дистрибутивам, а в новых версиях ломают все, до чего могут только дотянуться! Вот небольшой примерчик (Вас, Ivan_83, кстати касается ;-) ). Беру отсюда пример конфига loader.conf для 12-й фри.. Вбиваю параметр - hw.igb.rx_process_limit="4096" и.. Догадайтесь с трех раз! Да-да! Именно так - sysctl: unknown oid 'hw.igb.rx_process_limit' В 11-й фре есть такая буква в этом слове, в 12-й - немА! И, возвращаясь к теме, после этого начинаем искать пропажу под фонарем, только потому, что там светлее! Потому, что вы копируете эти советы с древних хаутушек (в основном Евгения Гроссбейна) и не думаете, для чего они нужны. Например, 11 ветка очень сильно отличается от 12 и 12.2 в плане планировщика, а это очень сильно сказалось на сетевых прерываниях и работу сети под большой нагрузкой. И тюнинг к вашему (однопоточному) mpd5 вдруг перестает работать. Вставить ник Quote
vlad11 Posted March 26, 2021 Posted March 26, 2021 В 25.03.2021 в 21:28, Ivan_83 сказал: Прямо подвиг :) Я обычно http://www.netlab.linkpc.net/download/software/os_cfg/FBSD/13/base/root/bin/fbsd_fast_update.sh Много очень спорных вещей. В /usr/src/Makefile указан порядок обновления. Не хватает обработок ошибок при сборки мира или ядра. make toolchains придумали не от хорошей жизни. Ну, и нет конфига ядра под разные версии ОС. Из свежих чудес. Не удавалось напрямую смигрировать с 11 ветки на 12.2-STABLE. Удалось только через 12.0-Release (без патчей) смигрировать. Вставить ник Quote
Ivan_83 Posted March 27, 2021 Posted March 27, 2021 2 часа назад, vlad11 сказал: Много очень спорных вещей. Оно для покрытия моих личных нужд а не для решения проблем в планетарных масштабах. Я лет 10 обновлялся копипастя строчки из "памятки", это вот замена моего ручного труда. Уточню: эта штука решает проблему когда нужно обновить систему в пределах минорного релиза, для 11-12-13 оно не достаточно, мне там вокруг пришлось ещё пачку команд ввводить чтобы обновится, хотя конечно большая часть это моя специфика. 2 часа назад, vlad11 сказал: Не хватает обработок ошибок при сборки мира или ядра. set -e же везде, ну а то что мусор останется в /tmp - мне не страшно. 2 часа назад, vlad11 сказал: make toolchains Был нужен мне лишь однажды при мажорном обновлении, кажется 10-11. 2 часа назад, vlad11 сказал: Ну, и нет конфига ядра под разные версии ОС. http://www.netlab.linkpc.net/download/software/os_cfg/FBSD/13/base/usr/src/sys/amd64/conf/ тут искал? Для 12 - 13 заменить на 12.0 в URL. Остальные конфиги не сохранились. 2 часа назад, vlad11 сказал: Из свежих чудес. Не удавалось напрямую смигрировать с 11 ветки на 12.2-STABLE. Мне по работе надо собирать 12 фрю, у меня после миграции на 13 сборка сломалась, починилось после обновления 12 до более свежей. А вперёд - я слишком часто пересобираю чтобы были проблемы, для живых систем не более 3-4 месяцев обычно, для тех что в виртуалках валяются и на дисках для тестов - может и пару лет быть, но обычно пофик. И формально, можно и не мигрировать, это же не венда, можно просто поставить рядом и перетащить конфиги и поставить тот же набор портов. Вставить ник Quote
AlKov Posted March 27, 2021 Author Posted March 27, 2021 Ну что ж.. Вернемся к теме.. 12.2-RELEASE amd64 mpd5.9 Модуль netgraph (ng_base.c) пропатчен и скомпилирован #cd /usr/src/sys/modules/netgraph #make obj && make depend && make && make install Ядро не трогал. loader.conf kern.maxusers=512 net.inet6.ip6.auto_linklocal=0 net.graph.maxdata=65536 net.graph.maxalloc=65536 kern.maxfiles=204800 hw.igb.rxd=4096 hw.igb.txd=4096 hw.igb.max_interrupt_rate=32000 hw.igb.enable_msix=1 hw.igb.rx_process_limit=1000 net.isr.defaultqlimit=4096 net.inet.ip.fw.default_to_accept="1" ipfw_load="YES" sysctl.conf net.inet.tcp.delayed_ack=0 net.inet.ip.portrange.last=30000 net.inet.tcp.sendspace=65535 net.inet.tcp.recvspace=65535 net.local.stream.recvspace=65535 net.local.stream.sendspace=65535 net.inet.ip.forwarding=1 net.inet.tcp.always_keepalive=0 kern.corefile="/var/tmp/%U.%N.core" kern.ipc.shmall=65536 kern.ipc.shmmax=268435456 kern.ipc.nmbclusters=262144 kern.ipc.somaxconn=4096 kern.ipc.maxsockbuf=167772160 kern.maxfiles=204800 kern.maxfilesperproc=200000 kern.ipc.soacceptqueue=16384 net.inet.tcp.maxtcptw=40960 net.inet.tcp.msl=30000 net.inet.tcp.syncookies=1 net.inet.tcp.nolocaltimewait=1 kern.ipc.shm_use_phys=1 net.inet.icmp.icmplim=5000 net.inet.ip.intr_queue_maxlen=5000 hw.pci.enable_msix=1 hw.pci.enable_msi=1 kern.maxfiles=204800 net.graph.maxdgram=1024000 net.graph.recvspace=1024000 hw.pci.enable_msix=1 hw.pci.enable_msi=1 kern.maxfiles=204800 net.graph.maxdgram=8388608 net.graph.recvspace=8388608 net.route.netisr_maxqlen=4096 vmstat -z vmstat -z ITEM SIZE LIMIT USED FREE REQ FAIL SLEEP UMA Kegs: 248, 0, 132, 3, 132, 0, 0 UMA Zones: 2512, 0, 149, 0, 149, 0, 0 UMA Slabs: 80, 0, 12307, 43, 13026, 0, 0 UMA Hash: 256, 0, 7, 8, 14, 0, 0 4 Bucket: 32, 0, 181, 4569, 172186,3008, 0 6 Bucket: 48, 0, 42, 4025, 2554, 0, 0 8 Bucket: 64, 0, 85, 4999, 171472, 21, 0 12 Bucket: 96, 0, 113, 3577, 144879, 0, 0 16 Bucket: 128, 0, 238, 2149, 114420, 1, 0 32 Bucket: 256, 0, 1097, 1123, 304171, 9, 0 64 Bucket: 512, 0, 331, 1301, 19754, 395, 0 128 Bucket: 1024, 0, 328, 700, 17229, 1, 0 256 Bucket: 2048, 0, 493, 187, 246768, 997, 0 vmem: 1856, 0, 5, 1, 5, 0, 0 vmem btag: 56, 0, 58400, 1595, 58659, 427, 0 Далее нигде FAIL нет. Приведенные в дампе не изменялись в процессе подключений клиентов. Итог: ~470 PPPoE соединений max.. Возвращаю древний 9.0-RELEASE amd64, mpd5.6 ~795 PPPoE соединений.. vmstat -z с 9-ки. (uptime 9:43 up 24 days, 19:22) vmstat -z ITEM SIZE LIMIT USED FREE REQ FAIL SLEEP UMA Kegs: 208, 0, 88, 14, 88, 0, 0 UMA Zones: 1408, 0, 88, 0, 88, 0, 0 UMA Slabs: 568, 0, 6010, 1249, 188881, 0, 0 UMA RCntSlabs: 568, 0, 8046, 1005, 82081, 0, 0 UMA Hash: 256, 0, 0, 0, 3, 0, 0 16 Bucket: 152, 0, 22, 103, 177, 0, 0 32 Bucket: 280, 0, 56, 126, 289, 5, 0 64 Bucket: 536, 0, 53, 80, 771, 101, 0 128 Bucket: 1048, 0, 1186, 2, 54419,68923, 0 Что я сделал не так? Вставить ник Quote
AlKov Posted March 27, 2021 Author Posted March 27, 2021 Кстати.. 8 часов назад, vlad11 сказал: Потому, что вы копируете эти советы с древних хаутушек (в основном Евгения Гроссбейна) Вообще-то, этой "древней" хаутушке меньше года от роду.. ### Rozhuk Ivan 2009.06 - 2020 ### sysctl.conf ### 12.x # $FreeBSD: stable/12/sbin/sysctl/sysctl.conf 337624 2018-08-11 13:28:03Z brd $ И автор совсем не Гроссбейн, а какой-то очень знакомый. ;-) Вставить ник Quote
vlad11 Posted March 27, 2021 Posted March 27, 2021 53 минуты назад, AlKov сказал: Вообще-то, этой "древней" хаутушке меньше года от роду.. Которая основана на других, которым уже минимум лет 5. 1 час назад, AlKov сказал: Что я сделал не так? нужен вывод netstat -m под нагрузкой Вставить ник Quote
AlKov Posted March 28, 2021 Author Posted March 28, 2021 22 часа назад, vlad11 сказал: нужен вывод netstat -m под нагрузкой # netstat -m 8585/11920/20505 mbufs in use (current/cache/total) 8471/7233/15704/1017858 mbuf clusters in use (current/cache/total/max) 177/5136 mbuf+clusters out of packet secondary zone in use (current/cache) 0/22/22/508929 4k (page size) jumbo clusters in use (current/cache/total/max) 0/0/0/150793 9k jumbo clusters in use (current/cache/total/max) 0/0/0/84821 16k jumbo clusters in use (current/cache/total/max) 19091K/17534K/36625K bytes allocated to network (current/cache/total) 0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters) 0/0/0 requests for mbufs delayed (mbufs/clusters/mbuf+clusters) 0/0/0 requests for jumbo clusters delayed (4k/9k/16k) 0/0/0 requests for jumbo clusters denied (4k/9k/16k) 0 sendfile syscalls 0 sendfile syscalls completed without I/O request 0 requests for I/O initiated by sendfile 0 pages read by sendfile as part of a request 0 pages were valid at time of a sendfile request 0 pages were valid and substituted to bogus page 0 pages were requested for read ahead by applications 0 pages were read ahead by sendfile 0 times sendfile encountered an already busy page 0 requests for sfbufs denied 0 requests for sfbufs delayed # netstat -nr | grep ng | wc -l 465 Трафика около 400 Мбит/с. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.