h3ll1 Posted September 28, 2019 (edited) · Report post time ip route show proto boot | awk '{print $1,$2,$3,$5}' у меня: real 0m0.741s user 0m0.026s sys 0m0.712s Quote time ip r |wc 780643 7025778 54490718 real 0m7.476s user 0m3.821s sys 0m8.112s Идея - поиск статических маршрутов в RT. Edited September 28, 2019 by h3ll1 Share this post Link to post Share on other sites
jffulcrum Posted September 29, 2019 · Report post libnetlink, rtnetlink . Придется пописать немного Share this post Link to post Share on other sites
vop Posted September 29, 2019 · Report post Можно сюда смотреть: /proc/net/route Share this post Link to post Share on other sites
NewUse Posted September 30, 2019 · Report post netstat -rn скорее всего у ip route есть аналогичная опция: не ресолвить адреса. хотя там какое-то адское число записей, тогда скорее всего не поможет... Share this post Link to post Share on other sites
taf_321 Posted September 30, 2019 · Report post ip r ничего не резолвит. Основное время сжирает цикл вывода информации о сотен тысяч маршрутов в текстовом виде. Как выше правильно сказали, писать самодельную приблуду, которая будет получать маршруты из libnetlink и без перевода в текст отфильтровывать что нужно. Share this post Link to post Share on other sites
vop Posted September 30, 2019 · Report post lib/rt netlink будет чуток быстрее, /proc/net/route - заметно проще для не очень опытных программеров. :) Share this post Link to post Share on other sites
taf_321 Posted September 30, 2019 · Report post Совсем не чуток. При обработке такого большого количества маршрутов текстовая форма представления совершенно лишняя. И при чтении /proc/net/route можно выхватить неопределенное состояние, когда во время считывания маршруты поменялись. Share this post Link to post Share on other sites
vop Posted September 30, 2019 · Report post 3 hours ago, taf_321 said: Совсем не чуток. При обработке такого большого количества маршрутов текстовая форма представления совершенно лишняя. Ну да, я как бы об этом и намекал. 3 hours ago, taf_321 said: И при чтении /proc/net/route можно выхватить неопределенное состояние, когда во время считывания маршруты поменялись. Я не эксперт в кернеле, но сейчас заглянул, и похоже там при открытии /proc/net/route делается дамп через тот же netlink, а потом он в цикле рисуется вывод. Мне кажется, вряд ли динамический список может измениться "на лету". Ну да ладно, это не принципиально. Spoiler static int fib_route_seq_show(struct seq_file *seq, void *v) { struct fib_route_iter *iter = seq->private; struct fib_table *tb = iter->main_tb; struct fib_alias *fa; struct key_vector *l = v; __be32 prefix; if (v == SEQ_START_TOKEN) { seq_printf(seq, "%-127s\n", "Iface\tDestination\tGateway " "\tFlags\tRefCnt\tUse\tMetric\tMask\t\tMTU" "\tWindow\tIRTT"); return 0; } prefix = htonl(l->key); hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { const struct fib_info *fi = fa->fa_info; __be32 mask = inet_make_mask(KEYLENGTH - fa->fa_slen); unsigned int flags = fib_flag_trans(fa->fa_type, mask, fi); if ((fa->fa_type == RTN_BROADCAST) || (fa->fa_type == RTN_MULTICAST)) continue; if (fa->tb_id != tb->tb_id) continue; seq_setwidth(seq, 127); if (fi) seq_printf(seq, "%s\t%08X\t%08X\t%04X\t%d\t%u\t" "%d\t%08X\t%d\t%u\t%u", fi->fib_dev ? fi->fib_dev->name : "*", prefix, fi->fib_nh->nh_gw, flags, 0, 0, fi->fib_priority, mask, (fi->fib_advmss ? fi->fib_advmss + 40 : 0), fi->fib_window, fi->fib_rtt >> 3); else seq_printf(seq, "*\t%08X\t%08X\t%04X\t%d\t%u\t" "%d\t%08X\t%d\t%u\t%u", prefix, 0, flags, 0, 0, 0, mask, 0, 0, 0); seq_pad(seq, '\n'); } return 0; } Мне интересно, за сколько у топикстартера выполнится команд: cat /proc/net/route > /dev/null Share this post Link to post Share on other sites
h3ll1 Posted October 1, 2019 (edited) · Report post time cat /proc/net/route > /dev/null real 0m1.589s user 0m0.016s sys 0m1.569s Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz cat /proc/cpuinfo | grep MHz |wc 12 48 240 On 9/29/2019 at 1:22 PM, vop said: Можно сюда смотреть: /proc/net/route ето же то само ip r.... Edited October 1, 2019 by h3ll1 Добавил текст Share this post Link to post Share on other sites
h3ll1 Posted October 1, 2019 (edited) · Report post On 9/30/2019 at 10:33 PM, vop said: Мне интересно, за сколько у топикстартера выполнится команд: time ip route show proto boot 1.2.3.0/24 via 1.2.3.4 dev eth2.37 1.2.3.32/28 via 1.2.3.4 dev eth2.37 real 0m0.736s user 0m0.032s sys 0m0.700s time cat /proc/net/route | grep eth2.37 eth2.37 00F43E5C 1AEB92C2 0003 0 0 0 00FFFFFF 0 0 0 eth2.37 18EB92C2 00000000 0001 0 0 0 FCFFFFFF 0 0 0 eth2.37 20EB92C2 1AEB92C2 0003 0 0 0 F0FFFFFF 0 0 0 real 0m1.954s user 0m1.645s sys 0m1.828s Edited October 1, 2019 by h3ll1 Share this post Link to post Share on other sites
pppoetest Posted October 2, 2019 · Report post Пайпа то зачем time grep eth2.37 /proc/net/route Share this post Link to post Share on other sites
vop Posted October 2, 2019 · Report post 42 minutes ago, pppoetest said: Пайпа то зачем time grep eth2.37 /proc/net/route Так немного тяжеловато. Надо бы приклеить поисковый параметр, что ли. Типа time grep -w ^eth2.37 /proc/net/route Так, вроде, должно пошустрее. :) Ну да ладно, не в этом вопрос. Share this post Link to post Share on other sites
GrandPr1de Posted October 2, 2019 · Report post а чо не складывать это скриптом в какой-то KV db аля редис и не дрочить редис? или обожемой прикрутить поисковое двигло или нужно прям ондеманд быстро-быстро? Share this post Link to post Share on other sites
Ivan_83 Posted October 2, 2019 · Report post В 28.09.2019 в 23:24, h3ll1 сказал: real 0m7.476s Ваше счастье что вы никогда не видели трейсов с сиськолами которые дёргаются при работе десктопа на фре/линухе всем этим DE и прикладными приложениями. Особенно впечатляет насколько коряво реализовано и работает FILE в stdlib и других либах которые это юзают. https://github.com/eranif/codelite/issues/2338 Или "прекрасная" glib от гнома, глюкодром говнокода: https://gitlab.gnome.org/GNOME/glib/merge_requests/1105/diffs Share this post Link to post Share on other sites
h3ll1 Posted October 5, 2019 (edited) · Report post On 10/2/2019 at 3:13 PM, Ivan_83 said: Ваше счастье что вы Я не бил програмер, я не могу сам ето сделать. Я только ищу что будеть делать дела. Заметка: "All set types support the optional skbinfo extension" - ето с ipset док. Quote by usage of SET netfilter target with --map-set option. skbmark option format: MARK or MARK/MASK, where MARK and MASK are 32bit hex numbers with 0x prefix sbin/ipset add -! u231 10.2.3.0/28 skbprio 78cf ipset v6.30: Syntax error: Invalid skbprio format, it should be:MAJOR:MINOR (see manpage) Edited October 5, 2019 by h3ll1 Share this post Link to post Share on other sites
taf_321 Posted October 6, 2019 · Report post Для начала сет надо создавать с явным указанием на использование skbinfo: ipset create local-skb4 hash:net family inet skbinfo counters И skbprio != fwmark, и указывается в формате команды tc: ipset add local-skb4 100.64.0.0/10 skbprio 1:fffd Share this post Link to post Share on other sites
h3ll1 Posted October 10, 2019 · Report post Проблема, что я не могу сбежатъ с imq. IMQ не работает, с 2 года я ищу как сделять правила для ifb, и понимаю что не работает. Ну я знаю tc hashkey == || hash HASHKEY := [ mask u32_hex_value ] [ at 4*int_value ] Share this post Link to post Share on other sites
h3ll1 Posted January 11, 2020 · Report post Думал, что я чего-то попутал, но. https://github.com/imq/linuximq/issues/86 Для меня: решение. Share this post Link to post Share on other sites
h3ll1 Posted January 14, 2020 (edited) · Report post Похоже, проблема больше нет. https://github.com/imq/linuximq/issues/86#issuecomment-572741119 Все работает на УРА Edited January 14, 2020 by h3ll1 Share this post Link to post Share on other sites