Create two public UMA_ZONE_PCPU zones: 64 bit sized and pointer sized.
Sponsored by: Nginx, Inc.
This commit is contained in:
parent
f947570e35
commit
49fef6a202
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=261725
@ -41,8 +41,6 @@ __FBSDID("$FreeBSD$");
|
||||
#define IN_SUBR_COUNTER_C
|
||||
#include <sys/counter.h>
|
||||
|
||||
static uma_zone_t uint64_pcpu_zone;
|
||||
|
||||
void
|
||||
counter_u64_zero(counter_u64_t c)
|
||||
{
|
||||
@ -62,7 +60,7 @@ counter_u64_alloc(int flags)
|
||||
{
|
||||
counter_u64_t r;
|
||||
|
||||
r = uma_zalloc(uint64_pcpu_zone, flags);
|
||||
r = uma_zalloc(pcpu_zone_64, flags);
|
||||
if (r != NULL)
|
||||
counter_u64_zero(r);
|
||||
|
||||
@ -73,7 +71,7 @@ void
|
||||
counter_u64_free(counter_u64_t c)
|
||||
{
|
||||
|
||||
uma_zfree(uint64_pcpu_zone, c);
|
||||
uma_zfree(pcpu_zone_64, c);
|
||||
}
|
||||
|
||||
int
|
||||
@ -96,12 +94,3 @@ sysctl_handle_counter_u64(SYSCTL_HANDLER_ARGS)
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void
|
||||
counter_startup(void)
|
||||
{
|
||||
|
||||
uint64_pcpu_zone = uma_zcreate("uint64 pcpu", sizeof(uint64_t),
|
||||
NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_PCPU);
|
||||
}
|
||||
SYSINIT(counter, SI_SUB_KMEM, SI_ORDER_ANY, counter_startup, NULL);
|
||||
|
@ -59,6 +59,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/proc.h>
|
||||
#include <sys/smp.h>
|
||||
#include <sys/sx.h>
|
||||
#include <vm/uma.h>
|
||||
#include <ddb/ddb.h>
|
||||
|
||||
static MALLOC_DEFINE(M_PCPU, "Per-cpu", "Per-cpu resource accouting.");
|
||||
@ -126,6 +127,30 @@ dpcpu_startup(void *dummy __unused)
|
||||
}
|
||||
SYSINIT(dpcpu, SI_SUB_KLD, SI_ORDER_FIRST, dpcpu_startup, 0);
|
||||
|
||||
/*
|
||||
* UMA_PCPU_ZONE zones, that are available for all kernel
|
||||
* consumers. Right now 64 bit zone is used for counter(9)
|
||||
* and pointer zone is used by flowtable.
|
||||
*/
|
||||
|
||||
uma_zone_t pcpu_zone_64;
|
||||
uma_zone_t pcpu_zone_ptr;
|
||||
|
||||
static void
|
||||
pcpu_zones_startup(void)
|
||||
{
|
||||
|
||||
pcpu_zone_64 = uma_zcreate("64 pcpu", sizeof(uint64_t),
|
||||
NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_PCPU);
|
||||
|
||||
if (sizeof(uint64_t) == sizeof(void *))
|
||||
pcpu_zone_ptr = pcpu_zone_64;
|
||||
else
|
||||
pcpu_zone_ptr = uma_zcreate("ptr pcpu", sizeof(void *),
|
||||
NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_PCPU);
|
||||
}
|
||||
SYSINIT(pcpu_zones, SI_SUB_KMEM, SI_ORDER_ANY, pcpu_zones_startup, NULL);
|
||||
|
||||
/*
|
||||
* First-fit extent based allocator for allocating space in the per-cpu
|
||||
* region reserved for modules. This is only intended for use by the
|
||||
|
@ -635,6 +635,12 @@ uint32_t *uma_find_refcnt(uma_zone_t zone, void *item);
|
||||
int uma_zone_exhausted(uma_zone_t zone);
|
||||
int uma_zone_exhausted_nolock(uma_zone_t zone);
|
||||
|
||||
/*
|
||||
* Common UMA_ZONE_PCPU zones.
|
||||
*/
|
||||
extern uma_zone_t pcpu_zone_64;
|
||||
extern uma_zone_t pcpu_zone_ptr;
|
||||
|
||||
/*
|
||||
* Exported statistics structures to be used by user space monitoring tools.
|
||||
* Statistics stream consists of a uma_stream_header, followed by a series of
|
||||
|
Loading…
Reference in New Issue
Block a user