> Date: Tue, 16 Sep 2014 21:51:00 +1000 > From: David Gwynne <da...@gwynne.id.au> > > if you have more than 8 cpus, combine the cpu lines by default. > > ok?
8 seems a reasonable number ok kettenis@ > Index: machine.c > =================================================================== > RCS file: /cvs/src/usr.bin/top/machine.c,v > retrieving revision 1.78 > diff -u -p -r1.78 machine.c > --- machine.c 4 Jul 2014 05:58:31 -0000 1.78 > +++ machine.c 16 Sep 2014 11:46:41 -0000 > @@ -141,14 +141,26 @@ int ncpu; > unsigned int maxslp; > > int > -machine_init(struct statics *statics) > +getncpu(void) > { > + int mib[] = { CTL_HW, HW_NCPU }; > + int ncpu; > size_t size = sizeof(ncpu); > - int mib[2], pagesize, cpu; > > - mib[0] = CTL_HW; > - mib[1] = HW_NCPU; > - if (sysctl(mib, 2, &ncpu, &size, NULL, 0) == -1) > + if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), > + &ncpu, &size, NULL, 0) == -1) > + return (-1); > + > + return (ncpu); > +} > + > +int > +machine_init(struct statics *statics) > +{ > + int pagesize, cpu; > + > + ncpu = getncpu(); > + if (ncpu == -1) > return (-1); > cpu_states = calloc(ncpu, CPUSTATES * sizeof(int64_t)); > if (cpu_states == NULL) > Index: machine.h > =================================================================== > RCS file: /cvs/src/usr.bin/top/machine.h,v > retrieving revision 1.17 > diff -u -p -r1.17 machine.h > --- machine.h 5 Jun 2012 18:52:53 -0000 1.17 > +++ machine.h 16 Sep 2014 11:46:41 -0000 > @@ -93,3 +93,5 @@ extern char *format_next_process(cadd > extern uid_t proc_owner(pid_t); > > extern struct kinfo_proc *getprocs(int, int, int *); > + > +int getncpu(void); > Index: top.c > =================================================================== > RCS file: /cvs/src/usr.bin/top/top.c,v > retrieving revision 1.81 > diff -u -p -r1.81 top.c > --- top.c 7 Apr 2014 15:49:22 -0000 1.81 > +++ top.c 16 Sep 2014 11:46:41 -0000 > @@ -250,6 +250,13 @@ parseargs(int ac, char **av) > } > } > > + i = getncpu(); > + if (i == -1) > + err(1, NULL); > + > + if (i > 8) > + combine_cpus = 1; > + > /* get count of top processes to display (if any) */ > if (optind < ac) { > if ((topn = atoiwi(av[optind])) == Invalid) { > >