Jump to content

Recommended Posts

Posted (edited)
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 by h3ll1
Posted

netstat -rn скорее всего у ip route есть аналогичная опция: не ресолвить адреса.

 

хотя там какое-то адское число записей, тогда скорее всего не поможет...

Posted

ip r ничего не резолвит. Основное время сжирает цикл вывода информации о сотен тысяч маршрутов в текстовом виде. Как выше правильно сказали, писать самодельную приблуду, которая будет получать маршруты из libnetlink и без перевода в текст отфильтровывать что нужно.

Posted

Совсем не чуток. При обработке такого большого количества маршрутов текстовая форма представления совершенно лишняя. И при чтении /proc/net/route можно выхватить неопределенное состояние, когда во время считывания маршруты поменялись.

Posted
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

 

Posted (edited)
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 by h3ll1
Добавил текст
Posted (edited)
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 by h3ll1
Posted
42 minutes ago, pppoetest said:

Пайпа то зачем

time grep eth2.37 /proc/net/route

 

Так немного тяжеловато. Надо бы приклеить поисковый параметр, что ли. Типа

 

time grep -w ^eth2.37 /proc/net/route

 

Так, вроде, должно пошустрее. :)

 

Ну да ладно, не в этом вопрос.

 

Posted
В 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

Posted (edited)
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 by h3ll1
Posted

Для начала сет надо создавать с явным указанием на использование 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

 

Posted

Проблема, что я не могу сбежатъ с imq. IMQ не работает, с 2 года я ищу как сделять правила для ifb, и понимаю что не работает. Ну я знаю 

tc hashkey == ||  hash

HASHKEY := [ mask u32_hex_value ] [ at 4*int_value ]

 

  • 3 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.