svn commit: r274005 - head/sys/kern
Mateusz Guzik
mjg at FreeBSD.org
Mon Nov 3 04:16:05 UTC 2014
Author: mjg
Date: Mon Nov 3 04:16:04 2014
New Revision: 274005
URL: https://svnweb.freebsd.org/changeset/base/274005
Log:
filedesc: create a dedicated zone for struct filedesc0
Currently sizeof(struct filedesc0) is 1096 bytes, which means allocations from
malloc use 2048 bytes.
There is no easy way to shrink the structure <= 1024 an it is likely to grow in
the future.
Modified:
head/sys/kern/kern_descrip.c
Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c Mon Nov 3 03:45:41 2014 (r274004)
+++ head/sys/kern/kern_descrip.c Mon Nov 3 04:16:04 2014 (r274005)
@@ -98,6 +98,7 @@ MALLOC_DEFINE(M_FILECAPS, "filecaps", "d
MALLOC_DECLARE(M_FADVISE);
static uma_zone_t file_zone;
+static uma_zone_t filedesc0_zone;
static int closefp(struct filedesc *fdp, int fd, struct file *fp,
struct thread *td, int holdleaders);
@@ -1801,7 +1802,7 @@ fdinit(struct filedesc *fdp)
struct filedesc0 *newfdp0;
struct filedesc *newfdp;
- newfdp0 = malloc(sizeof *newfdp0, M_FILEDESC, M_WAITOK | M_ZERO);
+ newfdp0 = uma_zalloc(filedesc0_zone, M_WAITOK | M_ZERO);
newfdp = &newfdp0->fd_fd;
/* Create the file descriptor table. */
@@ -1865,7 +1866,7 @@ fddrop(struct filedesc *fdp)
return;
FILEDESC_LOCK_DESTROY(fdp);
- free(fdp, M_FILEDESC);
+ uma_zfree(filedesc0_zone, fdp);
}
/*
@@ -3538,6 +3539,8 @@ filelistinit(void *dummy)
file_zone = uma_zcreate("Files", sizeof(struct file), NULL, NULL,
NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE);
+ filedesc0_zone = uma_zcreate("filedesc0", sizeof(struct filedesc0),
+ NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0);
mtx_init(&sigio_lock, "sigio lock", NULL, MTX_DEF);
mtx_init(&fdesc_mtx, "fdesc", NULL, MTX_DEF);
}
More information about the svn-src-all
mailing list