* Re: [PATCH] hashed device lookup (New Benchmarks)
2001-01-07 8:11 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) (Benchmarks) Ben Greear
@ 2001-01-08 8:12 Ben Greear
2001-01-06 21:33 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) Ben Greear
1 sibling, 1 reply; 77+ messages in thread
From: Ben Greear @ 2001-01-08 8:12 UTC (permalink / raw)
To: netdev, linux-kernel
See a pretty graph showing performance of ifconfig and ip
both with and without my device-hashed-lookup patch:
http://grok.yi.org/~greear/hashed_dev.png
(If you can't get to it, let me know and I'll email it to you...some
cable modem networks have I firewalled.)
I ran ifconfig -a and ip addr show every 50 interfaces,
as I added 4000 interfaces, and used the 'time -p' program to
find the system and user times.
Summary:
ifconfig scales badly, ip is better.
Both ip and ifconfig work better with the hash patch, at
least when the number of interfaces grows past 1000.
If anyone wants the raw numbers, I can provide them and the script
that generated them.
NOTE: I stopped the non-hashed test after 3000 interfaces because
it was just going too slow (ifconfig was killing me!)
So, is this good enough reason to add the hashed patch?
If not, I feel sure I can write a program that binds to a specific
interface 10k times, and my assumption is that the hash will help
significantly if there are lots of interfaces. However, I'd
rather not go to the hassle if the ifconfig/ip numbers are sufficient.
If no amount of benchmarking will change key player's minds, then
go ahead and tell me now so that I can go back to hacking code
and just include this patch with my VLAN patch.
Thanks,
Ben
--
Ben Greear (greearb@candelatech.com) http://www.candelatech.com
Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL)
http://scry.wanfear.com http://scry.wanfear.com/~greear
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] 77+ messages in thread* [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) @ 2001-01-06 21:33 ` Ben Greear 2001-01-06 23:17 ` David S. Miller ` (3 more replies) 0 siblings, 4 replies; 77+ messages in thread From: Ben Greear @ 2001-01-06 21:33 UTC (permalink / raw) To: linux-kernel, netdev I'm hoping that I can get a few comments on this code. It was added to (significantly) speed up things like 'ifconfig -a' when running with 4000 or so VLAN devices. It should also help other instances with lots of (virtual) devices, like FrameRelay, ATM, and possibly virtual IP interfaces. It probably won't help 'normal' users much, and in it's final form, should probably be a selectable option in the config process. Anyway, let me know what you think! Patch to net/core/dev.c of 2.4.0 fame: *** ../../../linux/net/core/dev.c Mon Dec 11 14:29:35 2000 --- dev.c Sat Jan 6 14:14:10 2001 *************** *** 1,3 **** ! /* * NET3 Protocol independent device support routines. * --- 1,3 ---- ! /* -*- linux-c -*- * NET3 Protocol independent device support routines. * *************** *** 132,138 **** * * Why 16. Because with 16 the only overlap we get on a hash of the ! * low nibble of the protocol value is RARP/SNAP/X.25. * * 0800 IP * 0001 802.3 * 0002 AX.25 --- 133,147 ---- * * Why 16. Because with 16 the only overlap we get on a hash of the ! * low nibble of the protocol value is RARP/SNAP/X.25. ! * ! * NOTE: That is no longer true with the addition of VLAN tags. Not ! * sure which should go first, but I bet it won't make much ! * difference if we are running VLANs. The good news is that ! * this protocol won't be in the list unless compiled in, so ! * the average user (w/out VLANs) will not be adversly affected. ! * --BLG * * 0800 IP + * 8100 802.1Q VLAN * 0001 802.3 * 0002 AX.25 *************** *** 179,182 **** --- 188,435 ---- + #define BENS_FAST_DEV_LOOKUP + #ifdef BENS_FAST_DEV_LOOKUP + /* Fash Device Lookup code. Should give much better than + * linear speed when looking for devices by idx or name. + * --Ben (greearb@candelatech.com) + */ + #define FDL_HASH_LEN 256 + + /* #define FDL_DEBUG */ + + struct dev_hash_node { + struct net_device* dev; + struct dev_hash_node* next; + }; + + struct dev_hash_node* fdl_name_base[FDL_HASH_LEN];/* hashed by name */ + struct dev_hash_node* fdl_idx_base[FDL_HASH_LEN]; /* hashed by index */ + int fdl_initialized_yet = 0; + + /* TODO: Make these inline methods */ + /* Nice cheesy little hash method to be used on device-names (eth0, ppp0, etc) */ + int fdl_calc_name_idx(const char* dev_name) { + int tmp = 0; + int i; + #ifdef FDL_DEBUG + printk(KERN_ERR "fdl_calc_name_idx, name: %s\n", dev_name); + #endif + for (i = 0; dev_name[i]; i++) { + tmp += (int)(dev_name[i]); + } + if (i > 3) { + tmp += (dev_name[i-2] * 10); /* might add a little spread to the hash */ + tmp += (dev_name[i-3] * 100); /* might add a little spread to the hash */ + } + #ifdef FDL_DEBUG + printk(KERN_ERR "fdl_calc_name_idx, rslt: %i\n", (int)(tmp % FDL_HASH_LEN)); + #endif + return (tmp % FDL_HASH_LEN); + } + + int fdl_calc_index_idx(const int ifindex) { + return (ifindex % FDL_HASH_LEN); + } + + + /* Better have a lock on the dev_base before calling this... */ + int __fdl_ensure_init(void) { + #ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_ensure_init, enter\n"); + #endif + if (! fdl_initialized_yet) { + /* only do this once.. */ + int i; + int idx = 0; /* into the hash table */ + struct net_device* dev = dev_base; + struct dev_hash_node* dhn; + + #ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_ensure_init, doing real work..."); + #endif + + fdl_initialized_yet = 1; /* it has been attempted at least... */ + + for (i = 0; i<FDL_HASH_LEN; i++) { + fdl_name_base[i] = NULL; + fdl_idx_base[i] = NULL; + } + + /* add any current devices to the hash tables at this time. Note that + * this method must be called with locks on the dev_base acquired. + */ + while (dev) { + + #ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_ensure_init, dev: %p dev: %s, idx: %i\n", dev, dev->name, idx); + #endif + /* first, take care of the hash-by-name */ + idx = fdl_calc_name_idx(dev->name); + dhn = kmalloc(sizeof(struct dev_hash_node), GFP_ATOMIC); + if (dhn) { + dhn->dev = dev; + dhn->next = fdl_name_base[idx]; + fdl_name_base[idx] = dhn; + } + else { + /* Nasty..couldn't get memory... */ + return -ENOMEM; + } + + /* now, do the hash-by-idx */ + idx = fdl_calc_index_idx(dev->ifindex); + dhn = kmalloc(sizeof(struct dev_hash_node), GFP_ATOMIC); + if (dhn) { + dhn->dev = dev; + dhn->next = fdl_idx_base[idx]; + fdl_idx_base[idx] = dhn; + } + else { + /* Nasty..couldn't get memory... */ + return -ENOMEM; + } + + dev = dev->next; + } + fdl_initialized_yet = 2; /* initialization actually worked */ + } + #ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_ensure_init, end, fdl_initialized_yet: %i\n", fdl_initialized_yet); + #endif + if (fdl_initialized_yet == 2) { + return 0; + } + else { + return -1; + } + }/* fdl_ensure_init */ + + + /* called from register_netdevice, assumes dev is locked, and that no one + * will be calling __find_dev_by_name before this exits.. etc. + */ + int __fdl_register_netdevice(struct net_device* dev) { + if (__fdl_ensure_init() == 0) { + /* first, take care of the hash-by-name */ + int idx = fdl_calc_name_idx(dev->name); + struct dev_hash_node* dhn = kmalloc(sizeof(struct dev_hash_node), GFP_ATOMIC); + + #ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_register_netdevice, dev: %p dev: %s, idx: %i", dev, dev->name, idx); + #endif + + if (dhn) { + dhn->dev = dev; + dhn->next = fdl_name_base[idx]; + fdl_name_base[idx] = dhn; + } + else { + /* Nasty..couldn't get memory... */ + /* Don't try to use these hash tables any more... */ + fdl_initialized_yet = 1; /* tried, but failed */ + return -ENOMEM; + } + + /* now, do the hash-by-idx */ + idx = fdl_calc_index_idx(dev->ifindex); + dhn = kmalloc(sizeof(struct dev_hash_node), GFP_ATOMIC); + + #ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_register_netdevice, ifindex: %i, idx: %i", dev->ifindex, idx); + #endif + + if (dhn) { + dhn->dev = dev; + dhn->next = fdl_idx_base[idx]; + fdl_idx_base[idx] = dhn; + } + else { + /* Nasty..couldn't get memory... */ + /* Don't try to use these hash tables any more... */ + fdl_initialized_yet = 1; /* tried, but failed */ + return -ENOMEM; + } + } + return 0; + } /* fdl_register_netdevice */ + + + /* called from register_netdevice, assumes dev is locked, and that no one + * will be calling __find_dev_by_name, etc. Returns 0 if found & removed one, + * returns -1 otherwise. + */ + int __fdl_unregister_netdevice(struct net_device* dev) { + int retval = -1; + if (fdl_initialized_yet == 2) { /* If we've been initialized correctly... */ + /* first, take care of the hash-by-name */ + int idx = fdl_calc_name_idx(dev->name); + struct dev_hash_node* prev = fdl_name_base[idx]; + struct dev_hash_node* cur = NULL; + + #ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_unregister_netdevice, dev: %p dev: %s, idx: %i", dev, dev->name, idx); + #endif + + if (prev) { + if (strcmp(dev->name, prev->dev->name) == 0) { + /* it's the first one... */ + fdl_name_base[idx] = prev->next; + kfree(prev); + retval = 0; + } + else { + cur = prev->next; + while (cur) { + if (strcmp(dev->name, cur->dev->name) == 0) { + prev->next = cur->next; + kfree(cur); + retval = 0; + break; + } + else { + prev = cur; + cur = cur->next; + } + } + } + } + + /* Now, the hash-by-index */ + idx = fdl_calc_index_idx(dev->ifindex); + prev = fdl_idx_base[idx]; + cur = NULL; + if (prev) { + if (dev->ifindex == prev->dev->ifindex) { + /* it's the first one... */ + fdl_idx_base[idx] = prev->next; + kfree(prev); + retval = 0; + } + else { + cur = prev->next; + while (cur) { + if (dev->ifindex == cur->dev->ifindex) { + prev->next = cur->next; + kfree(cur); + retval = 0; + break; + } + else { + prev = cur; + cur = cur->next; + } + } + } + } + }/* if we ensured init OK */ + return retval; + } /* fdl_unregister_netdevice */ + + + + #endif /* BENS_FAST_DEV_LOOKUP */ + + + /****************************************************************************************** *************** *** 397,401 **** { struct net_device *dev; ! for (dev = dev_base; dev != NULL; dev = dev->next) { if (strcmp(dev->name, name) == 0) --- 650,673 ---- { struct net_device *dev; ! ! #ifdef BENS_FAST_DEV_LOOKUP ! int idx = fdl_calc_name_idx(name); ! struct dev_hash_node* dhn; ! if (fdl_initialized_yet == 2) { ! #ifdef FDL_DEBUG ! printk(KERN_ERR "__dev_get_by_name, name: %s idx: %i\n", name, idx); ! #endif ! dhn = fdl_name_base[idx]; ! while (dhn) { ! if (strcmp(dhn->dev->name, name) == 0) { ! /* printk(KERN_ERR "__dev_get_by_name, found it: %p\n", dhn->dev); */ ! return dhn->dev; ! } ! dhn = dhn->next; ! } ! /* printk(KERN_ERR "__dev_get_by_name, didn't find it for name: %s\n", name); */ ! return NULL; ! } ! #endif for (dev = dev_base; dev != NULL; dev = dev->next) { if (strcmp(dev->name, name) == 0) *************** *** 473,476 **** --- 745,762 ---- struct net_device *dev; + #ifdef BENS_FAST_DEV_LOOKUP + int idx = fdl_calc_index_idx(ifindex); + struct dev_hash_node* dhn; + if (fdl_initialized_yet == 2) { /* have we gone through initialization before... */ + dhn = fdl_idx_base[idx]; + while (dhn) { + if (dhn->dev->ifindex == ifindex) + return dhn->dev; + dhn = dhn->next; + } + return NULL; + } + #endif + for (dev = dev_base; dev != NULL; dev = dev->next) { if (dev->ifindex == ifindex) *************** *** 550,555 **** /* * If you need over 100 please also fix the algorithm... */ ! for (i = 0; i < 100; i++) { sprintf(buf,name,i); if (__dev_get_by_name(buf) == NULL) { --- 836,843 ---- /* * If you need over 100 please also fix the algorithm... + * Increased it to deal with VLAN interfaces. It is unlikely + * that this many will ever be added, but it can't hurt! -BLG */ ! for (i = 0; i < 8192; i++) { sprintf(buf,name,i); if (__dev_get_by_name(buf) == NULL) { *************** *** 558,562 **** } } ! return -ENFILE; /* Over 100 of the things .. bail out! */ } --- 846,850 ---- } } ! return -ENFILE; /* Over 8192 of the things .. bail out! */ } *************** *** 2068,2073 **** --- 2356,2369 ---- if (__dev_get_by_name(ifr->ifr_newname)) return -EEXIST; + #ifdef BENS_FAST_DEV_LOOKUP + write_lock_bh(&dev_base_lock); /* gotta lock it to remove stuff */ + __fdl_unregister_netdevice(dev); /* remove it from the hash.. */ + #endif memcpy(dev->name, ifr->ifr_newname, IFNAMSIZ); dev->name[IFNAMSIZ-1] = 0; + #ifdef BENS_FAST_DEV_LOOKUP + __fdl_register_netdevice(dev); + write_unlock_bh(&dev_base_lock); /* gotta lock it to add stuff too */ + #endif notifier_call_chain(&netdev_chain, NETDEV_CHANGENAME, dev); return 0; *************** *** 2343,2346 **** --- 2639,2648 ---- dev->next = NULL; write_lock_bh(&dev_base_lock); + #ifdef BENS_FAST_DEV_LOOKUP + /* Must do this before dp is set to dev, or it could be added twice, once + * on initialization based on dev_base, and once again after that... + */ + __fdl_register_netdevice(dev); + #endif *dp = dev; dev_hold(dev); *************** *** 2397,2400 **** --- 2699,2708 ---- dev_init_scheduler(dev); write_lock_bh(&dev_base_lock); + #ifdef BENS_FAST_DEV_LOOKUP + /* Must do this before dp is set to dev, or it could be added twice, once + * on initialization based on dev_base, and once again after that... + */ + __fdl_register_netdevice(dev); + #endif *dp = dev; dev_hold(dev); *************** *** 2469,2473 **** write_lock_bh(&dev_base_lock); *dp = d->next; ! write_unlock_bh(&dev_base_lock); break; } --- 2777,2784 ---- write_lock_bh(&dev_base_lock); *dp = d->next; ! #ifdef BENS_FAST_DEV_LOOKUP ! __fdl_unregister_netdevice(dev); ! #endif ! write_unlock_bh(&dev_base_lock); break; } -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-06 21:33 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) Ben Greear @ 2001-01-06 23:17 ` David S. Miller 2001-01-07 4:06 ` Ben Greear 2001-01-07 5:36 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) David S. Miller 2001-01-07 3:29 ` Chris Wedgwood ` (2 subsequent siblings) 3 siblings, 2 replies; 77+ messages in thread From: David S. Miller @ 2001-01-06 23:17 UTC (permalink / raw) To: greearb; +Cc: linux-kernel, netdev Unified diffs only please... Thanks. Later, David S. Miller davem@redhat.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-06 23:17 ` David S. Miller @ 2001-01-07 4:06 ` Ben Greear 2001-01-07 13:42 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox 2001-01-07 5:36 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) David S. Miller 1 sibling, 1 reply; 77+ messages in thread From: Ben Greear @ 2001-01-07 4:06 UTC (permalink / raw) To: David S. Miller; +Cc: linux-kernel, netdev "David S. Miller" wrote: > > Unified diffs only please... Thanks. Hrm, here's one with a -u option, this what you're looking for? --- ../../../linux/net/core/dev.c Mon Dec 11 14:29:35 2000 +++ dev.c Sat Jan 6 14:14:10 2001 @@ -1,4 +1,4 @@ -/* +/* -*- linux-c -*- * NET3 Protocol independent device support routines. * * This program is free software; you can redistribute it and/or @@ -131,9 +132,17 @@ * and the routines to invoke. * * Why 16. Because with 16 the only overlap we get on a hash of the - * low nibble of the protocol value is RARP/SNAP/X.25. + * low nibble of the protocol value is RARP/SNAP/X.25. + * + * NOTE: That is no longer true with the addition of VLAN tags. Not + * sure which should go first, but I bet it won't make much + * difference if we are running VLANs. The good news is that + * this protocol won't be in the list unless compiled in, so + * the average user (w/out VLANs) will not be adversly affected. + * --BLG * * 0800 IP + * 8100 802.1Q VLAN * 0001 802.3 * 0002 AX.25 * 0004 802.2 @@ -178,6 +187,250 @@ #endif +#define BENS_FAST_DEV_LOOKUP +#ifdef BENS_FAST_DEV_LOOKUP +/* Fash Device Lookup code. Should give much better than + * linear speed when looking for devices by idx or name. + * --Ben (greearb@candelatech.com) + */ +#define FDL_HASH_LEN 256 + +/* #define FDL_DEBUG */ + +struct dev_hash_node { + struct net_device* dev; + struct dev_hash_node* next; +}; + +struct dev_hash_node* fdl_name_base[FDL_HASH_LEN];/* hashed by name */ +struct dev_hash_node* fdl_idx_base[FDL_HASH_LEN]; /* hashed by index */ +int fdl_initialized_yet = 0; + +/* TODO: Make these inline methods */ +/* Nice cheesy little hash method to be used on device-names (eth0, ppp0, etc) */ +int fdl_calc_name_idx(const char* dev_name) { + int tmp = 0; + int i; +#ifdef FDL_DEBUG + printk(KERN_ERR "fdl_calc_name_idx, name: %s\n", dev_name); +#endif + for (i = 0; dev_name[i]; i++) { + tmp += (int)(dev_name[i]); + } + if (i > 3) { + tmp += (dev_name[i-2] * 10); /* might add a little spread to the hash */ + tmp += (dev_name[i-3] * 100); /* might add a little spread to the hash */ + } +#ifdef FDL_DEBUG + printk(KERN_ERR "fdl_calc_name_idx, rslt: %i\n", (int)(tmp % FDL_HASH_LEN)); +#endif + return (tmp % FDL_HASH_LEN); +} + +int fdl_calc_index_idx(const int ifindex) { + return (ifindex % FDL_HASH_LEN); +} + + +/* Better have a lock on the dev_base before calling this... */ +int __fdl_ensure_init(void) { +#ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_ensure_init, enter\n"); +#endif + if (! fdl_initialized_yet) { + /* only do this once.. */ + int i; + int idx = 0; /* into the hash table */ + struct net_device* dev = dev_base; + struct dev_hash_node* dhn; + +#ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_ensure_init, doing real work..."); +#endif + + fdl_initialized_yet = 1; /* it has been attempted at least... */ + + for (i = 0; i<FDL_HASH_LEN; i++) { + fdl_name_base[i] = NULL; + fdl_idx_base[i] = NULL; + } + + /* add any current devices to the hash tables at this time. Note that + * this method must be called with locks on the dev_base acquired. + */ + while (dev) { + +#ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_ensure_init, dev: %p dev: %s, idx: %i\n", dev, dev->name, idx); +#endif + /* first, take care of the hash-by-name */ + idx = fdl_calc_name_idx(dev->name); + dhn = kmalloc(sizeof(struct dev_hash_node), GFP_ATOMIC); + if (dhn) { + dhn->dev = dev; + dhn->next = fdl_name_base[idx]; + fdl_name_base[idx] = dhn; + } + else { + /* Nasty..couldn't get memory... */ + return -ENOMEM; + } + + /* now, do the hash-by-idx */ + idx = fdl_calc_index_idx(dev->ifindex); + dhn = kmalloc(sizeof(struct dev_hash_node), GFP_ATOMIC); + if (dhn) { + dhn->dev = dev; + dhn->next = fdl_idx_base[idx]; + fdl_idx_base[idx] = dhn; + } + else { + /* Nasty..couldn't get memory... */ + return -ENOMEM; + } + + dev = dev->next; + } + fdl_initialized_yet = 2; /* initialization actually worked */ + } +#ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_ensure_init, end, fdl_initialized_yet: %i\n", fdl_initialized_yet); +#endif + if (fdl_initialized_yet == 2) { + return 0; + } + else { + return -1; + } +}/* fdl_ensure_init */ + + +/* called from register_netdevice, assumes dev is locked, and that no one + * will be calling __find_dev_by_name before this exits.. etc. + */ +int __fdl_register_netdevice(struct net_device* dev) { + if (__fdl_ensure_init() == 0) { + /* first, take care of the hash-by-name */ + int idx = fdl_calc_name_idx(dev->name); + struct dev_hash_node* dhn = kmalloc(sizeof(struct dev_hash_node), GFP_ATOMIC); + +#ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_register_netdevice, dev: %p dev: %s, idx: %i", dev, dev->name, idx); +#endif + + if (dhn) { + dhn->dev = dev; + dhn->next = fdl_name_base[idx]; + fdl_name_base[idx] = dhn; + } + else { + /* Nasty..couldn't get memory... */ + /* Don't try to use these hash tables any more... */ + fdl_initialized_yet = 1; /* tried, but failed */ + return -ENOMEM; + } + + /* now, do the hash-by-idx */ + idx = fdl_calc_index_idx(dev->ifindex); + dhn = kmalloc(sizeof(struct dev_hash_node), GFP_ATOMIC); + +#ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_register_netdevice, ifindex: %i, idx: %i", dev->ifindex, idx); +#endif + + if (dhn) { + dhn->dev = dev; + dhn->next = fdl_idx_base[idx]; + fdl_idx_base[idx] = dhn; + } + else { + /* Nasty..couldn't get memory... */ + /* Don't try to use these hash tables any more... */ + fdl_initialized_yet = 1; /* tried, but failed */ + return -ENOMEM; + } + } + return 0; +} /* fdl_register_netdevice */ + + +/* called from register_netdevice, assumes dev is locked, and that no one + * will be calling __find_dev_by_name, etc. Returns 0 if found & removed one, + * returns -1 otherwise. + */ +int __fdl_unregister_netdevice(struct net_device* dev) { + int retval = -1; + if (fdl_initialized_yet == 2) { /* If we've been initialized correctly... */ + /* first, take care of the hash-by-name */ + int idx = fdl_calc_name_idx(dev->name); + struct dev_hash_node* prev = fdl_name_base[idx]; + struct dev_hash_node* cur = NULL; + +#ifdef FDL_DEBUG + printk(KERN_ERR "__fdl_unregister_netdevice, dev: %p dev: %s, idx: %i", dev, dev->name, idx); +#endif + + if (prev) { + if (strcmp(dev->name, prev->dev->name) == 0) { + /* it's the first one... */ + fdl_name_base[idx] = prev->next; + kfree(prev); + retval = 0; + } + else { + cur = prev->next; + while (cur) { + if (strcmp(dev->name, cur->dev->name) == 0) { + prev->next = cur->next; + kfree(cur); + retval = 0; + break; + } + else { + prev = cur; + cur = cur->next; + } + } + } + } + + /* Now, the hash-by-index */ + idx = fdl_calc_index_idx(dev->ifindex); + prev = fdl_idx_base[idx]; + cur = NULL; + if (prev) { + if (dev->ifindex == prev->dev->ifindex) { + /* it's the first one... */ + fdl_idx_base[idx] = prev->next; + kfree(prev); + retval = 0; + } + else { + cur = prev->next; + while (cur) { + if (dev->ifindex == cur->dev->ifindex) { + prev->next = cur->next; + kfree(cur); + retval = 0; + break; + } + else { + prev = cur; + cur = cur->next; + } + } + } + } + }/* if we ensured init OK */ + return retval; +} /* fdl_unregister_netdevice */ + + + +#endif /* BENS_FAST_DEV_LOOKUP */ + + + /****************************************************************************************** Protocol management and registration routines @@ -396,7 +649,26 @@ struct net_device *__dev_get_by_name(const char *name) { struct net_device *dev; - + +#ifdef BENS_FAST_DEV_LOOKUP + int idx = fdl_calc_name_idx(name); + struct dev_hash_node* dhn; + if (fdl_initialized_yet == 2) { +#ifdef FDL_DEBUG + printk(KERN_ERR "__dev_get_by_name, name: %s idx: %i\n", name, idx); +#endif + dhn = fdl_name_base[idx]; + while (dhn) { + if (strcmp(dhn->dev->name, name) == 0) { + /* printk(KERN_ERR "__dev_get_by_name, found it: %p\n", dhn->dev); */ + return dhn->dev; + } + dhn = dhn->next; + } + /* printk(KERN_ERR "__dev_get_by_name, didn't find it for name: %s\n", name); */ + return NULL; + } +#endif for (dev = dev_base; dev != NULL; dev = dev->next) { if (strcmp(dev->name, name) == 0) return dev; @@ -472,6 +744,20 @@ { struct net_device *dev; +#ifdef BENS_FAST_DEV_LOOKUP + int idx = fdl_calc_index_idx(ifindex); + struct dev_hash_node* dhn; + if (fdl_initialized_yet == 2) { /* have we gone through initialization before... */ + dhn = fdl_idx_base[idx]; + while (dhn) { + if (dhn->dev->ifindex == ifindex) + return dhn->dev; + dhn = dhn->next; + } + return NULL; + } +#endif + for (dev = dev_base; dev != NULL; dev = dev->next) { if (dev->ifindex == ifindex) return dev; @@ -549,15 +835,17 @@ /* * If you need over 100 please also fix the algorithm... + * Increased it to deal with VLAN interfaces. It is unlikely + * that this many will ever be added, but it can't hurt! -BLG */ - for (i = 0; i < 100; i++) { + for (i = 0; i < 8192; i++) { sprintf(buf,name,i); if (__dev_get_by_name(buf) == NULL) { strcpy(dev->name, buf); return i; } } - return -ENFILE; /* Over 100 of the things .. bail out! */ + return -ENFILE; /* Over 8192 of the things .. bail out! */ } /** @@ -2067,8 +2355,16 @@ return -EBUSY; if (__dev_get_by_name(ifr->ifr_newname)) return -EEXIST; +#ifdef BENS_FAST_DEV_LOOKUP + write_lock_bh(&dev_base_lock); /* gotta lock it to remove stuff */ + __fdl_unregister_netdevice(dev); /* remove it from the hash.. */ +#endif memcpy(dev->name, ifr->ifr_newname, IFNAMSIZ); dev->name[IFNAMSIZ-1] = 0; +#ifdef BENS_FAST_DEV_LOOKUP + __fdl_register_netdevice(dev); + write_unlock_bh(&dev_base_lock); /* gotta lock it to add stuff too */ +#endif notifier_call_chain(&netdev_chain, NETDEV_CHANGENAME, dev); return 0; @@ -2342,6 +2638,12 @@ } dev->next = NULL; write_lock_bh(&dev_base_lock); +#ifdef BENS_FAST_DEV_LOOKUP + /* Must do this before dp is set to dev, or it could be added twice, once + * on initialization based on dev_base, and once again after that... + */ + __fdl_register_netdevice(dev); +#endif *dp = dev; dev_hold(dev); write_unlock_bh(&dev_base_lock); @@ -2396,6 +2698,12 @@ dev->next = NULL; dev_init_scheduler(dev); write_lock_bh(&dev_base_lock); +#ifdef BENS_FAST_DEV_LOOKUP + /* Must do this before dp is set to dev, or it could be added twice, once + * on initialization based on dev_base, and once again after that... + */ + __fdl_register_netdevice(dev); +#endif *dp = dev; dev_hold(dev); dev->deadbeaf = 0; @@ -2468,7 +2776,10 @@ if (d == dev) { write_lock_bh(&dev_base_lock); *dp = d->next; - write_unlock_bh(&dev_base_lock); +#ifdef BENS_FAST_DEV_LOOKUP + __fdl_unregister_netdevice(dev); +#endif + write_unlock_bh(&dev_base_lock); break; } } -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 4:06 ` Ben Greear @ 2001-01-07 13:42 ` Alan Cox 2001-01-07 15:33 ` Matti Aarnio 2001-01-07 19:02 ` Ben Greear 0 siblings, 2 replies; 77+ messages in thread From: Alan Cox @ 2001-01-07 13:42 UTC (permalink / raw) To: Ben Greear; +Cc: David S. Miller, linux-kernel, netdev > + * NOTE: That is no longer true with the addition of VLAN tags. Not > + * sure which should go first, but I bet it won't make much > + * difference if we are running VLANs. The good news is that It makes a lot of difference tha the vlan goes 2nd. Most sane people wont have vlans active on a high load interface. > strcpy(dev->name, buf); > return i; > } > } > - return -ENFILE; /* Over 100 of the things .. bail out! */ > + return -ENFILE; /* Over 8192 of the things .. bail out! */ So fix the algorithm. You want the list sorted at this point, or to generate a bitmap of free/used entries and scan the list then scan the map Question: How do devices with hardware vlan support fit into your model ? Alan - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 13:42 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox @ 2001-01-07 15:33 ` Matti Aarnio 2001-01-07 16:46 ` Alan Cox 2001-01-07 19:02 ` Ben Greear 1 sibling, 1 reply; 77+ messages in thread From: Matti Aarnio @ 2001-01-07 15:33 UTC (permalink / raw) To: Alan Cox; +Cc: Ben Greear, David S. Miller, linux-kernel, netdev On Sun, Jan 07, 2001 at 01:42:50PM +0000, Alan Cox wrote: > > + * NOTE: That is no longer true with the addition of VLAN tags. Not > > + * sure which should go first, but I bet it won't make much > > + * difference if we are running VLANs. The good news is that > > It makes a lot of difference tha the vlan goes 2nd. Most sane people wont > have vlans active on a high load interface. VLAN tag header appears as Layer-3 protocol, which then causes loop into VLAN reception code and back to generic Layer-3 receiver. I just tried to pull data from another machine, which is on normal port thru VLAN trunking port to receiving machine, and got fast-ether at wire speed. (As near as ncftp's 11.11 MB/sec is wirespeed..) > So fix the algorithm. You want the list sorted at this point, or to generate > a bitmap of free/used entries and scan the list then scan the map > > Question: How do devices with hardware vlan support fit into your model ? Hardware VLAN support at several network cards is just to recognize VLAN tags, and then do the right thing ( = skip 4 bytes ) when doing TCP/UDP checksum. > Alan /Matti Aarnio - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 15:33 ` Matti Aarnio @ 2001-01-07 16:46 ` Alan Cox 2001-01-07 17:32 ` Matti Aarnio 0 siblings, 1 reply; 77+ messages in thread From: Alan Cox @ 2001-01-07 16:46 UTC (permalink / raw) To: Matti Aarnio; +Cc: Alan Cox, Ben Greear, David S. Miller, linux-kernel, netdev > I just tried to pull data from another machine, which > is on normal port thru VLAN trunking port to receiving > machine, and got fast-ether at wire speed. (As near as > ncftp's 11.11 MB/sec is wirespeed..) But talking between two vlans on the same physical lan you will go in and back out via the switch and you wont - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 16:46 ` Alan Cox @ 2001-01-07 17:32 ` Matti Aarnio 0 siblings, 0 replies; 77+ messages in thread From: Matti Aarnio @ 2001-01-07 17:32 UTC (permalink / raw) To: Alan Cox; +Cc: Matti Aarnio, Ben Greear, David S. Miller, linux-kernel, netdev On Sun, Jan 07, 2001 at 04:46:14PM +0000, Alan Cox wrote: > But talking between two vlans on the same physical lan you will go in and back > out via the switch and you wont So ? If your box is routing in between VLANs, you are using it wrong way, IMO. On the other hand, I could very well put clients in some building into an set where I have a switch with FE connection to router, and lots of 10BaseT ports to clients. Hard-limiting bandwith to said 10 Mbit. I use VLAN truncked systems mainly for network administration, for DHCP servers. /Matti Aarnio - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 13:42 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox 2001-01-07 15:33 ` Matti Aarnio @ 2001-01-07 19:02 ` Ben Greear 2001-01-07 18:06 ` Alan Cox 2001-01-07 18:21 ` jamal 1 sibling, 2 replies; 77+ messages in thread From: Ben Greear @ 2001-01-07 19:02 UTC (permalink / raw) To: Alan Cox; +Cc: David S. Miller, linux-kernel, netdev Alan Cox wrote: > > > + * NOTE: That is no longer true with the addition of VLAN tags. Not > > + * sure which should go first, but I bet it won't make much > > + * difference if we are running VLANs. The good news is that > > It makes a lot of difference tha the vlan goes 2nd. Most sane people wont > have vlans active on a high load interface. Um, what about people running their box as just a VLAN router/firewall? That seems to be one of the principle uses so far. Actually, in that case both VLAN and IP traffic would come through, so it would be a tie if VLAN came first, but non-vlan traffic would suffer worse. So, how can I make sure that it is second in the list? > > > strcpy(dev->name, buf); > > return i; > > } > > } > > - return -ENFILE; /* Over 100 of the things .. bail out! */ > > + return -ENFILE; /* Over 8192 of the things .. bail out! */ > > So fix the algorithm. You want the list sorted at this point, or to generate > a bitmap of free/used entries and scan the list then scan the map Actually, VLAN code no longer uses this method to generate it's name, it uses it's own mechanism (which, by the way, the hashed name lookup makes much faster.) So, this part of the patch can be removed. > > Question: How do devices with hardware vlan support fit into your model ? I don't know of any, and I'm not sure how they would be supported. > > Alan -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 19:02 ` Ben Greear @ 2001-01-07 18:06 ` Alan Cox 2001-01-07 18:53 ` Matti Aarnio ` (4 more replies) 2001-01-07 18:21 ` jamal 1 sibling, 5 replies; 77+ messages in thread From: Alan Cox @ 2001-01-07 18:06 UTC (permalink / raw) To: Ben Greear; +Cc: Alan Cox, David S. Miller, linux-kernel, netdev > Um, what about people running their box as just a VLAN router/firewall? > That seems to be one of the principle uses so far. Actually, in that case > both VLAN and IP traffic would come through, so it would be a tie if VLAN > came first, but non-vlan traffic would suffer worse. Why would someone filter between vlans when any node on each vlan can happily ignore the vlan partitioning > So, how can I make sure that it is second in the list? Register vlan in the top level protocol hash then have that yank the header and feed the packets through the hash again. > Actually, VLAN code no longer uses this method to generate it's name, > it uses it's own mechanism (which, by the way, the hashed name lookup > makes much faster.) So, this part of the patch can be removed. Ok > > Question: How do devices with hardware vlan support fit into your model ? > I don't know of any, and I'm not sure how they would be supported. Several cards have vlan ability, but Matti reports they just lose the header not filter on it if I understood him - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 18:06 ` Alan Cox @ 2001-01-07 18:53 ` Matti Aarnio 2001-01-07 19:30 ` Ben Greear ` (3 subsequent siblings) 4 siblings, 0 replies; 77+ messages in thread From: Matti Aarnio @ 2001-01-07 18:53 UTC (permalink / raw) To: Alan Cox; +Cc: Ben Greear, linux-kernel, netdev On Sun, Jan 07, 2001 at 06:06:37PM +0000, Alan Cox wrote: > > Um, what about people running their box as just a VLAN router/firewall? > > That seems to be one of the principle uses so far. Actually, in that case > > both VLAN and IP traffic would come through, so it would be a tie if VLAN > > came first, but non-vlan traffic would suffer worse. > > Why would someone filter between vlans when any node on each vlan can happily > ignore the vlan partitioning VLANs are Level-2, that is SWITCHING. They have no real meaning unless you have a switching fabric, in which they present ways to hard-partition ports to different switching domains without having physically separate cabling. Normal hosts are connected on non-truncking ports, and only some rare systems are connected to 802.1Q trunks so they can access multiple VLANs inside the fabric. No ordinary hosts are able to choose at which VLANs they are. Truncking ports have ways to control which VLANs are allowed to go thru them (at least at Cisco hardware I am familiar with). > > So, how can I make sure that it is second in the list? > > Register vlan in the top level protocol hash then have that yank the header > and feed the packets through the hash again. That is what the two existing VLAN codes for Linux do now. Better(?) way could be to have a way to have device specific reception vector in addition to xmit vector. That way we could stack "Layer-2 protocols", like 802.1Q and (to an extent) even 802 bridging. See ftp://zmailer.org/linux/netif_rx.patch After all, if you have a way to plumb reception to an optional bridging layer, you propably would not need netif_rx() contained bridging code. > > > Question: How do devices with hardware vlan support fit into your model ? > > I don't know of any, and I'm not sure how they would be supported. > > Several cards have vlan ability, but Matti reports they just lose the header > not filter on it if I understood him No you didn't understand. Nothing is lost, it relates to hardware assisted received IP frame TCP/UDP checksumming by the network cards. Some cards support that, some support it even in presense of 802.1Q TAG header. I don't yet see any cards which have hardware assist for IPv6 checksumming. VLAN tags or not. Reception must handle at first tearing off the VLAN header when receiving the frame, then return back to netif_rx() to see what was inside - SNAP frame, IPv4 frame, whatever. /Matti Aarnio - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 18:06 ` Alan Cox 2001-01-07 18:53 ` Matti Aarnio @ 2001-01-07 19:30 ` Ben Greear 2001-01-07 18:30 ` Alan Cox 2001-01-07 22:40 ` 5116 ` (2 subsequent siblings) 4 siblings, 1 reply; 77+ messages in thread From: Ben Greear @ 2001-01-07 19:30 UTC (permalink / raw) To: Alan Cox; +Cc: David S. Miller, linux-kernel, netdev Alan Cox wrote: > > > Um, what about people running their box as just a VLAN router/firewall? > > That seems to be one of the principle uses so far. Actually, in that case > > both VLAN and IP traffic would come through, so it would be a tie if VLAN > > came first, but non-vlan traffic would suffer worse. > > Why would someone filter between vlans when any node on each vlan can happily > ignore the vlan partitioning Suppose you have a 100bt link upstream, and want to re-sell that as 10 10Mb links to all the customers in one building. With VLANs, you can haul all the data over one wire to a Linux box with 11 interfaces: 1 running VLAN (100bt), and 10 others running 10bt ethernet. Now, your uses are segregated, and you only have 1 100bt wire running to the basement, instead of 10. Alternately, if you have a VLAN ethernet switch, your linux box just feeds 100bt into it, and acts as a router with 10 (vlan) interfaces. In either of these cases, assuming the etherswitch and/or Linux box is secure, the customers will not be able to be on other peoples VLAN. This enables all kinds of routing/billing possibilities... > > So, how can I make sure that it is second in the list? > > Register vlan in the top level protocol hash then have that yank the header > and feed the packets through the hash again. Thats what it already does, if I understand correctly. Of course, if VLAN is loaded as a module, then it will be in the hash before IP, right? -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 19:30 ` Ben Greear @ 2001-01-07 18:30 ` Alan Cox 0 siblings, 0 replies; 77+ messages in thread From: Alan Cox @ 2001-01-07 18:30 UTC (permalink / raw) To: Ben Greear; +Cc: Alan Cox, David S. Miller, linux-kernel, netdev > Thats what it already does, if I understand correctly. Of course, if VLAN > is loaded as a module, then it will be in the hash before IP, right? Thats fine. I think it'll be a different hash bucket anyway. The point of having vlan first is that if its not registered or the interface isnt doing vlan there is basically a zero overhead - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 18:06 ` Alan Cox 2001-01-07 18:53 ` Matti Aarnio 2001-01-07 19:30 ` Ben Greear @ 2001-01-07 22:40 ` 5116 2001-01-08 2:19 ` David Ford 2001-01-09 20:25 ` Christopher E. Brown 4 siblings, 0 replies; 77+ messages in thread From: 5116 @ 2001-01-07 22:40 UTC (permalink / raw) To: linux-kernel; +Cc: Alan Cox On 7 Jan, Alan Cox wrote: >> Um, what about people running their box as just a VLAN router/firewall? >> That seems to be one of the principle uses so far. Actually, in that case >> both VLAN and IP traffic would come through, so it would be a tie if VLAN >> came first, but non-vlan traffic would suffer worse. > > Why would someone filter between vlans when any node on each vlan can happily > ignore the vlan partitioning > You might be connected to a vlan capable switch which will only feed the `right' vlan to a certain port... In this case an one-armed firewall might make sense. /Daniel -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 18:06 ` Alan Cox ` (2 preceding siblings ...) 2001-01-07 22:40 ` 5116 @ 2001-01-08 2:19 ` David Ford 2001-01-09 20:25 ` Christopher E. Brown 4 siblings, 0 replies; 77+ messages in thread From: David Ford @ 2001-01-08 2:19 UTC (permalink / raw) Cc: Ben Greear, David S. Miller, linux-kernel, netdev [-- Attachment #1: Type: text/plain, Size: 449 bytes --] Alan Cox wrote: > > Um, what about people running their box as just a VLAN router/firewall? > > That seems to be one of the principle uses so far. Actually, in that case > > both VLAN and IP traffic would come through, so it would be a tie if VLAN > > came first, but non-vlan traffic would suffer worse. > > Why would someone filter between vlans when any node on each vlan can happily > ignore the vlan partitioning ports 137-139 blather. -d [-- Attachment #2: Card for David Ford --] [-- Type: text/x-vcard, Size: 274 bytes --] begin:vcard n:Ford;David x-mozilla-html:TRUE url:www.blue-labs.org adr:;;;;;; version:2.1 email;internet:david@blue-labs.org title:Blue Labs Developer note;quoted-printable:GPG key: http://www.blue-labs.org/david@nifty.key=0D=0A x-mozilla-cpt:;9952 fn:David Ford end:vcard ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 18:06 ` Alan Cox ` (3 preceding siblings ...) 2001-01-08 2:19 ` David Ford @ 2001-01-09 20:25 ` Christopher E. Brown 2001-01-10 2:47 ` Ben Greear 4 siblings, 1 reply; 77+ messages in thread From: Christopher E. Brown @ 2001-01-09 20:25 UTC (permalink / raw) To: Alan Cox; +Cc: Ben Greear, David S. Miller, linux-kernel, netdev On Sun, 7 Jan 2001, Alan Cox wrote: > > Um, what about people running their box as just a VLAN router/firewall? > > That seems to be one of the principle uses so far. Actually, in that case > > both VLAN and IP traffic would come through, so it would be a tie if VLAN > > came first, but non-vlan traffic would suffer worse. > > Why would someone filter between vlans when any node on each vlan can happily > ignore the vlan partitioning Think VLANing switch clusters. Say 4 switches connected by GigE on 4 floors or in 4 separate building. Now, across these switches 20 VLANS are running, with the switches enforcing VLAN partitioning. The client PCs know nothing about it, as each one resides within a single VLAN. Now we have our Linux box with 2 x 100Mbit FD links to the switch cluster running 10 VLANS per interface, and an external DS1/SDSL/whatever connection. We now have 20 separate zones with different security controls per zone, with per switchport control over who resided in what group. Or even forget the routing and just plugging a Linux box to a companies 200VLAN setup to provide DHCP/whatever. I must say, I *hate* VLANs for this use, it is a horrible thing to do that wastes massive amounts of bandwidth on simulating a local broadcast domain across a much larger area, but oh well. As long as we have stupid managers and brain dead sales persons not much will change. Are there better things to do than VLAN? YES! Will we get stuck with needing VLANs in the real world? YES! --- The roaches seem to have survived, but they are not routing packets correctly. --About the Internet and nuclear war. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-09 20:25 ` Christopher E. Brown @ 2001-01-10 2:47 ` Ben Greear 0 siblings, 0 replies; 77+ messages in thread From: Ben Greear @ 2001-01-10 2:47 UTC (permalink / raw) To: Christopher E. Brown; +Cc: Alan Cox, David S. Miller, linux-kernel, netdev "Christopher E. Brown" wrote: > > Think VLANing switch clusters. Say 4 switches connected by > GigE on 4 floors or in 4 separate building. Now, across these > switches 20 VLANS are running, with the switches enforcing VLAN > partitioning. The client PCs know nothing about it, as each one > resides within a single VLAN. That would seem to cut down broadcast packets, and generally be a good thing! > > Now we have our Linux box with 2 x 100Mbit FD links to the > switch cluster running 10 VLANS per interface, and an external > DS1/SDSL/whatever connection. We now have 20 separate zones with > different security controls per zone, with per switchport control over > who resided in what group. Or even forget the routing and just > plugging a Linux box to a companies 200VLAN setup to provide > DHCP/whatever. > > I must say, I *hate* VLANs for this use, it is a horrible > thing to do that wastes massive amounts of bandwidth on simulating a > local broadcast domain across a much larger area, but oh well. As > long as we have stupid managers and brain dead sales persons not much > will change. Are there better things to do than VLAN? YES! Will we > get stuck with needing VLANs in the real world? YES! Umm, how does using VLANs lead to wasting massive amount of bandwidth? (You seem to be saying that by partitioning the network we make each partition bigger??) What are the better solutions? And what does your dislike for sales and management have to do with the topic at hand? -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 19:02 ` Ben Greear 2001-01-07 18:06 ` Alan Cox @ 2001-01-07 18:21 ` jamal 2001-01-07 19:00 ` Matti Aarnio 2001-01-07 19:37 ` Ben Greear 1 sibling, 2 replies; 77+ messages in thread From: jamal @ 2001-01-07 18:21 UTC (permalink / raw) To: Ben Greear; +Cc: Alan Cox, David S. Miller, linux-kernel, netdev On Sun, 7 Jan 2001, Ben Greear wrote: > > Question: How do devices with hardware vlan support fit into your model ? > > I don't know of any, and I'm not sure how they would be supported. > erm, this is a MUST. You MUST factor the hardware VLANs and be totaly 802.1q compliant. Also of interest is 802.1P and D. We must have full compliance, not some toy emulation. cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 18:21 ` jamal @ 2001-01-07 19:00 ` Matti Aarnio 2001-01-07 19:10 ` jamal 2001-01-07 19:37 ` Ben Greear 1 sibling, 1 reply; 77+ messages in thread From: Matti Aarnio @ 2001-01-07 19:00 UTC (permalink / raw) To: jamal; +Cc: linux-kernel, netdev On Sun, Jan 07, 2001 at 01:21:11PM -0500, jamal wrote: > On Sun, 7 Jan 2001, Ben Greear wrote: > > > Question: How do devices with hardware vlan support fit into your model ? > > I don't know of any, and I'm not sure how they would be supported. > > erm, this is a MUST. You MUST factor the hardware VLANs and be totaly > 802.1q compliant. Also of interest is 802.1P and D. We must have full > compliance, not some toy emulation. Read what I wrote about the issue to Alan. Ben's code has no problems with receiving VLANs with network cards which have "hardware support" for VLANs. But this is far away from device name hashes. (Which aren't in data reception or sending fastpaths, anyway.) > cheers, > jamal /Matti Aarnio - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 19:00 ` Matti Aarnio @ 2001-01-07 19:10 ` jamal 2001-01-07 19:24 ` Matti Aarnio 0 siblings, 1 reply; 77+ messages in thread From: jamal @ 2001-01-07 19:10 UTC (permalink / raw) To: Matti Aarnio; +Cc: linux-kernel, netdev On Sun, 7 Jan 2001, Matti Aarnio wrote: > Read what I wrote about the issue to Alan. > Ben's code has no problems with receiving VLANs with network > cards which have "hardware support" for VLANs. > OK. I suppose an skb->vlan_tag is passed to the driver and it will know what to do with it (pass it on a descriptor etc). cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 19:10 ` jamal @ 2001-01-07 19:24 ` Matti Aarnio 2001-01-08 0:21 ` jamal 0 siblings, 1 reply; 77+ messages in thread From: Matti Aarnio @ 2001-01-07 19:24 UTC (permalink / raw) To: jamal; +Cc: linux-kernel, netdev On Sun, Jan 07, 2001 at 02:10:52PM -0500, jamal wrote: > On Sun, 7 Jan 2001, Matti Aarnio wrote: > > Read what I wrote about the issue to Alan. > > Ben's code has no problems with receiving VLANs with network > > cards which have "hardware support" for VLANs. > > OK. I suppose an skb->vlan_tag is passed to the driver and it will know > what to do with it (pass it on a descriptor etc). Sure, nice. WHY SHOULD THERE BE MORE LAYER-2 STUFF ADDED TO SKB OBJECTS ? One of important abstraction issues is to isolate device specific new things (like what VLAN/PVC/SVC is used at your favourtite 802.1Q/ATM/X.25/FrameRelay connection). The less we leak that kind of things to SKB, the better, IMO. They are net_device issues, after all. Tell me (if you can), why packet sender calls hardware-header generation for packet, if the card can insert it for you ? Consider the structure of Ethernet MAC header, where is source address ? Where is the destination address ? If you write the destination, why should you not write the source there too ? No doubt some cards can fill in the source address while doing frame transmit, but is it worth the hazzle ? > cheers, > jamal /Matti Aarnio - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 19:24 ` Matti Aarnio @ 2001-01-08 0:21 ` jamal 0 siblings, 0 replies; 77+ messages in thread From: jamal @ 2001-01-08 0:21 UTC (permalink / raw) To: Matti Aarnio; +Cc: linux-kernel, netdev On Sun, 7 Jan 2001, Matti Aarnio wrote: > On Sun, Jan 07, 2001 at 02:10:52PM -0500, jamal wrote: > > OK. I suppose an skb->vlan_tag is passed to the driver and it will know > > what to do with it (pass it on a descriptor etc). > > Sure, nice. WHY SHOULD THERE BE MORE LAYER-2 STUFF ADDED TO > SKB OBJECTS ? > > One of important abstraction issues is to isolate device specific > new things (like what VLAN/PVC/SVC is used at your favourtite > 802.1Q/ATM/X.25/FrameRelay connection). > > The less we leak that kind of things to SKB, the better, IMO. > They are net_device issues, after all. You are right, the IP-ization information should be a "device" specific. What "device" means is the other discussion [I think we need new naming conventions and abstractions] > Tell me (if you can), why packet sender calls hardware-header > generation for packet, if the card can insert it for you ? > Consider the structure of Ethernet MAC header, where is source > address ? Where is the destination address ? If you write the > destination, why should you not write the source there too ? > It doesnt cost that much to do in s/ware if it is contigous and you have the information. some form of neighbor discovery protocol gathers all that info for you it is pretty cheap to insert the dst/src/etherype which you already have. Linux already has the 14 bytes link layer header cached today based on ARP for example. Works very nicely on the transmit path. Now consider trying to insert the VLAN header after all this work (it goes between the src MAC and the ethertype). If the hardware knows what to do with the tag, you dont need the hardware header rebuilder function. cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 18:21 ` jamal 2001-01-07 19:00 ` Matti Aarnio @ 2001-01-07 19:37 ` Ben Greear 2001-01-07 18:53 ` jamal 1 sibling, 1 reply; 77+ messages in thread From: Ben Greear @ 2001-01-07 19:37 UTC (permalink / raw) To: jamal; +Cc: Alan Cox, David S. Miller, linux-kernel, netdev jamal wrote: > > On Sun, 7 Jan 2001, Ben Greear wrote: > > > > Question: How do devices with hardware vlan support fit into your model ? > > > > I don't know of any, and I'm not sure how they would be supported. > > > > erm, this is a MUST. You MUST factor the hardware VLANs and be totaly > 802.1q compliant. Also of interest is 802.1P and D. We must have full > compliance, not some toy emulation. I have seen neither hardware nor spec sheets on how these NICs are doing VLAN 'support'. So, I don't know what the best way to support them is. If it requires driver changes, then the ethernet driver folks will need to be involved. There is also a difference between supporting hardware VLAN solutions and being 100% compliant: If I can send/receive packets that are 100% compliant from an RTL 8139 NIC, then as far as the world (ie Switch) knows, I am 100% compliant. If the specific VLAN hardware features are not supported in some exotic NIC, then that should just mean slightly less performance, or worst cast, not supporting that particular NIC. My vlan code supports setting of Priority bits already (thats' the .1P, right?) What is the .1D stuff about? > > cheers, > jamal -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 19:37 ` Ben Greear @ 2001-01-07 18:53 ` jamal 0 siblings, 0 replies; 77+ messages in thread From: jamal @ 2001-01-07 18:53 UTC (permalink / raw) To: Ben Greear; +Cc: Alan Cox, David S. Miller, linux-kernel, netdev On Sun, 7 Jan 2001, Ben Greear wrote: > jamal wrote: > > > > erm, this is a MUST. You MUST factor the hardware VLANs and be totaly > > 802.1q compliant. Also of interest is 802.1P and D. We must have full > > compliance, not some toy emulation. > > I have seen neither hardware nor spec sheets on how these NICs are doing > VLAN 'support'. So, I don't know what the best way to support them is. > Most of the GIGe interfaces do provide VLAN insertion/removal. You pass/receive it as part of the DMA descriptor. > If it requires driver changes, then the ethernet driver folks will need > to be involved. > I think the design MUST consider not just a poor man's VLAN way of doing things. You and the other VLAN folks (Gleb and co) will have to iron that out. Basically, all i am saying is that if there is going to be a linux solution at some point, the requirement for these devices is a MUST. Please involve me in discussions you guys end up having. > There is also a difference between supporting hardware VLAN solutions > and being 100% compliant: If I can send/receive packets that are > 100% compliant from an RTL 8139 NIC, then as far as the world (ie Switch) knows, > I am 100% compliant. > ok. > If the specific VLAN hardware features are not supported in some exotic > NIC, then that should just mean slightly less performance, or worst cast, > not supporting that particular NIC. The included design must be flexible enough to allow for this. As much as i hate it, some vendors will continue releasing binaries only for their code. > > My vlan code supports setting of Priority bits already (thats' the .1P, right?) > right. There's a lot of work to be done in that area. > What is the .1D stuff about? > spanning tree. Seems the bridging code already does this. cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-06 23:17 ` David S. Miller 2001-01-07 4:06 ` Ben Greear @ 2001-01-07 5:36 ` David S. Miller 1 sibling, 0 replies; 77+ messages in thread From: David S. Miller @ 2001-01-07 5:36 UTC (permalink / raw) To: greearb; +Cc: linux-kernel, netdev Date: Sat, 06 Jan 2001 21:06:54 -0700 From: Ben Greear <greearb@candelatech.com> "David S. Miller" wrote: > > Unified diffs only please... Thanks. Hrm, here's one with a -u option, this what you're looking for? Yes, thanks a lot. Later, David S. Miller davem@redhat.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-06 21:33 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) Ben Greear 2001-01-06 23:17 ` David S. Miller @ 2001-01-07 3:29 ` Chris Wedgwood 2001-01-07 6:15 ` Ben Greear ` (2 more replies) 2001-01-07 3:29 ` [PATCH] hashed device lookup (Does NOT meet " Andi Kleen 2001-01-07 5:40 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) David S. Miller 3 siblings, 3 replies; 77+ messages in thread From: Chris Wedgwood @ 2001-01-07 3:29 UTC (permalink / raw) To: Ben Greear; +Cc: linux-kernel, netdev On Sat, Jan 06, 2001 at 02:33:27PM -0700, Ben Greear wrote: I'm hoping that I can get a few comments on this code. It was added to (significantly) speed up things like 'ifconfig -a' when running with 4000 or so VLAN devices. It should also help other instances with lots of (virtual) devices, like FrameRelay, ATM, and possibly virtual IP interfaces. It probably won't help 'normal' users much, and in it's final form, should probably be a selectable option in the config process. Virtual IP interfaces in the form of ifname:<number> (e.g. eth:1) IMO should be deprecated and removed completely in 2.5.x. It's an ugly external wart that should be removed. That said, if this was done -- how would things like routing daemons and bind cope? Actually, when I think about it they can't cope with situating like this now: tapu:~# ip addr show lo 1: lo: <LOOPBACK,UP> mtu 3904 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet 10.0.0.1/32 scope global lo --cw - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 3:29 ` Chris Wedgwood @ 2001-01-07 6:15 ` Ben Greear 2001-01-07 10:22 ` David Ford 2001-01-07 16:56 ` jamal 2 siblings, 0 replies; 77+ messages in thread From: Ben Greear @ 2001-01-07 6:15 UTC (permalink / raw) To: Chris Wedgwood; +Cc: linux-kernel, netdev Chris Wedgwood wrote: > > On Sat, Jan 06, 2001 at 02:33:27PM -0700, Ben Greear wrote: > > I'm hoping that I can get a few comments on this code. It was > added to (significantly) speed up things like 'ifconfig -a' when > running with 4000 or so VLAN devices. It should also help other > instances with lots of (virtual) devices, like FrameRelay, ATM, > and possibly virtual IP interfaces. It probably won't help > 'normal' users much, and in it's final form, should probably be a > selectable option in the config process. > > Virtual IP interfaces in the form of ifname:<number> (e.g. eth:1) IMO > should be deprecated and removed completely in 2.5.x. It's an ugly > external wart that should be removed. I don't know enough to have any serious opinion about virtual IP interfaces, but I am very certain that VLANs should appear as an interface to external code/user-land, just as eth0 does. This hashing helps with VLANs, and since I aim to get VLANs into the kernel proper sooner or later, having this piece in there makes my patch a little smaller :) However, if folks look at the patch and hate it, then it can be left out, or changed appropriately. Ben -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 3:29 ` Chris Wedgwood 2001-01-07 6:15 ` Ben Greear @ 2001-01-07 10:22 ` David Ford 2001-01-07 12:01 ` David S. Miller 2001-01-07 12:13 ` Chris Wedgwood 2001-01-07 16:56 ` jamal 2 siblings, 2 replies; 77+ messages in thread From: David Ford @ 2001-01-07 10:22 UTC (permalink / raw) To: Chris Wedgwood; +Cc: Ben Greear, linux-kernel, netdev On Sun, 7 Jan 2001, Chris Wedgwood wrote: > Virtual IP interfaces in the form of ifname:<number> (e.g. eth:1) IMO > should be deprecated and removed completely in 2.5.x. It's an ugly > external wart that should be removed. > > That said, if this was done -- how would things like routing daemons > and bind cope? Actually, when I think about it they can't cope with > situating like this now: > > tapu:~# ip addr show lo > 1: lo: <LOOPBACK,UP> mtu 3904 qdisc noqueue > link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 > inet 127.0.0.1/8 scope host lo > inet 10.0.0.1/32 scope global lo BIND copes just fine, how would it not? I haven't heard any problems with routing daemons either. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 10:22 ` David Ford @ 2001-01-07 12:01 ` David S. Miller 2001-01-08 5:32 ` Andi Kleen 2001-01-07 12:13 ` Chris Wedgwood 1 sibling, 1 reply; 77+ messages in thread From: David S. Miller @ 2001-01-07 12:01 UTC (permalink / raw) To: cw; +Cc: david, greearb, linux-kernel, netdev Date: Mon, 8 Jan 2001 01:13:08 +1300 From: Chris Wedgwood <cw@f00f.org> OK, I'm a liar -- bind does handle this. Cool. Standard BSD allows it, what do you expect :-) This is good news, because it means there is a precedent for multiple addresses on a single interface so we can kill the <ifname>:<n> syntax in favor of the above which is cleaner of more accurately represents what is happening. If this is really true, 2.5.x is an appropriate time to make this, no sooner. Later, David S. Miller davem@redhat.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 12:01 ` David S. Miller @ 2001-01-08 5:32 ` Andi Kleen 2001-01-08 6:12 ` Chris Wedgwood 2001-01-08 6:13 ` Blu3Viper 0 siblings, 2 replies; 77+ messages in thread From: Andi Kleen @ 2001-01-08 5:32 UTC (permalink / raw) To: David S. Miller; +Cc: cw, david, greearb, linux-kernel, netdev On Sun, Jan 07, 2001 at 04:01:04AM -0800, David S. Miller wrote: > Date: Mon, 8 Jan 2001 01:13:08 +1300 > From: Chris Wedgwood <cw@f00f.org> > > OK, I'm a liar -- bind does handle this. Cool. > > Standard BSD allows it, what do you expect :-) > > This is good news, because it means there is a precedent for multiple > addresses on a single interface so we can kill the <ifname>:<n> > syntax in favor of the above which is cleaner of more accurately > represents what is happening. > > If this is really true, 2.5.x is an appropriate time to make > this, no sooner. I think it would be better to keep it. The ifa based alias interface emulation adds minor overhead (currently it's only a few lines of code, assuming we need named if addresses for other reasons too, which we do) and removing it it would break a lot of configuration scripts etc., for no really good gain. -Andi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-08 5:32 ` Andi Kleen @ 2001-01-08 6:12 ` Chris Wedgwood 2001-01-08 6:26 ` Andi Kleen 2001-01-08 6:13 ` Blu3Viper 1 sibling, 1 reply; 77+ messages in thread From: Chris Wedgwood @ 2001-01-08 6:12 UTC (permalink / raw) To: Andi Kleen; +Cc: David S. Miller, david, greearb, linux-kernel, netdev On Mon, Jan 08, 2001 at 06:32:14AM +0100, Andi Kleen wrote: I think it would be better to keep it. The ifa based alias interface emulation adds minor overhead (currently it's only a few lines of code, assuming we need named if addresses for other reasons too, which we do) and removing it it would break a lot of configuration scripts etc., for no really good gain. It's ugly and deceptive -- eth0:0 is _not_ a separate device to eth0, so why pretend it is? Yes, FIXING this wart will break stuff, that is part of the reason we have development cycles. Applications that break need fixing anyhow, as DaveM says BSD support multiple addresses per interface anyhow, so perhaps not many applications will break at all -- I've not really checked. 2.5.x seems like an excellent time to FIX this. I guess the final decision is that of DaveM and Alexey. --cw (These are mine opinions alone, but they should be everyones) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-08 6:12 ` Chris Wedgwood @ 2001-01-08 6:26 ` Andi Kleen 2001-01-08 6:57 ` David Ford 0 siblings, 1 reply; 77+ messages in thread From: Andi Kleen @ 2001-01-08 6:26 UTC (permalink / raw) To: Chris Wedgwood Cc: Andi Kleen, David S. Miller, david, greearb, linux-kernel, netdev On Mon, Jan 08, 2001 at 07:12:09PM +1300, Chris Wedgwood wrote: > On Mon, Jan 08, 2001 at 06:32:14AM +0100, Andi Kleen wrote: > > I think it would be better to keep it. The ifa based alias > interface emulation adds minor overhead (currently it's only a > few lines of code, assuming we need named if addresses for other > reasons too, which we do) and removing it it would break a lot of > configuration scripts etc., for no really good gain. > > It's ugly and deceptive -- eth0:0 is _not_ a separate device to eth0, > so why pretend it is? Who says that it names a device? It names interfaces. There are good reasons to have names for ifas, and I see no really good convincing reasons not to put these names into the interface name space. (in addition it'll save a lot of people a lot of grief) When you're proposing a change that breaks thousands of configuration you need a really good reason for it, and so far I cannot see one. It would be different if the older way needed lots of hard to maintain fragile code in the kernel, but that's really not the case. -Andi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-08 6:26 ` Andi Kleen @ 2001-01-08 6:57 ` David Ford 2001-01-08 13:08 ` jamal 0 siblings, 1 reply; 77+ messages in thread From: David Ford @ 2001-01-08 6:57 UTC (permalink / raw) To: Andi Kleen; +Cc: Chris Wedgwood, David S. Miller, greearb, linux-kernel, netdev On Mon, 8 Jan 2001, Andi Kleen wrote: > Who says that it names a device? It names interfaces. > There are good reasons to have names for ifas, and I see no really good > convincing reasons not to put these names into the interface name space. > (in addition it'll save a lot of people a lot of grief) > When you're proposing a change that breaks thousands of configuration you > need a really good reason for it, and so far I cannot see one. It would > be different if the older way needed lots of hard to maintain fragile code in > the kernel, but that's really not the case. If people are upgrading to things like 2.6, then one must expect some changes. The eth0:0 style has already been whittled down, it has nothing now but the IP and mask info. It's a something between two styles. It encourages a non-scalable use. I.e. eth0:2342, or eth0:http. It came up because listing w/ ifconfig -a in it's current form wasn't satisfactorily fast. Distributions should be encouraged to use ip rather than ifconfig/route. It works better and does more, the output is more informative, more concise, and less confusing. It doesn't take that much more disk space than ifconfig and route does, ifconfig and route take 74K, ip takes 89K. I don't think 15k of disk space is sufficient concern, given that inodes are probably page size. That comes out to three pages difference. Even on a floppy that's not much. I didn't even compile optimized for size either. Due to that, 'eth0:n' becomes a byproduct without much merit. People who insist on eth0:n are probably people who also will insist on 1.2.13 for their router simply because they don't want or need to change it. The new form with the new tool is easier, especially if you have any cisco background. You can't beat 'ip a a 10.1.1.1/24 brd + dev eth0' for the netmask and figuring out the broadcast properly without error. It's shorter and less prone to error and more easily scriptable because you don't need a changing label. It's also more easily parsed by scripts. -d -- ---NOTICE--- fwd: fwd: fwd: type emails will be deleted automatically. "There is a natural aristocracy among men. The grounds of this are virtue and talents", Thomas Jefferson [1742-1826], 3rd US President - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-08 6:57 ` David Ford @ 2001-01-08 13:08 ` jamal 2001-01-09 13:28 ` Blu3Viper 0 siblings, 1 reply; 77+ messages in thread From: jamal @ 2001-01-08 13:08 UTC (permalink / raw) To: David Ford Cc: Andi Kleen, Chris Wedgwood, David S. Miller, greearb, linux-kernel, netdev On Sun, 7 Jan 2001, David Ford wrote: > Distributions should be encouraged to use ip rather than ifconfig/route. It > works better and does more, the output is more informative, more concise, > and less confusing. It doesn't take that much more disk space than ifconfig > and route does, ifconfig and route take 74K, ip takes 89K. I don't think 15k > of disk space is sufficient concern, given that inodes are probably page > size. Actually if you count arp which is also part of ip; ip becomes smaller by about 15K. cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-08 13:08 ` jamal @ 2001-01-09 13:28 ` Blu3Viper 0 siblings, 0 replies; 77+ messages in thread From: Blu3Viper @ 2001-01-09 13:28 UTC (permalink / raw) To: jamal Cc: Andi Kleen, Chris Wedgwood, David S. Miller, greearb, linux-kernel, netdev > Actually if you count arp which is also part of ip; ip becomes smaller > by about 15K. ...i always forget some small detail. thx -d - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-08 5:32 ` Andi Kleen 2001-01-08 6:12 ` Chris Wedgwood @ 2001-01-08 6:13 ` Blu3Viper 1 sibling, 0 replies; 77+ messages in thread From: Blu3Viper @ 2001-01-08 6:13 UTC (permalink / raw) To: Andi Kleen; +Cc: David S. Miller, cw, greearb, linux-kernel, netdev On Mon, 8 Jan 2001, Andi Kleen wrote: > > If this is really true, 2.5.x is an appropriate time to make > > this, no sooner. > > I think it would be better to keep it. The ifa based alias interface > emulation adds minor overhead (currently it's only a few lines of code, > assuming we need named if addresses for other reasons too, which we do) > and removing it it would break a lot of configuration scripts etc., for > no really good gain. How about turning it out with a legacy/deprecated CONFIG_ option so we can prepare people. For now it can default to enabled. -d - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 10:22 ` David Ford 2001-01-07 12:01 ` David S. Miller @ 2001-01-07 12:13 ` Chris Wedgwood 2001-01-07 12:19 ` David Ford 1 sibling, 1 reply; 77+ messages in thread From: Chris Wedgwood @ 2001-01-07 12:13 UTC (permalink / raw) To: David Ford; +Cc: Ben Greear, linux-kernel, netdev On Sun, Jan 07, 2001 at 02:22:31AM -0800, David Ford wrote: BIND copes just fine, how would it not? I haven't heard any problems with routing daemons either. Bind knows about multiple virtual interfaces; but we can also have multiple addresses on a single interface and have no virtual interfaces at all. I doubt bind knows about this nor handles it. <pause> OK, I'm a liar -- bind does handle this. Cool. Jan 8 01:09:12 tapu named[599]: listening on [127.0.0.1].53 (lo) Jan 8 01:09:12 tapu named[599]: listening on [10.0.0.1].53 (lo) Jan 8 01:09:12 tapu named[599]: listening on [x.x.x.x].53 (x0) Jan 8 01:09:12 tapu named[599]: Forwarding source address is [0.0.0.0].1032 This is good news, because it means there is a precedent for multiple addresses on a single interface so we can kill the <ifname>:<n> syntax in favor of the above which is cleaner of more accurately represents what is happening. --cw - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 12:13 ` Chris Wedgwood @ 2001-01-07 12:19 ` David Ford 0 siblings, 0 replies; 77+ messages in thread From: David Ford @ 2001-01-07 12:19 UTC (permalink / raw) To: Chris Wedgwood; +Cc: Ben Greear, linux-kernel, netdev On Mon, 8 Jan 2001, Chris Wedgwood wrote: > Bind knows about multiple virtual interfaces; but we can also have > multiple addresses on a single interface and have no virtual > interfaces at all. > > I doubt bind knows about this nor handles it. > > <pause> > > OK, I'm a liar -- bind does handle this. Cool. > > Jan 8 01:09:12 tapu named[599]: listening on [127.0.0.1].53 (lo) > Jan 8 01:09:12 tapu named[599]: listening on [10.0.0.1].53 (lo) > Jan 8 01:09:12 tapu named[599]: listening on [x.x.x.x].53 (x0) > Jan 8 01:09:12 tapu named[599]: Forwarding source address is [0.0.0.0].1032 > > This is good news, because it means there is a precedent for multiple > addresses on a single interface so we can kill the <ifname>:<n> > syntax in favor of the above which is cleaner of more accurately > represents what is happening. I've been using the new form for a long long time now and I assure you, BIND hasn't had any problems with it for a long long time. :) BIND as most all programs, should not care what the interface is or how it is laid out. It binds to an address and port and shouldn't care otherwise. Would I really put you in a quandry if I told you I had multiple different media interfaces all with the same IP and BIND happily answered on all of them? ;) -d -- ---NOTICE--- fwd: fwd: fwd: type emails will be deleted automatically. "There is a natural aristocracy among men. The grounds of this are virtue and talents", Thomas Jefferson [1742-1826], 3rd US President - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 3:29 ` Chris Wedgwood 2001-01-07 6:15 ` Ben Greear 2001-01-07 10:22 ` David Ford @ 2001-01-07 16:56 ` jamal 2001-01-07 17:37 ` Gleb Natapov 2 siblings, 1 reply; 77+ messages in thread From: jamal @ 2001-01-07 16:56 UTC (permalink / raw) To: Chris Wedgwood; +Cc: Ben Greear, linux-kernel, netdev On Sun, 7 Jan 2001, Chris Wedgwood wrote: > That said, if this was done -- how would things like routing daemons > and bind cope? I dont know of any routing daemons that are taking advantage of the alias interfaces today. This being said, i think that the fact that a lot of protocols that need IP-ization are coming up eg VLANs; you should see a good use for this. Out of curiosity for the VLAN people, how do you work with something like Zebra? One could have the route daemon take charge of management of these devices, a master device like "eth0" and a attached device like "vlan0". They both share the same ifindex but different have labels. Basically, i dont think there would be a problem. cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 16:56 ` jamal @ 2001-01-07 17:37 ` Gleb Natapov 2001-01-07 18:02 ` routable interfaces WAS( " jamal 0 siblings, 1 reply; 77+ messages in thread From: Gleb Natapov @ 2001-01-07 17:37 UTC (permalink / raw) To: jamal; +Cc: Chris Wedgwood, Ben Greear, linux-kernel, netdev On Sun, Jan 07, 2001 at 11:56:26AM -0500, jamal wrote: > > > On Sun, 7 Jan 2001, Chris Wedgwood wrote: > > > That said, if this was done -- how would things like routing daemons > > and bind cope? > > I dont know of any routing daemons that are taking advantage of the > alias interfaces today. This being said, i think that the fact that a > lot of protocols that need IP-ization are coming up eg VLANs; you should > see a good use for this. Out of curiosity for the VLAN people, how do you > work with something like Zebra? Without any problems. Zebra sees different VLAN interfaces as different networks and happily route between them. > One could have the route daemon take charge of management of these > devices, a master device like "eth0" and a attached device like "vlan0". > They both share the same ifindex but different have labels. > Basically, i dont think there would be a problem. > Theoretically it seems to be possible but it's much harder to do in Zebra than in kernel. And "eth0" shouldn't share ifindex with "vlan0" I don't think SNMP will be happy about that. -- Gleb. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* routable interfaces WAS( Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 17:37 ` Gleb Natapov @ 2001-01-07 18:02 ` jamal 2001-01-07 19:21 ` routable interfaces WAS( Re: [PATCH] hashed device lookup (DoesNOT " Ben Greear 0 siblings, 1 reply; 77+ messages in thread From: jamal @ 2001-01-07 18:02 UTC (permalink / raw) To: Gleb Natapov; +Cc: Chris Wedgwood, Ben Greear, linux-kernel, netdev On Sun, 7 Jan 2001, Gleb Natapov wrote: > > One could have the route daemon take charge of management of these > > devices, a master device like "eth0" and a attached device like "vlan0". > > They both share the same ifindex but different have labels. > > Basically, i dont think there would be a problem. > > > > Theoretically it seems to be possible but it's much harder to do in Zebra than > in kernel. And "eth0" shouldn't share ifindex with "vlan0" I don't think SNMP > will be happy about that. A very good reason why you would want them to have separate ifindices. Essentially, vlans have to be separate interfaces today. Other "virtual" interfaces such as aliased devices are not going to work with route daemons today since they dont meet this requirement. Not to rain on Ben's parade but: My thought was to have the vlan be attached on the interface ifa list and just give it a different label since it is a "virtual interface" on top of the "physical interface". Now that you mention the SNMP requirement, maybe an idea of major:minor ifindex makes sense. Say make the ifindex a u32 with major 16 bit and minor 16 bit. This way we can have upto 2^16 physical interfaces and upto 2^16 virtual interfaces on the physical interface. The search will be broken into two 16 bits. Thoughts? cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: routable interfaces WAS( Re: [PATCH] hashed device lookup (DoesNOT meet Linus' sumission policy!) 2001-01-07 18:02 ` routable interfaces WAS( " jamal @ 2001-01-07 19:21 ` Ben Greear 2001-01-07 18:29 ` jamal 0 siblings, 1 reply; 77+ messages in thread From: Ben Greear @ 2001-01-07 19:21 UTC (permalink / raw) To: jamal; +Cc: Gleb Natapov, Chris Wedgwood, linux-kernel, netdev jamal wrote: > A very good reason why you would want them to have separate ifindices. > Essentially, vlans have to be separate interfaces today. Other "virtual" > interfaces such as aliased devices are not going to work with route > daemons today since they dont meet this requirement. > > Not to rain on Ben's parade but: > My thought was to have the vlan be attached on the interface ifa list and > just give it a different label since it is a "virtual interface" on top > of the "physical interface". Now that you mention the SNMP requirement, > maybe an idea of major:minor ifindex makes sense. Say make the ifindex > a u32 with major 16 bit and minor 16 bit. This way we can have upto 2^16 > physical interfaces and upto 2^16 virtual interfaces on the physical > interface. The search will be broken into two 16 bits. What problem does this fix? If you are mucking with the ifindex, you may be affecting many places in the rest of the kernel, as well as user-space programs which use ifindex to bind to raw devices. On the other hand, the hash patch touches only one file, and should not have any external impacts. > > Thoughts? > > cheers, > jamal -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: routable interfaces WAS( Re: [PATCH] hashed device lookup (DoesNOT meet Linus' sumission policy!) 2001-01-07 19:21 ` routable interfaces WAS( Re: [PATCH] hashed device lookup (DoesNOT " Ben Greear @ 2001-01-07 18:29 ` jamal 2001-01-07 18:51 ` Gleb Natapov 2001-01-07 19:19 ` routable interfaces WAS( Re: [PATCH] hashed device lookup(DoesNOT " Sandy Harris 0 siblings, 2 replies; 77+ messages in thread From: jamal @ 2001-01-07 18:29 UTC (permalink / raw) To: Ben Greear; +Cc: Gleb Natapov, Chris Wedgwood, linux-kernel, netdev On Sun, 7 Jan 2001, Ben Greear wrote: > > My thought was to have the vlan be attached on the interface ifa list and > > just give it a different label since it is a "virtual interface" on top > > of the "physical interface". Now that you mention the SNMP requirement, > > maybe an idea of major:minor ifindex makes sense. Say make the ifindex > > a u32 with major 16 bit and minor 16 bit. This way we can have upto 2^16 > > physical interfaces and upto 2^16 virtual interfaces on the physical > > interface. The search will be broken into two 16 bits. > > What problem does this fix? > > If you are mucking with the ifindex, you may be affecting many places > in the rest of the kernel, as well as user-space programs which use > ifindex to bind to raw devices. > I am talking about 2.5 possibilities now that 2.4 is out. I think "parasitic/virtual" interfaces is not a issue specific to VLANs. VLANs happen to use devices today to solve the problem. As pointed by that example no routing daemons are doing aliased interfaces (which are also virtual interfaces). We need some more general solution. cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: routable interfaces WAS( Re: [PATCH] hashed device lookup (DoesNOT meet Linus' sumission policy!) 2001-01-07 18:29 ` jamal @ 2001-01-07 18:51 ` Gleb Natapov 2001-01-07 19:05 ` jamal 2001-01-07 19:19 ` routable interfaces WAS( Re: [PATCH] hashed device lookup(DoesNOT " Sandy Harris 1 sibling, 1 reply; 77+ messages in thread From: Gleb Natapov @ 2001-01-07 18:51 UTC (permalink / raw) To: jamal; +Cc: Ben Greear, Chris Wedgwood, linux-kernel, netdev On Sun, Jan 07, 2001 at 01:29:51PM -0500, jamal wrote: > > > On Sun, 7 Jan 2001, Ben Greear wrote: > > > > My thought was to have the vlan be attached on the interface ifa list and > > > just give it a different label since it is a "virtual interface" on top > > > of the "physical interface". Now that you mention the SNMP requirement, > > > maybe an idea of major:minor ifindex makes sense. Say make the ifindex > > > a u32 with major 16 bit and minor 16 bit. This way we can have upto 2^16 > > > physical interfaces and upto 2^16 virtual interfaces on the physical > > > interface. The search will be broken into two 16 bits. > > > > What problem does this fix? > > > > If you are mucking with the ifindex, you may be affecting many places > > in the rest of the kernel, as well as user-space programs which use > > ifindex to bind to raw devices. > > > > I am talking about 2.5 possibilities now that 2.4 is out. I think > "parasitic/virtual" interfaces is not a issue specific to VLANs. > VLANs happen to use devices today to solve the problem. > As pointed by that example no routing daemons are doing aliased > interfaces (which are also virtual interfaces). > We need some more general solution. > And what about bonding device? What major number should they use? Ifindexes not reusable so in your scheme we should have separate minor counter for each major interface, what for? -- Gleb. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: routable interfaces WAS( Re: [PATCH] hashed device lookup (DoesNOT meet Linus' sumission policy!) 2001-01-07 18:51 ` Gleb Natapov @ 2001-01-07 19:05 ` jamal 0 siblings, 0 replies; 77+ messages in thread From: jamal @ 2001-01-07 19:05 UTC (permalink / raw) To: Gleb Natapov; +Cc: Ben Greear, Chris Wedgwood, linux-kernel, netdev On Sun, 7 Jan 2001, Gleb Natapov wrote: > And what about bonding device? What major number should they use? Would that include several ifindeces? use standards. 802.3ad(?). Didnt Intel release some code on this or are they still playing the big bad corporation? Normaly standards will take care of things like MIBs etc. > Ifindexes not reusable so in your scheme we should have separate minor > counter for each major interface, what for? Still each "interface" has its own ifindex, so counters will be per-interface. Here's what i mean: netdevice (major part of ifindex, proto unaware link layer) | | --> protocol level (IPV4, V6 etc) | ..........| | |--> interface 2^16 | -->interface 1 The interface could be looked as something on top of a device (struct ifa) and is distinguishable on the device by its minor number. EG ifindex 1002 is eth0:2. I could write a whole lengthy RFC if it is of interest and we could use that as a starting point for discussion. Note, i dont think this would affect the core code other than the setup part. cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: routable interfaces WAS( Re: [PATCH] hashed device lookup(DoesNOT meet Linus' sumission policy!) 2001-01-07 18:29 ` jamal 2001-01-07 18:51 ` Gleb Natapov @ 2001-01-07 19:19 ` Sandy Harris 2001-01-07 20:42 ` Ben Greear 1 sibling, 1 reply; 77+ messages in thread From: Sandy Harris @ 2001-01-07 19:19 UTC (permalink / raw) To: jamal; +Cc: linux-kernel, netdev jamal wrote: > > What problem does this fix? > > > > If you are mucking with the ifindex, you may be affecting many places > > in the rest of the kernel, as well as user-space programs which use > > ifindex to bind to raw devices. > > I am talking about 2.5 possibilities now that 2.4 is out. I think > "parasitic/virtual" interfaces is not a issue specific to VLANs. > VLANs happen to use devices today to solve the problem. > As pointed by that example no routing daemons are doing aliased > interfaces (which are also virtual interfaces). > We need some more general solution. > Something like this also becomes an issue when you want routing daemons to interact sensibly with IPSEC tunnels. A paper on these issues is at: http://www.quintillion.com/fdis/moat/ipsec+routing/ It is not (AFAIK) clear that the FreeS/WAN team will adopt the solutions suggested there, but it is very clear we need to deal with those issues. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: routable interfaces WAS( Re: [PATCH] hashed device lookup(DoesNOT meet Linus' sumission policy!) 2001-01-07 19:19 ` routable interfaces WAS( Re: [PATCH] hashed device lookup(DoesNOT " Sandy Harris @ 2001-01-07 20:42 ` Ben Greear 2001-01-08 0:37 ` jamal 0 siblings, 1 reply; 77+ messages in thread From: Ben Greear @ 2001-01-07 20:42 UTC (permalink / raw) To: Sandy Harris; +Cc: jamal, linux-kernel, netdev Sandy Harris wrote: > > jamal wrote: > > > > What problem does this fix? > > > > > > If you are mucking with the ifindex, you may be affecting many places > > > in the rest of the kernel, as well as user-space programs which use > > > ifindex to bind to raw devices. > > > > I am talking about 2.5 possibilities now that 2.4 is out. I think > > "parasitic/virtual" interfaces is not a issue specific to VLANs. > > VLANs happen to use devices today to solve the problem. > > As pointed by that example no routing daemons are doing aliased > > interfaces (which are also virtual interfaces). > > We need some more general solution. > > > Something like this also becomes an issue when you want routing > daemons to interact sensibly with IPSEC tunnels. A paper on these > issues is at: > > http://www.quintillion.com/fdis/moat/ipsec+routing/ > > It is not (AFAIK) clear that the FreeS/WAN team will adopt the solutions > suggested there, but it is very clear we need to deal with those issues. Hrm, what if they just made each IP-SEC interface a net_device? If they are a routable entity, with it's own IP address, it starts to look a lot like an interface/net_device. This has seeming worked well for VLANs: Maybe net_device is already general enough?? So, what would be the down-side of having VLANs and other virtual interfaces be net_devices? The only thing I ever thought of was the linear lookups, which is why I wrote the hash code. The beauty of working with existing user-space tools should not be over-looked! It may be easier to fix other problems with many interface/net_devices than cram a whole other virtual net_device structure (with many duplicate functionalities found in the current net_device). Ben -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: routable interfaces WAS( Re: [PATCH] hashed device lookup(DoesNOT meet Linus' sumission policy!) 2001-01-07 20:42 ` Ben Greear @ 2001-01-08 0:37 ` jamal 2001-01-08 5:25 ` routable interfaces WAS( Re: [PATCH] hashed device lookup(DoesNOTmeet " Ben Greear 0 siblings, 1 reply; 77+ messages in thread From: jamal @ 2001-01-08 0:37 UTC (permalink / raw) To: Ben Greear; +Cc: Sandy Harris, linux-kernel, netdev On Sun, 7 Jan 2001, Ben Greear wrote: > Hrm, what if they just made each IP-SEC interface a net_device? If they > are a routable entity, with it's own IP address, it starts to look a lot > like an interface/net_device. As in my response to Matti, i thing a netdevice is a generalized link layer structure and should remain that way. To add a new naming convention a "link" or maybe an "interface" is what the protocol aware part should be. Define a routable "interface" to be one that (from an abstraction perspective) sits on top of a netdevice and has a ifindex, name, and IP address (v4 or V6) I think the goals of the author of that IPSEC article are served with this scheme. I need to read that article, i just schemed through it. > > This has seeming worked well for VLANs: Maybe net_device is already > general enough?? I think it is not proper to generalize netdevices for IP. I am not thinking of dead protocols like IPX, more of other newer encapsulations such as MPLS etc. > > So, what would be the down-side of having VLANs and other virtual interfaces > be net_devices? The only thing I ever thought of was the linear lookups, > which is why I wrote the hash code. The beauty of working with existing > user-space tools should not be over-looked! > IP configuration tools you mean. Fine, they should be used to configure "interfaces" in the way i defined them above. > It may be easier to fix other problems with many interface/net_devices > than cram a whole other virtual net_device structure (with many duplicate > functionalities found in the current net_device). > It makes sense from an abstraction and management perspective to have all virtual interfaces which run on top of a physical interface to be managed in conjuction with the device. Device goes down, you destroy them or send them to a shutdown state (instead of messaging) etc. cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: routable interfaces WAS( Re: [PATCH] hashed device lookup(DoesNOTmeet Linus' sumission policy!) 2001-01-08 0:37 ` jamal @ 2001-01-08 5:25 ` Ben Greear 2001-01-08 13:05 ` jamal 0 siblings, 1 reply; 77+ messages in thread From: Ben Greear @ 2001-01-08 5:25 UTC (permalink / raw) To: jamal; +Cc: Sandy Harris, linux-kernel, netdev jamal wrote: > > On Sun, 7 Jan 2001, Ben Greear wrote: > > > Hrm, what if they just made each IP-SEC interface a net_device? If they > > are a routable entity, with it's own IP address, it starts to look a lot > > like an interface/net_device. > > As in my response to Matti, i thing a netdevice is a generalized link > layer structure and should remain that way. Yes, but VLANs are a link-layer structure too, and things like tunnels are really link-layer too, as far as protocols using them are concerned. With tunneling and virtual interfaces, you could conceivably do something like: OC3 - ATM - Ethernet - VLAN - IP - IP-Sec - IP as well as plain old: Ethernet - IP Which of these are netdevices? (I argue that at least the Ethernet-over-ATM, VLAN, and IP-Sec entities could profit from being a net_device at it's core.) You argue that we should split the net_device into physical and virtual portions. Perhaps you could give an idea of the data members that would belong in the new structures? I argue that you lose the minute you need one in both structures :) > > This has seeming worked well for VLANs: Maybe net_device is already > > general enough?? > > I think it is not proper to generalize netdevices for IP. I am not > thinking of dead protocols like IPX, more of other newer encapsulations > such as MPLS etc. MPLS can run over FrameRelay, Ethernet, and ATM, at the moment (right?). What if you want to run MPLS over an IP-Sec link? If you want it to magically work, IP-Sec could be a net_device with it's own particular member methods and private data that let it do the right thing. > > So, what would be the down-side of having VLANs and other virtual interfaces > > be net_devices? The only thing I ever thought of was the linear lookups, > > which is why I wrote the hash code. The beauty of working with existing > > user-space tools should not be over-looked! > > > > IP configuration tools you mean. Fine, they should be used to configure > "interfaces" in the way i defined them above. Think also of creating sockets with SOCK_RAW and other lower-level (but user-space) access to the net_device's methods. > It makes sense from an abstraction and management perspective to have all > virtual interfaces which run on top of a physical interface to be > managed in conjuction with the device. What if you had an inverse-MUX type of device that spanned two different physical interfaces. Then, one can go down, but the virtual interface is still up. So, there is not a one-to-one coorespondence. At a higher level, what if your interface is some tunnel running over IP. IP in turn can be routed out any physical interface (and may dynamically change due to routing protocols.) > Device goes down, you destroy them > or send them to a shutdown state (instead of messaging) etc. > > cheers, > jamal -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: routable interfaces WAS( Re: [PATCH] hashed device lookup(DoesNOTmeet Linus' sumission policy!) 2001-01-08 5:25 ` routable interfaces WAS( Re: [PATCH] hashed device lookup(DoesNOTmeet " Ben Greear @ 2001-01-08 13:05 ` jamal 0 siblings, 0 replies; 77+ messages in thread From: jamal @ 2001-01-08 13:05 UTC (permalink / raw) To: Ben Greear; +Cc: Sandy Harris, linux-kernel, netdev On Sun, 7 Jan 2001, Ben Greear wrote: > jamal wrote: > > As in my response to Matti, i thing a netdevice is a generalized link > > layer structure and should remain that way. > > Yes, but VLANs are a link-layer structure too, and things like tunnels > are really link-layer too, as far as protocols using them are concerned. > > With tunneling and virtual interfaces, you could conceivably do something > like: > > OC3 - ATM - Ethernet - VLAN - IP - IP-Sec - IP > as well as plain old: > Ethernet - IP > > Which of these are netdevices? > I think you are mixing up the packet munging/management part of the entity and the data part. There is a very close relation, however the munger is _not_ a netdevice. The entry l2 protocol demuxing selects the munger. > (I argue that at least the Ethernet-over-ATM, VLAN, and IP-Sec entities could > profit from being a net_device at it's core.) > > You argue that we should split the net_device into physical and virtual > portions. Iam not asking for this. It is pseudo-already-there. What i am asking for is consistency. A virtual IP address is "virtual" and resides on top of a link (eg ethernet) as does a VLAN. Yet a VLAN gets its own life as a netdevice. Why? so that it can be "routable". > Perhaps you could give an idea of the data members that would belong in the new > structures? I argue that you lose the minute you need one in both structures :) > I dont have to add new data structures. The ifa structure on a netdevice is sufficient. It has a name/label, it has an IP address, it lacks an ifindex. counters is the other lacking one (thinking of what Gleb posted). A vlan device could be a simple IP-alias. I am not all bent to insist that it has to be an ifa. What matters is consistency. I want an alias to be used by a route daemon. The easiest brute force way is to make it a netdevice. You might hack this from the route daemon itself as well but as Gleb was pointing out SNMP wont be happy. > > > This has seeming worked well for VLANs: Maybe net_device is already > > > general enough?? > > > > I think it is not proper to generalize netdevices for IP. I am not > > thinking of dead protocols like IPX, more of other newer encapsulations > > such as MPLS etc. > > MPLS can run over FrameRelay, Ethernet, and ATM, at the moment (right?). > > What if you want to run MPLS over an IP-Sec link? If you want it to > magically work, IP-Sec could be a net_device with it's own particular > member methods and private data that let it do the right thing. > Again, this is an issue of netdevice data vs its associated methods/mungers. > > What if you had an inverse-MUX type of device that spanned two different > physical interfaces. Then, one can go down, but the virtual interface > is still up. So, there is not a one-to-one coorespondence. At a higher > level, what if your interface is some tunnel running over IP. IP in turn > can be routed out any physical interface (and may dynamically change due > to routing protocols.) it's that thin line between a netdevice and the packet munging. Today the first association is via a l2 demux point -- that split is very clean, IMO. An IP packet comes in, you invoke the IP handling code. a type ETH_P_802_1Q comes in you invoke the vlan handling code. At some point along that path you invoke the ip handling code which ends up invoking the IPSEC handler etc. IP/GRE or IPIP tunnels get handled the same way. NOTE that this has absolutely nothing to do with a netdevice. Your VLAN code manages the state mapping of what vlanid maps to what skb->dev. I would say this is where the one-to-one mapping is maintained. You dont have to assume a device to get the mapping. Infact each of those stages maintains some state to work. IP maintains a route table. it should probably be refined further to be based on a classification of any sort needed instead of the incremental classification only. The posting by Matti pointed to some page that was suggesting a netif_rx per input device. I also think this is that linked association that a netdvice is a net-munger as well as a routable interface. Maybe the netdevice is the best abstraction for a routable interface because it is already stamped in people's heads and also because IP rules. Once you've stripped all headers and done what you need to do just pass it to a dev->rx() and it will take it from there. I still see confusion. BTW,The problem you described will face you on a VLAN spanning two physical ports ;-> Do tell me how you solve it. cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-06 21:33 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) Ben Greear 2001-01-06 23:17 ` David S. Miller 2001-01-07 3:29 ` Chris Wedgwood @ 2001-01-07 3:29 ` Andi Kleen 2001-01-07 4:00 ` jamal 2001-01-07 6:22 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) Ben Greear 2001-01-07 5:40 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) David S. Miller 3 siblings, 2 replies; 77+ messages in thread From: Andi Kleen @ 2001-01-07 3:29 UTC (permalink / raw) To: Ben Greear; +Cc: linux-kernel, netdev On Sat, Jan 06, 2001 at 02:33:27PM -0700, Ben Greear wrote: > I'm hoping that I can get a few comments on this code. It was added > to (significantly) speed up things like 'ifconfig -a' when running with > 4000 or so VLAN devices. It should also help other instances with lots > of (virtual) devices, like FrameRelay, ATM, and possibly virtual IP > interfaces. It probably won't help 'normal' users much, and in it's final > form, should probably be a selectable option in the config process. > > Anyway, let me know what you think! Does it make any significant different with the ifconfig from newest nettools? I removed a quadratic algorithm from ifconfig's device parsing, and with that I was able to display a few thousand alias devices on a unpatched kernel in reasonable time. -Andi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 3:29 ` [PATCH] hashed device lookup (Does NOT meet " Andi Kleen @ 2001-01-07 4:00 ` jamal 2001-01-07 4:06 ` Andi Kleen ` (2 more replies) 2001-01-07 6:22 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) Ben Greear 1 sibling, 3 replies; 77+ messages in thread From: jamal @ 2001-01-07 4:00 UTC (permalink / raw) To: Andi Kleen; +Cc: Ben Greear, linux-kernel, netdev On Sun, 7 Jan 2001, Andi Kleen wrote: > Does it make any significant different with the ifconfig from newest nettools? I > removed a quadratic algorithm from ifconfig's device parsing, and with that I was > able to display a few thousand alias devices on a unpatched kernel in reasonable time. I think someone should just flush ifconfig down some toilet. a wrapper around "ip" to to give the same look and feel as ifconfig would be a good thing so that some stupid program that depends on ifconfig look and feel would be a good start. Not to stray from the subject, Ben's effort is still needed. I think real numbers are useful instead of claims like it "displayed faster" cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 4:00 ` jamal @ 2001-01-07 4:06 ` Andi Kleen 2001-01-07 5:43 ` David S. Miller 2001-01-07 6:24 ` Ben Greear 2 siblings, 0 replies; 77+ messages in thread From: Andi Kleen @ 2001-01-07 4:06 UTC (permalink / raw) To: jamal; +Cc: Andi Kleen, Ben Greear, linux-kernel, netdev On Sat, Jan 06, 2001 at 11:00:10PM -0500, jamal wrote: > Not to stray from the subject, Ben's effort is still needed. I think real > numbers are useful instead of claims like it "displayed faster" The problem with old ifconfig was really visible, old ifconfig needed several minutes to setup. It was slow enough that "visual benchmarking" worked very well. With the fixed ifconfig it scrolls without too annoying delays. The ifconfig could be tuned even more by adding a hash table, but it didn't look necessary (and frankly nobody wants to invest too much work into it, given that ip is far superior) Note that the alias case is different from thousands of devices -- alias works via SIOCGIFCONF while devices work via /proc/net/dev. -Andi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 4:00 ` jamal 2001-01-07 4:06 ` Andi Kleen @ 2001-01-07 5:43 ` David S. Miller 2001-01-07 11:40 ` [little bit OT] ip _IS_ _NOT_ ifconfig and route ! (was Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!)) Henning P. Schmiedehausen ` (3 more replies) 2001-01-07 6:24 ` Ben Greear 2 siblings, 4 replies; 77+ messages in thread From: David S. Miller @ 2001-01-07 5:43 UTC (permalink / raw) To: hadi; +Cc: ak, greearb, linux-kernel, netdev Date: Sat, 6 Jan 2001 23:00:10 -0500 (EST) From: jamal <hadi@cyberus.ca> I think someone should just flush ifconfig down some toilet. a wrapper around "ip" to to give the same look and feel as ifconfig would be a good thing so that some stupid program that depends on ifconfig look and feel would be a good start. I could not agree more. This reminds me to do something I could not justify before, making netlink be enabled in the kernel and non-configurable. I could almost, but not quite, justify it right now just because "ip" is becomming standard and needs it. Not to stray from the subject, Ben's effort is still needed. I think real numbers are useful instead of claims like it "displayed faster" See my previous email, if it's just slow because of some poorly coded version of ifconfig, it does not justify the patch. If only a forcefully created "benchmark" can show some performance problem, that is not an acceptable reason to champion this patch. Ok? Later, David S. Miller davem@redhat.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* [little bit OT] ip _IS_ _NOT_ ifconfig and route ! (was Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!)) 2001-01-07 5:43 ` David S. Miller @ 2001-01-07 11:40 ` Henning P. Schmiedehausen 2001-01-07 11:50 ` David S. Miller ` (2 subsequent siblings) 3 siblings, 0 replies; 77+ messages in thread From: Henning P. Schmiedehausen @ 2001-01-07 11:40 UTC (permalink / raw) To: linux-kernel davem@redhat.com (David S. Miller) writes: > Date: Sat, 6 Jan 2001 23:00:10 -0500 (EST) > From: jamal <hadi@cyberus.ca> > I think someone should just flush ifconfig down some toilet. a wrapper > around "ip" to to give the same look and feel as ifconfig would be a good > thing so that some stupid program that depends on ifconfig look and feel > would be a good start. >I could not agree more. This reminds me to do something I could not >justify before, making netlink be enabled in the kernel and >non-configurable. The fact there there are no man pages, no backward compatibility and no information for people coming from other unixes (and pretty much everything else _has_ ifconfig and friends), that iproute does not work with older kernels, that everyone that reads the docs and looks for ifconfig and that booting another kernel completely breaks your ip configuration (which is, in the times of co-located, headless servers some 3,000 miles away somehow a concern to administrators and users) should IMNSVHO count at least a little towards keeping the older tools. As long as "man ip" on my machines returns "ip(7) - ip - Linux IPv4 protocol implementation", using "ip" exclusively instead of ifconfig and route is IMHO not an option for anyone else than bleeding edge hackers and linux gurus. ip is an ultra-powerful command for the linux ip routing subsystem. But at least IMHO it introduces so many new and different concepts that there should be an "ip_lite" config command that at least related semantically to the ifconfig/route/arp combo, so that you can tell newbies (and I consider in this case people with 10+ years of Solaris experience as "linux routing command newbies") that ifconfig eth0 ----> ip link show eth0 and so on. Give a small command with a small man page for these "normal" cases and give all-powerful "ip" for all the cool, advanced stuff. Maybe the major distribution vendors should pay a decent technical writer to work with Alexey to whip up man pages for these tools. There are none in the iproute-current package (I looked) which contains all the informations in an unix-compatible format. And yes, I don't consider HTML, tex, texinfo or info or (horrors) PS and PDF format "decent documentation", Unix-style wise. At least as long as we don't have a man command that understands HTML like Solaris man does. yes, it _is_ cool to type "ip route show" and pretend to be on level with Cisco. But where is the documentation to _parse_ the displayed information aside from reading lots of mailing list articles and code? And don't tell me it's in the docs in the package. There is a reference with at best terse examples. To quote a randomly picked part (p.25): --- cut --- scope SCOPE_VAL - scope of the destinations covered by the route prefix. SCOPE_VAL may be a number or a string from the file /etc/iproute2/rt_scopes. If this parameter is omitted, ip assumes scope global for all gatewayed unicast routes, scope link for direct unicast routes and broadcasts and scope host for local routes. --- cut --- % ip route show 192.168.2.4 dev eth0 scope link 192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.4 127.0.0.0/8 dev lo scope link default via 192.168.2.1 dev eth0 fine. Why is the last route (which is IMHO a gatewayed unicast route) not 0.0.0.0/0 vial 192.168.2.1 dev eth0 scope global ? In fact it behaves like this: % ip route show scope global default via 192.168.2.1 dev eth0 I didn't find any "the default route is displayed different and scope global is normally omitted" in the documentation. And the list goes on. And, please, convert all this "link" "route" "show" with abreviations and abiguities into either getopt "-l" "-r" "s" or long_getopts "--link" "--route" "--show" command line options. Why? Easy: consider link == "-t link" and show == "-s" then "ip -t link -s" yields the same result as "ip -s -t link" but % ip link show 1: lo: <LOOPBACK,UP> mtu 3924 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100 link/ether 00:50:04:48:b9:f0 brd ff:ff:ff:ff:ff:ff % ip show link Object "show" is unknown, try "ip help". any further questions? If you write scripts where you push your arguments on a stack and then do a " join arguments into line, execute line", having position independend argument order is a clear win over every syntactic sugar. But then again, it is a real world use. Regards Henning -- Dipl.-Inf. (Univ.) Henning P. Schmiedehausen -- Geschaeftsfuehrer INTERMETA - Gesellschaft fuer Mehrwertdienste mbH hps@intermeta.de Am Schwabachgrund 22 Fon.: 09131 / 50654-0 info@intermeta.de D-91054 Buckenhof Fax.: 09131 / 50654-20 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [little bit OT] ip _IS_ _NOT_ ifconfig and route ! (was Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!)) 2001-01-07 5:43 ` David S. Miller 2001-01-07 11:40 ` [little bit OT] ip _IS_ _NOT_ ifconfig and route ! (was Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!)) Henning P. Schmiedehausen @ 2001-01-07 11:50 ` David S. Miller 2001-01-07 13:47 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox 2001-01-07 15:56 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) jamal 3 siblings, 0 replies; 77+ messages in thread From: David S. Miller @ 2001-01-07 11:50 UTC (permalink / raw) To: hps; +Cc: linux-kernel Date: Sun, 7 Jan 2001 11:40:10 +0000 (UTC) From: "Henning P. Schmiedehausen" <hps@tanstaafl.de> As long as "man ip" on my machines returns "ip(7) - ip - Linux IPv4 protocol implementation", using "ip" exclusively instead of ifconfig and route is IMHO not an option for anyone else than bleeding edge hackers and linux gurus. As long as "man printf" gives me that damn shell command manpage, I will not use printf in my C applications. :-)))) Yes, I do understand, "ip" needs some more documentation perhaps. Nobody has suggested getting rid of ifconfig, rather we have suggested to implement it in terms of "ip" because, as you even mention, "ip" is powerful and can do everything ifconfig can do thus ifconfig can be implemented as a wrapper on top of "ip". Nobody has suggested to use "ip" exclusively, you will not invoke "ip" with the suggestion I am making. Ifconfig indirectly will, but you won't even notice nor should you care. They will be packaged together, so even that won't be an issue. Later, David S. Miller davem@redhat.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 5:43 ` David S. Miller 2001-01-07 11:40 ` [little bit OT] ip _IS_ _NOT_ ifconfig and route ! (was Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!)) Henning P. Schmiedehausen 2001-01-07 11:50 ` David S. Miller @ 2001-01-07 13:47 ` Alan Cox 2001-01-07 16:12 ` jamal 2001-01-07 15:56 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) jamal 3 siblings, 1 reply; 77+ messages in thread From: Alan Cox @ 2001-01-07 13:47 UTC (permalink / raw) To: David S. Miller; +Cc: hadi, ak, greearb, linux-kernel, netdev > thing so that some stupid program that depends on ifconfig look and feel > would be a good start. > > I could not agree more. This reminds me to do something I could not > justify before, making netlink be enabled in the kernel and > non-configurable. Why. Its bad enough that the networking layer doesnt let you configure out stuff like SACK and the big routing hashes. Please don't make it even worse for the embedded world. 99.9% of Linux boxes probably have less than 5 routing table entries > I could almost, but not quite, justify it right now just because "ip" > is becomming standard and needs it. ip is also not the smallest and simplest of binaries. You can fit an ifconfig for ip in about 24K - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 13:47 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox @ 2001-01-07 16:12 ` jamal 2001-01-07 16:51 ` Alan Cox 0 siblings, 1 reply; 77+ messages in thread From: jamal @ 2001-01-07 16:12 UTC (permalink / raw) To: Alan Cox; +Cc: David S. Miller, ak, greearb, linux-kernel, netdev On Sun, 7 Jan 2001, Alan Cox wrote: > Why. Its bad enough that the networking layer doesnt let you configure out > stuff like SACK and the big routing hashes. Please don't make it even worse > for the embedded world. 99.9% of Linux boxes probably have less than 5 routing > table entries Ok. Good point. But remember that parsing /proc for an embedded system is also not the most healthy thing. > > > I could almost, but not quite, justify it right now just because "ip" > > is becomming standard and needs it. > > ip is also not the smallest and simplest of binaries. You can fit an ifconfig > for ip in about 24K > ip is also a replacement of many nettools: ifconfig, route, arp config, tunneling setup etc. You can also do many funky things with it using small scripts (ip dup-address detection is documented). Seems like Alexey already has a wrapper "ifcfg" which is a ifconfig replacement. It does not format display the same way as ifconfig; however, that would only be necessary if some app is dependent on ifconfig output. cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 16:12 ` jamal @ 2001-01-07 16:51 ` Alan Cox 0 siblings, 0 replies; 77+ messages in thread From: Alan Cox @ 2001-01-07 16:51 UTC (permalink / raw) To: jamal; +Cc: Alan Cox, David S. Miller, ak, greearb, linux-kernel, netdev > Ok. Good point. > But remember that parsing /proc for an embedded system is also not the > most healthy thing. I dont compile in /proc either. SIOCGIFCONF is enough for an embedded box. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 5:43 ` David S. Miller ` (2 preceding siblings ...) 2001-01-07 13:47 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox @ 2001-01-07 15:56 ` jamal 2001-01-07 16:30 ` Gleb Natapov 2001-01-07 19:54 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumissionpolicy!) Ben Greear 3 siblings, 2 replies; 77+ messages in thread From: jamal @ 2001-01-07 15:56 UTC (permalink / raw) To: David S. Miller; +Cc: ak, greearb, linux-kernel, netdev On Sat, 6 Jan 2001, David S. Miller wrote: > I could not agree more. This reminds me to do something I could not > justify before, making netlink be enabled in the kernel and > non-configurable. I always use netlink and friends for something or the other. Route protocols, traffic control configuration, device configuration, firewalling; I dont see a problem turning it on. Maybe defaulting it to on, and then totaly getting rid of the config option. > I could almost, but not quite, justify it right now just because "ip" > is becomming standard and needs it. "ip" has been standard to some people for a few moons now ;-> It is more documneted than ifconfig ;-> and does a lot more > > Not to stray from the subject, Ben's effort is still needed. I think real > numbers are useful instead of claims like it "displayed faster" > > See my previous email, if it's just slow because of some poorly coded > version of ifconfig, it does not justify the patch. If only a > forcefully created "benchmark" can show some performance problem, that > is not an acceptable reason to champion this patch. Ok? > True. All the kernel paths affected are really config/control paths as well as slow paths (eg some device binding to sockets, MSG_DONTROUTE slow path, traffic control setup, route config, arp config are some that seem useful). The argumenet for the patch (and it might be weak) If you have 4000 devices, it makes sense for two reasons: -Some of these paths might hold locks which might stall the fast path. -Or if you have a busy system, they will contribute to the load. I used to be against VLANS being devices, i am withdrawing that comment; it's a lot easier to look on them as devices if you want to run IP on them. And in this case, it makes sense the possibilirt of over a thousand devices is good. So instead of depending what ifconfig does, maybe a better test for Ben is to measure the kernel level improvement in the lookup for example from 2..6000 devices. Tests with the user space tools will also help. example to add to Andi's flavor: "date; time ifconfig -a; date" for each number of devices. repeat for ip as well ;-> Plot kernel and the two user tools results after several iterations (number of devices on x-axis and some time/CPU measure on y-axis). cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 15:56 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) jamal @ 2001-01-07 16:30 ` Gleb Natapov 2001-01-07 16:36 ` jamal 2001-01-07 19:54 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumissionpolicy!) Ben Greear 1 sibling, 1 reply; 77+ messages in thread From: Gleb Natapov @ 2001-01-07 16:30 UTC (permalink / raw) To: jamal; +Cc: David S. Miller, ak, greearb, linux-kernel, netdev On Sun, Jan 07, 2001 at 10:56:23AM -0500, jamal wrote: [snip] > > I used to be against VLANS being devices, i am withdrawing that comment; it's > a lot easier to look on them as devices if you want to run IP on them. And > in this case, it makes sense the possibilirt of over a thousand devices > is good. > Glad to hear :) So perhaps this is a good time to move one of VLAN implementations into the official kernel? -- Gleb. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 16:30 ` Gleb Natapov @ 2001-01-07 16:36 ` jamal 0 siblings, 0 replies; 77+ messages in thread From: jamal @ 2001-01-07 16:36 UTC (permalink / raw) To: Gleb Natapov; +Cc: David S. Miller, ak, greearb, linux-kernel, netdev On Sun, 7 Jan 2001, Gleb Natapov wrote: > > I used to be against VLANS being devices, i am withdrawing that comment; it's > > a lot easier to look on them as devices if you want to run IP on them. And > > in this case, it makes sense the possibilirt of over a thousand devices > > is good. > > > > Glad to hear :) So perhaps this is a good time to move one of VLAN implementations > into the official kernel? > Absolutely. I think we need a VLAN implementation in there. cheers, jamal - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumissionpolicy!) 2001-01-07 15:56 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) jamal 2001-01-07 16:30 ` Gleb Natapov @ 2001-01-07 19:54 ` Ben Greear 1 sibling, 0 replies; 77+ messages in thread From: Ben Greear @ 2001-01-07 19:54 UTC (permalink / raw) To: jamal; +Cc: David S. Miller, ak, linux-kernel, netdev jamal wrote: > So instead of depending what ifconfig does, maybe a better test for Ben is > to measure the kernel level improvement in the lookup for example from > 2..6000 devices. In the benchmark I gave, the performance increase was in the kernel, not user space, and it was more than 10 times faster, at least with 4k VLANs. Adding VLANs was about twice as fast, and deleting them was faster, though not as much. Tests with the user space tools will also help. example > to add to Andi's flavor: > "date; time ifconfig -a; date" for each number of devices. > repeat for ip as well ;-> I can show a range w/out much trouble. I think I'll also tweak the hash code to just do linear lookups if the number of interfaces is below some number, (probably 20, or whatever the numbers show is good...) Ben -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumissionpolicy!) 2001-01-07 4:00 ` jamal 2001-01-07 4:06 ` Andi Kleen 2001-01-07 5:43 ` David S. Miller @ 2001-01-07 6:24 ` Ben Greear 2001-01-07 5:29 ` Andi Kleen 2 siblings, 1 reply; 77+ messages in thread From: Ben Greear @ 2001-01-07 6:24 UTC (permalink / raw) To: jamal; +Cc: Andi Kleen, linux-kernel, netdev jamal wrote: > > Not to stray from the subject, Ben's effort is still needed. I think real > numbers are useful instead of claims like it "displayed faster" A single #define near the top of the patch will turn it on/off, so benchmarking should be fairly easy. Please suggest benchmarks you consider valid. Thanks, Ben -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumissionpolicy!) 2001-01-07 6:24 ` Ben Greear @ 2001-01-07 5:29 ` Andi Kleen 0 siblings, 0 replies; 77+ messages in thread From: Andi Kleen @ 2001-01-07 5:29 UTC (permalink / raw) To: Ben Greear; +Cc: jamal, Andi Kleen, linux-kernel, netdev On Sat, Jan 06, 2001 at 11:24:41PM -0700, Ben Greear wrote: > jamal wrote: > > > > > Not to stray from the subject, Ben's effort is still needed. I think real > > numbers are useful instead of claims like it "displayed faster" > > A single #define near the top of the patch will turn it on/off, so > benchmarking should be fairly easy. Please suggest benchmarks you > consider valid. The only issue I know was the long delay in ifconfig. If that's fixed I see nothing else that would be worth benchmarking. -Andi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 3:29 ` [PATCH] hashed device lookup (Does NOT meet " Andi Kleen 2001-01-07 4:00 ` jamal @ 2001-01-07 6:22 ` Ben Greear 2001-01-07 5:27 ` Andi Kleen 2001-01-07 13:50 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox 1 sibling, 2 replies; 77+ messages in thread From: Ben Greear @ 2001-01-07 6:22 UTC (permalink / raw) To: Andi Kleen; +Cc: linux-kernel, netdev Andi Kleen wrote: > > On Sat, Jan 06, 2001 at 02:33:27PM -0700, Ben Greear wrote: > > I'm hoping that I can get a few comments on this code. It was added > > to (significantly) speed up things like 'ifconfig -a' when running with > > 4000 or so VLAN devices. It should also help other instances with lots > > of (virtual) devices, like FrameRelay, ATM, and possibly virtual IP > > interfaces. It probably won't help 'normal' users much, and in it's final > > form, should probably be a selectable option in the config process. > > > > Anyway, let me know what you think! > > Does it make any significant different with the ifconfig from newest nettools? I > removed a quadratic algorithm from ifconfig's device parsing, and with that I was > able to display a few thousand alias devices on a unpatched kernel in reasonable time. > > -Andi At the time I was doing this, I downloaded the latest nettools version. The hashing made a very noticable difference on 4000 interfaces, but I haven't run any real solid benchmarkings at other levels. Can you tell me some distinguishing mark (version?) on ifconfig that I can look for? I'm willing to run such benchmarks, but what would make a good benchmark, other than ifconfig -a? And a question for the socket gurus: Suppose I bind a raw socket to device vlan4001 (ie I have 4k in the list before that one!!). Currently, that means a linear search on all devices, right? In that extreme example, I would expect the hash to be very useful. Binding to IP addresses have the same issue?? Also, though hashing by name is not horribly exact, hashing on the device index should be nearly perfect, so finding device 666 might take a search through only 5 or so devices (find the hash-bucket, walk down the list in that bucket). -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-07 6:22 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) Ben Greear @ 2001-01-07 5:27 ` Andi Kleen 2001-01-07 8:11 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) (Benchmarks) Ben Greear 2001-01-07 13:50 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox 1 sibling, 1 reply; 77+ messages in thread From: Andi Kleen @ 2001-01-07 5:27 UTC (permalink / raw) To: Ben Greear; +Cc: Andi Kleen, linux-kernel, netdev On Sat, Jan 06, 2001 at 11:22:41PM -0700, Ben Greear wrote: > At the time I was doing this, I downloaded the latest nettools version. > The hashing made a very noticable difference on 4000 interfaces, but > I haven't run any real solid benchmarkings at other levels. Can > you tell me some distinguishing mark (version?) on ifconfig that I > can look for? Just get the latest release. > > I'm willing to run such benchmarks, but what would make a good benchmark, > other than ifconfig -a? ifconfig -a is fine IMHO. Everything else I know is just a single pass through the lists (which even at 4000 is not very significant) > Suppose I bind a raw socket to device vlan4001 (ie I have 4k in the list > before that one!!). Currently, that means a linear search on all devices, > right? In that extreme example, I would expect the hash to be very > useful. Nope, it doesn't. Raw binding works via IP addresses, and the IP address resolution works via the routing table, which is extensively hashed. Packet socket binding or SO_BINDTODEVICE will search the list, but it is unlikely that these paths are worth optimizing for. > Binding to IP addresses have the same issue?? No, uses the fib. > Also, though hashing by name is not horribly exact, hashing on the device > index should be nearly perfect, so finding device 666 might take a search > through only 5 or so devices (find the hash-bucket, walk down the list in > that bucket). Just why? It is not in any critical path I can see at all. -Andi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) (Benchmarks) 2001-01-07 5:27 ` Andi Kleen @ 2001-01-07 8:11 ` Ben Greear 2001-01-07 7:15 ` Andi Kleen 2001-01-08 7:00 ` [PATCH] hashed device lookup (New Benchmarks) David S. Miller 0 siblings, 2 replies; 77+ messages in thread From: Ben Greear @ 2001-01-07 8:11 UTC (permalink / raw) To: Andi Kleen; +Cc: linux-kernel, netdev, David S. Miller [-- Attachment #1: Type: text/plain, Size: 5587 bytes --] Andi Kleen wrote: > > I'm willing to run such benchmarks, but what would make a good benchmark, > > other than ifconfig -a? > > ifconfig -a is fine IMHO. Everything else I know is just a single pass through > the lists (which even at 4000 is not very significant) Hardware: Celeron 500, mostly idle (ie not too scientific!!) ifconfig: [root@candle bin]# /sbin/ifconfig --version net-tools 1.57 ifconfig 1.40 (2000-05-21) (vlan_test.pl is attached) My conclusion: The patch definately helps in this instance, but this instance may not be realistic. *********************************************************************** This is with the hash patch enabled: (2.4.prerelease + VLAN patch) (run 2) *********************************************************************** [root@candle bin]# time vlan_test.pl Adding VLAN interfaces 1 through 4000 Done adding 4000 VLAN interfaces in 76 seconds. Doing ifconfig -a 10.47user 6.33system 0:16.80elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (116major+421minor)pagefaults 0swaps Removing VLAN interfaces 1 through 4000 Done deleting 4000 VLAN interfaces in 58 seconds. Going to add and remove 2 interfaces 1000 times. Done adding/removing 2 VLAN interfaces 1000 times in 46 seconds. 74.12user 115.26system 3:22.81elapsed 93%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (2821121major+677780minor)pagefaults 0swaps *********************************************************************** This is with the patch disabled: (2.4.0 + VLAN patch) (run 1) *********************************************************************** [root@candle /root]# time vlan_test.pl Adding VLAN interfaces 1 through 4000 Done adding 4000 VLAN interfaces in 132 seconds. Doing ifconfig -a 10.72user 96.31system 1:55.31elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (117major+423minor)pagefaults 0swaps Removing VLAN interfaces 1 through 4000 Done deleting 4000 VLAN interfaces in 65 seconds. Going to add and remove 2 interfaces 1000 times. Done adding/removing 2 VLAN interfaces 1000 times in 47 seconds. 74.20user 257.83system 6:04.46elapsed 91%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (2821122major+677782minor)pagefaults 0swaps *********************************************************************** This is with the patch enabled: (2.4.0 + VLAN patch) (run 1) *********************************************************************** [root@candle /root]# time vlan_test.pl Adding VLAN interfaces 1 through 4000 Done adding 4000 VLAN interfaces in 83 seconds. Doing ifconfig -a 10.61user 10.22system 0:23.43elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (117major+423minor)pagefaults 0swaps Removing VLAN interfaces 1 through 4000 Done deleting 4000 VLAN interfaces in 64 seconds. Going to add and remove 2 interfaces 1000 times. Done adding/removing 2 VLAN interfaces 1000 times in 47 seconds. 73.69user 120.69system 3:44.10elapsed 86%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (2821122major+677782minor)pagefaults 0swaps *********************************************************************** This is with the patch enabled: (2.4.0 + VLAN patch) (run 2) *********************************************************************** [root@candle /root]# time vlan_test.pl Adding VLAN interfaces 1 through 4000 Done adding 4000 VLAN interfaces in 80 seconds. Doing ifconfig -a 10.62user 6.31system 0:18.63elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (117major+423minor)pagefaults 0swaps Removing VLAN interfaces 1 through 4000 Done deleting 4000 VLAN interfaces in 61 seconds. Going to add and remove 2 interfaces 1000 times. Done adding/removing 2 VLAN interfaces 4000 times in 47 seconds. 74.05user 114.93system 3:33.00elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (2821122major+677782minor)pagefaults 0swaps > > > Suppose I bind a raw socket to device vlan4001 (ie I have 4k in the list > > before that one!!). Currently, that means a linear search on all devices, > > right? In that extreme example, I would expect the hash to be very > > useful. > > Nope, it doesn't. Raw binding works via IP addresses, and the IP address resolution > works via the routing table, which is extensively hashed. Ahh, I meant raw, like raw Ethernet. True, not used very often, but I happen to have been using it lately :) The original idea for the hashing came after I was severly chastised by a few for even considering allowing 4000 VLAN Interfaces into the kernel. The complaint was that somehow having lots of devices was going to hurt performance. The eventual conclusion (by me at least), was that there were no linear lookups in any critical path I could think of. However, things like binding to interfaces, and searching for them (ifconfig -i vlan3999), were doing (at least) linear searching, so hashing it might make the user happier. > > Packet socket binding or SO_BINDTODEVICE will search the list, but it is unlikely > that these paths are worth optimizing for. The patch has been written, so even if it helps just a little more than it hurts, it might be worth including. Of course, it may actually hurt more than help. I'd be very interested in lucid arguments as to why adding the patch would actually be worse than not adding it, not just why I'm lame for considering it *grin* :) -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear [-- Attachment #2: vlan_test.pl --] [-- Type: application/x-perl, Size: 1510 bytes --] ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) (Benchmarks) 2001-01-07 8:11 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) (Benchmarks) Ben Greear @ 2001-01-07 7:15 ` Andi Kleen 2001-01-08 7:00 ` [PATCH] hashed device lookup (New Benchmarks) David S. Miller 1 sibling, 0 replies; 77+ messages in thread From: Andi Kleen @ 2001-01-07 7:15 UTC (permalink / raw) To: Ben Greear; +Cc: Andi Kleen, linux-kernel, netdev, David S. Miller On Sun, Jan 07, 2001 at 01:11:11AM -0700, Ben Greear wrote: > > Packet socket binding or SO_BINDTODEVICE will search the list, but it is unlikely > > that these paths are worth optimizing for. > > The patch has been written, so even if it helps just a little more than it > hurts, it might be worth including. Of course, it may actually hurt more > than help. > > I'd be very interested in lucid arguments as to why adding the patch would > actually be worse than not adding it, not just why I'm lame for considering > it *grin* :) It's like David said: it's not a very good idea to tune things that are not commonly used. If some user really realistically has some workload where the linear search is a bottleneck it can be considered. Currently it doesn't look like it. -Andi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (New Benchmarks) 2001-01-07 8:11 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) (Benchmarks) Ben Greear 2001-01-07 7:15 ` Andi Kleen @ 2001-01-08 7:00 ` David S. Miller 2001-01-08 16:26 ` Ben Greear 1 sibling, 1 reply; 77+ messages in thread From: David S. Miller @ 2001-01-08 7:00 UTC (permalink / raw) To: greearb; +Cc: netdev, linux-kernel Date: Mon, 08 Jan 2001 01:12:21 -0700 From: Ben Greear <greearb@candelatech.com> http://grok.yi.org/~greear/hashed_dev.png (If you can't get to it, let me know and I'll email it to you...some cable modem networks have I firewalled.) It just seems that this shows that the implementation of ifconfig can be improved, since "ip" can do the same thing several orders of magnitude better (ie. non-quadratic system time complexity). This is the argument I started with when this thread began, so my position hasn't changed, it has in fact been well supported by your tests :-) Later, David S. Miller davem@redhat.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (New Benchmarks) 2001-01-08 7:00 ` [PATCH] hashed device lookup (New Benchmarks) David S. Miller @ 2001-01-08 16:26 ` Ben Greear 2001-01-08 16:50 ` Andi Kleen 0 siblings, 1 reply; 77+ messages in thread From: Ben Greear @ 2001-01-08 16:26 UTC (permalink / raw) To: David S. Miller; +Cc: netdev, linux-kernel "David S. Miller" wrote: > > Date: Mon, 08 Jan 2001 01:12:21 -0700 > From: Ben Greear <greearb@candelatech.com> > > http://grok.yi.org/~greear/hashed_dev.png > (If you can't get to it, let me know and I'll email it to you...some > cable modem networks have I firewalled.) > > It just seems that this shows that the implementation of ifconfig can > be improved, since "ip" can do the same thing several orders of > magnitude better (ie. non-quadratic system time complexity). > > This is the argument I started with when this thread began, so my > position hasn't changed, it has in fact been well supported by your > tests :-) I don't argue that ifconfig shouldn't be fixed, but the hash speeds up ip by about 2X too. Is that not useful enough? ip seems to be implemented pretty efficient, so if the hash helps it significantly then maybe it can help other efficient programs too. Notice that it is the system (ie kernel) time that stays remarkably flat with the hash + ip graph. Ben -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (New Benchmarks) 2001-01-08 16:26 ` Ben Greear @ 2001-01-08 16:50 ` Andi Kleen 2001-01-09 16:27 ` Ben Greear 0 siblings, 1 reply; 77+ messages in thread From: Andi Kleen @ 2001-01-08 16:50 UTC (permalink / raw) To: Ben Greear; +Cc: David S. Miller, netdev, linux-kernel On Mon, Jan 08, 2001 at 04:23:41PM +0100, Ben Greear wrote: > I don't argue that ifconfig shouldn't be fixed, but the hash speeds up It's already fixed since months. There was one stupid algorithm, which I was to blame for when I changed ifconfig to use a device list two years ago. At that time I didn't think that anybody would be ever crazy enough to set up 4000 interfaces and just chosed the simplest list management. I fixed it when you first complained a few months ago and now the list insertion works that the list does not need to be walked fully in the usual case. It could be optimized more in user space, but it's probably not worth it. > ip by about 2X too. Is that not useful enough? ip seems to be implemented > pretty efficient, so if the hash helps it significantly then maybe it > can help other efficient programs too. Notice that it is the system > (ie kernel) time that stays remarkably flat with the hash + ip graph. Just does your benchmark represent anything that real users do frequently ? If you really want to optimize I'm sure there are lots of areas in the kernel where your efforts are better spent ;) [just run with a the kernel profiler on for a few days on your box and look at all the real hot spots] BTW, if you just want to optimize ip link ls speed it would be probably enough to keep a one behind cache that just caches the next member after the last search. -Andi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (New Benchmarks) 2001-01-08 16:50 ` Andi Kleen @ 2001-01-09 16:27 ` Ben Greear 0 siblings, 0 replies; 77+ messages in thread From: Ben Greear @ 2001-01-09 16:27 UTC (permalink / raw) To: Andi Kleen, linux-kernel Andi Kleen wrote: > > On Mon, Jan 08, 2001 at 04:23:41PM +0100, Ben Greear wrote: > > I don't argue that ifconfig shouldn't be fixed, but the hash speeds up > > It's already fixed since months. There was one stupid algorithm, which > I was to blame for when I changed ifconfig to use a device list two years ago. The benchmark was run against this one: [root@candle lanforge]# ifconfig --version net-tools 1.57 ifconfig 1.40 (2000-05-21) The latest I could find anywhere.... Please tell me the version of a newer one if it exists. > > ip by about 2X too. Is that not useful enough? ip seems to be implemented > > pretty efficient, so if the hash helps it significantly then maybe it > > can help other efficient programs too. Notice that it is the system > > (ie kernel) time that stays remarkably flat with the hash + ip graph. > > Just does your benchmark represent anything that real users do frequently ? I'm going to write something that binds to a raw device, which is something users (DHCP, for sure) does. If it does not show any significant improvement, then I'll drop the issue untill many-many interfaces are more common. > > If you really want to optimize I'm sure there are lots of areas in the kernel > where your efforts are better spent ;) [just run with a the kernel profiler on > for a few days on your box and look at all the real hot spots] I was just trying to smooth VLAN's adoption into the kernel by removing the one linear-lookup that I know of relating to lots of VLANs. It obviously isn't horribly important, but it was fun :) > > BTW, if you just want to optimize ip link ls speed it would be probably enough > to keep a one behind cache that just caches the next member after the last > search. That is still linear in the kernel...or do you mean cache in the kernel? At any rate, I'm more concerned about random access. > > -Andi -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 6:22 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) Ben Greear 2001-01-07 5:27 ` Andi Kleen @ 2001-01-07 13:50 ` Alan Cox 2001-01-07 16:44 ` Miquel van Smoorenburg 2001-01-07 19:09 ` Ben Greear 1 sibling, 2 replies; 77+ messages in thread From: Alan Cox @ 2001-01-07 13:50 UTC (permalink / raw) To: Ben Greear; +Cc: Andi Kleen, linux-kernel, netdev > Suppose I bind a raw socket to device vlan4001 (ie I have 4k in the list > before that one!!). Currently, that means a linear search on all devices, > right? In that extreme example, I would expect the hash to be very > useful. At this point you have to ask 'why is vlan4001 an interface'. Would it not be cleaner to add the vlan id to the entries in the list of addresses per interface ? - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 13:50 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox @ 2001-01-07 16:44 ` Miquel van Smoorenburg 2001-01-07 19:09 ` Ben Greear 1 sibling, 0 replies; 77+ messages in thread From: Miquel van Smoorenburg @ 2001-01-07 16:44 UTC (permalink / raw) To: linux-kernel In article <E14FGD4-0002f7-00@the-village.bc.nu>, Alan Cox <alan@lxorguk.ukuu.org.uk> wrote: >At this point you have to ask 'why is vlan4001 an interface'. Would it not >be cleaner to add the vlan id to the entries in the list of addresses per >interface ? Not all the world is IP - what if you want to bridge between an ATM ELAN (LANE) and a VLAN? Note that different ATM ELANs also show up as seperate interfaces. Mike. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission 2001-01-07 13:50 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox 2001-01-07 16:44 ` Miquel van Smoorenburg @ 2001-01-07 19:09 ` Ben Greear 1 sibling, 0 replies; 77+ messages in thread From: Ben Greear @ 2001-01-07 19:09 UTC (permalink / raw) To: Alan Cox; +Cc: Andi Kleen, linux-kernel, netdev Alan Cox wrote: > > > Suppose I bind a raw socket to device vlan4001 (ie I have 4k in the list > > before that one!!). Currently, that means a linear search on all devices, > > right? In that extreme example, I would expect the hash to be very > > useful. > > At this point you have to ask 'why is vlan4001 an interface'. Would it not > be cleaner to add the vlan id to the entries in the list of addresses per > interface ? Among other things, some VLAN switches won't work unless you can change the MAC address on your VLANs to be different from the rest of the VLAN MACs on that physical interface. For OSPF you also need to have multicast work on them, and other things that look very much like a real interface. Also, by making the VLANs a net_device, the rest of the kernel and user-space code (ip, ifconfig, for example), works as expected, with no changes. -- Ben Greear (greearb@candelatech.com) http://www.candelatech.com Author of ScryMUD: scry.wanfear.com 4444 (Released under GPL) http://scry.wanfear.com http://scry.wanfear.com/~greear - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) 2001-01-06 21:33 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) Ben Greear ` (2 preceding siblings ...) 2001-01-07 3:29 ` [PATCH] hashed device lookup (Does NOT meet " Andi Kleen @ 2001-01-07 5:40 ` David S. Miller 3 siblings, 0 replies; 77+ messages in thread From: David S. Miller @ 2001-01-07 5:40 UTC (permalink / raw) To: greearb, linux-kernel, netdev On Sat, Jan 06, 2001 at 02:33:27PM -0700, Ben Greear wrote: I'm hoping that I can get a few comments on this code. It was added to (significantly) speed up things like 'ifconfig -a' when running with 4000 or so VLAN devices. It should also help other instances with lots of (virtual) devices, like FrameRelay, ATM, and possibly virtual IP interfaces. It probably won't help 'normal' users much, and in it's final form, should probably be a selectable option in the config process. Ben, if ifconfig uses /proc/net/dev to list devices, how can your changes speed up ifconfig? Andi mentioned in another email how he has fixed the quadratic behavior in ifconfig, you should check if it fixes your problem. Jamal has suggested dumping ifconfig and making a dummy "ifconfig" which just wrappers around "ip". I like this idea the most. Really, what I'm concerned about is what calls dev_get_by_{name,index} so often and in such critical places that optimizing it makes any sense? I don't mind optimizing stuff like this where needed, in fact I'm the most guilty of this, check out the complex TCP hash tables we have :-) But if it's only a problem because of poorly implemented user applications, let's fix the apps instead of adding the complexity to the kernel. Later, David S. Miller davem@redhat.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 77+ messages in thread
end of thread, other threads:[~2001-01-10 1:44 UTC | newest] Thread overview: 77+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2001-01-08 8:12 [PATCH] hashed device lookup (New Benchmarks) Ben Greear 2001-01-06 21:33 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) Ben Greear 2001-01-06 23:17 ` David S. Miller 2001-01-07 4:06 ` Ben Greear 2001-01-07 13:42 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox 2001-01-07 15:33 ` Matti Aarnio 2001-01-07 16:46 ` Alan Cox 2001-01-07 17:32 ` Matti Aarnio 2001-01-07 19:02 ` Ben Greear 2001-01-07 18:06 ` Alan Cox 2001-01-07 18:53 ` Matti Aarnio 2001-01-07 19:30 ` Ben Greear 2001-01-07 18:30 ` Alan Cox 2001-01-07 22:40 ` 5116 2001-01-08 2:19 ` David Ford 2001-01-09 20:25 ` Christopher E. Brown 2001-01-10 2:47 ` Ben Greear 2001-01-07 18:21 ` jamal 2001-01-07 19:00 ` Matti Aarnio 2001-01-07 19:10 ` jamal 2001-01-07 19:24 ` Matti Aarnio 2001-01-08 0:21 ` jamal 2001-01-07 19:37 ` Ben Greear 2001-01-07 18:53 ` jamal 2001-01-07 5:36 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) David S. Miller 2001-01-07 3:29 ` Chris Wedgwood 2001-01-07 6:15 ` Ben Greear 2001-01-07 10:22 ` David Ford 2001-01-07 12:01 ` David S. Miller 2001-01-08 5:32 ` Andi Kleen 2001-01-08 6:12 ` Chris Wedgwood 2001-01-08 6:26 ` Andi Kleen 2001-01-08 6:57 ` David Ford 2001-01-08 13:08 ` jamal 2001-01-09 13:28 ` Blu3Viper 2001-01-08 6:13 ` Blu3Viper 2001-01-07 12:13 ` Chris Wedgwood 2001-01-07 12:19 ` David Ford 2001-01-07 16:56 ` jamal 2001-01-07 17:37 ` Gleb Natapov 2001-01-07 18:02 ` routable interfaces WAS( " jamal 2001-01-07 19:21 ` routable interfaces WAS( Re: [PATCH] hashed device lookup (DoesNOT " Ben Greear 2001-01-07 18:29 ` jamal 2001-01-07 18:51 ` Gleb Natapov 2001-01-07 19:05 ` jamal 2001-01-07 19:19 ` routable interfaces WAS( Re: [PATCH] hashed device lookup(DoesNOT " Sandy Harris 2001-01-07 20:42 ` Ben Greear 2001-01-08 0:37 ` jamal 2001-01-08 5:25 ` routable interfaces WAS( Re: [PATCH] hashed device lookup(DoesNOTmeet " Ben Greear 2001-01-08 13:05 ` jamal 2001-01-07 3:29 ` [PATCH] hashed device lookup (Does NOT meet " Andi Kleen 2001-01-07 4:00 ` jamal 2001-01-07 4:06 ` Andi Kleen 2001-01-07 5:43 ` David S. Miller 2001-01-07 11:40 ` [little bit OT] ip _IS_ _NOT_ ifconfig and route ! (was Re: [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!)) Henning P. Schmiedehausen 2001-01-07 11:50 ` David S. Miller 2001-01-07 13:47 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox 2001-01-07 16:12 ` jamal 2001-01-07 16:51 ` Alan Cox 2001-01-07 15:56 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) jamal 2001-01-07 16:30 ` Gleb Natapov 2001-01-07 16:36 ` jamal 2001-01-07 19:54 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumissionpolicy!) Ben Greear 2001-01-07 6:24 ` Ben Greear 2001-01-07 5:29 ` Andi Kleen 2001-01-07 6:22 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) Ben Greear 2001-01-07 5:27 ` Andi Kleen 2001-01-07 8:11 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) (Benchmarks) Ben Greear 2001-01-07 7:15 ` Andi Kleen 2001-01-08 7:00 ` [PATCH] hashed device lookup (New Benchmarks) David S. Miller 2001-01-08 16:26 ` Ben Greear 2001-01-08 16:50 ` Andi Kleen 2001-01-09 16:27 ` Ben Greear 2001-01-07 13:50 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission Alan Cox 2001-01-07 16:44 ` Miquel van Smoorenburg 2001-01-07 19:09 ` Ben Greear 2001-01-07 5:40 ` [PATCH] hashed device lookup (Does NOT meet Linus' sumission policy!) David S. Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
Powered by JetHome