void print_vm(void) { copyinfo(&s3, &s); labelkre(); showkre(); }
int initvmstat(void) { static char *intrnamebuf; char *cp; int i; if (intrnamebuf) free(intrnamebuf); if (intrname) free(intrname); if (intrloc) free(intrloc); if (namelist[0].n_type == 0) { if (kvm_nlist(kd, namelist) && namelist[X_ALLEVENTS].n_type == 0) { nlisterr(namelist); return(0); } } hertz = stathz ? stathz : hz; if (!drvinit(1)) return(0); /* Old style interrupt counts - deprecated */ nintr = (namelist[X_EINTRCNT].n_value - namelist[X_INTRCNT].n_value) / sizeof (long); if (nintr) { intrloc = calloc(nintr, sizeof (long)); intrname = calloc(nintr, sizeof (long)); intrnamebuf = malloc(namelist[X_EINTRNAMES].n_value - namelist[X_INTRNAMES].n_value); if (intrnamebuf == NULL || intrname == 0 || intrloc == 0) { error("Out of memory\n"); nintr = 0; return(0); } NREAD(X_INTRNAMES, intrnamebuf, NVAL(X_EINTRNAMES) - NVAL(X_INTRNAMES)); for (cp = intrnamebuf, i = 0; i < nintr; i++) { intrname[i] = cp; cp += strlen(cp) + 1; } } /* event counter interrupt counts */ get_interrupt_events(); nextintsrow = INTSROW + 1; allocinfo(&s); allocinfo(&s1); allocinfo(&s2); allocinfo(&z); getinfo(&s2); copyinfo(&s2, &s1); return(1); }
int read_vm(void) { if (state == TIME) copyinfo(&s3, &s1); fetchkre(); fetchifstat(); if (state == TIME) dkswap(); num_disp = 0; return 0; }
int initvmstat(void) { field_view *v; int mib[4], i; size_t size; hertz = stathz; if (!dkinit(1)) return(0); mib[0] = CTL_KERN; mib[1] = KERN_INTRCNT; mib[2] = KERN_INTRCNT_NUM; size = sizeof(nintr); if (sysctl(mib, 3, &nintr, &size, NULL, 0) < 0) return (-1); intrloc = calloc(nintr, sizeof(long)); intrname = calloc(nintr, sizeof(char *)); for (i = 0; i < nintr; i++) { char name[128]; mib[0] = CTL_KERN; mib[1] = KERN_INTRCNT; mib[2] = KERN_INTRCNT_NAME; mib[3] = i; size = sizeof(name); if (sysctl(mib, 4, name, &size, NULL, 0) < 0) return (-1); intrname[i] = strdup(name); if (intrname[i] == NULL) return (-1); } nextintsrow = INTSROW + 2; allocinfo(&s); allocinfo(&s1); allocinfo(&s2); allocinfo(&s3); allocinfo(&z); getinfo(&s2); copyinfo(&z, &s1); for (v = views_vm; v->name != NULL; v++) add_view(v); return(1); }
int vm_keyboard_callback(int ch) { switch(ch) { case 'r': copyinfo(&s2, &s1); state = RUN; break; case 'b': state = BOOT; copyinfo(&z, &s1); break; case 't': state = TIME; break; case 'z': if (state == RUN) getinfo(&s1); break; } return (keyboard_callback(ch)); }
int cmdkre(const char *cmd, char *args) { int retval; if (prefix(cmd, "run")) { retval = 1; copyinfo(&s2, &s1); switch (getdevs(&run)) { case -1: errx(1, "%s", devstat_errbuf); break; case 1: num_devices = run.dinfo->numdevs; generation = run.dinfo->generation; retval = dscmd("refresh", NULL, MAXDRIVES, &cur); if (retval == 2) labelkre(); break; default: break; } state = RUN; return (retval); } if (prefix(cmd, "boot")) { state = BOOT; copyinfo(&z, &s1); return (1); } if (prefix(cmd, "time")) { state = TIME; return (1); } if (prefix(cmd, "zero")) { retval = 1; if (state == RUN) { getinfo(&s1); switch (getdevs(&run)) { case -1: errx(1, "%s", devstat_errbuf); break; case 1: num_devices = run.dinfo->numdevs; generation = run.dinfo->generation; retval = dscmd("refresh",NULL, MAXDRIVES, &cur); if (retval == 2) labelkre(); break; default: break; } } return (retval); } retval = dscmd(cmd, args, MAXDRIVES, &cur); if (retval == 2) labelkre(); return(retval); }
int initkre(void) { char *intrnamebuf; size_t bytes; size_t b; size_t i; if (namelist[0].n_type == 0) { if (kvm_nlist(kd, namelist)) { nlisterr(namelist); return(0); } if (namelist[0].n_type == 0) { error("No namelist"); return(0); } } if ((num_devices = getnumdevs()) < 0) { warnx("%s", devstat_errbuf); return(0); } cur.dinfo = (struct devinfo *)malloc(sizeof(struct devinfo)); last.dinfo = (struct devinfo *)malloc(sizeof(struct devinfo)); run.dinfo = (struct devinfo *)malloc(sizeof(struct devinfo)); bzero(cur.dinfo, sizeof(struct devinfo)); bzero(last.dinfo, sizeof(struct devinfo)); bzero(run.dinfo, sizeof(struct devinfo)); if (dsinit(MAXDRIVES, &cur, &last, &run) != 1) return(0); if (nintr == 0) { if (sysctlbyname("hw.intrnames", NULL, &bytes, NULL, 0) == 0) { intrnamebuf = malloc(bytes); sysctlbyname("hw.intrnames", intrnamebuf, &bytes, NULL, 0); for (i = 0; i < bytes; ++i) { if (intrnamebuf[i] == 0) ++nintr; } intrname = malloc(nintr * sizeof(char *)); intrloc = malloc(nintr * sizeof(*intrloc)); nintr = 0; for (b = i = 0; i < bytes; ++i) { if (intrnamebuf[i] == 0) { intrname[nintr] = intrnamebuf + b; intrloc[nintr] = 0; b = i + 1; ++nintr; } } } nextintsrow = INTSROW + 2; allocinfo(&s); allocinfo(&s1); allocinfo(&s2); allocinfo(&z); } getinfo(&s2); copyinfo(&s2, &s1); return(1); }
void vmstat_run(char *args) { copyinfo(&s1, &s2); display_mode = RUN; }
void vmstat_boot(char *args) { copyinfo(&z, &s1); display_mode = BOOT; }
int initkre(void) { char *cp, *cp1, *cp2, *intrnamebuf, *nextcp; int i; size_t sz; if ((num_devices = devstat_getnumdevs(NULL)) < 0) { warnx("%s", devstat_errbuf); return(0); } cur.dinfo = calloc(1, sizeof(struct devinfo)); last.dinfo = calloc(1, sizeof(struct devinfo)); run.dinfo = calloc(1, sizeof(struct devinfo)); if (dsinit(MAXDRIVES, &cur, &last, &run) != 1) return(0); if (nintr == 0) { if (sysctlbyname("hw.intrcnt", NULL, &sz, NULL, 0) == -1) { error("sysctl(hw.intrcnt...) failed: %s", strerror(errno)); return (0); } nintr = sz / sizeof(u_long); intrloc = calloc(nintr, sizeof (long)); intrname = calloc(nintr, sizeof (char *)); intrnamebuf = sysctl_dynread("hw.intrnames", NULL); if (intrnamebuf == NULL || intrname == NULL || intrloc == NULL) { error("Out of memory"); if (intrnamebuf) free(intrnamebuf); if (intrname) free(intrname); if (intrloc) free(intrloc); nintr = 0; return(0); } for (cp = intrnamebuf, i = 0; i < nintr; i++) { nextcp = cp + strlen(cp) + 1; /* Discard trailing spaces. */ for (cp1 = nextcp - 1; cp1 > cp && *(cp1 - 1) == ' '; ) *--cp1 = '\0'; /* Convert "irqN: name" to "name irqN". */ if (strncmp(cp, "irq", 3) == 0) { cp1 = cp + 3; while (isdigit((u_char)*cp1)) cp1++; if (cp1 != cp && *cp1 == ':' && *(cp1 + 1) == ' ') { sz = strlen(cp); *cp1 = '\0'; cp1 = cp1 + 2; cp2 = strdup(cp); bcopy(cp1, cp, sz - (cp1 - cp) + 1); if (sz <= 10 + 4) { strcat(cp, " "); strcat(cp, cp2 + 3); } free(cp2); } } /* * Convert "name irqN" to "name N" if the former is * longer than the field width. */ if ((cp1 = strstr(cp, "irq")) != NULL && strlen(cp) > 10) bcopy(cp1 + 3, cp1, strlen(cp1 + 3) + 1); intrname[i] = cp; cp = nextcp; } nextintsrow = INTSROW + 2; allocinfo(&s); allocinfo(&s1); allocinfo(&s2); allocinfo(&z); } GETSYSCTL("vm.kmem_size", kmem_size); GETSYSCTL("vm.stats.vm.v_page_count", v_page_count); getinfo(&s2); copyinfo(&s2, &s1); return(1); }