On Tue, Oct 05, 2010 at 11:28:50AM +1000, David Gwynne wrote: > On Mon, Oct 04, 2010 at 10:41:15PM +0000, Stuart Henderson wrote: > > On 2010-10-04, Insan Praja SW <insan.pr...@gmail.com> wrote: > > > I can't see any livelocks. I'm aware of new algorithm on mclgeti got > > > something to do with this, I just want to confirm this. If this systat > > > output tells me the truth, well that just a huge achievement. > > > > # pstat -d u mcllivelocks > > > > You will probbaly see more livelocks than before (the detection is more > > sensitive), but the effect on network traffic should be smaller. > > > > this restores the visibility of network livelocks to systat. > > anyone object? if not i'll commit it tomorrow morning around 10am > in a GMT+10 timezeon.
No objections from me. ok k...@. .... Ken > > Index: sbin/sysctl/sysctl.c > =================================================================== > RCS file: /cvs/src/sbin/sysctl/sysctl.c,v > retrieving revision 1.173 > diff -u -p -r1.173 sysctl.c > --- sbin/sysctl/sysctl.c 19 Aug 2010 18:14:14 -0000 1.173 > +++ sbin/sysctl/sysctl.c 5 Oct 2010 01:20:59 -0000 > @@ -447,6 +447,9 @@ parse(char *string, int flags) > case KERN_CONSDEV: > special |= CHRDEV; > break; > + case KERN_NETLIVELOCKS: > + special |= UNSIGNED; > + break; > } > break; > > Index: sys/kern/kern_sysctl.c > =================================================================== > RCS file: /cvs/src/sys/kern/kern_sysctl.c,v > retrieving revision 1.193 > diff -u -p -r1.193 kern_sysctl.c > --- sys/kern/kern_sysctl.c 23 Sep 2010 13:24:22 -0000 1.193 > +++ sys/kern/kern_sysctl.c 5 Oct 2010 01:21:02 -0000 > @@ -110,6 +110,7 @@ extern int nselcoll, fscale; > extern struct disklist_head disklist; > extern fixpt_t ccpu; > extern long numvnodes; > +extern u_int mcllivelocks; > > extern void nmbclust_update(void); > > @@ -585,6 +586,8 @@ kern_sysctl(int *name, u_int namelen, vo > else > dev = NODEV; > return sysctl_rdstruct(oldp, oldlenp, newp, &dev, sizeof(dev)); > + case KERN_NETLIVELOCKS: > + return (sysctl_rdint(oldp, oldlenp, newp, mcllivelocks)); > default: > return (EOPNOTSUPP); > } > Index: sys/sys/sysctl.h > =================================================================== > RCS file: /cvs/src/sys/sys/sysctl.h,v > retrieving revision 1.106 > diff -u -p -r1.106 sysctl.h > --- sys/sys/sysctl.h 19 Aug 2010 18:14:13 -0000 1.106 > +++ sys/sys/sysctl.h 5 Oct 2010 01:21:03 -0000 > @@ -190,7 +190,8 @@ struct ctlname { > #define KERN_FILE2 73 /* struct: file entries */ > #define KERN_RTHREADS 74 /* kernel rthreads support > enabled */ > #define KERN_CONSDEV 75 /* dev_t: console terminal > device */ > -#define KERN_MAXID 76 /* number of valid kern ids */ > +#define KERN_NETLIVELOCKS 76 /* int: number of network > livelocks */ > +#define KERN_MAXID 77 /* number of valid kern ids */ > > #define CTL_KERN_NAMES { \ > { 0, 0 }, \ > @@ -269,6 +270,7 @@ struct ctlname { > { "file2", CTLTYPE_STRUCT }, \ > { "rthreads", CTLTYPE_INT }, \ > { "consdev", CTLTYPE_STRUCT }, \ > + { "netlivelocks", CTLTYPE_INT }, \ > } > > /* > Index: usr.bin/systat/mbufs.c > =================================================================== > RCS file: /cvs/src/usr.bin/systat/mbufs.c,v > retrieving revision 1.29 > diff -u -p -r1.29 mbufs.c > --- usr.bin/systat/mbufs.c 23 Sep 2010 10:49:55 -0000 1.29 > +++ usr.bin/systat/mbufs.c 5 Oct 2010 01:21:04 -0000 > @@ -41,6 +41,7 @@ struct mclpool_info { > int mclpool_count = 0; > int mbpool_index = -1; > struct pool mbpool; > +u_int mcllivelocks = 0; > > /* interfaces */ > static int num_ifs; > @@ -198,6 +199,15 @@ read_mb(void) > int i, p, nif, ret = 1; > size_t size; > > + mib[0] = CTL_KERN; > + mib[1] = KERN_NETLIVELOCKS; > + size = sizeof(mcllivelocks); > + if (sysctl(mib, 2, &mcllivelocks, &size, NULL, 0) < 0 && > + errno != EOPNOTSUPP) { > + error("sysctl(KERN_NETLIVELOCKS)"); > + goto exit; > + } > + > num_disp = 0; > if (getifaddrs(&ifap)) { > error("getifaddrs: %s", strerror(errno)); > @@ -341,6 +351,7 @@ showmbuf(struct if_info *ifi, int p, int > print_fld_str(FLD_MB_IFACE, ifi->name); > > if (p == -1 && ifi == interfaces) { > + print_fld_uint(FLD_MB_LLOCKS, mcllivelocks); > print_fld_size(FLD_MB_MSIZE, mbpool.pr_size); > print_fld_size(FLD_MB_MALIVE, mbpool.pr_nget - mbpool.pr_nput); > print_fld_size(FLD_MB_MHWM, mbpool.pr_hiwat); > @@ -349,8 +360,6 @@ showmbuf(struct if_info *ifi, int p, int > #if NOTYET > print_fld_uint(FLD_MB_RXDELAY, ifi->data.ifi_rxdelay); > print_fld_uint(FLD_MB_TXDELAY, ifi->data.ifi_txdelay); > - if (ifi->data.ifi_livelocks) > - print_fld_size(FLD_MB_LLOCKS, ifi->data.ifi_livelocks); > #endif > > if (p >= 0 && p < mclpool_count) {