Michael Opdenacker contributed a readahead applet.
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -219,6 +219,7 @@ USE_PRINTF(APPLET(printf, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) | |
| 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)) | |
| @@ -2385,6 +2385,12 @@ USE_FEATURE_MDEV_CONFIG( \ | |
| "\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 | |
| @@ -276,6 +276,22 @@ config CONFIG_MT | |
| 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 | |
| @@ -24,6 +24,7 @@ MISCUTILS-${CONFIG_LESS} += less.o | |
| 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 | |
| @@ -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 <[email protected]> |
| + | * |
| + | * 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; |
| + | } |