currently its impossible to query swap space used or available via sysctl and it must be done via kvm calls which are inaccessible for languages like Java. currently sysctl returns only this. vm.swap_reserved: 768651264 <-- free space on disk holding swapfile vm.swap_total: 629145600 <-- swapfile total size i propose to add variable like vm.swap_count: <-- how many of vm.swap_total are currently in use proposed sysctl name is similar to vm.stats.vm.v_* names.
State Changed From-To: open->suspended awaiting someone to make a patch.
Index: sys/vm/swap_pager.c =================================================================== --- sys/vm/swap_pager.c (revision 234696) +++ sys/vm/swap_pager.c (working copy) @@ -2692,3 +2692,20 @@ NODEV); return (0); } + + +static int +sysctl_vm_swap_free(SYSCTL_HANDLER_ARGS) { + int64_t swap_free = 0; + struct swdevt *sp; + + mtx_lock(&sw_dev_mtx); + TAILQ_FOREACH(sp, &swtailq, sw_list) { + swap_free += sp->sw_nblks - sp->sw_used; + } + mtx_unlock(&sw_dev_mtx); + swap_free *= PAGE_SIZE; + return SYSCTL_OUT(req, &swap_free, sizeof(swap_free)); +} +SYSCTL_OID(_vm, OID_AUTO, swap_free, CTLTYPE_S64|CTLFLAG_RD|CTLFLAG_MPSAFE, + NULL, 0, sysctl_vm_swap_free, "Q", "Amount of free swap storage.");
Responsible Changed From-To: freebsd-bugs->eadler I'll take it.
State Changed From-To: suspended->open Submitter provided requested information
State Changed From-To: open->analyzed awaiting approval
Author: eadler Date: Fri Jun 1 04:42:52 2012 New Revision: 236380 URL: http://svn.freebsd.org/changeset/base/236380 Log: Add sysctl to query amount of swap space free PR: kern/166780 Submitted by: Radim Kolar <hsn@sendmail.cz> Approved by: cperciva MFC after: 1 week Modified: head/sys/vm/swap_pager.c Modified: head/sys/vm/swap_pager.c ============================================================================== --- head/sys/vm/swap_pager.c Fri Jun 1 04:34:49 2012 (r236379) +++ head/sys/vm/swap_pager.c Fri Jun 1 04:42:52 2012 (r236380) @@ -2692,3 +2692,18 @@ swaponvp(struct thread *td, struct vnode NODEV); return (0); } + +static int +sysctl_vm_swap_free(SYSCTL_HANDLER_ARGS) { + int swap_free, used; + int total; + + swap_pager_status(&total, &used); + + swap_free = (total - used) * PAGE_SIZE; + return SYSCTL_OUT(req, &swap_free, sizeof(swap_free)); +} + +SYSCTL_OID(_vm, OID_AUTO, swap_free, CTLTYPE_INT|CTLFLAG_RD|CTLFLAG_MPSAFE, + NULL, 0, sysctl_vm_swap_free, "Q", + "Blocks of free swap storage."); _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
State Changed From-To: analyzed->patched committed in r236380
Author: eadler Date: Fri Jun 1 18:58:50 2012 New Revision: 236417 URL: http://svn.freebsd.org/changeset/base/236417 Log: Revert r236380 PR: kern/166780 Requested by: many Approved by: cperciva (implicit) Modified: head/sys/vm/swap_pager.c Modified: head/sys/vm/swap_pager.c ============================================================================== --- head/sys/vm/swap_pager.c Fri Jun 1 18:57:57 2012 (r236416) +++ head/sys/vm/swap_pager.c Fri Jun 1 18:58:50 2012 (r236417) @@ -2692,18 +2692,3 @@ swaponvp(struct thread *td, struct vnode NODEV); return (0); } - -static int -sysctl_vm_swap_free(SYSCTL_HANDLER_ARGS) { - int swap_free, used; - int total; - - swap_pager_status(&total, &used); - - swap_free = (total - used) * PAGE_SIZE; - return SYSCTL_OUT(req, &swap_free, sizeof(swap_free)); -} - -SYSCTL_OID(_vm, OID_AUTO, swap_free, CTLTYPE_INT|CTLFLAG_RD|CTLFLAG_MPSAFE, - NULL, 0, sysctl_vm_swap_free, "Q", - "Blocks of free swap storage."); _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
State Changed From-To: patched->open backed out
Responsible Changed From-To: eadler->freebsd-bugs I won't be dealing with this PR for some time, so give it back to the pool
i do not need this anymore, using different api to get desired value.