svn commit: trunk/busybox: include miscutils

landley at busybox.net landley at busybox.net
Sun Aug 20 22:12:19 UTC 2006


Author: landley
Date: 2006-08-20 15:12:18 -0700 (Sun, 20 Aug 2006)
New Revision: 15854

Log:
Michael Opdenacker contributed a readahead applet.


Added:
   trunk/busybox/miscutils/readahead.c

Modified:
   trunk/busybox/include/applets.h
   trunk/busybox/include/usage.h
   trunk/busybox/miscutils/Config.in
   trunk/busybox/miscutils/Makefile.in


Changeset:
Modified: trunk/busybox/include/applets.h
===================================================================
--- trunk/busybox/include/applets.h	2006-08-20 20:01:24 UTC (rev 15853)
+++ trunk/busybox/include/applets.h	2006-08-20 22:12:18 UTC (rev 15854)
@@ -219,6 +219,7 @@
 USE_PS(APPLET(ps, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_PWD(APPLET(pwd, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_RDATE(APPLET(rdate, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
+USE_READAHEAD(APPLET(readahead, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_READLINK(APPLET(readlink, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_READPROFILE(APPLET(readprofile, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
 USE_REALPATH(APPLET(realpath, _BB_DIR_USR_BIN, _BB_SUID_NEVER))

Modified: trunk/busybox/include/usage.h
===================================================================
--- trunk/busybox/include/usage.h	2006-08-20 20:01:24 UTC (rev 15853)
+++ trunk/busybox/include/usage.h	2006-08-20 22:12:18 UTC (rev 15854)
@@ -2385,6 +2385,12 @@
 	"\t-s\tSet the system date and time (default)\n" \
 	"\t-p\tPrint the date and time"
 
+#define readahead_trivial_usage \
+	"[FILE]..."
+#define readahead_full_usage \
+	"Preloads FILE(s) in RAM cache so that subsequent reads for those" \
+	"files do not block on disk I/O."
+
 #ifdef CONFIG_FEATURE_READLINK_FOLLOW
 #define USAGE_READLINK_FOLLOW(a) a
 #else

Modified: trunk/busybox/miscutils/Config.in
===================================================================
--- trunk/busybox/miscutils/Config.in	2006-08-20 20:01:24 UTC (rev 15853)
+++ trunk/busybox/miscutils/Config.in	2006-08-20 22:12:18 UTC (rev 15854)
@@ -276,6 +276,22 @@
 	  to advance or rewind a tape past a specified number of archive
 	  files on the tape.
 
+config CONFIG_READAHEAD
+        bool "readahead"
+	default n
+	help
+ 	  Preload the files listed on the command line into RAM cache so that
+	  subsequent reads on these files will not block on disk I/O.
+
+	  This applet just calls the readahead(2) system call on each file.
+	  It is mainly useful in system startup scripts to preload files
+	  or executables before they are used.  When used at the right time
+	  (in particular when a CPU boundprocess is running) it can
+	  significantly speed up system startup.
+
+	  As readahead(2) blocks until each file has been read, it is best to
+	  run this applet as a background job. 
+
 config CONFIG_RUNLEVEL
         bool "runlevel"
 	default n

Modified: trunk/busybox/miscutils/Makefile.in
===================================================================
--- trunk/busybox/miscutils/Makefile.in	2006-08-20 20:01:24 UTC (rev 15853)
+++ trunk/busybox/miscutils/Makefile.in	2006-08-20 22:12:18 UTC (rev 15854)
@@ -24,6 +24,7 @@
 MISCUTILS-$(CONFIG_MAKEDEVS)    += makedevs.o
 MISCUTILS-$(CONFIG_MOUNTPOINT)  += mountpoint.o
 MISCUTILS-$(CONFIG_MT)          += mt.o
+MISCUTILS-$(CONFIG_READAHEAD)   += readahead.o
 MISCUTILS-$(CONFIG_RUNLEVEL)    += runlevel.o
 MISCUTILS-$(CONFIG_RX)          += rx.o
 MISCUTILS-$(CONFIG_SETSID)      += setsid.o

Added: trunk/busybox/miscutils/readahead.c
===================================================================
--- trunk/busybox/miscutils/readahead.c	2006-08-20 20:01:24 UTC (rev 15853)
+++ trunk/busybox/miscutils/readahead.c	2006-08-20 22:12:18 UTC (rev 15854)
@@ -0,0 +1,36 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * readahead implementation for busybox
+ *
+ * Preloads the given files in RAM, to reduce access time.
+ * Does this by calling the readahead(2) system call.
+ *
+ * Copyright (C) 2006  Michael Opdenacker <michael at free-electrons.com>
+ *
+ * Licensed under GPLv2 or later, see file License in this tarball for details.
+ */
+
+#include "busybox.h"
+
+int readahead_main(int argc, char **argv)
+{
+	FILE *f;
+	struct stat stat_buf;
+	int retval = EXIT_SUCCESS;
+
+	if (argc == 1) bb_show_usage();
+
+	while (*++argv) {
+		if ((f = bb_wfopen(*argv, "r")) != NULL) {
+			int r, fd=fileno(f);
+			
+			xstat(*argv, &stat_buf);
+			r = readahead(fd, 0, fdlength(fd));
+			fclose(f);
+			if (r >= 0) continue;
+		}
+		retval = EXIT_FAILURE;
+	}
+
+	return retval;
+}




More information about the busybox-cvs mailing list