h3ll1 Опубликовано 28 сентября, 2019 (изменено) · Жалоба 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. Изменено 28 сентября, 2019 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
jffulcrum Опубликовано 29 сентября, 2019 · Жалоба libnetlink, rtnetlink . Придется пописать немного Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 29 сентября, 2019 · Жалоба Можно сюда смотреть: /proc/net/route Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
NewUse Опубликовано 30 сентября, 2019 · Жалоба netstat -rn скорее всего у ip route есть аналогичная опция: не ресолвить адреса. хотя там какое-то адское число записей, тогда скорее всего не поможет... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
taf_321 Опубликовано 30 сентября, 2019 · Жалоба ip r ничего не резолвит. Основное время сжирает цикл вывода информации о сотен тысяч маршрутов в текстовом виде. Как выше правильно сказали, писать самодельную приблуду, которая будет получать маршруты из libnetlink и без перевода в текст отфильтровывать что нужно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 30 сентября, 2019 · Жалоба lib/rt netlink будет чуток быстрее, /proc/net/route - заметно проще для не очень опытных программеров. :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
taf_321 Опубликовано 30 сентября, 2019 · Жалоба Совсем не чуток. При обработке такого большого количества маршрутов текстовая форма представления совершенно лишняя. И при чтении /proc/net/route можно выхватить неопределенное состояние, когда во время считывания маршруты поменялись. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 30 сентября, 2019 · Жалоба 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 1 октября, 2019 (изменено) · Жалоба 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.... Изменено 1 октября, 2019 пользователем h3ll1 Добавил текст Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 1 октября, 2019 (изменено) · Жалоба 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 Изменено 1 октября, 2019 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pppoetest Опубликовано 2 октября, 2019 · Жалоба Пайпа то зачем time grep eth2.37 /proc/net/route Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 2 октября, 2019 · Жалоба 42 minutes ago, pppoetest said: Пайпа то зачем time grep eth2.37 /proc/net/route Так немного тяжеловато. Надо бы приклеить поисковый параметр, что ли. Типа time grep -w ^eth2.37 /proc/net/route Так, вроде, должно пошустрее. :) Ну да ладно, не в этом вопрос. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
GrandPr1de Опубликовано 2 октября, 2019 · Жалоба а чо не складывать это скриптом в какой-то KV db аля редис и не дрочить редис? или обожемой прикрутить поисковое двигло или нужно прям ондеманд быстро-быстро? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 2 октября, 2019 · Жалоба В 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 5 октября, 2019 (изменено) · Жалоба 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) Изменено 5 октября, 2019 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
taf_321 Опубликовано 6 октября, 2019 · Жалоба Для начала сет надо создавать с явным указанием на использование 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 10 октября, 2019 · Жалоба Проблема, что я не могу сбежатъ с imq. IMQ не работает, с 2 года я ищу как сделять правила для ifb, и понимаю что не работает. Ну я знаю tc hashkey == || hash HASHKEY := [ mask u32_hex_value ] [ at 4*int_value ] Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 11 января, 2020 · Жалоба Думал, что я чего-то попутал, но. https://github.com/imq/linuximq/issues/86 Для меня: решение. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 14 января, 2020 (изменено) · Жалоба Похоже, проблема больше нет. https://github.com/imq/linuximq/issues/86#issuecomment-572741119 Все работает на УРА Изменено 14 января, 2020 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...