sreadahead: Add a patch to set the app to io-idle running status.

This patch sets the sreadahead to io-idle stauts when it is running,
so that sreadahead will not preempt IO with other apps.
This commit is contained in:
austin 2008-11-07 05:01:12 -05:00 committed by Richard Purdie
parent 0c2a3df77b
commit 6f7afab062
2 changed files with 40 additions and 0 deletions

View File

@ -0,0 +1,39 @@
diff -Naurp sreadahead-0.02/readahead.c sreadahead-0.02-nice/readahead.c
--- sreadahead-0.02/readahead.c 2008-11-06 00:57:17.000000000 -0500
+++ sreadahead-0.02-nice/readahead.c 2008-11-06 02:28:29.000000000 -0500
@@ -26,7 +26,18 @@
#include <errno.h>
#include "readahead.h"
+#include <sys/syscall.h>
+# if defined(__i386__)
+# define __NR_ioprio_set 289
+# elif defined(__x86_64__)
+# define __NR_ioprio_set 251
+# else
+# error "Unsupported arch"
+# endif
+
+#define IOPRIO_WHO_PROCESS 1
+#define IOPRIO_CLASS_SHIFT 13
#define MAXR 1024
static struct readahead files[MAXR];
static unsigned int total_files = 0;
@@ -68,7 +79,15 @@ void *one_thread(void *ptr)
int main(int argc, char **argv)
{
- FILE *file = fopen("/etc/readahead.packed", "r");
+ int iopriority = 7; /* hard code for idle */
+ int iopriority_class = 3; /* 3 stands for idle */
+ int pid = 0;
+ FILE *file;
+
+ if (syscall(__NR_ioprio_set, IOPRIO_WHO_PROCESS, pid, iopriority | iopriority_class << IOPRIO_CLASS_SHIFT) == -1)
+ perror("Can not set priority to idle class");
+
+ file = fopen("/etc/readahead.packed", "r");
if (!file) {
perror("Couldnt open /etc/readahead.packed");
return -errno;

View File

@ -9,6 +9,7 @@ inherit update-rc.d
SRC_URI = "http://www.moblin.org/sites/all/files/sreadahead-${PV}.tar.gz \
file://sreadahead-0.02-make.patch;patch=1 \
file://readahead_c.patch;patch=1 \
file://set_to_idle.patch;patch=1 \
file://sreadahead-generate.sh \
file://sreadahead.sh"