iproute2/ip
Stephen Hemminger 65083b5fe3 ip: defer lookup interface index
The ip command would always lookup the network device index
even when not necessary. This slows down operations like creating
lots of VLAN's.

David reported the original issue, this is an alternative patch
that solves it in a slightly more general method.

Using iproute2 to create a bridge and add 4094 vlans to it can take from
2 to 3 *minutes*. The reason is the extraneous call to ll_name_to_index.
ll_name_to_index results in an ioctl(SIOCGIFINDEX) call which in turn
invokes dev_load. If the index does not exist, which it won't when
creating a new link, dev_load calls modprobe twice -- once for
netdev-NAME and again for NAME. This is unnecessary overhead for each
link create.

When ip link is invoked for a new device, there is no reason to
call ll_name_to_index for the new device. With this patch, creating
a bridge and adding 4094 vlans takes less than 3 *seconds*.

	old:
	# time ip -batch ip-vlan.batch
	real    3m13.727s
	user    0m0.076s
	sys     0m1.959s

	new:
	# time ip -batch ip-vlan.batch
	real    0m3.222s
	user    0m0.044s
	sys     0m1.777s

Reported-off-by: David Ahern <dsahern@gmail.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2018-05-25 07:48:40 -07:00
..
.gitignore Another .gitignore file. 2006-08-08 12:11:23 -07:00
Makefile ip: link: add support for netdevsim device type 2018-01-02 20:46:19 -08:00
ifcfg ifcfg/rtpr: convert to POSIX shell 2018-01-10 08:26:09 -08:00
ila_common.h SPDX license identifiers 2017-11-24 12:21:35 -08:00
ip.c Merge branch 'iproute2-master' into iproute2-next 2018-03-27 12:33:02 -07:00
ip6tunnel.c utils: Introduce and use nodev() helper routine 2018-03-11 17:58:36 -07:00
ip_common.h ip: defer lookup interface index 2018-05-25 07:48:40 -07:00
ipaddress.c ip: defer lookup interface index 2018-05-25 07:48:40 -07:00
ipaddrlabel.c ipaddrlabel: add json support 2018-03-06 15:38:41 -08:00
ipfou.c fou: support JSON output 2018-03-06 15:39:34 -08:00
ipila.c ip/ila: support json and color 2018-03-28 20:36:58 -07:00
ipl2tp.c l2tp: no need to export session offsets in JSON output 2018-04-05 12:43:23 -07:00
iplink.c ip: defer lookup interface index 2018-05-25 07:48:40 -07:00
iplink_bond.c utils: Introduce and use nodev() helper routine 2018-03-11 17:58:36 -07:00
iplink_bond_slave.c ip: iplink_bond_slave.c: add json output support (info_slave_data) 2017-08-17 18:02:40 -07:00
iplink_bridge.c utils: Introduce and use nodev() helper routine 2018-03-11 17:58:36 -07:00
iplink_bridge_slave.c ip: Use print_0xhex() where appropriate 2018-02-09 08:05:30 -08:00
iplink_can.c Merge branch 'master' into net-next 2017-08-21 17:37:15 -07:00
iplink_dummy.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
iplink_geneve.c iplink_geneve: correct size of message to avoid spurious errors 2018-04-20 10:39:53 -07:00
iplink_hsr.c ip: iplink_hsr.c: add json output support 2017-08-17 18:02:40 -07:00
iplink_ifb.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
iplink_ipoib.c ip: iplink_ipoib.c: add json output support 2017-08-17 18:02:41 -07:00
iplink_ipvlan.c ip/ipvlan: enhance ability to add mode flags to existing modes 2017-11-01 22:17:01 +01:00
iplink_macvlan.c ip: link_macvlan.c: add json output support 2017-08-17 18:02:41 -07:00
iplink_netdevsim.c ip: link: add support for netdevsim device type 2018-01-02 20:46:19 -08:00
iplink_nlmon.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
iplink_team.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
iplink_vcan.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
iplink_vlan.c treewide: Use addattr_nest()/addattr_nest_end() to handle nested attributes 2018-02-02 15:01:09 -08:00
iplink_vrf.c lib/libnetlink: update rtnl_talk to support malloc buff at run time 2017-10-26 12:29:29 +02:00
iplink_vxcan.c iplink: Perform most of request buffer setups and checks in iplink_parse() 2018-03-11 17:59:03 -07:00
iplink_vxlan.c utils: Introduce and use nodev() helper routine 2018-03-11 17:58:36 -07:00
iplink_xdp.c ip: defer lookup interface index 2018-05-25 07:48:40 -07:00
iplink_xstats.c add missing iplink_xstats.c 2017-02-20 08:53:40 -08:00
ipmacsec.c json_print: Fix hidden 64-bit type promotion 2018-04-25 11:08:55 -07:00
ipmaddr.c ipmaddr: json and color support 2018-03-11 18:52:06 -07:00
ipmonitor.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
ipmroute.c json_print: Fix hidden 64-bit type promotion 2018-04-25 11:08:55 -07:00
ipneigh.c ipneigh: fix missing format specifier 2018-04-20 10:33:22 -07:00
ipnetconf.c ipnetconf: add JSON support 2018-03-06 15:38:57 -08:00
ipnetns.c netns: add JSON support 2018-03-08 09:53:11 -08:00
ipntable.c json_print: Fix hidden 64-bit type promotion 2018-04-25 11:08:55 -07:00
ipprefix.c netlink route attribute cleanup 2017-02-24 08:56:38 -08:00
iproute.c ip route: Print expires as signed int 2018-05-23 15:29:56 -07:00
iproute_lwtunnel.c json_print: Fix hidden 64-bit type promotion 2018-04-25 11:08:55 -07:00
iprule.c iprule: support for ip_proto, sport and dport match options 2018-03-08 10:08:18 -08:00
ipseg6.c ipsr: add json support 2018-03-06 15:39:14 -08:00
iptoken.c token: support JSON 2018-03-06 15:39:19 -08:00
iptunnel.c utils: Introduce and use nodev() helper routine 2018-03-11 17:58:36 -07:00
iptuntap.c json_print: Fix hidden 64-bit type promotion 2018-04-25 11:08:55 -07:00
ipvrf.c Drop capabilities if not running ip exec vrf with libcap 2018-03-27 11:48:23 -07:00
ipxfrm.c ipxfrm: Replace STRBUF_CAT macro with strlcat() 2017-09-01 12:10:54 -07:00
link_gre.c utils: Introduce and use nodev() helper routine 2018-03-11 17:58:36 -07:00
link_gre6.c utils: Introduce and use nodev() helper routine 2018-03-11 17:58:36 -07:00
link_ip6tnl.c utils: Introduce and use nodev() helper routine 2018-03-11 17:58:36 -07:00
link_iptnl.c utils: Introduce and use nodev() helper routine 2018-03-11 17:58:36 -07:00
link_veth.c iplink: Perform most of request buffer setups and checks in iplink_parse() 2018-03-11 17:59:03 -07:00
link_vti.c utils: Introduce and use nodev() helper routine 2018-03-11 17:58:36 -07:00
link_vti6.c utils: Introduce and use nodev() helper routine 2018-03-11 17:58:36 -07:00
routef mark shell scripts +x 2018-01-10 08:23:49 -08:00
routel mark shell scripts +x 2018-01-10 08:23:49 -08:00
rtm_map.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
rtmon.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
rtpr ifcfg/rtpr: convert to POSIX shell 2018-01-10 08:26:09 -08:00
static-syms.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
tcp_metrics.c json_print: Fix hidden 64-bit type promotion 2018-04-25 11:08:55 -07:00
tunnel.c Merge branch 'iproute2-master' into iproute2-next 2018-04-02 10:47:34 -07:00
tunnel.h iptunnel/ip6tunnel: Use netlink to walk through tunnels list 2018-02-07 16:15:42 -08:00
xfrm.h ip: Fix compilation break on old systems 2017-11-13 10:07:25 -08:00
xfrm_monitor.c netlink route attribute cleanup 2017-02-24 08:56:38 -08:00
xfrm_policy.c Merge branch 'master' into net-next 2017-11-09 09:45:17 +09:00
xfrm_state.c Merge branch 'master' into net-next 2017-11-09 09:45:17 +09:00