Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/sys - make nc_nlen short since we can now accommodate mo...



details:   https://anonhg.NetBSD.org/src/rev/60c17b0a402e
branches:  trunk
changeset: 1003384:60c17b0a402e
user:      christos <christos%NetBSD.org@localhost>
date:      Fri Sep 13 13:58:53 2019 +0000

description:
- make nc_nlen short since we can now accommodate more than len 256 names.
- reorder the struct to have the lists first for performance
- put name last and make it variable length
- add an assert to make sure we don't waster space
- bump the size we can store in the pool a little because we have more space
  now because of alignment.

diffstat:

 sys/sys/namei.src |  34 +++++++++++++++++-----------------
 1 files changed, 17 insertions(+), 17 deletions(-)

diffs (65 lines):

diff -r 4ed274a0cd04 -r 60c17b0a402e sys/sys/namei.src
--- a/sys/sys/namei.src Fri Sep 13 13:56:04 2019 +0000
+++ b/sys/sys/namei.src Fri Sep 13 13:58:53 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: namei.src,v 1.42 2019/06/03 06:04:21 msaitoh Exp $     */
+/*     $NetBSD: namei.src,v 1.43 2019/09/13 13:58:53 christos Exp $    */
 
 /*
  * Copyright (c) 1985, 1989, 1991, 1993
@@ -187,20 +187,17 @@
 
 #endif
 
+#ifdef __NAMECACHE_PRIVATE
 /*
- * This structure describes the elements in the cache of recent
- * names looked up by namei. NCHNAMLEN is sized to make structure
- * size a power of two to optimize allocations.  Minimum reasonable
- * size is 15.
+ * For simplicity (and economy of storage), names longer than
+ * a maximum length of NCHNAMLEN are stored in non-pooled storage.
  */
-
-#define        NCHNAMLEN       31      /* maximum name segment length we bother with */
+#define        NCHNAMLEN       32      /* up to this size gets stored in pool */
 
 /*
- * Namecache entry.  This structure is arranged so that frequently
- * accessed and mostly read-only data is toward the front, with
- * infrequently accessed data and the lock towards the rear.  The
- * lock is then more likely to be in a separate cache line.
+ * Namecache entry.  
+ * This structure describes the elements in the cache of recent
+ * names looked up by namei.
  *
  * Locking rules:
  *
@@ -214,18 +211,21 @@
 struct namecache {
        LIST_ENTRY(namecache) nc_hash;  /* L/C hash chain */
        LIST_ENTRY(namecache) nc_vhash; /* L directory hash chain */
+       TAILQ_ENTRY(namecache) nc_lru;  /* L pseudo-lru chain */
+       LIST_ENTRY(namecache) nc_dvlist;/* L dvp's list of cache entries */
+       LIST_ENTRY(namecache) nc_vlist; /* L vp's list of cache entries */
        struct  vnode *nc_dvp;          /* N vnode of parent of name */
        struct  vnode *nc_vp;           /* N vnode the name refers to */
-       int     nc_flags;               /* - copy of componentname ISWHITEOUT */
-       char    nc_nlen;                /* - length of name */
-       char    nc_name[NCHNAMLEN];     /* - segment name */
        void    *nc_gcqueue;            /* N queue for garbage collection */
-       TAILQ_ENTRY(namecache) nc_lru;  /* L psuedo-lru chain */
-       LIST_ENTRY(namecache) nc_dvlist;/* L dvp's list of cache entries */
-       LIST_ENTRY(namecache) nc_vlist; /* L vp's list of cache entries */
        kmutex_t nc_lock;               /*   lock on this entry */
        int     nc_hittime;             /* N last time scored a hit */
+       int     nc_flags;               /* - copy of componentname ISWHITEOUT */
+       u_short nc_nlen;                /* - length of name */
+       char    nc_name[0];             /* - segment name */
 };
+__CTASSERT((sizeof(struct namecache) + NCHNAMLEN)
+    % __alignof(struct namecache) == 0);
+#endif
 
 #ifdef _KERNEL
 #include <sys/pool.h>



Home | Main Index | Thread Index | Old Index