]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/ufs/ffs/fs.h
xnu-517.tar.gz
[apple/xnu.git] / bsd / ufs / ffs / fs.h
index cffa4fad4bf8d1fc2d3125173c3bdec0d38574eb..16871857e99daea0a48001b7e9e8090744aaeeb4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2003 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
  * computed as cylinder groups are inspected.
  * There is a 128-byte region in the superblock reserved for in-core
  * pointers to summary information. Originally this included an array
- * of pointers to blocks of struct csum; now there are just two
+ * of pointers to blocks of struct csum; now there are just three
  * pointers and the remaining space is padded with fs_ocsp[].
  *
  * NOCSPTRS determines the size of this padding. One pointer (fs_csp)
  * is taken away to point to a contiguous array of struct csum for
  * all cylinder groups; a second (fs_maxcluster) points to an array
- * of cluster sizes that is computed as cylinder groups are inspected.
+ * of cluster sizes that is computed as cylinder groups are inspected,
+ * and the third points to an array that tracks the creation of new
+ * directories.
  */
-#define NOCSPTRS ((128 / sizeof(void *)) - 2)
-
+#define NOCSPTRS ((128 / sizeof(void *)) - 3)
 
 /*
  * A summary of contiguous blocks of various sizes is maintained
 #define MINFREE                5
 #define DEFAULTOPT     FS_OPTTIME
 
+/* Grigoriy Orlov <gluk@ptci.ru> has done some extensive work to fine
+ * tune the layout preferences for directories within a filesystem.
+ * His algorithm can be tuned by adjusting the following parameters
+ * which tell the system the average file size and the average number
+ * of files per directory. These defaults are well selected for typical
+ * filesystems, but may need to be tuned for odd cases like filesystems
+ * being used for squid caches or news spools.
+ */
+#define AVFILESIZ      16384
+#define AFPDIR         64
+
 /*
  * Per cylinder group information; summarized in blocks allocated
  * from first cylinder group data blocks.  These blocks have to be
@@ -260,11 +272,14 @@ struct fs {
 /* these fields retain the current block allocation info */
        int32_t  fs_cgrotor;            /* last cg searched */
        void    *fs_ocsp[NOCSPTRS];     /* list of fs_cs info buffers */
+       u_int8_t *fs_contigdirs;        /* # of contiguously allocated dirs */
        struct  csum *fs_csp;           /* list of fs_cs info buffers */
        int32_t  *fs_maxcluster;        /* max cluster in each cyl group */
        int32_t  fs_cpc;                /* cyl per cycle in postbl */
        int16_t  fs_opostbl[16][8];     /* old rotation block list head */
-       int32_t  fs_sparecon[50];       /* reserved for future constants */
+       int32_t  fs_avgfilesize;        /* expected average file size */
+       int32_t  fs_avgfpdir;           /* expected # of files per directory */
+       int32_t  fs_sparecon[48];       /* reserved for future constants */
        int32_t  fs_contigsumsize;      /* size of cluster summary array */ 
        int32_t  fs_maxsymlinklen;      /* max length of an internal symlink */
        int32_t  fs_inodefmt;           /* format of on-disk inodes */