Date: Sat, 24 Feb 2001 00:51:42 +0100 From: Thomas Moestl <tmoestl@gmx.net> To: cvs-all@freebsd.org Subject: Re: cvs commit: src/sys/sys conf.h src/sys/vm swap_pager.c vm_swap.c Message-ID: <20010224005142.A2470@crow.dom2ip.de>
next in thread | raw e-mail | index | archive | help
--VS++wcV0S1rZb1Fb Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Fri, Feb 23, 2001 at 05:50:55PM -0500, Robert Watson wrote: > On Fri, 23 Feb 2001, Bill Fumerola wrote: > > On Fri, Feb 23, 2001 at 01:49:09PM -0800, Mike Smith wrote: > > > JFYI, convention for implementing this sort of thing is to have a node > > > "vm.swapdev_acct" and then pass it an extra OID value which is the index. > > <aol> > > yes > > </aol> > > speaking as someone who has been spending too much time w/ snmp, it would > > be really good if all indexed sysctls followed this convention. > Thomas is generating updated patches that address this concern and > hopefully we'll get something committed in the next day or two to re-work > the MIB a bit. I propose the attached set of patches. They change the old model to a hierarchy like: vm.swap.nswapdev: 1 vm.swap.dev.0.flags: 1 vm.swap.dev.0.nblks: 65536 vm.swap.dev.0.used: 8176 vm.swap.dev.0.dev: { major = 116, minor = 0x20001 } all have fixed ID's, the nodes for devices (vm.swap.dev.0, vm.swap.dev.1 etc) have the ID's 1, 2 and so forth (0 being reserved). There are some other swap related sysctls in vm, but I wouldn't like to move those do vm.swap (for compatability reasons). If this is a problem, I'd rather rename vm.swap. I'm right now still testing these, but I think they should be ready tomorrow. swd.diff is for the kernel part, libkvmswd.diff makes libkvm use the ID's to index the devices (cheaper). Please comment, -thomas --VS++wcV0S1rZb1Fb Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="swd.diff" diff -cr sys.swd.orig/vm/vm_param.h sys.swd/vm/vm_param.h *** sys.swd.orig/vm/vm_param.h Fri Feb 23 23:08:51 2001 --- sys.swd/vm/vm_param.h Sat Feb 24 00:18:25 2001 *************** *** 87,93 **** #define VM_V_PAGEOUT_FREE_MIN 9 /* cnt.v_pageout_free_min */ #define VM_PAGEOUT_ALGORITHM 10 /* pageout algorithm */ #define VM_SWAPPING_ENABLED 11 /* swapping enabled */ ! #define VM_MAXID 12 /* number of valid vm ids */ #define CTL_VM_NAMES { \ { 0, 0 }, \ --- 87,111 ---- #define VM_V_PAGEOUT_FREE_MIN 9 /* cnt.v_pageout_free_min */ #define VM_PAGEOUT_ALGORITHM 10 /* pageout algorithm */ #define VM_SWAPPING_ENABLED 11 /* swapping enabled */ ! #define VM_SWAP 12 /* swap stats */ ! #define VM_MAXID 13 /* number of valid vm ids */ ! ! /* ! * sysctl vm.swap.* indentifiers. ! */ ! #define VM_SWAP_NSWAPDEV 1 /* number of configured dev's */ ! #define VM_SWAP_DEV 2 /* node to hold the devices */ ! ! /* ! * sysctl vm.swap.dev.* indentifiers VM_SWAP_FIRSRTDEV is the oid of the first ! * swap device, the oid of a swap device being (number + VM_SWAP_FIRSTDEV). ! */ ! #define VM_SWAP_DEV_FLAGS 1 /* flags for swap device */ ! #define VM_SWAP_DEV_NBLKS 2 /* # of blocks */ ! #define VM_SWAP_DEV_USED 3 /* # of blocks in use */ ! #define VM_SWAP_DEV_DEV 4 /* udev_t of the device */ ! ! #define VM_SWAP_DEV_FIRST 1 /* Node for the first device */ #define CTL_VM_NAMES { \ { 0, 0 }, \ *************** *** 102,107 **** --- 120,126 ---- { "v_pageout_free_min", CTLTYPE_INT}, \ { "pageout_algorithm", CTLTYPE_INT}, \ { "swapping_enabled", CTLTYPE_INT},\ + { "swap", CTLTYPE_NODE},\ } /* Only in sys.swd/vm: vm_param.h~ diff -cr sys.swd.orig/vm/vm_swap.c sys.swd/vm/vm_swap.c *** sys.swd.orig/vm/vm_swap.c Fri Feb 23 23:08:51 2001 --- sys.swd/vm/vm_swap.c Sat Feb 24 00:18:45 2001 *************** *** 55,60 **** --- 55,61 ---- #include <vm/vm.h> #include <vm/vm_extern.h> #include <vm/vm_zone.h> + #include <vm/vm_param.h> #include <vm/swap_pager.h> /* *************** *** 70,76 **** int nswdev = NSWAPDEV; int vm_swap_size; static int ncswdev = 0; /* # of configured swap devs */ ! SYSCTL_INT(_vm, OID_AUTO, nswapdev, CTLFLAG_RD, &ncswdev, 0, "Number of swap devices"); static int swapdev_strategy __P((struct vop_strategy_args *ap)); --- 71,80 ---- int nswdev = NSWAPDEV; int vm_swap_size; static int ncswdev = 0; /* # of configured swap devs */ ! ! SYSCTL_NODE(_vm, VM_SWAP, swap, CTLFLAG_RD, 0, "Swap statistics"); ! SYSCTL_NODE(_vm_swap, VM_SWAP_DEV, dev, CTLFLAG_RD, 0, "Swap devices"); ! SYSCTL_INT(_vm_swap, VM_SWAP_NSWAPDEV, nswapdev, CTLFLAG_RD, &ncswdev, 0, "Number of swap devices"); static int swapdev_strategy __P((struct vop_strategy_args *ap)); *************** *** 251,257 **** int error; u_long aligned_nblks; struct sysctl_oid *oid; ! char name[11]; if (!swapdev_vp) { error = getnewvnode(VT_NON, NULL, swapdev_vnodeop_p, --- 255,261 ---- int error; u_long aligned_nblks; struct sysctl_oid *oid; ! char name[5]; if (!swapdev_vp) { error = getnewvnode(VT_NON, NULL, swapdev_vnodeop_p, *************** *** 338,358 **** * Add sysctl entries for new swap area. XXX: if some day swap devices * can be removed, add an oid member to swdevt. */ ! if (snprintf(name, sizeof(name), "swapdev%d", ncswdev) < sizeof(name)) { ! oid = SYSCTL_ADD_NODE(NULL, SYSCTL_STATIC_CHILDREN(_vm), ! OID_AUTO, name, CTLFLAG_RD, NULL, "Swap device stats"); if (oid != NULL) { ! SYSCTL_ADD_INT(NULL, SYSCTL_CHILDREN(oid), OID_AUTO, ! "flags", CTLFLAG_RD, &sp->sw_flags, 0, "Flags"); ! SYSCTL_ADD_INT(NULL, SYSCTL_CHILDREN(oid), OID_AUTO, ! "nblks", CTLFLAG_RD, &sp->sw_nblks, 0, ! "Number of blocks"); ! SYSCTL_ADD_INT(NULL, SYSCTL_CHILDREN(oid), OID_AUTO, ! "used", CTLFLAG_RD, &sp->sw_used, 0, ! "Number of blocks in use"); ! SYSCTL_ADD_OPAQUE(NULL, SYSCTL_CHILDREN(oid), OID_AUTO, ! "dev", CTLFLAG_RD, &sp->sw_dev, sizeof(sp->sw_dev), ! "T,dev_t", "Device"); } } else printf("XXX: swaponvp() name buffer too small!\n"); --- 342,364 ---- * Add sysctl entries for new swap area. XXX: if some day swap devices * can be removed, add an oid member to swdevt. */ ! if (snprintf(name, sizeof(name), "%d", ncswdev) < sizeof(name)) { ! oid = SYSCTL_ADD_NODE(NULL, SYSCTL_STATIC_CHILDREN(_vm_swap_dev), ! ncswdev + VM_SWAP_DEV_FIRST, name, CTLFLAG_RD, NULL, ! "Swap device stats"); if (oid != NULL) { ! SYSCTL_ADD_INT(NULL, SYSCTL_CHILDREN(oid), ! VM_SWAP_DEV_FLAGS, "flags", CTLFLAG_RD, ! &sp->sw_flags, 0, "Flags"); ! SYSCTL_ADD_INT(NULL, SYSCTL_CHILDREN(oid), ! VM_SWAP_DEV_NBLKS, "nblks", CTLFLAG_RD, ! &sp->sw_nblks, 0, "Number of blocks"); ! SYSCTL_ADD_INT(NULL, SYSCTL_CHILDREN(oid), ! VM_SWAP_DEV_USED, "used", CTLFLAG_RD, &sp->sw_used, ! 0, "Number of blocks in use"); ! SYSCTL_ADD_OPAQUE(NULL, SYSCTL_CHILDREN(oid), ! VM_SWAP_DEV_DEV, "dev", CTLFLAG_RD, &sp->sw_dev, ! sizeof(sp->sw_dev), "T,dev_t", "Device"); } } else printf("XXX: swaponvp() name buffer too small!\n"); Only in sys.swd/vm: vm_swap.c~ --VS++wcV0S1rZb1Fb Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="libkvmswd.diff" diff -cr libkvm.1o/kvm_getswapinfo.c libkvm.1os/kvm_getswapinfo.c *** libkvm.1o/kvm_getswapinfo.c Fri Feb 23 01:09:53 2001 --- libkvm.1os/kvm_getswapinfo.c Sat Feb 24 00:37:54 2001 *************** *** 25,30 **** --- 25,32 ---- #include <sys/blist.h> #include <sys/sysctl.h> + #include <vm/vm_param.h> + #include <err.h> #include <fcntl.h> #include <kvm.h> *************** *** 64,70 **** static int kvm_getswapinfo_sysctl(kvm_t *, struct kvm_swap *, int, int); static int nlist_init(kvm_t *); static int getsysctl(kvm_t *, char *, void *, int); ! static int getsysctl2(kvm_t *, char *, char *, char *, int, void *, int); #define SVAR(var) __STRING(var) /* to force expansion */ --- 66,72 ---- static int kvm_getswapinfo_sysctl(kvm_t *, struct kvm_swap *, int, int); static int nlist_init(kvm_t *); static int getsysctl(kvm_t *, char *, void *, int); ! static int getsysctloid(kvm_t *, int *, int, void *, int); #define SVAR(var) __STRING(var) /* to force expansion */ *************** *** 458,466 **** #define GETSYSCTL(kd, name, var) \ getsysctl(kd, name, &(var), sizeof(var)) ! #define GETSYSCTL2(kd, pref, suff, buf, var) \ ! getsysctl2(kd, pref, suff, buf, sizeof(buf), &(var), \ ! sizeof(var)) int kvm_getswapinfo_sysctl( --- 460,467 ---- #define GETSYSCTL(kd, name, var) \ getsysctl(kd, name, &(var), sizeof(var)) ! #define GETSYSCTLOID(kd, oid, oidlen, var) \ ! getsysctloid(kd, oid, oidlen, &(var), sizeof(var)) int kvm_getswapinfo_sysctl( *************** *** 471,481 **** ) { int ti = 0; udev_t dev; - char node[15]; - char buf[20]; int used, ttl, i; ! if (!GETSYSCTL(kd, "vm.nswapdev", unswdev)) return -1; ti = unswdev; --- 472,484 ---- ) { int ti = 0; udev_t dev; int used, ttl, i; + int soid[5]; ! soid[0] = CTL_VM; ! soid[1] = VM_SWAP; ! soid[2] = VM_SWAP_NSWAPDEV; ! if (!GETSYSCTLOID(kd, soid, 3, unswdev)) return -1; ti = unswdev; *************** *** 488,510 **** if (!GETSYSCTL(kd, "vm.dmmax", dmmax)) return -1; for (i = 0; i < unswdev; ++i) { ! if (snprintf(node, sizeof(node), "vm.swapdev%d.", i) >= ! sizeof(node)) { ! _kvm_err(kd, kd->program, "XXX: node buffer too small"); ! return -1; ! } ! ! if (!GETSYSCTL2(kd, node, "nblks", buf, ttl)) return -1; ! if (!GETSYSCTL2(kd, node, "used", buf, used)) return -1; ttl -= dmmax; if (i < ti) { ! if (!GETSYSCTL2(kd, node, "dev", buf, dev)) return -1; ! if (!GETSYSCTL2(kd, node, "flags", buf, swap_ary[i].ksw_flags)) return -1; swap_ary[i].ksw_total = ttl; --- 491,514 ---- if (!GETSYSCTL(kd, "vm.dmmax", dmmax)) return -1; + soid[2] = VM_SWAP_DEV; for (i = 0; i < unswdev; ++i) { ! soid[3] = i + 1; ! ! soid[4] = VM_SWAP_DEV_NBLKS; ! if (!GETSYSCTLOID(kd, soid, 5, ttl)) return -1; ! soid[4] = VM_SWAP_DEV_USED; ! if (!GETSYSCTLOID(kd, soid, 5, used)) return -1; ttl -= dmmax; if (i < ti) { ! soid[4] = VM_SWAP_DEV_DEV; ! if (!GETSYSCTLOID(kd, soid, 5, dev)) return -1; ! soid[4] = VM_SWAP_DEV_FLAGS; ! if (!GETSYSCTLOID(kd, soid, 5, swap_ary[i].ksw_flags)) return -1; swap_ary[i].ksw_total = ttl; *************** *** 587,608 **** } static int ! getsysctl2 ( kvm_t *kd, ! char *pref, ! char *suff, ! char *buf, ! int buflen, void *ptr, int len ) { ! if (strlcpy(buf, pref, buflen) >= buflen) { ! _kvm_err(kd, kd->program, "getsysctl2: string buffer too small"); return (0); } ! if (strlcat(buf, suff, buflen) >= buflen) { ! _kvm_err(kd, kd->program, "getsysctl2: string buffer too small"); return (0); } ! return getsysctl(kd, buf, ptr, len); } --- 591,611 ---- } static int ! getsysctloid ( kvm_t *kd, ! int *oid, ! int oidlen, void *ptr, int len ) { ! int nlen = len; ! if (sysctl(oid, oidlen, ptr, &nlen, NULL, 0) == -1) { ! _kvm_err(kd, kd->program, "cannot read sysctl."); return (0); } ! if (nlen != len) { ! _kvm_err(kd, kd->program, "sysctl has unexpected size"); return (0); } ! return (1); } Only in libkvm.1o: kvm_getswapinfo.c~ Binary files libkvm.1o/kvm_getswapinfo.o and libkvm.1os/kvm_getswapinfo.o differ Binary files libkvm.1o/libkvm.a and libkvm.1os/libkvm.a differ --VS++wcV0S1rZb1Fb-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010224005142.A2470>