sysfile.c: bump up the read size using a constant
authorRonald G. Minnich <rminnich@google.com>
Tue, 8 Jul 2014 01:29:19 +0000 (18:29 -0700)
committerRonald G. Minnich <rminnich@google.com>
Tue, 8 Jul 2014 02:37:18 +0000 (19:37 -0700)
DIRREADSIZE is now the amount of bytes we try to read
when reading a directory. 8192 sounds reasonable.

Next step is to have an 'at EOF' flag on directories so we
don't do one zero byte read per dirent. But things are already
much faster.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
kern/src/ns/sysfile.c

index cdce469..8220f7e 100644 (file)
 #include <smp.h>
 #include <ip.h>
 
+enum {
+       DIRSIZE = STATFIXLEN + 32 * 4,
+       DIRREADLIM = 2048,      /* should handle the largest reasonable directory entry */
+       DIRREADSIZE=8192,       /* Just read a lot. Memory is cheap, lots of bandwidth,
+                                * and RPCs are very expensive. At the same time,
+                                * let's not yet exceed a common MSIZE. */
+
+};
+
 static int growfd(struct fgrp *f, int fd)
 {
        
@@ -751,7 +760,7 @@ static long rread(int fd, void *va, long n, int64_t * offp)
 
        /* kdirent hack: userspace is expecting kdirents, but all of 9ns
         * produces Ms.  Just save up what we don't use and append the
-        * new stuff later. Allocate 2048 bytes for that purpose. 
+        * new stuff later. Allocate DIRREADSIZE bytes for that purpose.
         */
        if (dir) {
                /* expecting only one dirent at a time, o/w we're busted */
@@ -766,7 +775,7 @@ static long rread(int fd, void *va, long n, int64_t * offp)
                        nexterror();
                }
                va = c->buf + c->bufused;
-               n = 2048 - c->bufused;
+               n = DIRREADSIZE - c->bufused;
        }
 
        /* this is the normal plan9 read */
@@ -1133,11 +1142,6 @@ int syswstat(char *path, uint8_t * buf, int n)
        return n;
 }
 
-enum {
-       DIRSIZE = STATFIXLEN + 32 * 4,
-       DIRREADLIM = 2048,      /* should handle the largest reasonable directory entry */
-};
-
 struct dir *chandirstat(struct chan *c)
 {
        ERRSTACK(1);