Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_main.c e_start_main.c 


Log Message:


speed up e17's login - reduce disk IO wait.

on my p4 3.4ghz + reiser3fs IO Wait time went from 2.6 to 1.9 seconds
(total login time went from 3.01511 to 2.29971, with 100% cached login time
 being 0.41809)

on my core 2 duo laptop + ext3fs IO Wait time went from 2.05 to 1.15 seconds
(total login time went from 2.50988 to 1.60785, with 100% cached login time
 being 0.45850)

this should speed up e's login a bit... i hope.

note - it is adaptive. it needs you to log in at least once using the current
code as it traps and logs certain file accesses and needs that log to replay
next login.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_main.c,v
retrieving revision 1.195
retrieving revision 1.196
diff -u -3 -r1.195 -r1.196
--- e_main.c    22 Oct 2006 02:14:08 -0000      1.195
+++ e_main.c    22 Oct 2006 10:03:58 -0000      1.196
@@ -3,6 +3,8 @@
  */
 #include "e.h"
 
+EAPI int e_precache_end = 0;
+
 /* local subsystem functions */
 static void _e_main_shutdown_push(int (*func)(void));
 static void _e_main_shutdown(int errorcode);
@@ -1404,6 +1406,7 @@
          {
             TS("SLEEP");
             first_idle = 0;
+            e_precache_end = 1;
          }
      }
    return 1;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_start_main.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- e_start_main.c      22 Oct 2006 06:07:12 -0000      1.5
+++ e_start_main.c      22 Oct 2006 10:03:58 -0000      1.6
@@ -3,6 +3,10 @@
 #include <unistd.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/utsname.h>
+#include <fcntl.h>
 #ifdef HAVE_ALLOCA_H
 #include <alloca.h>
 #endif
@@ -248,6 +252,72 @@
    return 0;
 }
 
+static void
+precache(void)
+{
+   FILE *f;
+   char *home;
+   char buf[4096], tbuf[256 * 1024];
+   struct stat st;
+   int l, fd, children = 0, cret;
+   
+   home = getenv("HOME");
+   if (home)
+     snprintf(buf, sizeof(buf), "%s/.e-precache", home);
+   else
+     snprintf(buf, sizeof(buf), "/tmp/.e-precache");
+   f = fopen(buf, "r");
+   if (!f) return;
+   unlink(buf);
+   if (fork()) return;
+   while (fgets(buf, sizeof(buf), f));
+   rewind(f);
+   while (fgets(buf, sizeof(buf), f))
+     {
+       l = strlen(buf);
+       if (l > 0) buf[l - 1] = 0;
+       if (!fork())
+         {
+            if (buf[0] == 's')
+              {
+                 stat(buf + 2, &st);
+              }
+            else if (buf[0] == 'o')
+              {
+                 fd = open(buf + 2, O_RDONLY);
+                 if (fd >= 0)
+                   {
+                      while (read(fd, tbuf, 256 * 1024) > 0);
+                      close(fd);
+                   }
+              }
+            else if (buf[0] == 'd')
+              {
+                 fd = open(buf + 2, O_RDONLY);
+                 if (fd >= 0)
+                   {
+                      while (read(fd, tbuf, 256 * 1024) > 0);
+                      close(fd);
+                   }
+              }
+            exit(0);
+         }
+       children++;
+       if (children > 400)
+         {
+            wait(&cret);
+            children--;
+         }
+     }
+   fclose(f);
+   while (children > 0)
+     {
+       wait(&cret);
+       children--;
+     }
+   exit(0);
+} 
+
 int
 main(int argc, char **argv)
 {
@@ -268,8 +338,10 @@
    else snprintf(buf, sizeof(buf), "%s/lib", _prefix_path);
    env_set("LD_LIBRARY_PATH", buf);
 
-//   snprintf(buf, sizeof(buf), "%s/lib/enlightenment/preload/e_precache.so", 
_prefix_path);
-//   env_set("LD_PRELOAD", buf);
+   snprintf(buf, sizeof(buf), "%s/lib/enlightenment/preload/e_precache.so", 
_prefix_path);
+   env_set("LD_PRELOAD", buf);
+   
+   precache();
    
    args = alloca((argc + 1) * sizeof(char *));
    args[0] = "enlightenment";



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to