svn commit: r262737 - in stable/10: share/man/man9 sys/sys sys/vm
Gleb Smirnoff
glebius at FreeBSD.org
Tue Mar 4 14:21:08 UTC 2014
Author: glebius
Date: Tue Mar 4 14:21:07 2014
New Revision: 262737
URL: http://svnweb.freebsd.org/changeset/base/262737
Log:
Merge 261593 from head:
Provide macros that allow easily export uma(9) zone limits and
current usage via sysctl(9).
Modified:
stable/10/share/man/man9/zone.9
stable/10/sys/sys/sysctl.h
stable/10/sys/vm/uma_core.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/share/man/man9/zone.9
==============================================================================
--- stable/10/share/man/man9/zone.9 Tue Mar 4 14:19:15 2014 (r262736)
+++ stable/10/share/man/man9/zone.9 Tue Mar 4 14:21:07 2014 (r262737)
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 21, 2013
+.Dd February 7, 2014
.Dt ZONE 9
.Os
.Sh NAME
@@ -71,6 +71,11 @@
.Fn uma_zone_get_cur "uma_zone_t zone"
.Ft void
.Fn uma_zone_set_warning "uma_zone_t zone" "const char *warning"
+.In sys/sysctl.h
+.Fn SYSCTL_UMA_MAX parent nbr name access zone descr
+.Fn SYSCTL_ADD_UMA_MAX ctx parent nbr name access zone descr
+.Fn SYSCTL_UMA_CUR parent nbr name access zone descr
+.Fn SYSCTL_ADD_UMA_CUR ctx parent nbr name access zone descr
.Sh DESCRIPTION
The zone allocator provides an efficient interface for managing
dynamically-sized collections of items of similar size.
@@ -307,6 +312,38 @@ Warnings can be turned off globally by s
.Va vm.zone_warnings
sysctl tunable to
.Va 0 .
+.Pp
+The
+.Fn SYSCTL_UMA_MAX parent nbr name access zone descr
+macro declares a static
+.Xr sysctl
+oid that exports the effective upper limit number of items for a zone.
+The
+.Fa zone
+argument should be a pointer to
+.Vt uma_zone_t .
+A read of the oid returns value obtained through
+.Fn uma_zone_get_max .
+A write to the oid sets new value via
+.Fn uma_zone_set_max .
+The
+.Fn SYSCTL_ADD_UMA_MAX ctx parent nbr name access zone descr
+macro is provided to create this type of oid dynamically.
+.Pp
+The
+.Fn SYSCTL_UMA_CUR parent nbr name access zone descr
+macro declares a static read only
+.Xr sysctl
+oid that exports the approximate current occupancy of the zone.
+The
+.Fa zone
+argument should be a pointer to
+.Vt uma_zone_t .
+A read of the oid returns value obtained through
+.Fn uma_zone_get_cur .
+The
+.Fn SYSCTL_ADD_UMA_CUR ctx parent nbr name zone descr
+macro is provided to create this type of oid dynamically.
.Sh RETURN VALUES
The
.Fn uma_zalloc
Modified: stable/10/sys/sys/sysctl.h
==============================================================================
--- stable/10/sys/sys/sysctl.h Tue Mar 4 14:19:15 2014 (r262736)
+++ stable/10/sys/sys/sysctl.h Tue Mar 4 14:21:07 2014 (r262737)
@@ -186,6 +186,9 @@ int sysctl_handle_string(SYSCTL_HANDLER_
int sysctl_handle_opaque(SYSCTL_HANDLER_ARGS);
int sysctl_handle_counter_u64(SYSCTL_HANDLER_ARGS);
+int sysctl_handle_uma_zone_max(SYSCTL_HANDLER_ARGS);
+int sysctl_handle_uma_zone_cur(SYSCTL_HANDLER_ARGS);
+
int sysctl_dpcpu_int(SYSCTL_HANDLER_ARGS);
int sysctl_dpcpu_long(SYSCTL_HANDLER_ARGS);
int sysctl_dpcpu_quad(SYSCTL_HANDLER_ARGS);
@@ -431,6 +434,30 @@ SYSCTL_ALLOWED_TYPES(UINT64, uint64_t *a
sysctl_add_oid(ctx, parent, nbr, name, (access), \
ptr, arg, handler, fmt, __DESCR(descr))
+/* Oid to handle limits on uma(9) zone specified by pointer. */
+#define SYSCTL_UMA_MAX(parent, nbr, name, access, ptr, descr) \
+ SYSCTL_ASSERT_TYPE(INT, ptr, parent, name); \
+ SYSCTL_OID(parent, nbr, name, \
+ CTLTYPE_INT | CTLFLAG_MPSAFE | (access), \
+ ptr, 0, sysctl_handle_uma_zone_max, "I", descr)
+#define SYSCTL_ADD_UMA_MAX(ctx, parent, nbr, name, access, ptr, descr)\
+ sysctl_add_oid(ctx, parent, nbr, name, \
+ CTLTYPE_INT | CTLFLAG_MPSAFE | (access), \
+ SYSCTL_ADD_ASSERT_TYPE(INT, ptr), 0, \
+ sysctl_handle_uma_zone_max, "I", __DESCR(descr))
+
+/* Oid to obtain current use of uma(9) zone specified by pointer. */
+#define SYSCTL_UMA_CUR(parent, nbr, name, access, ptr, descr) \
+ SYSCTL_ASSERT_TYPE(INT, ptr, parent, name); \
+ SYSCTL_OID(parent, nbr, name, \
+ CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RD | (access), \
+ ptr, 0, sysctl_handle_uma_zone_cur, "I", descr)
+#define SYSCTL_ADD_UMA_CUR(ctx, parent, nbr, name, access, ptr, descr) \
+ sysctl_add_oid(ctx, parent, nbr, name, \
+ CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RD | (access), \
+ SYSCTL_ADD_ASSERT_TYPE(INT, ptr), 0, \
+ sysctl_handle_uma_zone_cur, "I", __DESCR(descr))
+
/*
* A macro to generate a read-only sysctl to indicate the presense of optional
* kernel features.
Modified: stable/10/sys/vm/uma_core.c
==============================================================================
--- stable/10/sys/vm/uma_core.c Tue Mar 4 14:19:15 2014 (r262736)
+++ stable/10/sys/vm/uma_core.c Tue Mar 4 14:21:07 2014 (r262737)
@@ -3462,6 +3462,35 @@ skip:
return (error);
}
+int
+sysctl_handle_uma_zone_max(SYSCTL_HANDLER_ARGS)
+{
+ uma_zone_t zone = *(uma_zone_t *)arg1;
+ int error, max, old;
+
+ old = max = uma_zone_get_max(zone);
+ error = sysctl_handle_int(oidp, &max, 0, req);
+ if (error || !req->newptr)
+ return (error);
+
+ if (max < old)
+ return (EINVAL);
+
+ uma_zone_set_max(zone, max);
+
+ return (0);
+}
+
+int
+sysctl_handle_uma_zone_cur(SYSCTL_HANDLER_ARGS)
+{
+ uma_zone_t zone = *(uma_zone_t *)arg1;
+ int cur;
+
+ cur = uma_zone_get_cur(zone);
+ return (sysctl_handle_int(oidp, &cur, 0, req));
+}
+
#ifdef DDB
DB_SHOW_COMMAND(uma, db_show_uma)
{
More information about the svn-src-stable-10
mailing list