migrating proc from zone to objcache
Nicolas Thery
nthery at gmail.com
Mon Mar 31 11:29:49 PDT 2008
Hello,
Now that the release is over, I'll try to get rid of zones and migrate
allocations to objcache.
Here is a 1st patch that migrate struct proc. I'll commit it in a
couple of days if nobody objects.
I'm also implementing a way to monitor objcache statistics. So far,
I've hacked sth similar to
sysctl vm.zone: stats are returned in one giant string, one line per
cache. That's simple but ugly and hard to read because there are
quite a few stats per cache.
So I'm thinking about implementing a small tool, ocstat, that extracts
stats from sysctl the way ps(1) does (thru libkvm iirc) and formats it
in various ways. What do you think?
Cheers,
Nicolas
Index: src2/sys/kern/kern_exit.c
===================================================================
--- src2.orig/sys/kern/kern_exit.c 2008-03-31 08:05:59.139796000 +0200
+++ src2/sys/kern/kern_exit.c 2008-03-31 10:31:39.000000000 +0200
@@ -834,7 +834,7 @@ loop:
}
vm_waitproc(p);
- zfree(proc_zone, p);
+ objcache_put(proc_cache, p);
nprocs--;
return (0);
}
Index: src2/sys/kern/kern_proc.c
===================================================================
--- src2.orig/sys/kern/kern_proc.c 2008-03-31 08:05:59.139918000 +0200
+++ src2/sys/kern/kern_proc.c 2008-03-31 10:31:39.000000000 +0200
@@ -84,7 +84,7 @@ u_long pgrphash;
struct proclist allproc;
struct proclist zombproc;
struct spinlock allproc_spin;
-vm_zone_t proc_zone;
+struct objcache* proc_cache;
vm_zone_t lwp_zone;
vm_zone_t thread_zone;
@@ -131,7 +131,7 @@ procinit(void)
spin_init(&allproc_spin);
pidhashtbl = hashinit(maxproc / 4, M_PROC, &pidhash);
pgrphashtbl = hashinit(maxproc / 4, M_PROC, &pgrphash);
- proc_zone = zinit("PROC", sizeof (struct proc), 0, 0, 5);
+ proc_cache = objcache_create_simple(M_PROC, sizeof(struct proc));
lwp_zone = zinit("LWP", sizeof (struct lwp), 0, 0, 5);
thread_zone = zinit("THREAD", sizeof (struct thread), 0, 0, 5);
uihashinit();
Index: src2/sys/sys/proc.h
===================================================================
--- src2.orig/sys/sys/proc.h 2008-03-31 08:05:59.140325000 +0200
+++ src2/sys/sys/proc.h 2008-03-31 10:31:39.000000000 +0200
@@ -473,7 +473,7 @@ struct proc *zpfind (pid_t); /* Find zom
struct vm_zone;
struct globaldata;
struct lwp_params;
-extern struct vm_zone *proc_zone;
+extern struct objcache *proc_cache;
extern struct vm_zone *lwp_zone;
int enterpgrp (struct proc *p, pid_t pgid, int mksess);
Index: src2/sys/kern/kern_fork.c
===================================================================
--- src2.orig/sys/kern/kern_fork.c 2008-03-31 08:05:59.140042000 +0200
+++ src2/sys/kern/kern_fork.c 2008-03-31 10:31:39.000000000 +0200
@@ -332,7 +332,7 @@ fork1(struct lwp *lp1, int flags, struct
}
/* Allocate new proc. */
- p2 = zalloc(proc_zone);
+ p2 = objcache_get(proc_cache, M_WAITOK);
bzero(p2, sizeof(*p2));
/*
More information about the Kernel
mailing list