On Sat, Jul 09, 2011 at 12:56:12AM -0400, Ted Unangst wrote:

> Top said I didn't have much memory free.  Where did it all go?
> 
> Oh, here it is:
> 
> Memory: Real: 391M/2730M act/tot Free: 178M Cache: 1711M Swap: 0K/4097M

I like the idea, but I think "Cache" is ot the ricght name. How about
BCache or Bufs?

        -Otto

> 
> Index: machine.c
> ===================================================================
> RCS file: /home/tedu/cvs/src/usr.bin/top/machine.c,v
> retrieving revision 1.68
> diff -u -p -r1.68 machine.c
> --- machine.c 10 Apr 2011 03:20:59 -0000      1.68
> +++ machine.c 9 Jul 2011 04:53:31 -0000
> @@ -41,6 +41,7 @@
>  #include <unistd.h>
>  #include <sys/sysctl.h>
>  #include <sys/dkstat.h>
> +#include <sys/mount.h>
>  #include <sys/swap.h>
>  #include <err.h>
>  #include <errno.h>
> @@ -107,10 +108,11 @@ char *cpustatenames[] = {
>  };
>  
>  /* these are for detailing the memory statistics */
> -int memory_stats[8];
> +int memory_stats[10];
>  char *memorynames[] = {
> -     "Real: ", "K/", "K act/tot  ", "Free: ", "K  ",
> -     "Swap: ", "K/", "K used/tot",
> +     "Real: ", "K/", "K act/tot ", "Free: ", "K ",
> +     "Cache: ", "K ",
> +     "Swap: ", "K/", "K",
>       NULL
>  };
>  
> @@ -206,8 +208,10 @@ get_system_info(struct system_info *si)
>  {
>       static int sysload_mib[] = {CTL_VM, VM_LOADAVG};
>       static int vmtotal_mib[] = {CTL_VM, VM_METER};
> +     static int bcstats_mib[] = {CTL_VFS, VFS_GENERIC, VFS_BCACHESTAT};
>       struct loadavg sysload;
>       struct vmtotal vmtotal;
> +     struct bcachestats bcstats;
>       double *infoloadp;
>       size_t size;
>       int i;
> @@ -254,6 +258,11 @@ get_system_info(struct system_info *si)
>               warn("sysctl failed");
>               bzero(&vmtotal, sizeof(vmtotal));
>       }
> +     size = sizeof(bcstats);
> +     if (sysctl(bcstats_mib, 3, &bcstats, &size, NULL, 0) < 0) {
> +             warn("sysctl failed");
> +             bzero(&bcstats, sizeof(bcstats));
> +     }
>       /* convert memory stats to Kbytes */
>       memory_stats[0] = -1;
>       memory_stats[1] = pagetok(vmtotal.t_arm);
> @@ -261,10 +270,12 @@ get_system_info(struct system_info *si)
>       memory_stats[3] = -1;
>       memory_stats[4] = pagetok(vmtotal.t_free);
>       memory_stats[5] = -1;
> +     memory_stats[6] = pagetok(bcstats.numbufpages);
> +     memory_stats[7] = -1;
>  
> -     if (!swapmode(&memory_stats[6], &memory_stats[7])) {
> -             memory_stats[6] = 0;
> -             memory_stats[7] = 0;
> +     if (!swapmode(&memory_stats[8], &memory_stats[9])) {
> +             memory_stats[8] = 0;
> +             memory_stats[9] = 0;
>       }
>  
>       /* set arrays and strings */

Reply via email to